일반적인 오류 응답

API 서비스는 다음과 같은 일반적인 오류 코드와 메시지, 응답 형식을 공유합니다. 서비스별 오류 응답을 확인하려면 개별 설명서 페이지를 참조해 주세요.

Rapid 오류 처리 권장 사항

오류 처리 논리

  • 플랫폼과 파트너는 Rapid 오류를 처리하기 위해 조회 및 예약 오류 처리 논리가 있는지 확인해야 합니다.
  • 아래 참고 사항에 명시되지 않은 한 모든 예약 요청에 대해 항상 고유한 affiliate_reference_id를 사용합니다.
  • 파트너는 특히 예약 요청에 대한 오류 처리 논리를 지속적으로 검토하고 업데이트해야 합니다.
  • 모든 Rapid 응답에는 해당 HTTP 코드가 있습니다. 응답 HTTP 코드 목록은 아래를 참조해 주세요.

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

예약 요청에는 90초의 API 연결 시간 초과 설정이 권장됩니다. 다른 API에 대해 정해진 권장 사항은 없으나 시간 초과로 인한 금전적 손실은 없으므로 유사한 시간 초과 설정을 적용해야 합니다. 그러나 일부 파트너는 예약 가능 여부 조회 호출에 더 짧은 연결 시간 초과를 사용하기로 결정할 수 있습니다.

파트너가 120초 내에 응답을 받지 못하는 경우 아예 응답을 받지 못하게 됩니다. 이는 EPS Rapid에 자체 시간 초과 설정이 있고 120초가 Rapid 최종 시간 초과 값이기 때문입니다. 그 시간이 지나면 Rapid에서 5xx 오류를 발생시킵니다.

경우에 따라 Rapid는 HTTP Expect: 100-Continue 프로세스를 지원하지 않습니다. 파트너는 특히 기본적으로 프로세스를 따르는 cURL, C#/.NET, 기타 일부 코딩 언어에서 프로세스와 서버를 연결하려고 할 때 연결 문제를 경험할 수 있습니다.

참고: HTTP 504 게이트웨이 시간 초과가 Rapid가 시간 초과되었음을 의미하지는 않습니다. 이러한 경우 인프라 서비스가 실패했거나 Rapid가 다른 다운스트림 서비스에 대한 게이트웨이 역할을 하고 해당 서비스에 대한 시간 초과 제한을 설정합니다. 트리거된 시간 초과이며 EPS는 이를 504로 보고해야 합니다. 예약 호출에 대해 504가 발생하는 경우 예약이 생성되기 전에(예: 호텔 통신, 결제 서버) 또는 예약이 생성된 후에(예: EPS 재무 관리) 다운스트림 문제가 발생할 수 있으므로 일정 검색( affiliate_reference_id+이메일)을 사용하여 예약이 생성되었는지를 확인해야 합니다. 또한 인터넷 연결이 안정적인지도 확인해 주세요. Traceroute 명령은 연결 문제를 식별하는 데 도움이 될 수 있습니다.

예약 처리 및 5xx 오류 검색

예약 오류(5xx 상태) 또는 시간 초과가 반드시 예약 자체가 유효하지 않음을 의미하는 것은 아니므로 이렇게 가정해서는 안 됩니다. 예약이 생성된 후 오류가 발생했을 수 있습니다. 따라서 예약 상태를 확인하기 위해 affiliate_reference_id+이메일로 일정 검색을 실행하는 것이 좋습니다.

90초 이내에 반환된 오류는 예약의 최종 상태를 나타내지 않습니다. 일반적으로 대부분의 예약은 13 ~ 30초 이내에 확인된 예약으로 해결되지만 일부는 확인하는 데 최대 90초가 걸릴 수 있습니다.

파트너는 90초 동안 예약 상태를 3번 확인하는 논리를 구현할 수 있습니다. 대부분의 응답은 처음 30초 이내에 확인되며 파트너는 90초 전체를 기다리지 않고 응답을 확인할 수 있습니다. 최종 응답을 받지 못한 경우 파트너는 60초 후에 다시 검색한 다음, 최종 응답을 확인하기 위해 90초 후에 마지막으로 검색할 수 있습니다.

검색 API 호출을 사용하여 예약 결과를 두 번 확인합니다(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"
    }
  ]
}

