跳转到主要内容

典型响应结构

成功的响应会返回 200 系列的 HTTP 状态码,并携带基于 JSON 的有效负载,其中包含被请求、创建、修改或删除的对象,以及服务器对您请求的理解与说明。 如果请求成功,响应中还会包含一个 request 节点,用于回显您的请求。 示例: GET accounts/abcdefg/campaigns?with_deleted=true
{
  /* 您的响应数据... */,
  "request": {
    "params": {
      "account_id": "abcdefg",
      "with_deleted": "true"
    }
  }
}
JSON 响应中的 data 字段包含与所使用资源相关的具体对象。当响应可能包含一个或多个结果时,data 节点的格式为 JSON 数组;当响应仅可能包含一个结果时,则返回 JSON hash。在少数情况下,你可能会看到本应返回集合的响应却返回了一个 hashmap。此时,应将该单个 hashmap 视为与 type 字段所指定类型相同的对象。

错误响应结构

错误响应会返回非 200 系列的 HTTP 状态码。通常会附带一个 JSON 响应,但某些错误可能会返回不同类型的响应体。在无法解析响应结构的情况下,请以 HTTP 状态码的核心含义为准。例如,你可能偶尔会看到 HTTP 404 搭配 HTML 响应。在这种情况下,可以认为内容未找到(HTTP 404 表示 “Not Found”)。 典型的错误响应与成功响应具有类似的结构。错误的性质会在响应的 errors 节点中表示。errors/code 节点会给出一个 CAPS_CASE 形式的常量错误代码,便于你在程序中使用以做出处理决策。errors/message 节点会给出一个(通常为)英文的人类可读错误描述。还可能附带其他 fields,用于提供更细粒度的错误详情。
{
  "errors": [
    {
      "parameter": "start_time",
      "details": "无效日期",
      "code": "INVALID_PARAMETER",
      "value": "",
      "message": "期望时间值,但 start_time 收到 \"\""
    }
  ],
  "request": {
    "params": {
      "account_id": "hkk5"
    }
  }
}
在上述示例中,向分析型 endpoint 发起的请求为 start_time 参数提供了无效值。对于包含无效参数的请求,其 errors/codeINVALID_PARAMETER
HTTP 状态码错误代码
403ACCOUNT_LOCKED_OUT
404ACCOUNT_MEDIA_NOT_FOUND
403ACCOUNT_NOT_FOUND
403ACTION_NOT_ALLOWED
404APP_EVENT_PROVIDER_CONFIGURATION_NOT_FOUND
404APP_EVENT_TAG_NOT_FOUND
404BEHAVIOR_OR_BEHAVIOR_EXPANDED_NOT_FOUND
404CAMPAIGN_NOT_FOUND
408CANCELLED_REQUEST
404CARD_NOT_FOUND
403CURRENT_USER_SUSPENDED
400DUPLICATE_TWEET
400EXCLUSIVE_PARAMETERS
400FEATURE_NOT_AVAILABLE
403FUNDING_INSTRUMENT_ACCESS_NOT_ALLOWED
403FUNDING_INSTRUMENT_EXCEEDS_AVAILABLE_CREDIT_LIMIT
404FUNDING_INSTRUMENT_NOT_FOUND
403GENERIC_TWEET_ERROR
400ILLEGAL_CHARACTERS
400INCLUSIVE_PARAMETERS
500INTERNAL_ERROR
404INVALID_APP_ID
404INVALID_APP_STORE
400INVALID_DENOMINATION
400INVALID_FUNDING_INSTRUMENT
404INVALID_IAB_CATEGORY
404INVALID_ID_ILLEGAL_CHARACTERS
400INVALID_IMAGE
400INVALID_MEDIA
400INVALID_MEDIA_ID
400INVALID_PARAMETER
400INVALID_PLACEMENT_TYPE
400INVALID_TAILORED_AUDIENCE_TYPE
400INVALID_TARGETING_TYPE
400INVALID_TIME_WINDOW
400INVALID_TV_SHOW_LOCATIONS
400INVALID_TWEET
400INVALID_USER
400INVALID_USER_ID
423LOCK_ACQUISITION_TIMEOUT
404LINE_ITEM_APP_NOT_FOUND
404LINE_ITEM_NOT_FOUND
404MACT_APP_NOT_FOUND
403MALWARE_STATUS
404MEDIA_CREATIVE_NOT_FOUND
404MEDIA_NOT_FOUND
405METHOD_NOT_ALLOWED
400MISSING_PARAMETER
404NO_PROVIDER_AVAILABLE_FOR_THIS_CLIENT_APPLICATION
404NOT_FOUND
404PROMOTABLE_USER_NOT_FOUND
404PROMOTED_ACCOUNT_NOT_FOUND
404PROMOTED_TWEET_NOT_FOUND
403READONLY_CLIENT_APPLICATION
400REQUEST_TOO_COMPLEX
404ROUTE_NOT_FOUND
503SERVICE_UNAVAILABLE
503OVER_CAPACITY
400SPEND_EXCEEDS_BUDGET
404TAILORED_AUDIENCE_CHANGE_FILE_NOT_FOUND
404TAILORED_AUDIENCE_NOT_FOUND
404TAILORED_AUDIENCE_OR_TAILORED_AUDIENCE_EXPANDED_NOT_FOUND
404TARGETING_CRITERION_NOT_FOUND
400TOO_MANY_CAMPAIGNS
400TOO_MANY_LINE_ITEMS
429TOO_MANY_REQUESTS
400TV_SHOW_OUTSIDE_MARKET
400TWEET_CANNOT_BE_BLANK
403TWEET_IS_SPAM
404TWEET_NOT_FOUND
429TWEET_RATE_LIMIT_EXCEEDED
401UNAUTHORIZED_ACCESS
403UNAUTHORIZED_CLIENT_APPLICATION
400UNKNOWN_CARD_TYPE
400UNKNOWN_CRITERIA_TYPE
403USER_NOT_FOUND
404WEB_EVENT_TAG_NOT_FOUND
I