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

典型的なレスポンス構造

成功したレスポンスは、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 フィールドで指定された型と同一のオブジェクトであるとみなしてください。

エラー応答の構造

エラー応答は 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"
    }
  }
}
上記の例では、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