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. A supplier offer rejected as expired or missing during pricing returns 410 OFFER_EXPIRED, 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.

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 stops being payable (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) — pay before it passes. 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 stays openable longer. After this instant the platform REFUSES to take payment rather than charging a stale price: 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 — it re-quotes at the current price — and pay against the new expires_at. The hosted page cannot recover on its own: past this instant it shows the price as expired and the customer has to be sent a fresh checkout. The 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_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.