エラーコードと応答

一般的な応答の構造

正常な応答は、リクエスト、作成、変更、または削除されたオブジェクトを含む200シリーズのHTTPコードおよびJSONベースのペイロードと、リクエストにおけるサーバーの解釈の記述とともに示されます。

正常なリクエストを発行した場合、応答の一部として、リクエストをエコーバックするrequestノードを受け取ります。

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


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

JSON応答のdataフィールドには、活用したリソースに関連した特定のオブジェクトが含まれます。応答に1つ以上の結果が含まれている可能性がある場合、dataノードの形式はJSON配列になります。応答で可能な結果が1つのみの場合、JSONハッシュとして返されます。稀なケースでは、通常はハッシュマップのコレクションが含まれる応答が代わりに表示される場合があります。この場合、ハッシュマップが1つであれば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パラメータに無効な値が入っていました。無効なパラメータがあるリクエストのerrors/codeINVALID_PARAMETERになります。

HTTPコード エラーコード
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