Developer Hub
자동 생성된 번역입니다.

일반적인 오류 응답

Rapid API 각 사업 부문은 공통된 오류 코드, 메시지 및 응답 형식을 사용합니다.

이러한 오류는 다음을 포함하여 Rapid의 모든 사업 부문에 걸쳐 발생합니다:

  • Rapid 숙박 API
  • Rapid 렌터카 API
  • Rapid Flight API
  • Rapid 액티비티 API

사업 부문별 차이점이 있는 경우 이를 명시합니다.

Rapid API 오류 처리

문제를 방지하기 위해 오류 처리 로직에 다음 사항들을 포함할 것을 권장합니다:

  • 쇼핑 및 예약 API 오류를 처리할 수 있는 오류 처리 로직이 마련되어 있는지 확인하십시오.
  • 아래 참고 사항에 별도로 명시된 경우가 아니라면, 각 예약 요청마다 고유한 affiliate_reference_id를 반드시 사용하십시오.
  • 특히 예약 요청과 관련하여 오류 처리 로직을 정기적으로 검토하고 업데이트하십시오.
  • 모든 Rapid API 응답에는 이에 상응하는 HTTP 응답 코드가 있습니다.

연결 시간 초과 또는 통신 시간 초과

Flight API 예약 요청의 경우 API 연결 타임아웃을 120초로 설정하는 것이 권장되며, 숙박 및 기타 API의 경우 90초로 설정하는 것을 권장합니다. 다만, 쇼핑 재고 조회 요청의 경우 더 짧은 연결 타임아웃을 설정할 수도 있습니다.

120초 이내에 응답을 받지 못하면, Rapid API's 의 연결 시간 초과 설정이 120초로 설정되어 있기 때문에 Rapid API 에서 5xx 오류가 발생합니다.

경우에 따라 Rapid API 에서는 HTTP Expect: 100-Continue 과정. 이 프로세스를 사용하여 서버에 연결하려고 할 때, 특히 cURL, C#/.NET 및 기본적으로 이 프로세스를 따르는 일부 다른 프로그래밍 언어의 경우 연결 문제가 발생할 수 있습니다.

참고: HTTP 504 게이트웨이 시간 초과가 Rapid가 시간 초과되었음을 의미하지는 않습니다. 이러한 경우에는 인프라 서비스에 장애가 발생했거나, Rapid가 다른 하위 서비스로의 게이트웨이 역할을 수행하면서 해당 서비스에 대한 타임아웃 제한을 설정하고 있는 경우입니다. 해당 다운스트림 타임아웃은 504 오류로 발생합니다. 예약 관련 호출에서 504 오류가 발생하면, 해당 예약이 일정 Retrieve (affiliate_reference_id+ 이메일)를 사용하여 생성되었는지 확인해 주십시오. 다운스트림 문제는 예약 생성 전(호텔과의 통신, 결제 서버) 또는 생성 후(Expedia Group 재무 관리)에 발생했을 수 있기 때문입니다. 또한 인터넷 연결이 안정적인지 확인해 주세요. Traceroute 명령은 연결 문제를 식별하는 데 도움이 될 수 있습니다.

예약 처리 및 5xx 오류 검색

예약 오류(5xx 상태)나 타임아웃이 발생했다고 해서 반드시 예약 자체가 무효인 것은 아닙니다. 예약이 생성된 후 오류가 발생했을 수 있습니다. 예약 상태를 확인하시려면 일정 Retrieve 명령어를 affiliate_reference_id+ 이메일 주소와 함께 실행하시기를 권장합니다.

90초 이내에 반환된 오류는 예약의 최종 상태를 나타내지 않습니다. 일반적으로 대부분의 예약은 13~30초 이내에 확정 예약으로 처리되지만, 일부는 처리되는 데 최대 5분이 소요될 수도 있습니다.

90초 동안 예약 상태를 3회 확인할 수 있는 로직을 구현할 수 있습니다. 대부분의 응답은 처음 30초 이내에 확인되므로, 90초를 모두 기다리지 않고도 응답을 확인할 수 있습니다. 최종 응답을 받지 못한 경우, 30분 동안 검색을 다시 시도한 후 Rapid API 콜센터 상담원에게 문의하여 추가 지원을 받으실 수 있습니다.

Retrieve API 호출을 사용하여 예약 결과를 double-confirm 에서 조회합니다(HTTP 200 또는 HTTP 404 응답).

검색 응답에서 보류/재개 정보 반환

때때로, 숙박 예약이 성공적으로 완료된 후에도 일정 조회 응답에서 예약 보류/재개용인 것처럼 보이는 응답 데이터가 반환되는 경우가 있습니다. 따라서, 예상되는 예약 정보(객실, 취소 위약금 등) 대신, 해당 응답에는 예약 보류/재개 상황에 필요한 토큰만 포함될 것입니다.

