API referenceidentity
Elect money model
POST
/v1/activation/money-modelIdempotency-Key requiredAccepts bearer
Choose how the tenant pays suppliers — rail step 5
Elects WALLET (prepaid through Apiq's own credential sets; currency names the wallet's settlement currency and is required), OWN_ACCREDITATION (own IATA / ARC, BSP or ARC cash; the accreditation check…Show more
Elects WALLET (prepaid through Apiq's own credential sets; currency names the wallet's settlement currency and is required), OWN_ACCREDITATION (own IATA / ARC, BSP or ARC cash; the accreditation check routes to ops) or BYOC. A TRIAL tenant may elect again and the last election wins; once the tenant is LIVE a change is 409 CONFLICT details.reason MONEY_MODEL_LOCKED (an ops change). Human session only; Owner only (403 PERMISSION_DENIED details.reason OWNER_ONLY). Idempotency-Key required. Audited. CARD, pay each booking with a saved card or UPI method. currency is not read. Step money_model is done once the tenant has a saved method (POST /v1/payments/methods), needs_you (needs[] payment_method) until then; orders then pay with payment.mode SAVED_METHOD. Where the flag is off CARD is 400 VALIDATION details.field model. OWN_ACCREDITATION takes accreditationNumber (the IATA, ARC or TIDS number, at most 20 characters) and BYOC takes contractReference (the supplier contract or account reference, at most 200 characters); on the CAPPED flow each is required for its model (400 VALIDATION details.field naming it) and the election opens an operator approval of kind MONEY_MODEL_REVIEW (OpsApproval; scope.tenantId the tenant, effect the model and the reference). Step money_model then reads in_review and MoneyModelElection.reviewState PENDING until an operator decides: APPROVED completes the step, REJECTED returns it to needs_you (elect again). Each field is ignored for the other models; on NINE_STEP it is recorded for the ops check that already routes there. On CAPPED, WALLET is done with an elected currency and a wallet balance above zero (fund_wallet is not listed on CAPPED) and CARD with a saved method.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
- modelstringRequired
- WALLET
- OWN_ACCREDITATION
- BYOC
- CARD
- currencystringOptional
- accreditationNumberstringOptionalthe IATA, ARC or TIDS number, with OWN_ACCREDITATION (required for it on CAPPED); opens the MONEY_MODEL_REVIEW operator approval
- contractReferencestringOptionalthe supplier contract or account reference, with BYOC (required for it on CAPPED); opens the MONEY_MODEL_REVIEW operator approval
Responses
- 200The election as recordedMoneyModelElection
- 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 MONEY_MODEL_LOCKED — the tenant is LIVE; ask ops to change the money modelApiErrorResponse
- 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
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 The money model of a live tenant is changed by operations, not here. | 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 |