그 이유는 예약이 완벽하게 유효하지만 여전히 보류 중인 플래그가 있기 때문입니다. 이 문제는 일반적으로 몇 분 안에 해결되므로 예약이 완료될 때까지 일정 검색 요청을 반복해야 합니다.

여러 수준 구조의 오류 분석

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 오류는 예약 요청 헤더에 문제가 있음을 나타냅니다. 오류 응답에는 유효하지 않은 예약 요청 헤더의 실제 오류 배열 필드가 포함됩니다. 예약 헤더는 객실 및 결제와 같은 여러 배열 및 하위 배열로 구성됩니다. 전체 배열이 본문입니다. 따라서 body.email은 헤더 본문의 이메일 매개변수를 나타냅니다.

참고: 예약 헤더 객실 배열에는 예약 가능 여부 호출에서 요청된 객실과 동일한 수의 항목이 있어야 합니다.

응답 예:

지원되지 않는 언어:

{
  "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 API 서비스에 대한 모든 요청에는 API 키 + 공유 암호 + UNIX 타임스탬프(초) 연결의 언솔티드 SHA-512 해시가 포함되어야 합니다. 자세한 정보는 서명 인증 페이지를 참조해 주세요.

401 Unauthorized 응답 예:

{
  "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
     }
  ]
}

403 - Forbidden

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

403 Forbidden 응답 예:

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

404 - Not found

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

또한, 지리 API콘텐츠 API는 404 응답을 사용하여 요청한 지리 또는 콘텐츠별 파일이나 리소스를 찾을 수 없는 경우를 나타냅니다. 자세한 예는 해당 설명서 페이지를 참조해 주세요.

일정 검색 후 코드 404는 예약을 찾을 수 없음을 나타냅니다. 예약 오류로 인해 검색이 수행된 경우 예약이 생성되지 않은 것으로 표시됩니다. 그러나 파트너는 일정 검색 API 요청 매개변수가 유효한지 확인해야 하므로 검색 affiliate_reference_id, 이메일 및/또는 일정 번호가 올바른지 확인해야 합니다. 또한 예약 호출 후 90초 이내에 검색 API 호출이 이루어진 경우 다시 검색을 시도하여 예약 호출 후 90초가 넘었는지 확인해 주세요.

응답 예:

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

409 - Price mismatch

많은 숙박 시설과 체인은 동적 가격 책정 또는 "시간 기반 가격 책정"이라는 것을 사용합니다. 이는 가격이 공급 및 수요 알고리즘에 따라 달라진다는 것을 의미합니다. Expedia Group은 숙박 시설로부터 초당 여러 번 업데이트된 요금을 수신하므로 요금이 자주 변경됩니다.

요금 변경은 일반적으로 EPS가 아닌 숙박 시설의 선택이라는 점에 유의해야 합니다. 또한 파트너 등급을 포함하여 요금/예약 가능 여부에 대해 여러 수준에서 캐싱이 이루어지기 때문에 모든 예약에 여러 계층의 대기 시간이 있을 수 있습니다.

가격 불일치(PMM)는 예상되는 상황이며, 숙박 시설에서 입력한 업데이트된 가격을 반영하지 않는 시스템 또는 시스템 저하를 비롯하여 여러 가지 이유로 발생할 수 있습니다. 파트너는 이러한 이벤트의 빈도를 모니터링하고 비율이 갑자기 증가하거나 임계값에 도달하면 EPS 지원 팀에 문의해야 합니다.

동시에 여러 숙박 시설/객실에 대해 PMM이 발생한 경우 Rapid 성능 저하가 발생했는지 확인해 주세요.

오랫동안 동일한 요금/객실에 대해 PMM이 반환되는 경우 이는 아마도 숙박 시설에서 요금을 잘못 로드했기 때문일 수 있습니다. EPS 기술 지원 팀에 문의하여 확인해 주세요.

PMM에서 복구하려면 요금 확인 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 링크가 만료되었거나 요청된 객실을 더 이상 예약할 수 없는 경우에 반환됩니다.

많은 호텔 체인과 숙박 시설이 Expedia Group와의 직접 통신 연결을 갖추고 있습니다. 동기 통신은 Expedia Group과 숙박 시설/체인 간에 실시간으로 발생하는 상호 작용 방식의 교환입니다.