그 이유는 해당 예약이 유효하긴 하지만, 여전히 ‘처리 중’ 상태 표시가 되어 있기 때문입니다. 이 문제는 일반적으로 몇 분 안에 해결되므로 예약이 완료될 때까지 일정 검색 요청을 반복해야 합니다.

응답 예:

{
  "itinerary_id": "2667552437552",
  "links": [
    {
      "rel": "retrieve",
      "method": "GET",
      "href": "/v3/itinerary/{itinerary_id}?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
    },
    {
      "rel": "resume",
      "method": "PUT",
      "href": "/v3/itinerary/{itinerary_id}?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
    },
    {
      "rel": "cancel",
      "method": "DELETE",
      "href": "/v3/itinerary/{itinerary_id}?token=MY5S3j36cOcLfLBZjPYQ1abhfc8CqmjmFVzkk7euvWaunE57LLeDgaxm516m"
    }
  ]
}

여러 수준 구조의 오류 분석

single-level 오류만으로는 필요한 모든 세부 사항을 설명할 수 없는 경우, API 응답에서 오류를 여러 단계로 세분화할 수 있습니다. 모든 단계에 걸쳐 정보를 검토해 보면 오류를 명확히 파악하고 해결하는 데 도움이 될 것입니다.

응답 예:

{
    "type": "invalid_input",
    "message": "An invalid request was sent in, please check the nested errors for details.",
    "errors": [
        {
            "type": "duplicate_itinerary",
            "message": "An itinerary already exists with this affiliate reference id.",
            "fields": [
                {
                    "name": "affiliate_reference_id",
                    "type": "body",
                    "value": "XXXXXX"
                }
            ]
        }
    ]
}

HTTP 응답 코드

400 - Bad Request

요청이 잘못되었거나 부적절한 값을 포함한 경우 반환됩니다.

코드 400 ‘Bad Request’ 오류는 Request Booking 헤더에 문제가 있음을 나타냅니다. 오류 응답에는 예약 요청 헤더에 포함된 실제로 유효하지 않은 오류 배열 필드가 포함됩니다. 헤더는 rooms 및 payments와 같은 여러 배열과 sub-arrays, 로 구성되어 있습니다. 전체 배열이 본문입니다. 따라서 body.email은 헤더 본문의 이메일 매개변수를 나타냅니다.

참고: Lodging API의 경우, Booking 헤더의 rooms 배열에 포함된 항목 수는 Availability 호출에서 요청된 객실 수와 동일해야 합니다.

요청 매개 변수가 지나치게 크면 "Tomcat Exception Report"라는 레이블이 지정된 400 잘못된 요청 오류가 반환되며, 이 오류는 대부분 숙박 시설 콘텐츠 및 예약 가능 객실 가져오기 API에서 발생합니다. 이 오류를 방지하려면 숙박 시설 수를 줄이거나 요청에서 불필요한 매개변수를 제거해 주세요.

응답 예:

지원되지 않는 언어:

{
  "type": "invalid_input",
  "message": "An invalid request was sent in, please check the nested errors for details.",
  "errors": [
    {
      "type": "language.not_supported",
      "message": "Language is not supported. Supported languages are: [de-DE, en-US, es-ES, es-MX, fr-FR, id-ID, it-IT, ja-JP, ko-KR, pt-BR, zh-CN]",
      "fields": [
        {
          "name": "language",
          "type": "querystring",
          "value": "xx-XX"
        }
      ]
    },
    {
      "type": "filter.mismatch",
      "message": "Existing booking is expedia_collect, this cannot be changed",
      "fields": [
        {
          "name": "filter",
          "type": "querystring",
          "value": "property_collect"
        }
      ]
    }
  ]
}

누락된 버전 값:

{
  "type": "version.required",
  "message": "You have not specified a version, the supported versions are: [1, 2]",
  "fields": [
    {
      "name": "version",
      "type": "path",
      "value": "missing"
    }
  ]
}

잘못된 버전 값:

{
  "type": "version.unsupported",
  "message": "You have requested a version that is not supported, supported versions are: [1, 2]",
  "fields": [
    {
      "name": "version",
      "type": "path",
      "value": "3"
    }
  ]
}

401 - Unauthorized

HTTP 인증 헤더가 없거나 구문 분석할 수 없는 경우 이 메서드를 반환합니다. Rapid Lodging API에 대한 모든 요청에는 API 키 + 공유 비밀번호 + 초 단위의 UNIX 타임스탬프를 연결한 값의unsalted SHA-512 해시가 반드시 포함되어야 합니다. 자세한 정보는 서명 인증 페이지를 참조해 주세요.

Lodging API 401 권한 없음 응답 예시:

