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

一般的なレスポンス構造

成功したレスポンスは、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 ハッシュ (オブジェクト) として返されます。ごくまれに、通常であればコレクション (配列) が含まれるレスポンスで、代わりにハッシュマップが返されることがあります。この場合、その単一のハッシュマップは、type フィールドで指定されているものと同じ type のオブジェクトであるとみなしてください。

エラー応答の構造

エラー応答は 200 番台以外の HTTP ステータスコードで返されます。通常は JSON 応答が返されますが、中には異なる形式のボディで返されるエラーもあります。応答構造をパースできない状況では、HTTP ステータスコード本来の意味を優先して解釈してください。たとえば、HTTP 404 とともに HTML 応答が返される場合があります。このときは、そのコンテンツが見つからないと判断して問題ありません (HTTP 404 は「Not Found」を意味します) 。 一般的なエラー応答は、成功時の応答と同様の構造になります。エラーの内容は、応答の errors ノードで示されます。errors/code ノードには、プログラムから解決方法の判断に利用できる CAPS_CASE の定数エラーコードが示されます。errors/message ノードには、そのエラーの (通常は) 人間が読める英語での説明が含まれます。さらに詳細なエラー内容を示すために、追加のフィールドが付与される場合もあります。
{
  "errors": [
    {
      "parameter": "start_time",
      "details": "invalid date",
      "code": "INVALID_PARAMETER",
      "value": "",
      "message": "Expected time, got \"\" for start_time"
    }
  ],
  "request": {
    "params": {
      "account_id": "hkk5"
    }
  }
}
上記の例では、start_time パラメータに無効な値を指定して analytics エンドポイントへリクエストを送信しています。無効なパラメータを含むリクエストでは、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