Search flights between a known origin and destination for flexible dates
curl --request POST \
--url https://api.example.com/v1/flight_calendar \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origins": [
"NYC"
],
"destinations": [
"PAR"
],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"currency": "USD"
}
'import requests
url = "https://api.example.com/v1/flight_calendar"
payload = {
"origins": ["NYC"],
"destinations": ["PAR"],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"currency": "USD"
}
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'],
destinations: ['PAR'],
trip_type: 'roundtrip',
departure_date_ranges: [{start: '2026-09-01', end: '2026-09-30'}],
stay_days: 7,
cabin_class: 'economy',
adults: 1,
currency: 'USD'
})
};
fetch('https://api.example.com/v1/flight_calendar', 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/flight_calendar",
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'
],
'destinations' => [
'PAR'
],
'trip_type' => 'roundtrip',
'departure_date_ranges' => [
[
'start' => '2026-09-01',
'end' => '2026-09-30'
]
],
'stay_days' => 7,
'cabin_class' => 'economy',
'adults' => 1,
'currency' => 'USD'
]),
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/flight_calendar"
payload := strings.NewReader("{\n \"origins\": [\n \"NYC\"\n ],\n \"destinations\": [\n \"PAR\"\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 \"currency\": \"USD\"\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/flight_calendar")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origins\": [\n \"NYC\"\n ],\n \"destinations\": [\n \"PAR\"\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 \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/flight_calendar")
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 \"destinations\": [\n \"PAR\"\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 \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"itineraries": [
{
"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"
}
],
"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": "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"
}
}Discovery
flight-calendar
Search flights between a known origin and destination for flexible dates
POST
/
v1
/
flight_calendar
Search flights between a known origin and destination for flexible dates
curl --request POST \
--url https://api.example.com/v1/flight_calendar \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origins": [
"NYC"
],
"destinations": [
"PAR"
],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"currency": "USD"
}
'import requests
url = "https://api.example.com/v1/flight_calendar"
payload = {
"origins": ["NYC"],
"destinations": ["PAR"],
"trip_type": "roundtrip",
"departure_date_ranges": [
{
"start": "2026-09-01",
"end": "2026-09-30"
}
],
"stay_days": 7,
"cabin_class": "economy",
"adults": 1,
"currency": "USD"
}
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'],
destinations: ['PAR'],
trip_type: 'roundtrip',
departure_date_ranges: [{start: '2026-09-01', end: '2026-09-30'}],
stay_days: 7,
cabin_class: 'economy',
adults: 1,
currency: 'USD'
})
};
fetch('https://api.example.com/v1/flight_calendar', 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/flight_calendar",
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'
],
'destinations' => [
'PAR'
],
'trip_type' => 'roundtrip',
'departure_date_ranges' => [
[
'start' => '2026-09-01',
'end' => '2026-09-30'
]
],
'stay_days' => 7,
'cabin_class' => 'economy',
'adults' => 1,
'currency' => 'USD'
]),
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/flight_calendar"
payload := strings.NewReader("{\n \"origins\": [\n \"NYC\"\n ],\n \"destinations\": [\n \"PAR\"\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 \"currency\": \"USD\"\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/flight_calendar")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origins\": [\n \"NYC\"\n ],\n \"destinations\": [\n \"PAR\"\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 \"currency\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/flight_calendar")
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 \"destinations\": [\n \"PAR\"\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 \"currency\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"itineraries": [
{
"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"
}
],
"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": "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"
}
}Find priced itineraries between a known origin and destination using cached results, ideal when the user is flexible on dates. It answers questions like “cheapest week to fly Paris to Barcelona in June” or “best Friday to Sunday options from JFK to LAX next month”. Each result includes an offer token you can pass into a live price check or directly into a trip.
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