{
  "type": "request_unauthenticated",
  "message": "Data required to authenticate your request is missing. Ensure that your request follows the guidelines in our documentation.",
  "fields": [
     {
       "name": "apikey",
       "type": "header",
       "value": "jaj3982k239dka328e"
     },
     {
       "name": "signature",
       "type": "header",
       "value": "129d75332614a5bdbe0c7eb540e95a65f9d85a5b53dabb38d19b37fad6312a2bd25c12ee5a82831d55112087e1b"
     },
     {
       "name": "timestamp",
       "type": "header",
       "value": 198284729
     },
     {
       "name": "servertimestamp",
       "type": "server",
       "value": 198284729
     }
  ]
}

Rapid Flight API 호출 시, 요청 헤더에 유효한 EGToken 주체 JSON 웹 토큰(JWT) 을 포함해야 합니다.

Authorization: EGToken principal-JWT={encodedJwt}

주 JWT는 OAuth 2.0 클라이언트 자격 증명 및 토큰 교환을 통해 획득됩니다. 자세한 내용은 ‘ ’ OAuth 2.0 인증 가이드()와 ‘ Rapid Flight Booking API’ 사용 가이드()를 참조하십시오.

403 - Forbidden

HTTP 인증 헤더가 유효하지만, 요청한 리소스에 액세스하도록 허용되지 않은 경우 반환됩니다.

403 Forbidden 응답 예:

{
  "type": "request_unauthorized",
  "message": "Your request could not be authorized."
}

404 - Not found

요청한 API 리소스를 찾을 수 없는 경우 반환됩니다. 문서화된 예와 비교하여 요청 URL을 확인해 보세요.

Lodging Geography APIContent API 역시 요청된 지리 정보 파일이나 content-specific 파일, 또는 리소스를 찾을 수 없는 경우 404 응답을 반환합니다. 자세한 예는 해당 설명서 페이지를 참조해 주세요.

일정 검색 후 코드 404는 예약을 찾을 수 없음을 나타냅니다. 예약 오류로 인해 검색이 수행된 경우 예약이 생성되지 않은 것으로 표시됩니다. 다만, 일정 조회 API 요청 매개변수가 유효한지 확인해야 하므로, 조회 대상 affiliate_reference_id, 이메일 및/또는 일정 번호가 정확한지 반드시 확인하시기 바랍니다. 또한, Retrieve API 호출이 Booking 호출 후 90초 이내에 이루어진 경우, Retrieve 호출을 다시 시도해 보시는 것이 좋습니다.

응답 예:

{
    "type": "resource.not_found",
    "message": "The requested resource could not be found."
}

409 - Price mismatch

많은 공급업체들이 동적 가격 책정, 즉 ‘time-based ’ 가격 책정이라고도 불리는 방식을 사용합니다. 이는 가격이 공급 및 수요 알고리즘에 따라 달라진다는 것을 의미합니다. Expedia Group 초당 여러 번 업데이트된 요율을 수신하므로, 요율이 빈번하게 변동합니다.

이 점은 일반적으로 공급업체의 선택에 달려 있으며, Expedia Group. 또한, 요금 및 예약 가능 여부에 대해 여러 단계의 캐싱이 이루어지기 때문에, 예약 과정 전반에 걸쳐 여러 단계의 지연이 발생할 수 있습니다.

가격 불일치(PMM)는 예상되는 상황이며, 시스템 성능 저하나 시스템이 최신 가격을 반영하지 못하는 경우 등 여러 가지 이유로 발생할 수 있습니다. 이러한 이벤트의 발생 빈도를 모니터링하고, 발생 빈도가 갑자기 증가하거나 특정 임계값에 도달할 경우 지원팀에 문의해야 합니다.

동시에 여러 결과에 대해 PMM이 발생한 경우, 급격한 성능 저하 가능성이 있는지 확인해야 합니다.

장기간에 걸쳐 동일한 결과가 PMM에서 반복적으로 반환된다면, 이는 공급업체 측에서 요율을 잘못 입력했기 때문일 가능성이 높습니다. 확인하시려면 기술 지원팀에 문의해 주시기 바랍니다.

PMM 오류에서 복구하려면 Price Check(Lodging API) 또는 Flight Details(Flight API) 호출을 다시 수행하여 새로운 예약 URL 토큰을 획득하십시오. 그런 다음 예약 호출에서 동일한 affiliate_reference_id를 사용할 수 있습니다.

응답 예:

{
  "type": "price_mismatch",
  "message": "Payment amount did not match current price, please check price and try again.",
  "fields": [
    {
      "name": "payments.amount",
      "type": "body",
      "value": "100.00"
    },
    {
      "name": "price.amount",
      "type": "body",
      "value": "120.00"
    }
  ]
}

410 - Gone or sold out

Rapid API 링크의 유효 기간이 만료되었거나 요청된 재고가 더 이상 없는 경우 이 값을 반환합니다.

많은 공급업체들이 Expedia Group 과 실시간으로 이루어지는 직접적이고 동기화된 통신 연결을 보유하고 있습니다.

