API referenceidentity
Create limit request
POST
/v1/activation/limit-requestsIdempotency-Key requiredAccepts bearer
Ask for a higher daily limit — opens an ops approval
Files a request to raise the daily cap of a LIVE_CAPPED tenant and opens an operator approval of kind TIER_LIMIT_RAISE.Show more
Files a request to raise the daily cap of a LIVE_CAPPED tenant and opens an operator approval of kind TIER_LIMIT_RAISE. Approving it raises the cap to requestedCap and marks the request APPROVED; rejecting it marks it REJECTED; either emits a limit.request_decided notification. One open request at a time: another while one is PENDING is 409 CONFLICT details.reason LIMIT_REQUEST_OPEN (details.requestId names it). A tenant whose tier carries no daily cap is 409 CONFLICT details.reason TENANT_NOT_CAPPED. dailyCap must be in the current cap's currency (400 VALIDATION details.reason CURRENCY_MISMATCH) and above the current cap (400 VALIDATION details.field dailyCap.amount). Human session only; Owner only (403 PERMISSION_DENIED details.reason OWNER_ONLY). Idempotency-Key required. Audited (activation.limit_requested). 501 NOT_IMPLEMENTED details.reason CAPPED_FLOW_UNAVAILABLE also covers a deployment where the ops approval queue is not running, so no TIER_LIMIT_RAISE approval could be opened; nothing is filed.Headers
- Idempotency-KeystringRequired
Mandatory on mutations: **48h TTL**; replay with same body-hash returns the original response with Idempotency-Replayed true; same key + different body is 409 IDEMPOTENCY_CONFLICT; in-flight duplicate…Show more
Mandatory on mutations: **48h TTL**; replay with same body-hash returns the original response with Idempotency-Replayed true; same key + different body is 409 IDEMPOTENCY_CONFLICT; in-flight duplicate is 409 IDEMPOTENCY_IN_PROGRESS.
Request body
- dailyCapMoneyRequiredInteger minor units + ISO-4217, never floats (platform law)
5 child attributes
- amountintegerRequiredMinor units
- currencystringRequiredISO-4217
- fxAppliedbooleanOptionalTrue when the amount was converted from the supplier's currency.
- fxSnapshotIdstringOptionalThe exchange-rate snapshot the amount was converted with, fixed when the price was quoted.
- breakdownarray of PriceBreakdownLineOptional
Sell-side component lines summing to amount; the platform may send it empty.Show more
Sell-side component lines summing to amount; the platform may send it empty. One line shape everywhere — the same PriceBreakdownLine the rule simulation answers. Never carries a supplier net.13 child attributes
- typestringRequiredThe kind of line, for example BASE, TAX, FEE or DISCOUNT.
- amountintegerRequiredMinor units
- feeTypestringOptionalFor FEE lines produced by a FEE_LINE rule — the tenant's fee label
- labelstringOptionalDisplay label in the request locale
- taxComponentstringOptionalFor GST / TAX lines — CGST | SGST | IGST | UTGST | CESS | VAT | SALES_TAX | OCCUPANCY_TAX; open string
- taxCodeTaxCodeOptionalThe statutory classification of a taxed line (SAC/HSN in India, VAT codes elsewhere)
2 child attributes
- schemestringRequiredSAC | HSN | VAT | GST | OTHER; open string
- codestringRequiredThe tax code, for example a SAC or HSN code in India or a VAT code elsewhere.
- rateBasisPointsintegerOptionalThe tax or fee rate in basis points when the line is rate-based (1800 = 18%)
- collectedBystringOptionalPLATFORM | SUPPLIER | PROPERTY — who takes the money; a non-PLATFORM line outside Offer.price is a pay-at-property disclosure
- payableAtstringOptionalBOOKING | PROPERTY | DESK | AFTER_SERVICE
- includedbooleanOptionalTrue when the line is inside the enclosing amount (default); false for a disclosed line outside it
- quantityintegerOptionalHow many units the line covers, when more than one.
- unitAmountintegerOptionalMinor units per unit when quantity is given
- currencystringOptional
ISO-4217 code of this line's amount and unitAmount.Show more
ISO-4217 code of this line's amount and unitAmount. Set ONLY on a disclosed line (included false) that is NOT in the enclosing price's currency, for example a resort fee payable at the property in its local currency. Absent means the enclosing price's currency, as before; a line inside the total never carries it.
- reasonstringRequired
Responses
- 201The request, PENDING an operator's decisionLimitRequest
- 400VALIDATION or UNKNOWN_DOMAINApiErrorResponse
- 401ApiErrorResponse
UNAUTHENTICATED — missing or expired token.Show more
UNAUTHENTICATED — missing or expired token. Declared on every operation because `security` is declared globally at the document root: every route is authenticated, so every route can answer 401. - 403ApiErrorResponse
- 405ApiErrorResponse
VALIDATION — the public edge serves GET, POST, PUT, PATCH and DELETE only; any other method is refused before the platform sees it (details.reason METHOD_NOT_ALLOWED, details.source edge).Show more
VALIDATION — the public edge serves GET, POST, PUT, PATCH and DELETE only; any other method is refused before the platform sees it (details.reason METHOD_NOT_ALLOWED, details.source edge). Not retryable as sent. - 409CONFLICT LIMIT_REQUEST_OPEN or TENANT_NOT_CAPPED; or IDEMPOTENCY_CONFLICTApiErrorResponse
- 413ApiErrorResponse
VALIDATION — the request body is larger than the surface's limit.Show more
VALIDATION — the request body is larger than the surface's limit. Not retryable as sent: shrink the body. Declared on every operation that takes a request body. details carries exactly one key, maxBodyBytes (integer): the limit that applies to this surface, in bytes. - 414ApiErrorResponse
VALIDATION — the request URI (path and query string) is longer than 8 KiB; the public edge refuses it before the platform sees it (details.reason URI_TOO_LONG, details.source edge).Show more
VALIDATION — the request URI (path and query string) is longer than 8 KiB; the public edge refuses it before the platform sees it (details.reason URI_TOO_LONG, details.source edge). Not retryable as sent: send long input in the body of a POST. - 415ApiErrorResponse
VALIDATION — a request body that is not JSON (application/json or application/*+json; a form body only on the OAuth token routes).Show more
VALIDATION — a request body that is not JSON (application/json or application/*+json; a form body only on the OAuth token routes). The public edge refuses it before the platform sees it (details.reason UNSUPPORTED_MEDIA_TYPE, details.source edge). Not retryable as sent: send Content-Type application/json. Declared on every operation that takes a JSON request body. - 500INTERNAL — a bug, and traceId is the support handle.ApiErrorResponse
- 501Not retryable; the nine-step rail of GET /v1/activation is unchanged.ApiErrorResponse
Errors you should handle
Branch on code and honour retryable — never on the HTTP status alone.
| 400 | VALIDATION message.intent.checkOut must be after message.intent.checkIn | not retryable |
| 400 | UNKNOWN_DOMAIN Unknown domain 'HOTELS'. Did you mean HTL? | not retryable |
| 401 | UNAUTHENTICATED The bearer token is expired. Re-authenticate and retry. | not retryable |
| 403 | PERMISSION_DENIED Reading wallets needs the finance:read permission. | not retryable |
| 405 | VALIDATION This method is not served. | not retryable |
| 409 | CONFLICT A request for a higher limit is already waiting for a decision. | not retryable |
| 409 | IDEMPOTENCY_CONFLICT Idempotency-Key 7f0c33d1-9a1e-4d2c-9f77-1c0f2b3a4d55 was used with a different body; never executed | not retryable |
| 413 | VALIDATION The request body is larger than this API accepts (262144 bytes). | not retryable |
| 414 | VALIDATION The request URI is longer than 8 KiB. | not retryable |
| 415 | VALIDATION Send application/json. | not retryable |
| 500 | INTERNAL An unexpected error occurred. Quote the traceId to support. | retryable |
| 501 | NOT_IMPLEMENTED The capped activation flow is not available on this deployment. | not retryable |