Discover travel destinations accessible from your departure airports
curl --request POST \
--url https://api.example.com/v1/find_destination \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origins": [
"NYC"
],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"max_total": 800,
"currency": "USD",
"flights_per_destination": 1
}
'import requests
url = "https://api.example.com/v1/find_destination"
payload = {
"origins": ["NYC"],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"max_total": 800,
"currency": "USD",
"flights_per_destination": 1
}
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({
origins: ['NYC'],
trip_type: 'roundtrip',
departure_date_ranges: [{start: '2026-09-01', end: '2026-09-30'}],
stay_days: 7,
cabin_class: 'economy',
adults: 1,
max_total: 800,
currency: 'USD',
flights_per_destination: 1
})
};
fetch('https://api.example.com/v1/find_destination', 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/find_destination",
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([
'origins' => [
'NYC'
],
'trip_type' => 'roundtrip',
'departure_date_ranges' => [
[
'start' => '2026-09-01',
'end' => '2026-09-30'
]
],
'stay_days' => 7,
'cabin_class' => 'economy',
'adults' => 1,
'max_total' => 800,
'currency' => 'USD',
'flights_per_destination' => 1
]),
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/find_destination"
payload := strings.NewReader("{\n \"origins\": [\n \"NYC\"\n ],\n \"trip_type\": \"roundtrip\",\n \"departure_date_ranges\": [\n {\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-30\"\n }\n ],\n \"stay_days\": 7,\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_total\": 800,\n \"currency\": \"USD\",\n \"flights_per_destination\": 1\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/find_destination")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origins\": [\n \"NYC\"\n ],\n \"trip_type\": \"roundtrip\",\n \"departure_date_ranges\": [\n {\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-30\"\n }\n ],\n \"stay_days\": 7,\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_total\": 800,\n \"currency\": \"USD\",\n \"flights_per_destination\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/find_destination")
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 \"origins\": [\n \"NYC\"\n ],\n \"trip_type\": \"roundtrip\",\n \"departure_date_ranges\": [\n {\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-30\"\n }\n ],\n \"stay_days\": 7,\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_total\": 800,\n \"currency\": \"USD\",\n \"flights_per_destination\": 1\n}"
response = http.request(request)
puts response.read_body{
"destinations": [
{
"flights": [
{
"id": "itin_9f3b2a17",
"origin": {
"code": "JFK",
"name": "New York John F. Kennedy"
},
"destination": {
"code": "CDG",
"name": "Paris Charles de Gaulle"
},
"total": {
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"cabin_class": "economy"
}
],
"city_name": "Paris",
"iata_code": "PAR",
"image_url": "https://images.gojinko.com/destinations/par.jpg",
"location": {
"latitude": 48.8566,
"longitude": 2.3522
},
"lowest_fare": {
"id": "itin_9f3b2a17",
"origin": {
"code": "JFK",
"name": "New York John F. Kennedy"
},
"destination": {
"code": "CDG",
"name": "Paris Charles de Gaulle"
},
"total": {
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"cabin_class": "economy"
}
}
],
"total": 12,
"next_page_token": "eyJvZmZzZXQiOjIwfQ=="
}{
"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": "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": "CONFLICT",
"message": "an exchange is already in progress for this booking",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"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_REJECTED",
"message": "sabre-rest BargainFinderMaxRQ failed with status 400: 27131 - Number of connection locations exceeds maximum allowed",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "All flight providers are temporarily unable to serve this search. Please retry later. Provider reasons: sabre-rest: provider temporarily closed; travelfusion: quota exhausted",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "sabre-rest BargainFinderMaxRQ timed out after 30s",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Discovery
find-destination
Discover travel destinations accessible from your departure airports
POST
/
v1
/
find_destination
Discover travel destinations accessible from your departure airports
curl --request POST \
--url https://api.example.com/v1/find_destination \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origins": [
"NYC"
],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"max_total": 800,
"currency": "USD",
"flights_per_destination": 1
}
'import requests
url = "https://api.example.com/v1/find_destination"
payload = {
"origins": ["NYC"],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"max_total": 800,
"currency": "USD",
"flights_per_destination": 1
}
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({
origins: ['NYC'],
trip_type: 'roundtrip',
departure_date_ranges: [{start: '2026-09-01', end: '2026-09-30'}],
stay_days: 7,
cabin_class: 'economy',
adults: 1,
max_total: 800,
currency: 'USD',
flights_per_destination: 1
})
};
fetch('https://api.example.com/v1/find_destination', 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/find_destination",
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([
'origins' => [
'NYC'
],
'trip_type' => 'roundtrip',
'departure_date_ranges' => [
[
'start' => '2026-09-01',
'end' => '2026-09-30'
]
],
'stay_days' => 7,
'cabin_class' => 'economy',
'adults' => 1,
'max_total' => 800,
'currency' => 'USD',
'flights_per_destination' => 1
]),
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/find_destination"
payload := strings.NewReader("{\n \"origins\": [\n \"NYC\"\n ],\n \"trip_type\": \"roundtrip\",\n \"departure_date_ranges\": [\n {\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-30\"\n }\n ],\n \"stay_days\": 7,\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_total\": 800,\n \"currency\": \"USD\",\n \"flights_per_destination\": 1\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/find_destination")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origins\": [\n \"NYC\"\n ],\n \"trip_type\": \"roundtrip\",\n \"departure_date_ranges\": [\n {\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-30\"\n }\n ],\n \"stay_days\": 7,\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_total\": 800,\n \"currency\": \"USD\",\n \"flights_per_destination\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/find_destination")
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 \"origins\": [\n \"NYC\"\n ],\n \"trip_type\": \"roundtrip\",\n \"departure_date_ranges\": [\n {\n \"start\": \"2026-09-01\",\n \"end\": \"2026-09-30\"\n }\n ],\n \"stay_days\": 7,\n \"cabin_class\": \"economy\",\n \"adults\": 1,\n \"max_total\": 800,\n \"currency\": \"USD\",\n \"flights_per_destination\": 1\n}"
response = http.request(request)
puts response.read_body{
"destinations": [
{
"flights": [
{
"id": "itin_9f3b2a17",
"origin": {
"code": "JFK",
"name": "New York John F. Kennedy"
},
"destination": {
"code": "CDG",
"name": "Paris Charles de Gaulle"
},
"total": {
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"cabin_class": "economy"
}
],
"city_name": "Paris",
"iata_code": "PAR",
"image_url": "https://images.gojinko.com/destinations/par.jpg",
"location": {
"latitude": 48.8566,
"longitude": 2.3522
},
"lowest_fare": {
"id": "itin_9f3b2a17",
"origin": {
"code": "JFK",
"name": "New York John F. Kennedy"
},
"destination": {
"code": "CDG",
"name": "Paris Charles de Gaulle"
},
"total": {
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"cabin_class": "economy"
}
}
],
"total": 12,
"next_page_token": "eyJvZmZzZXQiOjIwfQ=="
}{
"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": "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": "CONFLICT",
"message": "an exchange is already in progress for this booking",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"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_REJECTED",
"message": "sabre-rest BargainFinderMaxRQ failed with status 400: 27131 - Number of connection locations exceeds maximum allowed",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "All flight providers are temporarily unable to serve this search. Please retry later. Provider reasons: sabre-rest: provider temporarily closed; travelfusion: quota exhausted",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "sabre-rest BargainFinderMaxRQ timed out after 30s",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Surface inspiration when a user knows where they want to leave from but not where they want to go. Typical prompts include “cheap beach getaways from New York” or “weekend trips out of London under €200”. Results come back ranked by lowest available fare so the user can compare options before committing to a route.
Prices are in minor units.
value is an integer — divide by
10 ** decimal_places to display it. { "value": 15977, "decimal_places": 2 }
is **159.77∗∗,not15,977. See Money & prices.Authorizations
ApiKeyAuthBearerAuth
Body
application/json
Minimum array length:
1Example:
["NYC"]
Available options:
oneway, roundtrip Example:
"roundtrip"
Example:
["PAR"]
Available options:
city, airport Available options:
city, airport Pattern:
^\d{4}-\d{2}-\d{2}$Example:
["2026-07-15"]
Show child attributes
Show child attributes
Pattern:
^\d{4}-\d{2}-\d{2}$Example:
["2026-07-22"]
Show child attributes
Show child attributes
Required range:
x > 0Example:
7
Show child attributes
Show child attributes
Available options:
economy, premium_economy, business, first Example:
"economy"
Example:
false
Required range:
x >= 0Example:
1
Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required range:
x >= 0Required string length:
2Required range:
x > 0Example:
800
Example:
"USD"
Example:
"en-US"
Required range:
1 <= x <= 100Required range:
x >= 0Available options:
lowest, recommendation Show child attributes
Show child attributes
Required range:
1 <= x <= 10