Skip to main content

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

MethodWhen to use itJSONXML
HoldBook 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 cardCollect 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):

CodeBrand
VIVisa
CAMastercard
AXAmerican Express
DSDiscover

Unsupported brands return ERR-6001.

Credit card fields

FieldNotes
cardType / CardBrandCodeOne of the brand codes above.
cardNumber / CardNumberFull card number.
expiryDate / ExpirationDateMMYY (for example 1227).
securityCode / CardSecurityCodeOptional CVV.
payer / PayerRequired: 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:

Number4111111111111111
BrandVI
Expiryany future MMYY (examples use 1227)
Security codeany 3 digits (examples use 123)

Do not send this PAN against production.

What goes where

IntentPut it hereNot here
Currency for a searchOffer search currency / CurCodePayment object (amounts inherit the offer currency)
Hold a bookingJSON payment: { "type": "Hold" }; XML omit PaymentFunctionsEmpty payment object, or omitting payment on JSON create
Pay now / confirm a holdJSON payment on create or change; XML PaymentFunctionsPassenger or contact objects
Cardholder billing addresspayment.payer.postalAddress / Payer > PaymentAddressBooking contacts[] postal address (different purpose)
Booking notification email/phoneContactsPayment payer