メインコンテンツへスキップ

典型的なレスポンス構造

成功したレスポンスは、200 番台の HTTP コードと、要求されたオブジェクトの取得・作成・更新・削除に関する情報に加え、サーバーがリクエストをどのように解釈したかを示す表現を含む、JSON ベースのペイロードで示されます。 リクエストが成功した場合、レスポンスには、送信したリクエストを反映した request ノードが含まれます。 例: GET accounts/abcdefg/campaigns?with_deleted=true
{
  /* レスポンスのデータ... */,
  "request": {
    "params": {
      "account_id": "abcdefg",
      "with_deleted": "true"
    }
  }
}
JSON レスポンスの data フィールドには、対象のリソースに関連付けられた特定のオブジェクトが含まれます。レスポンスに 1 件以上の結果が含まれる可能性がある場合、data ノードの形式は JSON 配列になります。レスポンスで 1 件の結果しか返り得ない場合は、JSON の hash として返されます。まれに、通常はコレクションを含むはずのレスポンスが、代わりにハッシュマップを返すことがあります。この場合、その単一のハッシュマップは、type フィールドで指定されたのと同じ type のオブジェクトと見なしてください。

エラー応答の構造

エラー応答は 200 番台以外の HTTP コードで返されます。通常は JSON 応答が返されますが、エラーによっては別の種類のボディが返される場合があります。応答構造を解析できない状況では、HTTP コードの本来的な意味を優先して解釈してください。たとえば、HTML 応答を伴う HTTP 404 が返されることがあります。この場合、そのコンテンツが見つからないと判断して差し支えありません(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"
    }
  }
}
上記の例では、analytics 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