Error codes and responses

Typical Response Structure

Successful responses are indicated with a 200-series HTTP code and a JSON-based payload containing the object(s) requested, created, modified, or deleted along with an expression of the server’s interpretation of your request.

If you had issued a successful request you would receive as part of your response a request node echoing back your request.

Example: GET accounts/abcdefg/campaigns?with_deleted=true


{
  /* the data of your response... */,
  "request": {
    "params": {
      "account_id": "abcdefg",
      "with_deleted": "true"
    }
  }
}

The data field in JSON responses will contain the specific objects associated with the leveraged resource. The format of the data node will be a JSON array when the response may contain one or more results. It will be returned as JSON hash when only one result is possible in response. In some rare cases, you may see a response that would typically include a collection with a hashmap instead. In this case, assume the single hashmap is an object of the same type as specified in the type field.

Error Response Structure

Error responses are served with a non-200-series HTTP code. Usually a JSON response will be attached, but some errors will respond with different kinds of body. In these circumstances where a response structure cannot be parsed, consider the HTTP code’s core meaning to take precedence. For instance, you may occasionally see a HTTP 404 along with a HTML response. In this case, it’s safe to assume that the content cannot be found (HTTP 404 means “Not Found”).

Typical error responses follow a similar structure to successful responses. The nature of the error will be communicated in an errors node of the response. The errors/code node will indicate a CAPS_CASE constant error code you can programmatically consume to make resolution decisions from. The errors/message node will indicate a (usually) human-readable description of the error in English. Additional fields may be attached to indicate finer-grained detail about the error.


{
  "errors": [
    {
      "parameter": "start_time",
      "details": "invalid date",
      "code": "INVALID_PARAMETER",
      "value": "",
      "message": "Expected time, got \"\" for start_time"
    }
  ],
  "request": {
    "params": {
      "account_id": "hkk5"
    }
  }
}

In the above example, a request to an analytics endpoint was made with an invalid value for the start_time parameter. The errors/code for requests with invalid parameters is INVALID_PARAMETER.

HTTP Code Error Code
403 ACCOUNT_LOCKED_OUT
404 ACCOUNT_MEDIA_NOT_FOUND
403 ACCOUNT_NOT_FOUND
403 ACTION_NOT_ALLOWED
404 APP_EVENT_PROVIDER_CONFIGURATION_NOT_FOUND
404 APP_EVENT_TAG_NOT_FOUND
404 BEHAVIOR_OR_BEHAVIOR_EXPANDED_NOT_FOUND
404 CAMPAIGN_NOT_FOUND
408 CANCELLED_REQUEST
404 CARD_NOT_FOUND
403 CURRENT_USER_SUSPENDED
400 DUPLICATE_TWEET
400 EXCLUSIVE_PARAMETERS
400 FEATURE_NOT_AVAILABLE
403 FUNDING_INSTRUMENT_ACCESS_NOT_ALLOWED
403 FUNDING_INSTRUMENT_EXCEEDS_AVAILABLE_CREDIT_LIMIT
404 FUNDING_INSTRUMENT_NOT_FOUND
403 GENERIC_TWEET_ERROR
400 ILLEGAL_CHARACTERS
400 INCLUSIVE_PARAMETERS
500 INTERNAL_ERROR
404 INVALID_APP_ID
404 INVALID_APP_STORE
400 INVALID_DENOMINATION
400 INVALID_FUNDING_INSTRUMENT
404 INVALID_IAB_CATEGORY
404 INVALID_ID_ILLEGAL_CHARACTERS
400 INVALID_IMAGE
400 INVALID_MEDIA
400 INVALID_MEDIA_ID
400 INVALID_PARAMETER
400 INVALID_PLACEMENT_TYPE
400 INVALID_TAILORED_AUDIENCE_TYPE
400 INVALID_TARGETING_TYPE
400 INVALID_TIME_WINDOW
400 INVALID_TV_SHOW_LOCATIONS
400 INVALID_TWEET
400 INVALID_USER
400 INVALID_USER_ID
423 LOCK_ACQUISITION_TIMEOUT
404 LINE_ITEM_APP_NOT_FOUND
404 LINE_ITEM_NOT_FOUND
404 MACT_APP_NOT_FOUND
403 MALWARE_STATUS
404 MEDIA_CREATIVE_NOT_FOUND
404 MEDIA_NOT_FOUND
405 METHOD_NOT_ALLOWED
400 MISSING_PARAMETER
404 NO_PROVIDER_AVAILABLE_FOR_THIS_CLIENT_APPLICATION
404 NOT_FOUND
404 PROMOTABLE_USER_NOT_FOUND
404 PROMOTED_ACCOUNT_NOT_FOUND
404 PROMOTED_TWEET_NOT_FOUND
403 READONLY_CLIENT_APPLICATION
400 REQUEST_TOO_COMPLEX
404 ROUTE_NOT_FOUND
503 SERVICE_UNAVAILABLE
503 OVER_CAPACITY
400 SPEND_EXCEEDS_BUDGET
404 TAILORED_AUDIENCE_CHANGE_FILE_NOT_FOUND
404 TAILORED_AUDIENCE_NOT_FOUND
404 TAILORED_AUDIENCE_OR_TAILORED_AUDIENCE_EXPANDED_NOT_FOUND
404 TARGETING_CRITERION_NOT_FOUND
400 TOO_MANY_CAMPAIGNS
400 TOO_MANY_LINE_ITEMS
429 TOO_MANY_REQUESTS
400 TV_SHOW_OUTSIDE_MARKET
400 TWEET_CANNOT_BE_BLANK
403 TWEET_IS_SPAM
404 TWEET_NOT_FOUND
429 TWEET_RATE_LIMIT_EXCEEDED
401 UNAUTHORIZED_ACCESS
403 UNAUTHORIZED_CLIENT_APPLICATION
400 UNKNOWN_CARD_TYPE
400 UNKNOWN_CRITERIA_TYPE
403 USER_NOT_FOUND
404 WEB_EVENT_TAG_NOT_FOUND