동기식 예약 통신이란, 당사가 관리하는 제공된 공급업체 데이터를 기반으로 ‘쇼핑 가용성 및 가격 조회(Lodging API)’ 또는 ‘항공편 상세 정보(Flight API)’ 호출이 이루어지는 것을 말합니다. 이 오류는 예약 선택 사항에 대한 재고가 부족할 때 발생합니다.

이는 일시적인 상황일 수 있으며, 다시 시도해 보시면 재고가 있는 것을 확인할 수 있을 것입니다. 90초 동안 기다린 다음, 예약과 함께 전송된 것과 동일한 affiliate_reference_id를 사용하여 검색 요청으로 예약 상태를 확인합니다. 예약이 검색되지 않는 경우, 여행자는 다른 대안을 선택해야 할 수도 있습니다.

공급업체와의 연결 상태가 불안정할 경우에도 ‘매진’ 오류 메시지가 표시될 수 있습니다. 그런 경우라면, 실제 가용성에 대한 어떠한 단서도 없습니다.

응답 예:

링크 만료:

{
  "type": "link.expired",
  "message": "The link you followed has expired. Please request a new link."
}

매진:

"type": "rooms_unavailable",
"message": "One or more requested rooms are unavailable."

426 - Upgrade required

요청에서 SSL(Secure Sockets Layer)을 대체하는 암호화 프로토콜인 TLS(Transport Layer Security)를 사용하지 않은 경우 이 값을 반환합니다.

응답 예:

{
  "type": "upgrade_required",
  "message": "This service requires the use of TLS."
}

429 - Rate limit error

요청 수가 속도 제한을 초과하면 429 상태 코드가 반환됩니다. 모든 요청은 두 가지 상이한 속도 제한, 즉 통합에서 한도를 초과하는 속도로 요청을 전송하고 있고 Expedia Group 서버에서 한도를 초과하는 부하가 발생하고 있는 경우 제한을 받을 수 있습니다.

Expedia Group API 요청을 보내면, 수신 서버는 요청 횟수가 제한 범위 내에 있는지 확인합니다. 요청 개수가 제한 범위 이내이면 요청이 통과되고 클라이언트 개수가 증가됩니다. 클라이언트 요청 개수가 제한을 초과하면 서버에서 HTTP 429(요청이 너무 많음) 상태 코드를 사용하여 응답을 반환합니다.

서버는 필요한 경우 Rate-Limit-Day-ResetRate-Limit-Minute-Reset 헤더를 포함할 수 있습니다. 이 헤더는 다음 요청을 보내기 전 대기 시간을 나타냅니다. 다음 텀블이 발생할 때의 마이크로초(밀리초가 아님) 단위의 타임스탬프입니다.

예를 들어 날짜/시간으로 변환하면 '15489792000000' 값이 Friday, February 1, 2019 12:00:00 AM(UTC)가 됩니다.

참고: 너무 많은 요청에 대해 오류가 발생하면 수정된 요청을 시도하기 전에 최소 5분 이상 기다려 주세요. 더 자주 재시도하면 캐시 타이밍으로 인해 반복되는 실패가 발생합니다.

응답 예:

HTTP/1.1 429 Too Many Requests
Connection →keep-alive
Content-Length →106
Date →Fri, 01 Feb 2019 06:20:51 GMT
Rate-Limit-Day-Remaining →18
Rate-Limit-Day-Reset →1548979200000
Rate-Limit-Minute-Remaining →0
Rate-Limit-Minute-Reset →1549002000000
Rate-Limit-Reduction-Status →inactive
Server →EAN
Transaction-Id →003224d2-1407-42fe-8bf8-6d74226e7f00

500 - Internal server error

Rapid API 이나 상위 시스템에서 발생한 오류에 대한 반환 값입니다. 특정 작업이 주어지면 메시지 필드의 지침을 따르고, 그렇지 않으면 동일한 affiliate_reference_id로 요청을 다시 시도해 주세요.

Rapid API 문제를 감지했을 때 HTTP 500 오류를 반환하지만, 정확한 문제가 무엇인지 구체적으로 밝힐 수는 없습니다. 모든 파트너는 Rapid API 을 이용하는 과정에서 때때로 코드 500 오류 응답이 발생할 수 있음을 예상해야 합니다.

HTTP 500 오류는 시리아와 같이 지원되지 않는 POS가 사용될 때도 발생할 수 있습니다.

예약 생성 또는 예약 취소 이외의 API 응답에서 오류를 수신했으며 알려진 성능 저하가 없는 경우 나중에 요청을 다시 시도해 주세요. 응답은 다시 시도하기 전에 최소 대기 시간(초)을 나타내는 Retry-After 헤더를 포함할 수 있습니다.

