Payments & currency
Payment and currency rules are the same on the JSON and NDC/XML surfaces — only the wire shape differs. See create order / OrderCreate and change order / OrderChange for the request envelopes.
Currency
USD only. Send USD on offer search (currency in JSON; ResponseParameters > CurParameter > CurCode
in XML) and expect every monetary amount in responses to carry currency / CurCode USD.
Any other currency code is rejected (ERR-1004). Multi-currency settlement is not available yet.
Accepted payment methods
| Method | When to use it | JSON | XML |
|---|---|---|---|
| Hold | Book without collecting payment; order stays ONHOLD until paid or cancelled. Subject to a payment time limit. | { "type": "Hold" } (required — JSON has no implicit hold) | Omit PaymentFunctions |
| Credit card | Collect payment now, or confirm a hold. | payment.type: "CreditCard" | PaymentFunctions > PaymentProcessingDetails > PaymentMethod > PaymentCard |
On create and change, card payments that create a positive balance must cover the live amount due.
XML states that amount on PaymentProcessingDetails > Amount (and optionally
TotalOfferPriceAmount on create); a mismatch is rejected with ERR-3006 and nothing is charged.
Walkthrough: Hold and pay (JSON) · Hold and pay (XML).
Card brands
Accepted brands (also echoed on priced offers as paymentFunctions):
| Code | Brand |
|---|---|
VI | Visa |
CA | Mastercard |
AX | American Express |
DS | Discover |
Unsupported brands return ERR-6001.
Credit card fields
| Field | Notes |
|---|---|
cardType / CardBrandCode | One of the brand codes above. |
cardNumber / CardNumber | Full card number. |
expiryDate / ExpirationDate | MMYY (for example 1227). |
securityCode / CardSecurityCode | Optional CVV. |
payer / Payer | Required: cardholder name plus postal address (line1, city, stateProvince, postalCode, countryCode). |
Test card (sandbox)
In the test environment only, use this Visa card — no real charge is made:
| Number | 4111111111111111 |
| Brand | VI |
| Expiry | any future MMYY (examples use 1227) |
| Security code | any 3 digits (examples use 123) |
Do not send this PAN against production.
What goes where
| Intent | Put it here | Not here |
|---|---|---|
| Currency for a search | Offer search currency / CurCode | Payment object (amounts inherit the offer currency) |
| Hold a booking | JSON payment: { "type": "Hold" }; XML omit PaymentFunctions | Empty payment object, or omitting payment on JSON create |
| Pay now / confirm a hold | JSON payment on create or change; XML PaymentFunctions | Passenger or contact objects |
| Cardholder billing address | payment.payer.postalAddress / Payer > PaymentAddress | Booking contacts[] postal address (different purpose) |
| Booking notification email/phone | Contacts | Payment payer |