Create and manage a trip — add or remove items, set travelers, select ancillaries
curl --request POST \
--url https://api.example.com/v1/trip \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"trip_id": "trip_1048576",
"add_item": {
"trip_item_token": "tok_flt_9f3b2a17"
}
}
'import requests
url = "https://api.example.com/v1/trip"
payload = {
"trip_id": "trip_1048576",
"add_item": { "trip_item_token": "tok_flt_9f3b2a17" }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({trip_id: 'trip_1048576', add_item: {trip_item_token: 'tok_flt_9f3b2a17'}})
};
fetch('https://api.example.com/v1/trip', 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.example.com/v1/trip",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'trip_id' => 'trip_1048576',
'add_item' => [
'trip_item_token' => 'tok_flt_9f3b2a17'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/trip"
payload := strings.NewReader("{\n \"trip_id\": \"trip_1048576\",\n \"add_item\": {\n \"trip_item_token\": \"tok_flt_9f3b2a17\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/trip")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"trip_id\": \"trip_1048576\",\n \"add_item\": {\n \"trip_item_token\": \"tok_flt_9f3b2a17\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/trip")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trip_id\": \"trip_1048576\",\n \"add_item\": {\n \"trip_item_token\": \"tok_flt_9f3b2a17\"\n }\n}"
response = http.request(request)
puts response.read_body{
"trip_id": "trip_1048576",
"status": "draft",
"actions_performed": [
"created",
"add_item"
],
"items": [
{
"item_id": "itm_4b91c2",
"kind": "flight",
"price": {
"amount": 318.4,
"value": 123,
"currency": "USD",
"decimal_places": 2
},
"pax_count": 1,
"available_ancillaries": [
null
],
"selected_ancillaries": [
null
]
}
],
"travelers": [
null
],
"contact": {
"email": "<string>",
"phone": "<string>"
},
"totals": {
"currency": "USD",
"total": 318.4
}
}{
"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/api-reference/authentication"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "origins: origins is required; trip_type: trip_type is required",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_ERROR",
"message": "Upstream travel provider returned an error. Please retry.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Cart & Payment
trip
Create and manage a trip — add or remove items, set travelers, select ancillaries
POST
/
v1
/
trip
Create and manage a trip — add or remove items, set travelers, select ancillaries
curl --request POST \
--url https://api.example.com/v1/trip \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"trip_id": "trip_1048576",
"add_item": {
"trip_item_token": "tok_flt_9f3b2a17"
}
}
'import requests
url = "https://api.example.com/v1/trip"
payload = {
"trip_id": "trip_1048576",
"add_item": { "trip_item_token": "tok_flt_9f3b2a17" }
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({trip_id: 'trip_1048576', add_item: {trip_item_token: 'tok_flt_9f3b2a17'}})
};
fetch('https://api.example.com/v1/trip', 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.example.com/v1/trip",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'trip_id' => 'trip_1048576',
'add_item' => [
'trip_item_token' => 'tok_flt_9f3b2a17'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/trip"
payload := strings.NewReader("{\n \"trip_id\": \"trip_1048576\",\n \"add_item\": {\n \"trip_item_token\": \"tok_flt_9f3b2a17\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/v1/trip")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"trip_id\": \"trip_1048576\",\n \"add_item\": {\n \"trip_item_token\": \"tok_flt_9f3b2a17\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/trip")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trip_id\": \"trip_1048576\",\n \"add_item\": {\n \"trip_item_token\": \"tok_flt_9f3b2a17\"\n }\n}"
response = http.request(request)
puts response.read_body{
"trip_id": "trip_1048576",
"status": "draft",
"actions_performed": [
"created",
"add_item"
],
"items": [
{
"item_id": "itm_4b91c2",
"kind": "flight",
"price": {
"amount": 318.4,
"value": 123,
"currency": "USD",
"decimal_places": 2
},
"pax_count": 1,
"available_ancillaries": [
null
],
"selected_ancillaries": [
null
]
}
],
"travelers": [
null
],
"contact": {
"email": "<string>",
"phone": "<string>"
},
"totals": {
"currency": "USD",
"total": 318.4
}
}{
"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/api-reference/authentication"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "origins: origins is required; trip_type: trip_type is required",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_ERROR",
"message": "Upstream travel provider returned an error. Please retry.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Assemble and edit a trip before sending it to checkout. Use it to add a flight or hotel offer, set traveler details, swap one item for another, or attach ancillaries like bags and seats. Flights and hotels can sit side by side in the same trip and settle through a single checkout.
Unified trip management endpoint. In a single call you can
add_item (by trip_item_token), remove_item (by item_id), and upsert_travelers (travelers + contact). Omit trip_id to create a new trip; include it to update an existing one. Returns the resulting trip state.
Ancillaries are selected on a separate endpoint. See select-ancillaries.Authorizations
ApiKeyAuthBearerAuth
Body
application/json
Response
The trip
⌘I