예약 생성 시 API 응답에서 오류를 수신한 경우:

  • 90초 동안 기다린 다음, 예약과 함께 전송된 것과 동일한 affiliate_reference_id를 사용하여 검색 요청으로 예약 상태를 확인합니다.
  • 예약 내역이 없거나 계속해서 500 오류가 발생하면, 잠시 후 다시 예약을 시도해 주세요.

예약 취소 시 API 응답에서 다음과 같은 오류가 발생한 경우:

  • 90초 동안 기다린 다음, 알려진 itinerary_id를 사용하여 일정 검색 요청으로 예약 상태를 확인합니다.
  • 예약이 취소되지 않았거나 계속해서 500 오류가 표시된다면, 잠시 후 다시 취소 요청을 시도해 주세요.

응답 예:

{
  "type": "unknown_internal_error",
  "message": "An internal server error has occurred."
}
{
  "type": "internal_error",
  "message": "An internal server error has occurred. Please discard any previously received results in this pagination and restart the pagination from the beginning."
}

503 - Service unavailable

HTTP 503 오류는 일반적으로 일시적인 것으로, Rapid API, 또는 하위 서비스가 현재 해당 요청을 처리할 수 없음을 나타냅니다. 이에 대한 원인은 일시적인 과부하부터 공급업체와의 연결이 끊어진 것까지 여러 가지가 있을 수 있습니다.

'예약 생성(Create Booking)' 또는 '예약 취소(Cancel Booking)' 이외의 API 응답에서 이 오류가 발생했고, 알려진 서비스 장애가 없는 경우, 잠시 후 요청을 다시 시도해 주십시오. 응답은 다시 시도하기 전에 최소 대기 시간(초)을 나타내는 Retry-After 헤더를 포함할 수 있습니다.

예약 생성 시 API 응답에서 오류를 수신한 경우:

  • 이전 ‘요금 조회(Lodging API)’ 또는 ‘항공편 정보(Flight API)’ 응답에서 제공된 예약 링크는 짧은 시간 후에 만료됩니다. 첫 시도에서 HTTP 503 오류 메시지가 표시되면 해당 링크가 만료된 것일 수 있습니다. 새 링크를 받은 후 예약을 다시 시도해 주세요.
  • 두 번째 시도에서 503을 수신한 경우 90초 동안 기다린 다음, 예약과 함께 전송된 것과 동일한 affiliate_reference_id를 사용하여 검색 요청으로 예약 상태를 확인합니다.
  • 예약 내역이 없거나 503 오류가 계속 표시되는 경우, 잠시 후 다시 예약을 시도해 주세요.

예약 취소 시 API 응답에서 다음과 같은 오류가 발생한 경우:

  • 90초 동안 기다린 다음, 알려진 itinerary_id를 사용하여 일정 검색 요청으로 예약 상태를 확인합니다.
  • 예약이 취소되지 않았거나 503 오류가 계속 표시되는 경우, 잠시 후 다시 취소 요청을 시도해 주세요.

응답 예:

{
  "type": "service_unavailable",
  "message": "This service is currently unavailable."
}

504 - Gateway time out

HTTP 504 오류는 일반적으로 Rapid API 에서 발생하는 것이 아니라 클라우드 또는 엣지 인프라에서 발생하며, 트랜잭션 처리 중 네트워크 인프라의 구성 요소(예: 로드 밸런서)에 오류가 발생했음을 나타냅니다. 일반적으로 일시적인 현상입니다.

참고: 일정 생성 전이나 후에 타임아웃이 발생할 수 있으므로, 항상 일정가 생성되었는지 확인해야 합니다.

HTTP 504(및 502) 오류 응답은 Rapid API's 의 JSON 유형/메시지 객체 쌍이 아닌 HTML 형식으로 제공됩니다. 이는 이러한 오류가 다음에서 발생하지 않는다는 또 다른 증거입니다. Rapid API.

응답 예:

<html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
</body>
</html>

오류 응답의 임계값 비율

자신만의 임계값을 설정하려면 409, 410, 500, 503, 504 응답 코드의 일일 발생률을 측정해야 합니다. 한도를 초과할 경우, Rapid API 지원팀에 문의해 주십시오.

Expedia Group 정해진 기준값이 없습니다. 이는 조직이 속한 시장 및 기타 요인에 따라 달라지기 때문입니다. 어떤 오류 응답이 발생하는지 파악하기 위해서는 시장에 대한 이해가 필수적입니다. 당사의 지침에 따르면, 일별 또는 주별 기준으로 예약 전화 중 최대 5~6%가 코드 50x 오류로 인해 실패할 것으로 예상됩니다.

시간이 지나면 여러분 스스로 임계값을 계산할 수 있게 될 것입니다. 단순히 일일 발생 건수의 갑작스러운 증가만 살펴보지 마십시오. 예를 들어, 일일 발생 한도가 5건으로 설정되어 있더라도 5분 간격으로 500 오류가 두 번 발생한다면, Rapid API 지원팀에 문의해야 할 사유가 될 수 있습니다.

