Pricing & booking

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.

post/v1/checkout

Request

  • Base URL
    https://api.gojinko.com
  • URL
    https://api.gojinko.com/v1/checkout
  • Auth
    • API key in header X-API-Key
    • or HTTP bearer

Request body

trip_idstring required

Example request

{
  "trip_id": "trip_1048576",
  "intent": {
    "user_intent": "find a cheap flight to Tokyo"
  }
}

Response

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

quote_idstring 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.

quoted_cart_idinteger required

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

session_idstring

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

checkout_urlstring
statusstring

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

expires_atstring

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.

payment_type'intent' | 'checkout' | 'agent'

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.

Example response

{
  "quote_id": "2097152",
  "session_id": "cs_1048576",
  "checkout_url": "https://app.gojinko.com/checkout?t=<signed token>",
  "status": "ready",
  "expires_at": "2026-06-01T12:39:56Z",
  "payment_type": "intent",
  "total_amount": {
    "value": 41250,
    "currency": "USD",
    "decimal_places": 2,
    "display": "USD 412.50"
  },
  "total_amount_money": {
    "value": 41250,
    "currency": "USD",
    "decimal_places": 2,
    "display": "USD 412.50"
  },
  "items": [
    {
      "item_id": "itm_4b91c2",
      "kind": "flight",
      "offer_id": "htl_2d67a7441c60e5de",
      "trip_item_token": "of_9c1d2e:FARE_ABC",
      "hotel_id": "lp1f2c3",
      "booking_scope": "room_bundle",
      "num_rooms": 1,
      "rooms": [
        {
          "occupancy_number": 1,
          "room_name": "Superior Double",
          "board_type": "BB",
          "board_name": "Breakfast Included",
          "taxes_and_fees": [
            {
              "amount": 164.49,
              "currency": "EUR",
              "amount_money": {
                "value": 41250,
                "currency": "USD",
                "decimal_places": 2,
                "display": "USD 412.50"
              },
              "description": "19, VAT National taxes on accommodation",
              "included": true,
              "display": "EUR 164.49"
            }
          ],
          "policies": [
            {
              "fee_amount_money": {
                "value": 41250,
                "currency": "USD",
                "decimal_places": 2,
                "display": "USD 412.50"
              }
            }
          ],
          "cancellation_policy": [
            {
              "cancel_time": "2026-08-18T10:00:00+02:00",
              "amount": 606.13,
              "currency": "EUR",
              "type": "amount",
              "display": "EUR 606.13",
              "amount_money": {
                "value": 41250,
                "currency": "USD",
                "decimal_places": 2,
                "display": "USD 412.50"
              },
              "percent": 50,
              "nights": 1
            }
          ],
          "payment_types": [
            "pay_now"
          ]
        }
      ],
      "price": {
        "value": 41250,
        "currency": "USD",
        "decimal_places": 2,
        "display": "USD 412.50"
      },
      "price_money": {
        "value": 41250,
        "currency": "USD",
        "decimal_places": 2,
        "display": "USD 412.50"
      },
      "pax_count": 1,
      "available_ancillaries": [
        {
          "offer_id": "anc_3f9a1c27e4b8d051",
          "type": "bag",
          "label": "bag&1 x large 55 x 40 x 20 cm&Includes Speedy Boarding",
          "display_label": "bag, 1 x large 55 x 40 x 20 cm, Includes Speedy Boarding",
          "price_per_unit": {
            "value": 41250,
            "currency": "USD",
            "decimal_places": 2,
            "display": "USD 412.50"
          },
          "price_per_unit_money": {
            "value": 41250,
            "currency": "USD",
            "decimal_places": 2,
            "display": "USD 412.50"
          },
          "scope": "PER_PAX_PER_SEGMENT",
          "segment_ref_ids": [
            "seg_1"
          ],
          "seat_map": {
            "segment_ref_id": "seg_1",
            "flight_number": "W62202",
            "seats": [
              {
                "seat_number": "14A",
                "price": {
                  "value": 41250,
                  "currency": "USD",
                  "decimal_places": 2,
                  "display": "USD 412.50"
                },
                "price_money": {
                  "value": 41250,
                  "currency": "USD",
                  "decimal_places": 2,
                  "display": "USD 412.50"
                },
                "characteristics": [
                  "WINDOW"
                ]
              }
            ]
          },
          "per_pax": true,
          "max_quantity": 2,
          "paid_at": "now"
        }
      ],
      "selected_ancillaries": [
        {
          "offer_id": "anc_3f9a1c27e4b8d051",
          "traveler_ref": "pax_1",
          "pax_ref_id": "pax_1",
          "quantity": 1,
          "type": "seat",
          "seat_number": "14A",
          "segment_ref_ids": [
            "seg_1"
          ],
          "price": {
            "value": 41250,
            "currency": "USD",
            "decimal_places": 2,
            "display": "USD 412.50"
          },
          "price_money": {
            "value": 41250,
            "currency": "USD",
            "decimal_places": 2,
            "display": "USD 412.50"
          }
        }
      ],
      "price_changed": true,
      "original_price": {
        "value": 41250,
        "currency": "USD",
        "decimal_places": 2,
        "display": "USD 412.50"
      },
      "original_price_money": {
        "value": 41250,
        "currency": "USD",
        "decimal_places": 2,
        "display": "USD 412.50"
      },
      "price_change": {
        "original": {
          "value": 41250,
          "currency": "USD",
          "decimal_places": 2,
          "display": "USD 412.50"
        },
        "current": {
          "value": 41250,
          "currency": "USD",
          "decimal_places": 2,
          "display": "USD 412.50"
        },
        "delta": {
          "value": 41250,
          "currency": "USD",
          "decimal_places": 2,
          "display": "USD 412.50"
        },
        "original_money": {
          "value": 41250,
          "currency": "USD",
          "decimal_places": 2,
          "display": "USD 412.50"
        },
        "current_money": {
          "value": 41250,
          "currency": "USD",
          "decimal_places": 2,
          "display": "USD 412.50"
        },
        "delta_money": {
          "value": 41250,
          "currency": "USD",
          "decimal_places": 2,
          "display": "USD 412.50"
        }
      },
      "required_attributes": {
        "source": "provider",
        "per_passenger": [
          "PassportNumber",
          "PassportExpiryDate",
          "DateOfBirth"
        ],
        "booking": [
          "BillingAddress",
          "PostCode"
        ],
        "per_passenger_conditional": [
          "Nationality"
        ]
      },
      "hotel_terms": {
        "terms_as_of": "search",
        "taxes_breakdown": [
          {
            "amount": 164.49,
            "currency": "EUR",
            "amount_money": {
              "value": 41250,
              "currency": "USD",
              "decimal_places": 2,
              "display": "USD 412.50"
            },
            "description": "19, VAT National taxes on accommodation",
            "included": true,
            "display": "EUR 164.49"
          }
        ],
        "cancellation_schedule": [
          {
            "cancel_time": "2026-08-18T10:00:00+02:00",
            "amount": 606.13,
            "currency": "EUR",
            "type": "amount",
            "display": "EUR 606.13",
            "amount_money": {
              "value": 41250,
              "currency": "USD",
              "decimal_places": 2,
              "display": "USD 412.50"
            },
            "percent": 50,
            "nights": 1
          }
        ],
        "free_cancellation_until": "2026-08-18T10:00:00+02:00",
        "board_type": "RO",
        "board_name": "Room Only",
        "payment_types": [
          "pay_now"
        ],
        "room_name": "Superior Double",
        "room_capacity": 2
      }
    }
  ],
  "agent_spt_params": {
    "max_amount": 259449,
    "currency": "USD",
    "max_amount_money": {
      "value": 41250,
      "currency": "USD",
      "decimal_places": 2,
      "display": "USD 412.50"
    },
    "expires_at": "2026-06-10T13:04:56Z"
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.