@POST
  @RequireApplicationAccess
  @Consumes(MediaType.APPLICATION_JSON)
  public JSONWithPadding executePost(
      @Context UriInfo ui,
      EntityHolder<Object> body,
      @QueryParam("callback") @DefaultValue("callback") String callback)
      throws Exception {

    logger.debug("ServiceResource.executePost");

    Object json = body.getEntity();

    ApiResponse response = createApiResponse();

    response.setAction("post");
    response.setApplication(services.getApplication());
    response.setParams(ui.getQueryParameters());

    ServicePayload payload = getPayload(json);

    executeServiceRequest(ui, response, ServiceAction.POST, payload);

    return new JSONWithPadding(response, callback);
  }
  @DELETE
  @RequireApplicationAccess
  public JSONWithPadding executeDelete(
      @Context UriInfo ui, @QueryParam("callback") @DefaultValue("callback") String callback)
      throws Exception {

    logger.debug("ServiceResource.executeDelete");

    ApiResponse response = createApiResponse();
    response.setAction("delete");
    response.setApplication(services.getApplication());
    response.setParams(ui.getQueryParameters());

    executeServiceRequest(ui, response, ServiceAction.DELETE, null);

    return new JSONWithPadding(response, callback);
  }
  @GET
  @Path("foursquare")
  public Response authFQ(
      @Context UriInfo ui,
      @QueryParam("fq_access_token") String fq_access_token,
      @QueryParam("ttl") long ttl,
      @QueryParam("callback") @DefaultValue("") String callback)
      throws Exception {

    logger.info("AuthResource.authFQ");

    try {
      if (StringUtils.isEmpty(fq_access_token)) {
        return missingTokenFail(callback);
      }
      SignInAsProvider foursquareProvider =
          signInProviderFactory.foursquare(services.getApplication());
      User user = foursquareProvider.createOrAuthenticate(fq_access_token);

      if (user == null) {
        return findAndCreateFail(callback);
      }

      String token =
          management.getAccessTokenForAppUser(services.getApplicationId(), user.getUuid(), ttl);

      AccessInfo access_info =
          new AccessInfo()
              .withExpiresIn(tokens.getMaxTokenAge(token) / 1000)
              .withAccessToken(token)
              .withProperty("user", user);

      return Response.status(SC_OK)
          .type(jsonMediaType(callback))
          .entity(wrapWithCallback(access_info, callback))
          .build();
    } catch (Exception e) {
      return generalAuthError(callback, e);
    }
  }