Monitor price for a specific origin, destination, and dates pair
curl --request POST \
--url https://api.example.com/v1/price_monitoring \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origin": "PAR",
"destination": "NYC",
"departure_date": "<string>",
"return_date": "<string>",
"direct_only": true,
"max_price": 1,
"include_carriers": [
"<string>"
],
"exclude_carriers": [
"<string>"
],
"adults": 1,
"children": 1,
"infants": 1,
"currency": "<string>",
"locale": "<string>",
"intent": {
"user_intent": "find a cheap flight to Tokyo"
}
}
'import requests
url = "https://api.example.com/v1/price_monitoring"
payload = {
"origin": "PAR",
"destination": "NYC",
"departure_date": "<string>",
"return_date": "<string>",
"direct_only": True,
"max_price": 1,
"include_carriers": ["<string>"],
"exclude_carriers": ["<string>"],
"adults": 1,
"children": 1,
"infants": 1,
"currency": "<string>",
"locale": "<string>",
"intent": { "user_intent": "find a cheap flight to Tokyo" }
}
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: 'PAR',
destination: 'NYC',
departure_date: '<string>',
return_date: '<string>',
direct_only: true,
max_price: 1,
include_carriers: ['<string>'],
exclude_carriers: ['<string>'],
adults: 1,
children: 1,
infants: 1,
currency: '<string>',
locale: '<string>',
intent: {user_intent: 'find a cheap flight to Tokyo'}
})
};
fetch('https://api.example.com/v1/price_monitoring', 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/price_monitoring",
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' => 'PAR',
'destination' => 'NYC',
'departure_date' => '<string>',
'return_date' => '<string>',
'direct_only' => true,
'max_price' => 1,
'include_carriers' => [
'<string>'
],
'exclude_carriers' => [
'<string>'
],
'adults' => 1,
'children' => 1,
'infants' => 1,
'currency' => '<string>',
'locale' => '<string>',
'intent' => [
'user_intent' => 'find a cheap flight to Tokyo'
]
]),
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/price_monitoring"
payload := strings.NewReader("{\n \"origin\": \"PAR\",\n \"destination\": \"NYC\",\n \"departure_date\": \"<string>\",\n \"return_date\": \"<string>\",\n \"direct_only\": true,\n \"max_price\": 1,\n \"include_carriers\": [\n \"<string>\"\n ],\n \"exclude_carriers\": [\n \"<string>\"\n ],\n \"adults\": 1,\n \"children\": 1,\n \"infants\": 1,\n \"currency\": \"<string>\",\n \"locale\": \"<string>\",\n \"intent\": {\n \"user_intent\": \"find a cheap flight to Tokyo\"\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/price_monitoring")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origin\": \"PAR\",\n \"destination\": \"NYC\",\n \"departure_date\": \"<string>\",\n \"return_date\": \"<string>\",\n \"direct_only\": true,\n \"max_price\": 1,\n \"include_carriers\": [\n \"<string>\"\n ],\n \"exclude_carriers\": [\n \"<string>\"\n ],\n \"adults\": 1,\n \"children\": 1,\n \"infants\": 1,\n \"currency\": \"<string>\",\n \"locale\": \"<string>\",\n \"intent\": {\n \"user_intent\": \"find a cheap flight to Tokyo\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/price_monitoring")
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\": \"PAR\",\n \"destination\": \"NYC\",\n \"departure_date\": \"<string>\",\n \"return_date\": \"<string>\",\n \"direct_only\": true,\n \"max_price\": 1,\n \"include_carriers\": [\n \"<string>\"\n ],\n \"exclude_carriers\": [\n \"<string>\"\n ],\n \"adults\": 1,\n \"children\": 1,\n \"infants\": 1,\n \"currency\": \"<string>\",\n \"locale\": \"<string>\",\n \"intent\": {\n \"user_intent\": \"find a cheap flight to Tokyo\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": "ok",
"monitored_at": "2026-06-01T12:34:56Z",
"flight": {
"offer_token": "oft_7c2e9a1b4d",
"total_price": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"outbound_carrier": {
"code": "DL",
"name": "Delta Air Lines",
"flight_number": "DL263"
},
"inbound_carrier": {
"code": "DL",
"name": "Delta Air Lines",
"flight_number": "DL263"
},
"outbound_stops": 0,
"inbound_stops": 1,
"outbound_duration_minutes": 470,
"inbound_duration_minutes": 520,
"outbound_departure_local": "2026-07-15T10:15:00",
"outbound_arrival_local": "2026-07-15T13:05:00",
"inbound_departure_local": "2026-07-22T17:40:00",
"inbound_arrival_local": "2026-07-23T07:25:00",
"cabin_class": "economy",
"fare_brand": "Main"
},
"request_echo": null
}{
"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
price-monitoring
Monitor price for a specific origin, destination, and dates pair
POST
/
v1
/
price_monitoring
Monitor price for a specific origin, destination, and dates pair
curl --request POST \
--url https://api.example.com/v1/price_monitoring \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"origin": "PAR",
"destination": "NYC",
"departure_date": "<string>",
"return_date": "<string>",
"direct_only": true,
"max_price": 1,
"include_carriers": [
"<string>"
],
"exclude_carriers": [
"<string>"
],
"adults": 1,
"children": 1,
"infants": 1,
"currency": "<string>",
"locale": "<string>",
"intent": {
"user_intent": "find a cheap flight to Tokyo"
}
}
'import requests
url = "https://api.example.com/v1/price_monitoring"
payload = {
"origin": "PAR",
"destination": "NYC",
"departure_date": "<string>",
"return_date": "<string>",
"direct_only": True,
"max_price": 1,
"include_carriers": ["<string>"],
"exclude_carriers": ["<string>"],
"adults": 1,
"children": 1,
"infants": 1,
"currency": "<string>",
"locale": "<string>",
"intent": { "user_intent": "find a cheap flight to Tokyo" }
}
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: 'PAR',
destination: 'NYC',
departure_date: '<string>',
return_date: '<string>',
direct_only: true,
max_price: 1,
include_carriers: ['<string>'],
exclude_carriers: ['<string>'],
adults: 1,
children: 1,
infants: 1,
currency: '<string>',
locale: '<string>',
intent: {user_intent: 'find a cheap flight to Tokyo'}
})
};
fetch('https://api.example.com/v1/price_monitoring', 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/price_monitoring",
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' => 'PAR',
'destination' => 'NYC',
'departure_date' => '<string>',
'return_date' => '<string>',
'direct_only' => true,
'max_price' => 1,
'include_carriers' => [
'<string>'
],
'exclude_carriers' => [
'<string>'
],
'adults' => 1,
'children' => 1,
'infants' => 1,
'currency' => '<string>',
'locale' => '<string>',
'intent' => [
'user_intent' => 'find a cheap flight to Tokyo'
]
]),
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/price_monitoring"
payload := strings.NewReader("{\n \"origin\": \"PAR\",\n \"destination\": \"NYC\",\n \"departure_date\": \"<string>\",\n \"return_date\": \"<string>\",\n \"direct_only\": true,\n \"max_price\": 1,\n \"include_carriers\": [\n \"<string>\"\n ],\n \"exclude_carriers\": [\n \"<string>\"\n ],\n \"adults\": 1,\n \"children\": 1,\n \"infants\": 1,\n \"currency\": \"<string>\",\n \"locale\": \"<string>\",\n \"intent\": {\n \"user_intent\": \"find a cheap flight to Tokyo\"\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/price_monitoring")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"origin\": \"PAR\",\n \"destination\": \"NYC\",\n \"departure_date\": \"<string>\",\n \"return_date\": \"<string>\",\n \"direct_only\": true,\n \"max_price\": 1,\n \"include_carriers\": [\n \"<string>\"\n ],\n \"exclude_carriers\": [\n \"<string>\"\n ],\n \"adults\": 1,\n \"children\": 1,\n \"infants\": 1,\n \"currency\": \"<string>\",\n \"locale\": \"<string>\",\n \"intent\": {\n \"user_intent\": \"find a cheap flight to Tokyo\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/price_monitoring")
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\": \"PAR\",\n \"destination\": \"NYC\",\n \"departure_date\": \"<string>\",\n \"return_date\": \"<string>\",\n \"direct_only\": true,\n \"max_price\": 1,\n \"include_carriers\": [\n \"<string>\"\n ],\n \"exclude_carriers\": [\n \"<string>\"\n ],\n \"adults\": 1,\n \"children\": 1,\n \"infants\": 1,\n \"currency\": \"<string>\",\n \"locale\": \"<string>\",\n \"intent\": {\n \"user_intent\": \"find a cheap flight to Tokyo\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": "ok",
"monitored_at": "2026-06-01T12:34:56Z",
"flight": {
"offer_token": "oft_7c2e9a1b4d",
"total_price": {
"amount": 123,
"value": 41250,
"currency": "USD",
"decimal_places": 2
},
"outbound_carrier": {
"code": "DL",
"name": "Delta Air Lines",
"flight_number": "DL263"
},
"inbound_carrier": {
"code": "DL",
"name": "Delta Air Lines",
"flight_number": "DL263"
},
"outbound_stops": 0,
"inbound_stops": 1,
"outbound_duration_minutes": 470,
"inbound_duration_minutes": 520,
"outbound_departure_local": "2026-07-15T10:15:00",
"outbound_arrival_local": "2026-07-15T13:05:00",
"inbound_departure_local": "2026-07-22T17:40:00",
"inbound_arrival_local": "2026-07-23T07:25:00",
"cabin_class": "economy",
"fare_brand": "Main"
},
"request_echo": null
}{
"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"
}
}Watch a specific route and date pair over time so an agent can act when the fare drops. Use it for prompts like “alert me when Paris to New York for June 17 to 26 goes under €400”. Each response includes the current cheapest cached fare and an offer token you can pass to flight_search when the user decides to book. Cache-only; never triggers a live call.
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
Example:
"PAR"
Example:
"NYC"
Pattern:
^\d{4}-\d{2}-\d{2}$Pattern:
^\d{4}-\d{2}-\d{2}$Available options:
city, airport Available options:
city, airport Available options:
economy, premium_economy, business, first Required range:
x > 0Adult travelers (12+).
Required range:
x >= 1Child travelers (2–11).
Required range:
x >= 0Infant travelers (under 2), traveling on an adult’s lap. Seated infants (own seat) are not supported.
Required range:
x >= 0Show child attributes
Show child attributes
