Skip to main content

Endpoint

POST /api/quote
POST /api/quote/tgx exists in controller but is not implemented yet. Use /api/quote.

Authentication

  • Required header: api-key: <partner-api-key>
  • Required body field: settings.access.code

Headers

HeaderRequiredDescription
Content-TypeYesapplication/json
api-keyYesPartner API key
connection-codeOptionalAuto-filled from body
session-idOptionalAuto-generated if missing

Request Body

Top-level fields

FieldTypeRequiredNotes
quoteCriteriaobjectYesSelected option context
settingsobjectYesMust include access.code
distributionContextobjectNoOptional
requestFromPortalbooleanNoDefault false

quoteCriteria fields

FieldTypeRequiredNotes
optionIdstringYesFrom search response option ID
accommodation.typestringNoDefault Hotel
accommodation.codestringYesMust match cached search option
occupancies[]arrayYesMust match cached search occupancy snapshot
occupancies[].occupancyIdnumberNoOptional
occupancies[].paxes[]arrayYesGuest list
occupancies[].paxes[].agenumberYesGuest age
occupancies[].paxes[].nationalitystringNoGuest nationality
marketstringNoMarket code
paymentTypestringNoDefaults to MerchantPay
parameters[]arrayNoAdditional parameter list
parameters[].keynumberYesParameter key
parameters[].valuestringYesParameter value
parameters[].parameterTypestringNoOptional
parameters[].immutablebooleanNoOptional
parameters[].roomIdnumberNoOptional
checkInstringYesMust match search
checkOutstringYesMust match search
languagestringNoOptional
currencystringNoOptional
nationalitystringNoOptional

Example Request

{
  "quoteCriteria": {
    "optionId": "177f8ec3-6d98-4a2f-8567-5c45eddb0ead",
    "accommodation": {
      "type": "Hotel",
      "code": "6475503709317edd78e1dbd9"
    },
    "occupancies": [
      {
        "occupancyId": 1,
        "paxes": [
          { "age": 30, "nationality": "US" },
          { "age": 28, "nationality": "US" }
        ]
      }
    ],
    "checkIn": "2026-03-01",
    "checkOut": "2026-03-03",
    "language": "EN",
    "currency": "USD",
    "nationality": "US"
  },
  "settings": {
    "access": { "code": 10001 }
  }
}

Success Response

{
  "data": {
    "id": "cb4af805-08aa-4ec4-9f90-a8b94e6d9d54",
    "accommodation": {
      "accommodationCode": "6475503709317edd78e1dbd9",
      "accommodationName": "Comfort Inn & Suites",
      "accommodationType": "Hotel",
      "location": {
        "country": "US",
        "longitude": -81.90058,
        "latitude": 41.41568
      }
    },
    "occupancies": [
      {
        "occupancyId": 1,
        "paxes": [{ "age": 30 }, { "age": 28 }]
      }
    ],
    "checkIn": "2026-03-01",
    "checkOut": "2026-03-03",
    "boardCode": "RO",
    "boardName": "Room Only",
    "isRefundable": true,
    "rate": {
      "currency": "USD",
      "baseRate": 120.0,
      "taxesAndFees": 18.5,
      "chargeTotal": 138.5
    },
    "cancelPolicy": {
      "refundable": true,
      "cancelPenalties": [
        {
          "penaltyType": "IMPORT",
          "currency": "USD",
          "deadline": "2026-02-28T23:59:59Z",
          "value": 50
        }
      ]
    },
    "rooms": [
      {
        "occupancyRefId": 1,
        "code": "DBL",
        "description": "Double Room",
        "rate": {
          "currency": "USD",
          "baseRate": 120.0,
          "taxesAndFees": 18.5,
          "chargeTotal": 138.5
        }
      }
    ],
    "requestId": "req_quote_64f5..._1739260000000_91234",
    "responseTime": 81
  },
  "message": "success"
}

Response Fields

FieldTypeNotes
data.idstringQuote reference (quoteId) for book
data.accommodationobjectAccommodation summary
data.occupancies[]arrayNormalized occupancy output
data.checkInstringCheck-in date
data.checkOutstringCheck-out date
data.roomCodes[]string[]Optional room code list
data.roomNames[]string[]Optional room name list
data.boardCodestringOptional board code
data.boardNamestringOptional board name
data.isRefundablebooleanOptional refundable flag
data.rateobjectQuote-level pricing
data.cancelPolicyobjectQuote-level cancellation policy
data.rooms[]arrayRoom-level pricing details
data.requestIdstringTrace ID
data.responseTimenumberMilliseconds

Validation Behavior

  • optionId must exist and not be expired (search cache key)
  • accommodation.code must match cached option payload
  • checkIn/checkOut must match cached option payload
  • occupancies must match cached payload snapshot
  • If supplier quote price increased beyond tolerance, API returns 400 Price changed

Rate Limit Headers

/quote includes:
  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset
  • Retry-After when limited (429)

Common Errors

  • 400 optionRefId is required
  • 400 Option reference expired or invalid
  • 400 Option reference invalid
  • 400 Accommodation code mismatch
  • 400 Stay dates mismatch
  • 400 Occupancy details mismatch
  • 400 Room is unavailable
  • 400 Price changed
  • 403 Invalid connection code.