Skip to main content
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

X-API-Key
string
header
required

Body

application/json
trip_id
string
add_item
object
remove_item
object
upsert_travelers
object
intent
object

Response

The trip

trip_id
string
required
Example:

"trip_1048576"

status
string
Example:

"draft"

actions_performed
string[]
Example:
["created", "add_item"]
items
object[]
travelers
null[]
contact
object
totals
object
Example:
{ "currency": "USD", "total": 318.4 }