curl --request POST \
--url https://api.gojinko.com/v1/flight_schedule \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origin": "BOS",
"destination": "NCE",
"trip_type": "roundtrip",
"departure_date": "2026-10-11",
"return_date": "2026-10-18",
"max_stops": 1
}
'import requests
url = "https://api.gojinko.com/v1/flight_schedule"
payload = {
"origin": "BOS",
"destination": "NCE",
"trip_type": "roundtrip",
"departure_date": "2026-10-11",
"return_date": "2026-10-18",
"max_stops": 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({
origin: 'BOS',
destination: 'NCE',
trip_type: 'roundtrip',
departure_date: '2026-10-11',
return_date: '2026-10-18',
max_stops: 1
})
};
fetch('https://api.gojinko.com/v1/flight_schedule', 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/flight_schedule",
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([
'origin' => 'BOS',
'destination' => 'NCE',
'trip_type' => 'roundtrip',
'departure_date' => '2026-10-11',
'return_date' => '2026-10-18',
'max_stops' => 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.gojinko.com/v1/flight_schedule"
payload := strings.NewReader("{\n \"origin\": \"BOS\",\n \"destination\": \"NCE\",\n \"trip_type\": \"roundtrip\",\n \"departure_date\": \"2026-10-11\",\n \"return_date\": \"2026-10-18\",\n \"max_stops\": 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.gojinko.com/v1/flight_schedule")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origin\": \"BOS\",\n \"destination\": \"NCE\",\n \"trip_type\": \"roundtrip\",\n \"departure_date\": \"2026-10-11\",\n \"return_date\": \"2026-10-18\",\n \"max_stops\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/flight_schedule")
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 \"origin\": \"BOS\",\n \"destination\": \"NCE\",\n \"trip_type\": \"roundtrip\",\n \"departure_date\": \"2026-10-11\",\n \"return_date\": \"2026-10-18\",\n \"max_stops\": 1\n}"
response = http.request(request)
puts response.read_body{
"trips": [
{
"trip_type": "roundtrip",
"validating_carrier": "AF",
"last_seen": "2026-09-30T04:12:09Z",
"slices": [
{
"origin": "BOS",
"destination": "NCE",
"stops": 1,
"segments": [
{
"marketing_carrier": "AF",
"flight_number": "333",
"depart": {
"airport": "BOS",
"time_local": "2026-10-11T18:25",
"city_code": "BOS",
"city_name": "Boston"
},
"arrive": {
"airport": "BOS",
"time_local": "2026-10-11T18:25",
"city_code": "BOS",
"city_name": "Boston"
},
"marketing_carrier_info": {
"code": "AF",
"name": "Air France"
},
"operating_carrier": "DL",
"operating_carrier_info": {
"code": "AF",
"name": "Air France"
},
"cabin_class": "economy"
}
]
}
],
"cabin_class": "economy"
}
],
"total": 116,
"truncated": true,
"pagination": {
"next_page_token": "<string>"
}
}{
"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": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The upstream service rejected the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The upstream service is temporarily unavailable. Please retry later.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The upstream service did not respond in time.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}flight-schedule
Flights observed between two places on exact dates (no price)
curl --request POST \
--url https://api.gojinko.com/v1/flight_schedule \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origin": "BOS",
"destination": "NCE",
"trip_type": "roundtrip",
"departure_date": "2026-10-11",
"return_date": "2026-10-18",
"max_stops": 1
}
'import requests
url = "https://api.gojinko.com/v1/flight_schedule"
payload = {
"origin": "BOS",
"destination": "NCE",
"trip_type": "roundtrip",
"departure_date": "2026-10-11",
"return_date": "2026-10-18",
"max_stops": 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({
origin: 'BOS',
destination: 'NCE',
trip_type: 'roundtrip',
departure_date: '2026-10-11',
return_date: '2026-10-18',
max_stops: 1
})
};
fetch('https://api.gojinko.com/v1/flight_schedule', 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/flight_schedule",
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([
'origin' => 'BOS',
'destination' => 'NCE',
'trip_type' => 'roundtrip',
'departure_date' => '2026-10-11',
'return_date' => '2026-10-18',
'max_stops' => 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.gojinko.com/v1/flight_schedule"
payload := strings.NewReader("{\n \"origin\": \"BOS\",\n \"destination\": \"NCE\",\n \"trip_type\": \"roundtrip\",\n \"departure_date\": \"2026-10-11\",\n \"return_date\": \"2026-10-18\",\n \"max_stops\": 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.gojinko.com/v1/flight_schedule")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origin\": \"BOS\",\n \"destination\": \"NCE\",\n \"trip_type\": \"roundtrip\",\n \"departure_date\": \"2026-10-11\",\n \"return_date\": \"2026-10-18\",\n \"max_stops\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/flight_schedule")
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 \"origin\": \"BOS\",\n \"destination\": \"NCE\",\n \"trip_type\": \"roundtrip\",\n \"departure_date\": \"2026-10-11\",\n \"return_date\": \"2026-10-18\",\n \"max_stops\": 1\n}"
response = http.request(request)
puts response.read_body{
"trips": [
{
"trip_type": "roundtrip",
"validating_carrier": "AF",
"last_seen": "2026-09-30T04:12:09Z",
"slices": [
{
"origin": "BOS",
"destination": "NCE",
"stops": 1,
"segments": [
{
"marketing_carrier": "AF",
"flight_number": "333",
"depart": {
"airport": "BOS",
"time_local": "2026-10-11T18:25",
"city_code": "BOS",
"city_name": "Boston"
},
"arrive": {
"airport": "BOS",
"time_local": "2026-10-11T18:25",
"city_code": "BOS",
"city_name": "Boston"
},
"marketing_carrier_info": {
"code": "AF",
"name": "Air France"
},
"operating_carrier": "DL",
"operating_carrier_info": {
"code": "AF",
"name": "Air France"
},
"cabin_class": "economy"
}
]
}
],
"cabin_class": "economy"
}
],
"total": 116,
"truncated": true,
"pagination": {
"next_page_token": "<string>"
}
}{
"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": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The upstream service rejected the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The upstream service is temporarily unavailable. Please retry later.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The upstream service did not respond in time.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}trip_type says which kind: oneway (no return_date) or roundtrip (return_date required); a round trip is an outbound + inbound pairing that was actually observed together, never a combination built from two one-ways. The answer carries no price, and last_seen is when a fare search last observed the trip, not a statement that it can be booked. Results are paged: send pagination.next_page_token back as page_token until it is empty.Authorizations
Body
^[A-Za-z]{3}$"BOS"
^[A-Za-z]{3}$"NCE"
oneway returns trips observed as one-way offers and takes no return_date. roundtrip returns observed outbound + inbound pairings and requires return_date.
oneway, roundtrip "roundtrip"
Local departure day of the outbound journey.
^\d{4}-\d{2}-\d{2}$"2026-10-11"
How to read the code: city (default) expands a city code to all of its airports; airport restricts to that one airport.
city, airport How to read the code: city (default) expands a city code to all of its airports; airport restricts to that one airport.
city, airport Local departure day of the inbound journey. Required when trip_type is roundtrip; not accepted when it is oneway.
^\d{4}-\d{2}-\d{2}$"2026-10-18"
Filters on the trip’s cabin (the highest over its segments). Omit for all cabins — unlike flight search there is no economy default.
economy, premium_economy, business, first Most stops allowed in EACH direction. Omit for no bound.
0 <= x <= 31
Page size. Defaults to 50.
1 <= x <= 20050
pagination.next_page_token of the previous page. Send it with the same request fields.
1Show child attributes
Show child attributes
Response
Observed trips; trips is empty when nothing matches
The page of observed trips. Empty when nothing matches.
Show child attributes
Show child attributes
Trips matching the whole request across all pages. A lower bound when truncated is true.
116
True when an airport pair held more trips than one catalog read covers. Narrow by cabin_class, max_stops or a single airport to see the rest.
Show child attributes
Show child attributes