로그

Rapid API 지원팀에서 요청/응답 로그를 요청할 경우, 다음 내용을 제공해 주시기 바랍니다:

  • API 응답 헤더의 Transaction-Id 값. 이 값은 심층 조사에 매우 중요합니다.
  • API 요청 및 응답 로그 모두. 요청 로그에는 사용된 전체 엔드포인트 URL이 포함되어야 합니다. 응답 로그에는 반환된 HTTP 코드, 전체 응답 데이터 및 반환된 모든 헤더가 포함되어야 합니다.
  • point_of_sale 매개변수와 예약 가능 여부 응답이 있는 예약 가능 여부 API 요청. 이를 통해 지원팀에서 사용 중인 Rapid API 계정과 프로필을 확인할 수 있습니다.
  • 각 예약 요청에 대한 예약 API 요청 헤더 및 인증 헤더(API 키, 서명, 타임스탬프 포함).
  • 요청 로그의 예약 요청 URL 및 토큰
  • 예약 호출이 작동했는지 또는 실패했는지에 관계없이 예약 API 호출 후에 실행된 일정 검색

전체 JSON 요청 및 응답을 포함해 주세요. JSON 문자열은 double-quoted, 형식이어야 하므로, double-quote 문자 앞에 백슬래시 이스케이프 문자를 포함할 필요가 없습니다.

좋은 JSON 코드잘못된 JSON 코드
json "id": "208646250", "status": "available",json\"id\": \"208646250\", \"status\": \"available\",

대괄호 안의 문자열에 대괄호 자체가 포함되어야 할 경우에만 대괄호 앞에 백슬래시 이스케이프 문자를 사용하십시오.

응답 예:

"spokenwords": "He said "hello world""

참고: 로그를 PDF 형식으로 변환하지 마십시오. Expedia Group 지원 담당자가 때때로 로그 데이터를 내부 도구로 복사하여 붙여넣을 때가 있는데, PDF 형식으로 변환하면 데이터에 불필요한 줄 바꿈 문자가 추가됩니다.

부록

|

HTTP 오류 응답

이 목록에는 쇼핑, 예약, 취소 및 기타 일반적인 오류 중 알려진 사항들이 포함되어 있습니다. type의 값은 예고 없이 변경될 수 있습니다.