동기 통신 예약은 숙박 시설이나 체인이 EPS에 객실 재고(예약 가능 여부 및 가격)를 제공하고 EPS가 해당 객실 재고를 관리하며 이후 이 데이터에 대해 예약 가능 여부 조회 및 요금 확인 호출이 이루어지는 경우입니다. 그런 다음, 예약 시 객실을 예약하기 위해 숙박 시설에 대한 동시 예약 호출이 이루어집니다. 이 오류는 선택한 객실의 재고가 부족할 때 발생합니다. 재고가 부족한 경우 Rapid는 코드 410 오류 메시지를 반환합니다.

이는 일시적인 상황일 수 있으며 다시 시도하면 예약 가능한 객실을 찾을 수 있습니다. 90초 동안 기다린 다음, 예약과 함께 전송된 것과 동일한 affiliate_reference_id를 사용하여 검색 요청으로 예약 상태를 확인합니다. 예약이 없는 경우 사용자는 다른 숙박 시설/객실/요금/날짜 조합을 선택해야 할 수 있습니다.

매진 오류 메시지는 숙박 시설에 대한 연결이 저하되어 Rapid가 실제 예약 가능 여부를 나타내지 않아 매진 오류 메시지를 표시하는 경우에도 발생할 수 있습니다.

응답 예:

링크 만료:

{
  "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

요청에서 TLS(SSL 대체)를 사용하지 않은 경우 반환됩니다.

응답 예:

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

429 - Rate limit error

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

요청 수가 속도 제한을 초과하면 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)가 됩니다.

응답 예:

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가 문제를 감지했지만 정확한 문제가 무엇인지 더 구체적으로 알 수 없는 경우 HTTP 500으로 응답합니다. 모든 파트너는 Rapid 사용에서 때때로 몇 가지 코드 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 응답에서 오류를 수신했으며 알려진 성능 저하가 없는 경우 나중에 요청을 다시 시도해 주세요. 응답은 다시 시도하기 전에 최소 대기 시간(초)을 나타내는 Retry-After 헤더를 포함할 수 있습니다.

예약 생성 시 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에서 발생하는 것이 아니라 클라우드 또는 에지 인프라에서 발생하며 트랜잭션 중에 네트워크 인프라 내 항목(예: 로드 밸런서)이 실패했음을 나타냅니다. 이 오류는 일반적으로 일시적인 이벤트입니다.

일정 생성 전이나 후에 시간 초과가 발생할 수 있으니 반드시 일정이 생성되었는지 여부를 확인해 주세요.

HTTP 504(및 502) 오류 응답은 Rapid JSON 유형/메시지 개체 쌍이 아닌 HTML 형식입니다. 이 형식은 이러한 오류가 Rapid에서 생성되지 않은 것임을 나타내는 또 다른 표시입니다.

응답 예:

<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 응답 코드의 일일 비율을 측정해야 합니다. 임계값이 위반되는 경우 EPS 지원 팀에 문의해야 합니다.

EPS는 파트너가 속해 있고 판매하는 시장과 기타 요인에 따라 실제로 달라지기 때문에 임계값을 설정해 놓지 않습니다. 어떤 오류 응답이 발생하는 이유를 결정하려면 시장에 대해 알고 있어야 합니다. 지침에 따르면 매일 또는 매주 기간 동안 코드 50xx 오류로 인해 예약 통화의 최대 5 ~ 6%가 실패할 것으로 예상됩니다.

시간이 지남에 따라 파트너는 자체 임계값을 계산할 수 있어야 합니다. 파트너는 갑작스러운 일일 증가만을 살펴봐서는 안 됩니다. 하루에 5개의 임계값을 설정하더라도 예를 들어 5분 이내에 두 개의 500 오류가 발생하면 EPS 지원 팀과 확인해야 하는 원인이 될 수 있습니다.

로그

EPS가 요청/응답 로그를 요청하는 경우 다음을 시도해 주세요.

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

전체 JSON 요청 및 응답을 포함해 주세요. JSON 문자열은 큰따옴표로 묶어야 하므로 큰따옴표 문자 앞에 백슬래시 이스케이프 문자를 포함할 필요가 없습니다.

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

큰따옴표가 문자열의 일부가 되어야 하는 경우에만 큰따옴표 앞에 백슬래시 이스케이프 문자를 사용해 주세요.

응답 예:

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

로그를 PDF 형식으로 생성하지 마십시오. EPS 지원 팀 및 개발자는 때때로 내부 도구에 로그 데이터를 복사하거나 붙여 넣는데, PDF 형식은 데이터에 불필요한 줄 바꿈 문자를 추가합니다.

