메인 콘텐츠로 건너뛰기

일반적인 응답 구조

성공적인 응답은 200대 HTTP 코드와 함께, 요청된 객체의 조회·생성·수정·삭제 결과와 서버가 해당 요청을 어떻게 해석했는지를 나타내는 표현을 포함한 JSON 기반 페이로드로 전달됩니다. 요청이 성공하면, 응답에는 사용자의 요청을 그대로 반영한 request 노드가 포함됩니다. 예시: GET accounts/abcdefg/campaigns?with_deleted=true
{
  /* 응답의 데이터... */,
  "request": {
    "params": {
      "account_id": "abcdefg",
      "with_deleted": "true"
    }
  }
}
JSON 응답의 data 필드에는 참조된 리소스와 연관된 특정 객체가 포함됩니다. 응답에 하나 이상의 결과가 포함될 수 있는 경우 data 노드는 JSON 배열 형식을 가집니다. 응답에서 결과가 하나로만 제한되는 경우에는 JSON 해시로 반환됩니다. 드물게, 일반적으로 컬렉션이 포함되는 응답이 대신 해시맵을 포함하는 경우가 있습니다. 이때는 해당 단일 해시맵이 type 필드에 명시된 것과 동일한 유형의 객체라고 간주하십시오.

오류 응답 구조

오류 응답은 200대가 아닌 HTTP 코드로 반환됩니다. 일반적으로 JSON 응답이 포함되지만, 일부 오류는 다른 유형의 본문으로 반환될 수 있습니다. 이러한 상황에서 응답 구조를 파싱할 수 없다면 HTTP 코드의 핵심 의미를 우선으로 해석하십시오. 예를 들어, HTML 응답과 함께 HTTP 404가 표시될 수 있습니다. 이 경우 콘텐츠를 찾을 수 없다고 보아도 안전합니다(HTTP 404는 “Not Found”를 의미). 일반적인 오류 응답은 성공 응답과 유사한 구조를 따릅니다. 오류의 성격은 응답의 errors 노드에 전달됩니다. errors/code 노드는 프로그램에서 해석해 해결 방안을 결정하는 데 사용할 수 있는 대문자 스네이크 케이스(CAPS_CASE)의 상수 오류 코드를 나타냅니다. errors/message 노드는 (일반적으로) 사람이 읽을 수 있는 영어 오류 설명을 제공합니다. 추가 필드가 포함되어 오류에 대한 더 세밀한 세부 정보를 제공할 수 있습니다.
{
  "errors": [
    {
      "parameter": "start_time",
      "details": "잘못된 날짜",
      "code": "INVALID_PARAMETER",
      "value": "",
      "message": "start_time에는 시간이 필요하지만 \"\"이(가) 전달되었습니다"
    }
  ],
  "request": {
    "params": {
      "account_id": "hkk5"
    }
  }
}
위 예시에서는 분석 엔드포인트에 대한 요청에서 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