APIHTTP 코드오류 유형 값이유권장 작업
전체401액세스 문제비즈니스/기술 커뮤니케이션n/a
전체403액세스 문제비즈니스/기술 커뮤니케이션n/a
전체426API 버전이 너무 오래되었습니다.비즈니스/기술 커뮤니케이션n/a
전체429트래픽 제어비즈니스/기술 커뮤니케이션n/a
예약400affiliate_confirmation_id.invalid_exceeds_char_limitaffiliate_reference_id 형식이 잘못되었습니다.요청 내용을 조정합니다.
예약400book.hold_and_resume.not_allowed액세스 문제사례별로 다릅니다.
예약400payments.affiliate_collect.not_allowed액세스 문제사례별로 다릅니다.
예약400payments.declined거래 실패자세한 내용은 중첩된 오류를 확인합니다.
예약400payments.rejected거래 실패자세한 내용은 중첩된 오류를 확인합니다.
예약400payments.invalid거래 실패자세한 내용은 중첩된 오류를 확인합니다.
예약400payments.fraud_detected사기가 의심됨많은 예약을 하는 사용자를 중지시킵니다. 추가적인 조사가 필요합니다.
예약400body.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400body_required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400address.city.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400address.country_code.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400address.line_1.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400address.postal_code.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400address.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400address.state.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400billing_contact.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400customer_ip.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400email.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400email.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400family_name.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400family_name.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400given_name.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400given_name.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400invalid_input요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400json.invalid_format요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400json_format요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400link.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400payments.affiliate_collect.missing_information요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400payments.credit_card.type.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400payments.credit_card.type.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400payments.multiple_payments요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400payments.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400payments.type.not_supported요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400phone.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400phone.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400rooms.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400rooms.size.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400test.content_invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
예약400n/a알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약400rooms.invalid_size조회 객실 수가 예약의 객실 수와 일치하지 않습니다.요청 내용을 조정합니다.
예약400payments.credit_card.number.required은행 카드 번호가 누락되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.number.invalid잘못된 은행 카드 번호입니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.security_code.required은행 카드 확인 코드가 누락되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.security_code.invalid은행 카드 확인 코드가 잘못되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.security_code.not_matched은행 카드 확인 코드가 잘못되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.expired은행 카드가 만료되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.expiration_month.required은행 카드 유효 기한이 누락되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.expiration_year.required은행 카드 유효 기한이 누락되었습니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.credit_card.expiration_year.length_invalid잘못된 은행 카드 유효 기간입니다.은행 카드 정보의 로컬 확인 과정을 개선합니다.
예약400payments.insufficient_funds은행 카드 잔액이 부족합니다.사용자에게 정보를 확인하고 다시 시도하도록 요청합니다.
예약400duplicate_itinerary중복된 예약 시도입니다.90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약409price_mismatch예약을 처리하기 전에 가격 조정이 감지되었습니다.사용자에게 새 가격이나 다른 객실/호텔을 제안하기 전에 90초 동안 기다린 후 affiliate_reference_id를 사용하여 중복 예약이 있는지 검토합니다.
예약410rooms_unavailable예약을 처리하기 전에 매진이 감지되었습니다.사용자에게 다른 객실/호텔을 선택하도록 제안하기 전에 90초 동안 기다린 후 affiliate_reference_id를 사용하여 중복 예약이 있는지 검토합니다.
예약415n/a알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약415n/a알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약500create.system_failure알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약500payment_registration.system_failure알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약500pricing_system.failure알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약500unknown_internal_error알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약500n/a알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약503create.no_response알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약503service_unavailable알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
예약504n/a알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토합니다.
취소400cancel.post_checkout체크아웃 날짜 후 취소체크아웃 날짜 후에는 온라인 취소를 중지하고 고객 운영 팀에 문의합니다.
취소400customer_ip.required요청 내용이 올바르지 않습니다.affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소400invalid_input요청 내용이 올바르지 않습니다.affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소400room_id.invalid요청 내용이 올바르지 않습니다.affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소400test.content_invalid요청 내용이 올바르지 않습니다.affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소400room_already_cancelled취소된 주문을 취소합니다.affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소400cancel.post_checkin체크인 날짜 후 취소체크인 날짜 후에는 온라인 취소를 중지하고 고객 운영 팀에 문의합니다.
취소404resource_not_found알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소500cancel.system_failure알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토한 다음 다시 시도해보고, 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소500unknown_internal_error알 수 없는 예외다시 시도해 보고 고객 운영 팀에 문의합니다.
취소501itinerary_level_cancel_not_supported요청 내용이 올바르지 않습니다.90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토하고 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소503cancel.system_failure알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토한 다음 다시 시도해보고, 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
취소503service_unavailable알 수 없는 예외90초 동안 기다린 후 affiliate_reference_id를 사용하여 예약 업데이트를 검토한 다음 다시 시도해보고, 고객 운영 팀에 연락하여 필요한 추가 조사를 수행합니다.
요금 확인200availability.not_found매진여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
요금 확인200n/a알 수 없는 예외다시 시도합니다.
요금 확인400customer_session_id.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
요금 확인400invalid_input요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
요금 확인400link.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
요금 확인400test.content_invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
요금 확인409availability.not_found매진여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
요금 확인409n/a알 수 없는 예외다시 시도합니다.
요금 확인410invalid_input요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
요금 확인410availability.not_found매진여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
요금 확인410n/a알 수 없는 예외다시 시도합니다.
요금 확인410checkin.invalid_date_too_far_out앞으로 500일 동안 숙박하려면 가능한 한 빨리 예약해 주세요.사용자 입력의 로컬 유효성 검사를 개선합니다.
요금 확인500availability.not_found매진여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
요금 확인500unknown_internal_error알 수 없는 예외다시 시도합니다.
요금 확인500n/a알 수 없는 예외다시 시도합니다.
요금 확인503availability.not_found매진여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
요금 확인503service_unavailable알 수 없는 예외다시 시도합니다.
요금 확인503n/a알 수 없는 예외다시 시도합니다.
조회200availability.not_found매진되었거나 잘못된 호텔 코드입니다.여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
조회400property_id.above_maximum하나의 요청에 최대 250개의 숙박 시설 ID를 포함할 수 있습니다.요청 내용을 조정합니다.
조회400currency.not_supported지원되지 않는 통화 단위입니다.사례별로 다릅니다.
조회400departure.invalid_departure_before_arrival체크아웃 날짜가 체크인 날짜보다 더 이릅니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400number_of_adults.invalid_above_maximum각 객실은 성인 15명을 초과할 수 없습니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400number_of_adults.invalid_below_minimum각 객실은 성인 15명을 초과할 수 없습니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400number_of_occupancies.invalid_above_maximum각 객실은 성인 15명을 초과할 수 없습니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkin.invalid_date_format요청 내용이 올바르지 않습니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkin.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400checkout.invalid_date_format요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400checkout.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400child_age.invalid_age_format요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400child_age.invalid_outside_accepted_range요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400country_code.above_maximum요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400country_code.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400country_code.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400currency.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400customer-ip.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400filter.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400include.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400invalid_input요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400language.above_maximum요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400language.not_supported요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400language.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400link.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400occupancy.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400platform_name.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400property_id.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400rate_option.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400rate_plan_count.above_maximum요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400rate_plan_count.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400rate_plan_count.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sales_channel.above_maximum요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sales_channel.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sales_channel.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sales_environment.above_maximum요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sales_environment.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sales_environment.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sort_type.above_maximum요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sort_type.invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400sort_type.required요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400test.content_invalid요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회400arrival.invalid_date_in_the_past체크인 날짜사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkin.invalid_date_in_the_past체크인 날짜사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkout.above_maximum28일 넘게 숙박합니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkout.invalid_length_of_stay_too_long28일 넘게 숙박합니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkout.invalid_length_of_stay_too_short28일 넘게 숙박합니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400departure.invalid_length_of_stay_too_long28일 넘게 숙박합니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400departure.invalid_length_of_stay_too_short28일 넘게 숙박합니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkout.invalid_checkout_before_checkin체크아웃 날짜가 체크인 날짜보다 더 이릅니다.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400property_id.invalid잘못된 숙박 시설 ID요청 내용을 조정합니다.
조회400arrival.invalid_date_too_far_out앞으로 500일 동안 숙박하려면 가능한 한 빨리 예약해 주세요.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회400checkin.invalid_date_too_far_out앞으로 500일 동안 숙박하려면 가능한 한 빨리 예약해 주세요.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회403filter.conflict요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회403request_forbidden요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회404availability.not_found매진되었거나 잘못된 호텔 코드입니다.여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
조회500invalid_input요청 내용이 올바르지 않습니다.요청 내용을 조정합니다.
조회500unknown_internal_error알 수 없는 예외다시 시도합니다.
조회500checkin.invalid_date_too_far_out앞으로 500일 동안 숙박하려면 가능한 한 빨리 예약해 주세요.사용자 입력의 로컬 유효성 검사를 개선합니다.
조회503availability.not_found매진되었거나 잘못된 호텔 코드입니다.여행객에게 객실 유형 또는 호텔 변경을 제안합니다.
조회503service_unavailable알 수 없는 예외다시 시도합니다.