부록

|

Rapid HTTP 오류 응답

Please see known Shopping, Booking, Cancellation, and other common errors. The value of type can change without notice.

APIHTTP codeError type valueReasonSuggested action
Overall401Access problemsBusiness/technical communicationn/a
Overall403Access problemsBusiness/technical communicationn/a
Overall426API version is too oldBusiness/technical communicationn/a
Overall429Traffic controlBusiness/technical communicationn/a
Book400affiliate_confirmation_id.invalid_exceeds_char_limitaffiliate_reference_id is incorrectly formatted.Adjust the content of the request.
Book400book.hold_and_resume.not_allowedAccess problemsCase-by-case
Book400payments.affiliate_collect.not_allowedAccess problemsCase- by-case
Book400payments.declinedTransaction failedCheck the nested errors for details.
Book400payments.rejectedTransaction failedCheck the nested errors for details.
Book400payments.invalidTransaction failedCheck the nested errors for details.
Book400payments.fraud_detectedSuspected fraudStop the user making more bookings. Further investigation needed.
Book400body.requiredThe request content is incorrect.Adjust the content of the request.
Book400body_requiredThe request content is incorrect.Adjust the content of the request.
Book400address.city.invalidThe request content is incorrect.Adjust the content of the request.
Book400address.country_code.invalidThe request content is incorrect.Adjust the content of the request.
Book400address.line_1.invalidThe request content is incorrect.Adjust the content of the request.
Book400address.postal_code.requiredThe request content is incorrect.Adjust the content of the request.
Book400address.requiredThe request content is incorrect.Adjust the content of the request.
Book400address.state.invalidThe request content is incorrect.Adjust the content of the request.
Book400billing_contact.requiredThe request content is incorrect.Adjust the content of the request.
Book400customer_ip.requiredThe request content is incorrect.Adjust the content of the request.
Book400email.invalidThe request content is incorrect.Adjust the content of the request.
Book400email.requiredThe request content is incorrect.Adjust the content of the request.
Book400family_name.invalidThe request content is incorrect.Adjust the content of the request.
Book400family_name.requiredThe request content is incorrect.Adjust the content of the request.
Book400given_name.invalidThe request content is incorrect.Adjust the content of the request.
Book400given_name.requiredThe request content is incorrect.Adjust the content of the request.
Book400invalid_inputThe request content is incorrect.Adjust the content of the request.
Book400json.invalid_formatThe request content is incorrect.Adjust the content of the request.
Book400json_formatThe request content is incorrect.Adjust the content of the request.
Book400link.invalidThe request content is incorrect.Adjust the content of the request.
Book400payments.affiliate_collect.missing_informationThe request content is incorrect.Adjust the content of the request.
Book400payments.credit_card.type.invalidThe request content is incorrect.Adjust the content of the request.
Book400payments.credit_card.type.requiredThe request content is incorrect.Adjust the content of the request.
Book400payments.multiple_paymentsThe request content is incorrect.Adjust the content of the request.
Book400payments.requiredThe request content is incorrect.Adjust the content of the request.
Book400payments.type.not_supportedThe request content is incorrect.Adjust the content of the request.
Book400phone.invalidThe request content is incorrect.Adjust the content of the request.
Book400phone.requiredThe request content is incorrect.Adjust the content of the request.
Book400rooms.requiredThe request content is incorrect.Adjust the content of the request.
Book400rooms.size.invalidThe request content is incorrect.Adjust the content of the request.
Book400test.content_invalidThe request content is incorrect.Adjust the content of the request.
Book400n/aUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book400rooms.invalid_sizeThe number of Shopping rooms does not match the number in Booking.Adjust the content of the request.
Book400payments.credit_card.number.requiredBank card number is missing.Improve the local verification of bank card information.
Book400payments.credit_card.number.invalidInvalid bank card number.Improve the local verification of bank card information.
Book400payments.credit_card.security_code.requiredBank card verification code is missing.Improve the local verification of bank card information.
Book400payments.credit_card.security_code.invalidInvalid bank card verification code.Improve the local verification of bank card information.
Book400payments.credit_card.security_code.not_matchedInvalid bank card verification code.Improve the local verification of bank card information.
Book400payments.credit_card.expiredBank card has expired.Improve the local verification of bank card information.
Book400payments.credit_card.expiration_month.requiredBank card validity is missing.Improve the local verification of bank card information.
Book400payments.credit_card.expiration_year.requiredBank card validity is missing.Improve the local verification of bank card information.
Book400payments.credit_card.expiration_year.length_invalidInvalid bank card validity.Improve the local verification of bank card information.
Book400payments.insufficient_fundsInsufficient bank card balance.Ask the user to confirm the information and try again.
Book400duplicate_itineraryDuplicated booking attempt.Wait 90 seconds and use affiliate_reference_id to review the booking updates.
Book409price_mismatchPrice adjustment detected before processing the booking.Wait 90 seconds and use affiliate_reference_id to review potential duplicated bookings before suggesting to user a new price or another room/hotel.
Book410rooms_unavailableSold out detected before processing the booking.Wait 90 seconds and use affiliate_reference_id to review potential duplicated bookings before suggesting user choose another room/hotel.
Book415n/aUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book415n/aUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book500create.system_failureUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book500payment_registration.system_failureUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book500pricing_system.failureUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book500unknown_internal_errorUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book500n/aUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book503create.no_responseUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book503service_unavailableUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Book504n/aUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates.
Cancel400cancel.post_checkoutCancel after check-out date.Stop online cancellation after check-out date and contact customer operation.
Cancel400customer_ip.requiredThe request content is incorrect.Use affiliate_reference_id to review the booking updates, contact customer operation and further investigation needed.
Cancel400invalid_inputThe request content is incorrect.Use affiliate_reference_id to review the booking updates, contact customer operation and further investigation needed.
Cancel400room_id.invalidThe request content is incorrect.Use affiliate_reference_id to review the booking updates, contact customer operation and further investigation needed.
Cancel400test.content_invalidThe request content is incorrect.Use affiliate_reference_id to review the booking updates, contact customer operation and further investigation needed.
Cancel400room_already_cancelledCancel a cancelled order.Use affiliate_reference_id to review the booking updates, contact customer operation, and further investigation needed.
Cancel400cancel.post_checkinCancel after check-in date.Stop online cancellation after check-in date and contact customer operation.
Cancel404resource_not_foundUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates, contact customer operation and further investigation needed.
Cancel500cancel.system_failureUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates then retry, contact customer operation, and further investigation needed.
Cancel500unknown_internal_errorUnknown exceptionRetry and contact customer operation.
Cancel501itinerary_level_cancel_not_supportedThe request content is incorrect.Wait 90 seconds and use affiliate_reference_id to review the booking updates the contact customer operation and further investigation needed.
Cancel503cancel.system_failureUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates then retry, contact customer operation and further investigation needed.
Cancel503service_unavailableUnknown exceptionWait 90 seconds and use affiliate_reference_id to review the booking updates then retry, contact customer operation and further investigation needed.
Price Check200availability.not_foundSold outSuggest travelers change room type or hotel.
Price Check200n/aUnknown exceptionRetry
Price Check400customer_session_id.requiredThe request content is incorrect.Adjust the content of the request.
Price Check400invalid_inputThe request content is incorrect.Adjust the content of the request.
Price Check400link.invalidThe request content is incorrect.Adjust the content of the request.
Price Check400test.content_invalidThe request content is incorrect.Adjust the content of the request.
Price Check409availability.not_foundSold outSuggest travelers change room type or hotel.
Price Check409n/aUnknown exceptionRetry
Price Check410invalid_inputThe request content is incorrect.Adjust the content of the request.
Price Check410availability.not_foundSold outSuggest travelers change room type or hotel.
Price Check410n/aUnknown exceptionRetry
Price Check410checkin.invalid_date_too_far_outBook as early as possible to stay in the next 500 days.Improve local validation of users input.
Price Check500availability.not_foundSold outSuggest travelers change room type or hotel.
Price Check500unknown_internal_errorUnknown exceptionRetry
Price Check500n/aUnknown exceptionRetry
Price Check503availability.not_foundSold outSuggest travelers change room type or hotel.
Price Check503service_unavailableUnknown exceptionRetry
Price Check503n/aUnknown exceptionRetry
Shopping200availability.not_foundSold out or invalid hotel code.Suggest travelers change room type or hotel.
Shopping400property_id.above_maximumOne request can include up to 250 property IDs.Adjust the content of the request.
Shopping400currency.not_supportedCurrency unit is not supported.Case-by-case
Shopping400departure.invalid_departure_before_arrivalCheck-out date is earlier than check-in date.Improve local validation of users input.
Shopping400number_of_adults.invalid_above_maximumEach room cannot exceed 15 adults.Improve local validation of users input.
Shopping400number_of_adults.invalid_below_minimumEach room cannot exceed 15 adults.Improve local validation of users input.
Shopping400number_of_occupancies.invalid_above_maximumEach room cannot exceed 15 adults.Improve local validation of users input.
Shopping400checkin.invalid_date_formatThe request content is incorrect.Improve local validation of users input.
Shopping400checkin.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400checkout.invalid_date_formatThe request content is incorrect.Adjust the content of the request.
Shopping400checkout.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400child_age.invalid_age_formatThe request content is incorrect.Adjust the content of the request.
Shopping400child_age.invalid_outside_accepted_rangeThe request content is incorrect.Adjust the content of the request.
Shopping400country_code.above_maximumThe request content is incorrect.Adjust the content of the request.
Shopping400country_code.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400country_code.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400currency.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400customer-ip.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400filter.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400include.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400invalid_inputThe request content is incorrect.Adjust the content of the request.
Shopping400language.above_maximumThe request content is incorrect.Adjust the content of the request.
Shopping400language.not_supportedThe request content is incorrect.Adjust the content of the request.
Shopping400language.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400link.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400occupancy.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400platform_name.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400property_id.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400rate_option.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400rate_plan_count.above_maximumThe request content is incorrect.Adjust the content of the request.
Shopping400rate_plan_count.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400rate_plan_count.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400sales_channel.above_maximumThe request content is incorrect.Adjust the content of the request.
Shopping400sales_channel.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400sales_channel.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400sales_environment.above_maximumThe request content is incorrect.Adjust the content of the request.
Shopping400sales_environment.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400sales_environment.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400sort_type.above_maximumThe request content is incorrect.Adjust the content of the request.
Shopping400sort_type.invalidThe request content is incorrect.Adjust the content of the request.
Shopping400sort_type.requiredThe request content is incorrect.Adjust the content of the request.
Shopping400test.content_invalidThe request content is incorrect.Adjust the content of the request.
Shopping400arrival.invalid_date_in_the_pastCheck-in dateImprove local validation of users input.
Shopping400checkin.invalid_date_in_the_pastCheck-in dateImprove local validation of users input.
Shopping400checkout.above_maximumStay longer than 28 days.Improve local validation of users input.
Shopping400checkout.invalid_length_of_stay_too_longStay longer than 28 days.Improve local validation of users input.
Shopping400checkout.invalid_length_of_stay_too_shortStay longer than 28 days.Improve local validation of users input.
Shopping400departure.invalid_length_of_stay_too_longStay longer than 28 days.Improve local validation of users input.
Shopping400departure.invalid_length_of_stay_too_shortStay longer than 28 days.Improve local validation of users input.
Shopping400checkout.invalid_checkout_before_checkinCheck-out date is earlier than check-in date.Improve local validation of users input.
Shopping400property_id.invalidInvalid property IDAdjust the content of the request.
Shopping400arrival.invalid_date_too_far_outBook as early as possible to stay in the next 500 days.Improve local validation of users input.
Shopping400checkin.invalid_date_too_far_outBook as early as possible to stay in the next 500 days.Improve local validation of users input.
Shopping403filter.conflictThe request content is incorrect.Adjust the content of the request.
Shopping403request_forbiddenThe request content is incorrect.Adjust the content of the request.
Shopping404availability.not_foundSold out or invalid hotel code.Suggest travelers change room types or hotels.
Shopping500invalid_inputThe request content is incorrect.Adjust the content of the request.
Shopping500unknown_internal_errorUnknown exceptionRetry
Shopping500checkin.invalid_date_too_far_outBook as early as possible to stay in the next 500 days.Improve local validation of users input.
Shopping503availability.not_foundSold out or invalid hotel code.Suggest travelers change room types or hotels.
Shopping503service_unavailableUnknown exceptionRetry

Booking handling pseudocode

This is an example of the booking process in steps with Create Booking API and Retrieve Booking API. It contains suggestions for processing reservations and following exceptions up.

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" }}}

Rapid booking error user interface examples

Booking that has not resolved quickly.

Booking that has not resolved quickly

Confirmed booking.

Confirmed booking

Booking failure.

Booking failure

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