常见错误响应
我们的 API 服务会共享下列常见错误代码、消息和响应格式。
Rapid 错误处理建议
错误处理逻辑
- 平台和合作伙伴应确保已建立错误处理逻辑,以处理购物和预订 API 错误。
- 除非在下面的注释中明确规定,否则每次预订请求都要使用一个独一无二的
affiliate_reference_id。 - 您应该不断审查和更新错误处理逻辑,特别是针对预订请求的错误处理逻辑。
- 所有 Rapid API 响应都有一个对应的 HTTP 代码,请参阅下面的响应 HTTP 代码列表。
连接超时或通信超时
对于航班 API 预订请求,建议将 API 连接超时设置为 120 秒;对于住宿和其他 API,我们建议设置为 90 秒。但是,您可以决定对购物可用性调用使用较短的连接超时时间。
如果在 120 秒内没有收到响应,Rapid API 将发出 5xx 错误,因为 Rapid API 自身的连接超时设置为 120 秒。
在某些情况下,Rapid API 不支持 HTTP Expect: 100-Continue 过程。使用该进程尝试连接服务器时,您可能会遇到连接问题,尤其是在 cURL、C#/.NET 和其他一些默认遵循该进程的编程语言中。
**注意:**HTTP 504 网关超时并不表示 Rapid 已超时。在这些情况下,要么是基础设施服务发生故障,要么是 Rapid 充当了另一个下游服务的网关,并为该服务设置了超时限制。下游超时将触发 504 错误。如果 504 错误发生在 Booking 调用上,请检查预订是否是使用行程检索(affiliate_reference_id+ 电子邮件)创建的,因为下游问题可能发生在创建预订之前(酒店通信、支付服务器)或之后(Expedia Group 财务管理)。另外,请检查网络连接是否稳定。Traceroute 命令可能有助于识别连接问题。
处理预订和检索 5xx 错误
预订错误(5xx 状态)或超时并不一定意味着预订本身无效。该错误可能是在预订创建后发生的。我们建议您发送一封包含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 - 错误请求
在您的请求存在格式错误或包含不正确的值时返回。
代码 400 错误请求表示请求预订标头存在问题。错误响应将在预订请求标头中包含实际的无效错误数组字段。标头由多个数组和 sub-arrays 组成,例如房间和付款。数组整体为正文。因此,body.email 将表示标头正文的电子邮件参数。
注意: 对于住宿 API,预订标头房间数组必须与 Availability 调用中请求的房间数相同。
当请求参数过大时,会返回标有“Tomcat Exception Report”的 400 Bad Request 错误,这种情况最常见于住宿内容和获取房态 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 - 未授权
返回 HTTP 授权标头缺失或无法解析时的错误信息。对任何 Rapid Lodging API 的每个请求都必须包含您的 API 密钥 + 共享密钥 + UNIX 时间戳(以秒为单位)的连接后的 未加盐的 SHA-512 哈希。有关完整的详细信息,请参考我们的签名授权页面。
示例:住宿 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 Web 令牌 (JWT)。
Authorization: EGToken principal-JWT={encodedJwt}主 JWT 是通过 OAuth 2.0 客户端凭证和令牌交换获得的;有关详细信息,请参阅OAuth 2.0 身份验证和快速航班预订 API使用指南。
403 - 禁止
在您的 HTTP 授权标头有效,却无法访问请求的资源时返回。
403 禁止响应示例:
{
"type": "request_unauthorized",
"message": "Your request could not be authorized."
}404 - 未找到
找不到请求的 API 资源时返回。请对照我们记录的示例来检查您的请求 URL。
住宿地理 API 和内容 API 也使用 404 响应来指示何时无法找到请求的地理文件或 content-specific 文件或资源。 有关完整的示例,请参考其相应的文档页面。
行程检索后的代码 404 表示未找到预订。如果检索是由于预订错误而进行的,则表示预订并未创建。但是,您需要确保行程检索 API 请求参数有效,因此请确保检索 affiliate_reference_id、电子邮件和/或行程编号正确。此外,如果检索 API 调用与预订调用之间的时间间隔不足 90 秒,我们建议您再次尝试检索。
响应示例:
{
"type": "resource.not_found",
"message": "The requested resource could not be found."
}409 - 价格不匹配
许多供应商采用动态定价,也称为“time-based 定价”。这意味着,定价会根据供需算法而变化。Expedia Group 每秒多次接收更新的速率,这意味着速率会频繁变化。
值得注意的是,这通常是供应商的选择,而不是 Expedia Group 的选择。此外,由于价格和可用性存在多层缓存,因此任何预订都可能存在多层延迟。
价格错配(PMM)是一种预期情况,其发生的原因有很多,包括系统性能下降或系统未能反映更新后的价格。您应该监控这些事件的发生频率,如果发生频率突然增加或达到阈值,请联系支持部门。
如果多个结果同时出现 PMM,则应检查是否存在快速降解的可能性。
如果长时间内对相同的结果返回 PMM,则可能是由于供应商错误加载了费率。您可以联系技术支持进行查询。
要从 PMM 中恢复,请再次调用价格检查(住宿 API)或航班详情(航班 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 - 售完或订满
返回所跟踪的 Rapid API 链接已过期或所请求的库存不再可用的情况。
许多供应商与 Expedia Group 有直接、同步的实时通信链路。
同步通信预订是指根据我们管理的供应商数据,对购物可用性和价格进行查询(住宿 API)或航班详情(航班 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 - 需要升级
返回请求是否未使用传输层安全协议 (TLS),TLS 是一种取代安全套接字层协议 (SSL) 的加密协议。
响应示例:
{
"type": "upgrade_required",
"message": "This service requires the use of TLS."
}429 - 速率限制错误
当请求计数超过速率限制时,将返回 429 状态代码。每个请求可能会受到两种不同的速率限制的制约:当集成以超过限制的速度发送请求时的速率限制,以及当 Expedia Group 服务器遇到负载超限时的速率限制。
当您发出 Expedia Group API 请求时,接收服务器会检查请求计数是否在限制范围内。如果请求计数在限制范围内,该请求会通过,并且客户端的计数会增加。如果客户端请求计数超过限制,则服务器会返回包含 HTTP 429(请求过多)状态代码的响应。
服务器可以选择性地包括 Rate-Limit-Day-Reset 和 Rate-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-6d74226e7f00500 - 内部服务器错误
返回 Rapid API 或上游系统中的错误。如果给出了具体操作,请按照消息字段中的说明进行操作,否则,只需再次尝试使用相同的 affiliate_reference_id 发出请求。
Rapid API 检测到问题时会返回 HTTP 500,但无法更具体地说明具体问题是什么。所有合作伙伴在使用 Rapid API 时都会不时收到 500 错误代码响应。
使用不支持的销售网站(如叙利亚)也可能会发生 HTTP 500 错误。
如果您在除创建预订或取消预订以外的 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 或下游服务当前无法处理请求。造成这种情况的原因有很多,从暂时过载到与供应商的连接中断都有可能。
如果您在“创建预订”或“取消预订”以外的 API 响应中收到错误,并且没有已知的性能下降,请稍后重试您的请求。响应可能会包含一个 Retry-After 标头,指明再次尝试前的最短延迟时间(以秒为单位)。
如果您在创建预订时收到 API 响应中的错误:
- 您之前通过价格查询(住宿 API)或航班详情(航班 API)获取的预订链接会在短时间内过期。如果您在首次尝试后收到 HTTP 503 错误,则该链接可能已失效。请获取新链接并再次尝试进行预订。
- 如果您在第二次尝试时收到 503,请等待 90 秒,然后使用与预订一起发送的同一个
affiliate_reference_id,通过检索请求检查预订的状态。 - 如果未找到预订或持续收到 503 错误,请稍后重试预订。
如果您在取消预订时收到 API 响应错误:
- 等待 90 秒,然后使用已知的
itinerary_id,通过行程检索请求检查预订的状态。 - 如果预订未能取消或您持续收到 503 错误,请稍后重试取消请求。
响应示例:
{
"type": "service_unavailable",
"message": "This service is currently unavailable."
}504 - 网关超时
HTTP 504 错误通常不是来自 Rapid API,而是来自云或边缘基础设施,表明网络基础设施中的某个项目(例如负载均衡器)在事务处理期间发生故障。这通常是一种暂时性的事件。
注意: 超时可能发生在行程创建之前或之后,因此请务必检查行程是否已创建。
HTTP 504(和 502)错误响应采用 HTML 格式,而不是 Rapid API 的 JSON 类型/消息对象对。这进一步表明这些错误并非由 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 格式会在数据中添加不必要的行字符。


