Skip to main content

Hold and pay (JSON)

Book without collecting payment, then confirm the hold later. Continues from a priced offer (steps 1–2 of Make a test booking).

Currency is USD; use the sandbox Visa test card when paying — see payments.

Step 1 — Create on hold

POST /json/v1/orders

Same passengers and contacts as a paid create, but payment is { "type": "Hold" }:

Request
{
"offerId": "OF-5cee97a8-d446-461b-91c6-4c9c5565ba04",
"offerItemIds": ["OFI-5cee97a8-d446-461b-91c6-4c9c5565ba04-0"],
"offerItemSelections": [
{
"offerItemId": "OFI-5cee97a8-d446-461b-91c6-4c9c5565ba04-0",
"passengerIds": ["PX1"]
}
],
"passengers": [
{
"passengerId": "PX1",
"type": "ADT",
"name": { "givenName": "Jane", "surname": "Doe" },
"dateOfBirth": "1980-01-01",
"gender": "Female"
}
],
"contact": {
"emailAddress": "[email protected]",
"phoneNumber": "8015551212"
},
"payment": { "type": "Hold" }
}

Success returns 201 with statusCode: "ONHOLD", a paymentTimeLimit, and balanceDue equal to the order total. Capture orderId for the next steps.

Response — 201 Created (trimmed)
{
"data": {
"order": {
"orderId": "MX7NDN465E71",
"recordLocator": "E2BL5F",
"statusCode": "ONHOLD",
"paymentTimeLimit": "2026-08-18T23:59:00Z",
"balanceDue": { "amount": 59, "currency": "USD" },
"totalPrice": {
"total": { "amount": 59, "currency": "USD" }
}
},
"payments": []
},
"error": null
}

Step 2 — Retrieve (optional)

GET /json/v1/orders/MX7NDN465E71?ownerCode=MX

Confirms the hold is still open and shows the outstanding balanceDue before you pay.

Step 3 — Confirm with payment

PATCH /json/v1/orders/MX7NDN465E71

ConfirmHold plus a card payment for the balance due:

Request
{
"changes": [{ "type": "ConfirmHold" }],
"payment": {
"type": "CreditCard",
"cardType": "VI",
"cardNumber": "4111111111111111",
"expiryDate": "1227",
"securityCode": "123",
"payer": {
"name": { "givenName": "Jane", "surname": "Doe" },
"postalAddress": {
"line1": "123 Main St",
"city": "Los Angeles",
"stateProvince": "California",
"postalCode": "90210",
"countryCode": "US"
}
}
}
}

The order flips to CONFIRMED with balanceDue of 0 and a successful payment row.

Response — 200 OK (trimmed)
{
"data": {
"order": {
"orderId": "MX7NDN465E71",
"statusCode": "CONFIRMED",
"balanceDue": { "amount": 0, "currency": "USD" }
},
"payments": [
{
"paymentId": "PAY-MQ",
"amount": { "amount": 59, "currency": "USD" },
"statusCode": "SUCCESSFUL",
"method": {
"type": "CreditCard",
"cardBrandCode": "VI"
}
}
]
},
"error": null
}

Notes

  • Pay before paymentTimeLimit or the hold expires and cannot be confirmed.
  • To drop a hold without paying, use CancelUnpaidOrder — see change order.
  • Ancillary seats/services can be added while on hold; they increase balanceDue and are collected when you confirm (or rejected if you try to confirm without covering the new total).

XML counterpart: Hold and pay (XML).