Skip to main content
POST
Checkout a trip — returns a checkout URL the user opens to pay, plus the Shared Payment Token params an agent can use to pay programmatically
Starts pricing when no valid quote exists and waits server-side for up to about 55 seconds. If the quote is still being priced, answers 503 QUOTE_PENDING with Retry-After; calling checkout again picks up the same quote. A successful response contains the quoted prices and checkout details; no GET trip polling is required first. An offer that ran out may be found again and priced, and price_changed on the item reports a moved price. 410 OFFER_EXPIRED means the product can no longer be found, even when no quote has ever succeeded. Search again and replace the item. QUOTE_EXPIRED instead describes an established quote that can no longer be used: its deadline passed, or the trip’s travelers changed after it was priced (reason: travelers_changed). Call checkout again to re-quote. For card payments, collector identifies who charges the card (Jinko or the supplier), and submit_url is the payment hostname endpoint to POST the card to; cards are refused on this API.

Authorizations

X-API-Key
string
header
required

Body

application/json
trip_id
string
required
Example:

"trip_1048576"

intent
object

Response

Checkout result: the priced trip and how to pay for it

quote_id
string
required

The quote this checkout priced. Pass it as quote_id to the typed agent payment, or to the MCP submit_agent_payment, to pay exactly this quote.

Example:

"2097152"

quoted_cart_id
integer
required
deprecated

Deprecated: use quote_id instead. The same quote as an integer.

accepted_payment_types
object[]
required
session_id
string

The hosted payment page session behind checkout_url. Nothing on this API takes it; send the traveler to checkout_url.

Example:

"cs_1048576"

checkout_url
string
Example:

"https://app.gojinko.com/checkout?t=<signed token>"

status
string

Checkout state — "ready", "pending" or "failed".

Example:

"ready"

expires_at
string

When the quote behind this checkout lapses (RFC 3339). At most one hour from the call, and earlier when an offer in the trip carries a shorter deadline of its own (some airline fares last twenty minutes from their search). It is NOT a price hold: the supplier guarantees neither the price nor availability for the window, so an offer can lapse inside it. Nor is it the lifetime of checkout_url, which works for 7 days, or until 48 hours after the trip's booking ended when that comes first; POST /v1/checkout on the same trip gives a new link. With payment_stays_open, a payment is taken after this instant and the price and the product are checked again after it. If both held, the booking goes ahead. If the price dropped, the lower price is booked and charged, and price_change on booking.completed says so. If the price rose or the product is gone, nothing is booked or charged, and booking.failed says why. Without it, a payment after this instant is refused: POST /v1/agent_payment/submit answers 410 QUOTE_EXPIRED and no payment object is created. To recover, call POST /v1/checkout again on the same trip, and pay against the new expires_at. The hosted page then shows the price as expired, and the customer has to be sent a fresh checkout. A quote can also stop being payable before this instant if the trip's travelers change after pricing: payment is then refused with 410 QUOTE_EXPIRED and reason: travelers_changed.

Example:

"2026-06-01T12:39:56Z"

payment_stays_open
boolean

True when a payment of any type is still taken after expires_at, because the price and the product are checked after payment. Absent means a payment after expires_at is refused with 410 QUOTE_EXPIRED.

Example:

true

payment_type
enum<string>

Which payment rail this trip is on. None of the values means payment has been collected: checkout only prices the trip, and you must still act to get it paid. intent — nothing has been charged or authorized yet; this is what a trip created through this API returns. Send the traveler to checkout_url to pay on the Jinko checkout page, or pay programmatically with POST /v1/agent_payment/submit using a type listed in accepted_payment_types. checkout — a payment page is already open for this trip; send the traveler to checkout_url to complete it. agent — a programmatic payment was already submitted for this quote through POST /v1/agent_payment/submit; check its outcome before submitting again. To choose how to pay, read accepted_payment_types and agent_spt_params, not this field.

Available options:
intent,
checkout,
agent
Example:

"intent"

total_amount
object
deprecated

Deprecated: use total_amount_money instead. The trip total in major currency units.

total_amount_money
object

The trip total the checkout is priced at.

items
object[]
agent_spt_params
object

Parameters to scope a Shared Payment Token to, so an agent can pay programmatically instead of opening checkout_url: mint the token against these, then call POST /v1/agent_payment/submit with trip_id and the token. The currency is the trip currency: USD or EUR, depending on the partner's Stripe account binding. Absent when the partner does not accept SPT for this trip currency; use the returned accepted_payment_types to select an available payment method, or pay through checkout_url. The human checkout path ignores this object.