예약 처리 의사 코드

다음은 예약 생성 API 및 예약 검색 API를 사용하는 단계별 예약 프로세스의 예입니다. 이 문서에는 예약 처리 및 예외 사항에 대한 후속 조치에 대한 제안 사항이 포함되어 있습니다.

function create_booking(affiliate_reference_id){
  ### make API request to create booking ###
  book_resp = rapid_book_req(affiliate_reference_id, timeout = 90seconds, hold = false)
  ### Retrieve is always required to confirm final status of bookings, to avoid duplicate requests for the last inventory ###
  retrieve_booking(book_resp.retrieve_link, affiliate_reference_id, book_resp.status_code, book_resp.req_timestamp) }

function retrieve_booking(retrieve_link, affiliate_reference_id, book_resp_status_code, rapid_book_req_time) {
  ### display the pending booking message to customers ###
  booking_final_status = "pending"
  ### always use Retrieve link when it returned in booking response ###
   if (retrieve_link == null) {
       retrieve_link = "/rapid_path?XXXXXX&affiliate_reference_id=" + affiliate_reference_id }
       ### confirm the final status of bookings ###
      while (booking_final_status not in ("booked", “canceled”, "manualFollowup", "failed")) 
        ### make API request to retrieve booking ###
      retrieve_resp = retrieve_resquest(retrieve_link) 
      ### a complete Retrieve returns room level Expedia confirmation ID ###
      if (retrieve_resp.rooms.[].confirmation_id is not null) {
          booking_final_status = retrieve_resp.rooms.[].status }
      ### retry Retrieve to monitor booking updates if 90 seconds have not elapsed yet OR system error returned ###
      elseif (currentTime - rapid_book_req_time <= 90seconds) or (retrieve_resp.status_code not in (404, 200)) {
          continue }
      ### retry Retrieve for incomplete booking result or make manual follow-ups after 11 minutes ### 
      elseif (book_resp_status_code in (200, 201, 202, 204)) or (retrieve_resp.itinerary_id is not null) {
          if (currentTime - rapid_book_req_time <= 11minutes) {
            continue } else { booking_final_status = "manualFollowup" } 
      ### retry booking request with the same affiliate reference id value to cover the booking ###
      elseif (booking_retries <= 2) {
          create_booking(affiliate_reference_id) } 
      ### the booking is failed only when the above actions have all been taken ###
      else {
booking_final_status = "failed" }}}

예약 오류 사용자 인터페이스 예시

신속하게 해결되지 않은 예약 사례

빠르게 해결되지 않은 예약

예시: 확정된 예약

예약 확정

예시: 예약 실패

예약 실패

이 페이지가 도움이 되었나요?
이 콘텐츠를 어떻게 개선하면 좋을까요?
더 나은 Developer Hub를 만드는 데 도움을 주셔서 감사합니다!