CalryOTA Docs
Quote

Quote several rooms of one listing as a single order

Prices every room server-side and returns one signed token carrying the per-item breakdown. Reservation initiation reads prices from the token claims rather than from the request body, so the client never determines what is charged.

POST
/api/v1/quote/cart

Authorization

x-calry-api-key
x-calry-api-key<token>

In: header

Query Parameters

displayCurrency?string

Currency to display pricing in (ISO 4217)

Header Parameters

x-calry-tenant-id?string

Optional tenant ID to specify which tenant to operate as. Controls access to listings and affects quote creation. If not provided, the default tenant will be used.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

curl -X POST "https://example.com/api/v1/quote/cart" \  -H "Content-Type: application/json" \  -d '{    "listingID": "string",    "checkInDate": "2026-09-10",    "checkOutDate": "2026-09-13",    "items": [      {        "unitID": "3830fa58-8d6e-417f-8191-ebc7b3f1213f",        "guests": 2      }    ]  }'
{
  "quoteId": "q_abcdefghijklmnopqrstuv",
  "quoteExpiresAt": "string",
  "currency": "EUR",
  "items": [
    {
      "unitID": "string",
      "roomType": {},
      "guests": 0,
      "priceCents": 30250,
      "basePriceCents": 28000,
      "feePriceCents": 1500,
      "taxPriceCents": 750
    }
  ],
  "totalCents": 60500,
  "cartQuoteToken": "string",
  "cartQuoteTokenExpiresAt": "2026-09-10T12:15:00.000Z",
  "cancellationPolicy": {
    "policyID": "string",
    "name": "Moderate",
    "version": 0,
    "source": "LISTING_CHANNEL",
    "salesChannel": "direct",
    "timeZone": "Europe/Sofia",
    "fixedAt": "2026-10-20T12:00:00.000Z",
    "refundable": true,
    "refundableTag": "RFN",
    "freeCancellationUntil": "string",
    "penalties": [
      {
        "from": "2026-11-30T13:00:00.000Z",
        "percentage": 50,
        "amount": 117,
        "currency": "EUR"
      }
    ],
    "description": "Full refund if cancelled before 2026-11-30 15:00 (Europe/Sofia). No refund after that."
  }
}
Empty
{
  "timestamp": "2025-03-05T11:45:49.631Z",
  "path": "<URL_PATH>",
  "message": "Authentication failed",
  "details": []
}
Empty