curl --request GET \
--url https://api.gojinko.com/v1/trip/{trip_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.gojinko.com/v1/trip/{trip_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.gojinko.com/v1/trip/{trip_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gojinko.com/v1/trip/{trip_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gojinko.com/v1/trip/{trip_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.gojinko.com/v1/trip/{trip_id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/trip/{trip_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"trip_id": "trip_1048576",
"seat_map_url": "<string>",
"payment_attempt": {
"payment_attempt_id": "<string>",
"trip_id": "trip_1048576",
"quote_id": "2097152",
"quoted_cart_id": 123,
"payment_status": "not_started",
"booking_status": "<string>",
"payment_error": {
"code": "CREDENTIAL_FORMAT_INVALID",
"message": "<string>"
},
"recovery": {
"action": "poll",
"replacement_credential_required": true
},
"recovery_status": "automatic",
"fulfillment_cart_id": 123,
"failure_reason": "booking_not_created",
"items": [
{
"item_id": 123,
"outcome": "<string>",
"booked_item_id": "itm_aaaaaaaaaaaaafhuxsdxpbzrbfz5hm3a",
"failure_reason": "booking_not_created"
}
],
"booking_ref": "<string>",
"quote_expires_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 123,
"authentication": {
"url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
},
"money": {
"authorized": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"captured": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"released": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"refunded": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"externally_reimbursed": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"resolution_status": "pending",
"refund_reference": "<string>"
}
},
"status": "draft",
"travelers": [
{
"traveler_ref": "pax_1",
"pax_ref_id": "pax_1",
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "1990-01-15",
"gender": "MALE",
"traveler_type": "adult",
"passenger_type": "ADULT",
"identity_documents": {
"passport": {
"status": "saved",
"invalid_fields": [
"passport_expiry"
]
},
"known_traveler_number": {
"status": "saved",
"invalid_fields": [
"passport_expiry"
]
},
"redress_number": {
"status": "saved",
"invalid_fields": [
"passport_expiry"
]
}
}
}
],
"contact": {
"email": "<string>",
"phone": "<string>",
"title": "<string>"
},
"hotel_room_guests": {},
"items": [
{
"item_id": "itm_4b91c2",
"kind": "flight",
"offer_id": "htl_2d67a7441c60e5de",
"trip_item_token": "of_9c1d2e:FARE_ABC",
"hotel_id": "lp1f2c3",
"special_requests": [
"<string>"
],
"booking_scope": "room_bundle",
"num_rooms": 1,
"rooms": [
{
"occupancy_number": 1,
"occupancy": {
"adults": 2,
"children_ages": [
8
]
},
"room_id": "<string>",
"mapped_room_id": 123,
"room_name": "Superior Double",
"rate_id": "<string>",
"board_type": "BB",
"board_name": "Breakfast Included",
"max_occupancy": 123,
"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": [
{
"type": "<string>",
"description": "<string>",
"fee_amount": 123,
"fee_currency": "<string>",
"fee_amount_money": {
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
}
}
],
"is_refundable": true,
"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
}
],
"free_cancellation_until": "<string>",
"payment_types": [
"pay_now"
],
"remarks": "<string>"
}
],
"price": {
"amount": 123,
"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",
"description": "<string>",
"price_per_unit": {
"amount": 123,
"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",
"available": true,
"chargeable": true,
"price": {
"amount": 123,
"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"
]
}
]
},
"seat_map_status": "pending",
"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": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"price_money": {
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"status": "pending",
"not_charged": true,
"failure_reason": "<string>"
}
],
"price_changed": true,
"original_price": {
"amount": 123,
"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": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"current": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"delta": {
"amount": 123,
"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"
],
"booking_conditional": [
"<string>"
]
},
"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",
"is_refundable": false,
"board_type": "RO",
"board_name": "Room Only",
"payment_types": [
"pay_now"
],
"room_name": "Superior Double",
"room_capacity": 2
}
}
],
"total_amount": {
"amount": 123,
"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"
},
"quote": {
"quote_id": "2097152",
"status": "quoted",
"expires_at": "2026-06-01T13:04:56Z"
},
"fulfillment": {
"fulfillment_cart_id": 123,
"status": "<string>",
"phase": "<string>",
"failure_reason": "price_changed",
"scheduled_at": "2026-06-01T12:35:00Z"
},
"booking_state": "processing",
"booking_ref": "JNK-XEVGW5",
"bookings": [
{
"item_id": "itm_4b91c2",
"kind": "flight",
"supplier_references": [
{
"issuer": "AF",
"reference": "XM9L2K"
}
],
"booking_reference": "8Q69NYQTT",
"pnr": "XM9L2K",
"offer_id": "htl_2d67a7441c60e5de",
"trip_item_token": "of_9c1d2e:FARE_ABC",
"hotel_id": "lp1f2c3",
"special_requests": [
"<string>"
]
}
],
"created_at": "2026-06-01T12:30:00Z",
"updated_at": "2026-06-01T12:34:56Z"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Malformed JSON in request body.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "CONFLICT",
"message": "The operation conflicts with the current state of the resource.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "GONE",
"message": "The resource no longer exists.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "A required field is missing or invalid.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The request was declined for this offer. Try another offer.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The service is temporarily unavailable. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The request timed out before a result was available. Retry the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}trip-status
Fetch the full lifecycle state of a trip, items, travelers, quote, fulfillment, and any booking references
curl --request GET \
--url https://api.gojinko.com/v1/trip/{trip_id} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.gojinko.com/v1/trip/{trip_id}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.gojinko.com/v1/trip/{trip_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gojinko.com/v1/trip/{trip_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gojinko.com/v1/trip/{trip_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.gojinko.com/v1/trip/{trip_id}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/trip/{trip_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"trip_id": "trip_1048576",
"seat_map_url": "<string>",
"payment_attempt": {
"payment_attempt_id": "<string>",
"trip_id": "trip_1048576",
"quote_id": "2097152",
"quoted_cart_id": 123,
"payment_status": "not_started",
"booking_status": "<string>",
"payment_error": {
"code": "CREDENTIAL_FORMAT_INVALID",
"message": "<string>"
},
"recovery": {
"action": "poll",
"replacement_credential_required": true
},
"recovery_status": "automatic",
"fulfillment_cart_id": 123,
"failure_reason": "booking_not_created",
"items": [
{
"item_id": 123,
"outcome": "<string>",
"booked_item_id": "itm_aaaaaaaaaaaaafhuxsdxpbzrbfz5hm3a",
"failure_reason": "booking_not_created"
}
],
"booking_ref": "<string>",
"quote_expires_at": "2023-11-07T05:31:56Z",
"retry_after_seconds": 123,
"authentication": {
"url": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
},
"money": {
"authorized": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"captured": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"released": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"refunded": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"externally_reimbursed": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"resolution_status": "pending",
"refund_reference": "<string>"
}
},
"status": "draft",
"travelers": [
{
"traveler_ref": "pax_1",
"pax_ref_id": "pax_1",
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "1990-01-15",
"gender": "MALE",
"traveler_type": "adult",
"passenger_type": "ADULT",
"identity_documents": {
"passport": {
"status": "saved",
"invalid_fields": [
"passport_expiry"
]
},
"known_traveler_number": {
"status": "saved",
"invalid_fields": [
"passport_expiry"
]
},
"redress_number": {
"status": "saved",
"invalid_fields": [
"passport_expiry"
]
}
}
}
],
"contact": {
"email": "<string>",
"phone": "<string>",
"title": "<string>"
},
"hotel_room_guests": {},
"items": [
{
"item_id": "itm_4b91c2",
"kind": "flight",
"offer_id": "htl_2d67a7441c60e5de",
"trip_item_token": "of_9c1d2e:FARE_ABC",
"hotel_id": "lp1f2c3",
"special_requests": [
"<string>"
],
"booking_scope": "room_bundle",
"num_rooms": 1,
"rooms": [
{
"occupancy_number": 1,
"occupancy": {
"adults": 2,
"children_ages": [
8
]
},
"room_id": "<string>",
"mapped_room_id": 123,
"room_name": "Superior Double",
"rate_id": "<string>",
"board_type": "BB",
"board_name": "Breakfast Included",
"max_occupancy": 123,
"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": [
{
"type": "<string>",
"description": "<string>",
"fee_amount": 123,
"fee_currency": "<string>",
"fee_amount_money": {
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
}
}
],
"is_refundable": true,
"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
}
],
"free_cancellation_until": "<string>",
"payment_types": [
"pay_now"
],
"remarks": "<string>"
}
],
"price": {
"amount": 123,
"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",
"description": "<string>",
"price_per_unit": {
"amount": 123,
"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",
"available": true,
"chargeable": true,
"price": {
"amount": 123,
"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"
]
}
]
},
"seat_map_status": "pending",
"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": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"price_money": {
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"status": "pending",
"not_charged": true,
"failure_reason": "<string>"
}
],
"price_changed": true,
"original_price": {
"amount": 123,
"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": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"current": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2,
"display": "USD 412.50"
},
"delta": {
"amount": 123,
"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"
],
"booking_conditional": [
"<string>"
]
},
"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",
"is_refundable": false,
"board_type": "RO",
"board_name": "Room Only",
"payment_types": [
"pay_now"
],
"room_name": "Superior Double",
"room_capacity": 2
}
}
],
"total_amount": {
"amount": 123,
"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"
},
"quote": {
"quote_id": "2097152",
"status": "quoted",
"expires_at": "2026-06-01T13:04:56Z"
},
"fulfillment": {
"fulfillment_cart_id": 123,
"status": "<string>",
"phase": "<string>",
"failure_reason": "price_changed",
"scheduled_at": "2026-06-01T12:35:00Z"
},
"booking_state": "processing",
"booking_ref": "JNK-XEVGW5",
"bookings": [
{
"item_id": "itm_4b91c2",
"kind": "flight",
"supplier_references": [
{
"issuer": "AF",
"reference": "XM9L2K"
}
],
"booking_reference": "8Q69NYQTT",
"pnr": "XM9L2K",
"offer_id": "htl_2d67a7441c60e5de",
"trip_item_token": "of_9c1d2e:FARE_ABC",
"hotel_id": "lp1f2c3",
"special_requests": [
"<string>"
]
}
],
"created_at": "2026-06-01T12:30:00Z",
"updated_at": "2026-06-01T12:34:56Z"
}{
"error": {
"code": "BAD_REQUEST",
"message": "Malformed JSON in request body.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "CONFLICT",
"message": "The operation conflicts with the current state of the resource.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "GONE",
"message": "The resource no longer exists.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "A required field is missing or invalid.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Too many requests. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The request was declined for this offer. Try another offer.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The service is temporarily unavailable. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The request timed out before a result was available. Retry the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}quote_id, the booking’s progress in booking_state once payment starts, and any booking references that have been issued.
This read does not start pricing. Checkout starts pricing and waits for success or failure. If quote.status is failed, no payable quote was established, even if an older response also carries expires_at. Failed quotes omit expires_at and can include failure_reason and failure_message. For offer_expired or offer_unavailable, search again and replace the item before checking out. A missing item price_money or total_amount_money means the figure is not known yet and must not be displayed as zero.
status is one value for the whole trip. Once payment starts, booking_state summarizes the booking and fulfillment.status gives the detailed status behind it. See Trip status and booking state.Authorizations
Path Parameters
Response
The trip
"trip_1048576"
Link to a page where the traveller picks seats on a visual seat map. Present only when a flight item has a seat-map session. Expires; read the trip again for a fresh link.
Show child attributes
Show child attributes
Where the trip is in its lifecycle, as one value for the whole trip. The booking’s progress after payment is booking_state (GET /v1/trip/{trip_id}); the four booking values below (fulfilling, fulfilled, partially_fulfilled, failed) are deprecated in favour of it and still sent. draft: being built or priced, nothing paid. fulfilling: payment was submitted and booking started. Then exactly one outcome: fulfilled (booking_state completed), partially_fulfilled (partial) or failed (failed). cancelled: replaced by a new trip when it was re-shopped. expired is the 24-hour lapse: it is evaluated LAZILY, on the read that first observes it, so this call is where a dead trip becomes visible. Once a trip is expired, adding items, setting travelers and checkout are refused with TRIP_EXPIRED; any other state that refuses a write answers TRIP_STATE_CONFLICT and names the state here. Start a new trip — a lapsed one cannot be revived. quoting, quoted and fulfillment_prepared are reserved and not currently set; quote progress is in quote.status.
draft, quoting, quoted, fulfillment_prepared, fulfilling, fulfilled, partially_fulfilled, failed, cancelled, expired "draft"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Optional primary adult room-contact overrides keyed by the returned hotel item_id/product_id. Each product array is non-empty and occupancy_number values are unique positive room slots; omitted slots use persisted adult travelers in order with the trip contact email. The trip must already exist because the keys refer to its items.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Deprecated: use total_amount_money instead. The trip total in major currency units.
Show child attributes
Show child attributes
The trip total. Absent until the trip has been quoted.
Show child attributes
Show child attributes
Latest pricing attempt. POST /v1/trip does not start pricing; POST /v1/checkout starts it and waits for success or failure. Reading the trip does not trigger pricing. A failed quote has no payable price.
Show child attributes
Show child attributes
{ "quote_id": "2097152", "status": "quoted", "expires_at": "2026-06-01T13:04:56Z" }
Show child attributes
Show child attributes
The booking’s progress once payment has started; absent before. awaiting_payment: waiting for the payment to be confirmed. processing: booking with the suppliers. Then one outcome: completed (every item booked), partial (some items booked), failed (nothing booked) or cancelled. needs_review: held for a person at Jinko to resolve; not final. fulfillment.status keeps the detailed status behind it.
awaiting_payment, processing, completed, partial, failed, cancelled, needs_review "processing"
The Jinko booking reference for this trip — the value POST /v1/get_booking, cancel, refund and exchange take as booking_ref, and the booking_ref every webhook event carries. Present as soon as booking has been scheduled for the trip, which can be before payment completes (a hosted checkout still in progress, or an agent submit that fell back to checkout_url, leaves the booking awaiting_payment). Presence does not mean paid: read booking_state. The value never changes afterwards. One per trip.
"JNK-XEVGW5"
One entry per item with a booking reference, including items whose booking was attempted and failed. The supplier confirmation can be empty on failed items; the Jinko reference is the trip-level booking_ref.
Show child attributes
Show child attributes
"2026-06-01T12:30:00Z"
"2026-06-01T12:34:56Z"
