Skip to main content
POST
Exchange a car rental booking for a previewed alternative
Execute one previewed exchange. When the replacement costs the same or less, the booking is rewritten in this call and any difference is refunded to the original payment, or parked for manual review, flagged by refund_pending_review. When it costs more, the response is awaiting_payment: true with a checkout_url: send the customer there; the booking is rewritten only once the difference is paid, poll car_exchange_status. A provider rejection is a 200 with state: rejected and the booking stands as it was. Safe to call twice, a committed exchange is reported as it stands rather than repeated. 409 means the exchange cannot run as previewed: another exchange is in flight, or the preview / offer went stale, run a new preview.

Authorizations

X-API-Key
string
header
required

Body

application/json
booking_ref
string
required

Jinko booking reference from the confirmation email.

Minimum string length: 1
Example:

"JNK-8PT9VS"

last_name
string
required

Lead traveler's last name, exactly as on the booking.

Minimum string length: 1
Example:

"Carrard"

exchange_id
string
required

The "exc_…" reference from a preceding car_exchange_preview. Binds the commit to the prices the customer saw.

Minimum string length: 1
Example:

"exc_7c1e4b9a2d8f4e6b9a3c5d7e1f2a4b6c"

exchange_offer_token
string
required

The "cxo_…" token of the chosen offer from that same preview.

Minimum string length: 1
Example:

"cxo_3f9a1c7e5b2d4a8c6e1f3b5d7a9c2e4f"

intent
object

Response

Exchange result

exchange_id
string
Example:

"exc_7c1e4b9a2d8f4e6b9a3c5d7e1f2a4b6c"

state
string

One of preview (previewed, nothing committed), awaiting_payment, processing, confirmed, rejected, failed.

Example:

"confirmed"

delta
object

The price difference between a candidate and what was already paid, and which way the money moves. Compared against paid on the preview, never against the candidate total.

new_total
object

The replacement rental's pay-now total.

paid
object

What the customer had paid before the exchange.

refund_pending_review
boolean

true means the booking IS exchanged but the refund of the difference needs manual review before it is issued.

stripe_refund_id
string
rejected_reason
string

Why the provider declined the exchange. The booking stands as it was.

completed_at
string

RFC 3339, set once the attempt is terminal.

Example:

"2026-09-02T15:18:00Z"

awaiting_payment
boolean

true means the replacement costs more and the difference must be paid first: send the customer to checkout_url. The booking is rewritten only after the payment is authorized — poll car_exchange_status.

checkout_url
string

Hosted payment page for the price difference. Present only while awaiting_payment.

Example:

"https://book.gojinko.com/checkout?sid=1048576"

stripe_checkout_url
string

The Stripe Checkout session behind checkout_url, for callers that redirect to Stripe directly.