Connect contract card
Read this card every session. Do not invent fields from memory. Machine copy: AGENTS.md · index: llms.txt.
Auth and hosts
- Header:
Authorization: ApiKey sk_test_*orsk_prod_*. There are nohotels:search/hotels:bookscopes. - Test:
https://test-api.bundleport.comwithsk_test_*only. - Production:
https://api.bundleport.comwithsk_prod_*only. - Do not mix keys and hosts.
Handoff (copy fields literally)
| From | Field | Into |
|---|---|---|
Search options[] | id | Quote criteria.optionRefId |
Quote optionQuote | optionRefId | Book input.optionRefId |
Book booking.reference | bookingID | Detail / cancel bookingID |
| Cancel | cancelReference | Persist; confirm status via detail |
There is no bookingReference. Do not pass search id to book after a successful quote.
Errors
- Connect Hotels transactional failures: HTTP 200 +
errors[]withERR_CODE_*/ERR_TYPE_*. Always inspecterrorswhenresponse.ok. - Gateway: HTTP
401/403/429/5xx. Body is not aggregatorerrors[]. - Search / SSE saturated: HTTP
503{ "error": "aggregator saturated", "code": "RESOURCE_EXHAUSTED" }on/availabilityand/availability/_streamonly. Quote/book/cancel do not use this admission gate. - Book JSON shape: HTTP
400{ "code": "invalid_argument", "message" }(non-arrayrooms/remarks, orclientReferencelonger than 20 characters). - Content catalog: HTTP
400/404/500+errors[]. Hotels booking has no HTTP 404. - There is no
PRICE_CHANGED,NO_AVAILABILITY,CONFIRMED, orerror_categoryon Hotels JSON. - Follow
additionalData.recommended_actionwhen present. Hints match top-leveldescriptiononly.
Identifiers and status (strings as on the wire)
- Quote
optionQuote.status:STATUS_TYPE_OKorSTATUS_TYPE_RQonly. - Book/detail/list
booking.status:BOOK_STATUS_TYPE_OK,BOOK_STATUS_TYPE_KO,BOOK_STATUS_TYPE_ON_REQUEST,BOOK_STATUS_TYPE_CANCELLED,BOOK_STATUS_TYPE_UNKNOWN,BOOK_STATUS_TYPE_PENDING_COMMIT. There is noBOOK_STATUS_TYPE_RQ(RQis quote-only). - Never invent
PENDINGorCONFIRMED.
Timeouts
settings.timeoutis milliseconds.- Search default 10s (max 60s). Book floor 90s (values below 90000 ms are raised). Cancel floor 60s (values below 60000 ms are raised). Quote floor 2s.
- Your HTTP client must outlive
settings.timeout.
Forbidden inventions
- Book response fields
hotel,holder,stay(holder androoms[].paxesare request only). - Official npm/pypi HTTP SDKs (
@bundleport/connect-hotels-sdk,bundleport-connect-hotels). - Buyer booking webhooks. Poll
bookingdetailforBOOK_STATUS_TYPE_ON_REQUEST. - GraphQL as a buyer Hotels surface.
OpenAPI (codegen)
- Booking:
https://docs.bundleport.com/openapi/hotels.yaml - Content:
https://docs.bundleport.com/openapi/content.yaml
HTML reference: Booking API · Content API.
Runtime agents vs codegen
- Codegen / IDE: this card + OpenAPI. Write
fetch/httpx/net/http. Credentials stay in the buyer’s env. - Runtime booking: MCP Streamable HTTP (
availability→quote→book→bookingDetail→cancel) athttps://api.connect.bundleport.com/mcp. Same identifiers as REST. Not a substitute for OpenAPI.
Console (ops, not the wire)
Business Analytics, API Performance, Log & Audit. error_category appears there only.