curl --request POST \ --url https://api.gojinko.com/v1/flight_ai_search \ --header 'Content-Type: application/json' \ --header 'X-API-Key: <api-key>' \ --data '{ "text": "Paris to Tokyo 3–17 October 2027 for 4, at most one stop", "timezone": "Europe/Paris", "context_id": "ctx_example", "task_id": "atk_example", "currency": "EUR", "effort": "medium"}'
import requests
url = "https://api.gojinko.com/v1/flight_ai_search"
payload = {
"text": "Paris to Tokyo 3–17 October 2027 for 4, at most one stop",
"timezone": "Europe/Paris",
"context_id": "ctx_example",
"task_id": "atk_example",
"currency": "EUR",
"effort": "medium"
}
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({
text: 'Paris to Tokyo 3–17 October 2027 for 4, at most one stop',
timezone: 'Europe/Paris',
context_id: 'ctx_example',
task_id: 'atk_example',
currency: 'EUR',
effort: 'medium'
})
};
fetch('https://api.gojinko.com/v1/flight_ai_search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gojinko.com/v1/flight_ai_search"
payload := strings.NewReader("{\n \"text\": \"Paris to Tokyo 3–17 October 2027 for 4, at most one stop\",\n \"timezone\": \"Europe/Paris\",\n \"context_id\": \"ctx_example\",\n \"task_id\": \"atk_example\",\n \"currency\": \"EUR\",\n \"effort\": \"medium\"\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_ai_search")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"Paris to Tokyo 3–17 October 2027 for 4, at most one stop\",\n \"timezone\": \"Europe/Paris\",\n \"context_id\": \"ctx_example\",\n \"task_id\": \"atk_example\",\n \"currency\": \"EUR\",\n \"effort\": \"medium\"\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/flight_ai_search")
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 \"text\": \"Paris to Tokyo 3–17 October 2027 for 4, at most one stop\",\n \"timezone\": \"Europe/Paris\",\n \"context_id\": \"ctx_example\",\n \"task_id\": \"atk_example\",\n \"currency\": \"EUR\",\n \"effort\": \"medium\"\n}"
response = http.request(request)
puts response.read_body
{
"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 — a flight AI search turn needs at least $0.20 and your organization has $0.0500 available. Top up at https://dashboard.gojinko.com/developers/billing/topup"
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "This API key is not granted the \"search_live\" scope required by this endpoint"
}
}
{
"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": "Too many requests. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The request was declined for this offer. Try another offer.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The service is temporarily unavailable. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The request timed out before a result was available. Retry the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
Other endpoints
flight-ai-search
Search flights from one sentence, with follow-ups
POST
/
v1
/
flight_ai_search
Search flights from one sentence, with follow-ups
curl --request POST \ --url https://api.gojinko.com/v1/flight_ai_search \ --header 'Content-Type: application/json' \ --header 'X-API-Key: <api-key>' \ --data '{ "text": "Paris to Tokyo 3–17 October 2027 for 4, at most one stop", "timezone": "Europe/Paris", "context_id": "ctx_example", "task_id": "atk_example", "currency": "EUR", "effort": "medium"}'
import requests
url = "https://api.gojinko.com/v1/flight_ai_search"
payload = {
"text": "Paris to Tokyo 3–17 October 2027 for 4, at most one stop",
"timezone": "Europe/Paris",
"context_id": "ctx_example",
"task_id": "atk_example",
"currency": "EUR",
"effort": "medium"
}
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({
text: 'Paris to Tokyo 3–17 October 2027 for 4, at most one stop',
timezone: 'Europe/Paris',
context_id: 'ctx_example',
task_id: 'atk_example',
currency: 'EUR',
effort: 'medium'
})
};
fetch('https://api.gojinko.com/v1/flight_ai_search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gojinko.com/v1/flight_ai_search"
payload := strings.NewReader("{\n \"text\": \"Paris to Tokyo 3–17 October 2027 for 4, at most one stop\",\n \"timezone\": \"Europe/Paris\",\n \"context_id\": \"ctx_example\",\n \"task_id\": \"atk_example\",\n \"currency\": \"EUR\",\n \"effort\": \"medium\"\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_ai_search")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"Paris to Tokyo 3–17 October 2027 for 4, at most one stop\",\n \"timezone\": \"Europe/Paris\",\n \"context_id\": \"ctx_example\",\n \"task_id\": \"atk_example\",\n \"currency\": \"EUR\",\n \"effort\": \"medium\"\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/flight_ai_search")
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 \"text\": \"Paris to Tokyo 3–17 October 2027 for 4, at most one stop\",\n \"timezone\": \"Europe/Paris\",\n \"context_id\": \"ctx_example\",\n \"task_id\": \"atk_example\",\n \"currency\": \"EUR\",\n \"effort\": \"medium\"\n}"
response = http.request(request)
puts response.read_body
{
"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 — a flight AI search turn needs at least $0.20 and your organization has $0.0500 available. Top up at https://dashboard.gojinko.com/developers/billing/topup"
}
}
{
"error": {
"code": "FORBIDDEN",
"message": "This API key is not granted the \"search_live\" scope required by this endpoint"
}
}
{
"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": "Too many requests. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The request was declined for this offer. Try another offer.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The service is temporarily unavailable. Retry after the Retry-After delay.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The request timed out before a result was available. Retry the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}
Send the traveller’s request in one sentence. The answer comes within about 20 seconds with 200: the options, or a question to answer in the same conversation. When the search takes longer, the answer is 202 with the early reply and a Location to read until the task ends. Continue the conversation with its context_id.Every option is priced live and carries fares: book one by adding its trip_item_token with POST /v1/tripadd_item before its expires_at. The JSON answer of an ended turn carries its charge; the event stream does not.
Makes a retried message safe: a retry with the same key answers the first message again instead of sending a second one. Keys are scoped to the caller, not to the conversation, and the retried body is not compared: a different message needs a new key. 1–200 characters.
wait=N (RFC 7240): answer after at most N seconds, never more than 20, with 202 and the early reply if the task has not ended by then. wait=0 answers at once. Without it the wait is 20 seconds. The wait applied is returned in Preference-Applied.
working: the search is still running, read the task again. input_required: the message asks a question; answer it in the same conversation. completed: the options are in the answer. failed: see error. canceled: a later message or a cancel replaced it.
What the reply asks for, when status is input_required. relax: no flight met every condition of the request; the reply names them and asks which one to drop or change.
The search the request was understood as: trip_type, origins, destinations, departure, return, passengers, priority (only when the request says how to rank the options), currency, and the filters, in the flight_search field names. Each place of origins and destinations has code, type, name and country_code; code is null for a country, a region or a kind of trip, whose airports searched are on each option's legs. departure has weekdays when the request fixes the days of the week the trips leave on: thursday and friday for a long weekend, friday for a weekend. A field is absent when the request did not state it, except passengers and currency, which carry the values searched with.
How to present the options; groups name them by option_id. shortlist: the options for one route and dates. per_destination: one row per destination compared. Options always meet every filter of the request; a row without one says why in empty_reason.
What a turn was charged to the organization's balance, once the turn has ended (completed, input_required, failed or canceled); every amount is 0 when the turn cost nothing. Absent while the task is working. Carried on JSON answers only: an event stream does not carry it, so read it with GET /v1/flight_ai_search/tasks/{task_id}.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Jinko Platform","description":"Connect your AI agent to flights, hotels, car rentals, and bookings through MCP, REST API, TypeScript SDK, or CLI.","colors":{"primary":"#FF6363","light":"#FF807C","dark":"#BA4B4A"},"logo":{"light":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0","dark":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0"},"favicon":"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/favicon.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=770e72a193924011a067dcacdcb654cf","navbar":{"links":[{"href":"https://dashboard.gojinko.com","label":"Dashboard"}],"primary":{"type":"button","label":"Get API Key","href":"https://dashboard.gojinko.com/developers/keys"}},"footer":{"socials":{"website":"https://gojinko.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"jinko-dev","hasAudioNarration":false,"actualSubdomain":"jinko-dev","customDomains":["docs.dev.gojinko.com"],"gitSource":{"type":"github","owner":"jinkoso","repo":"jinko-dev-platform","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aeece39c11f500273ffd5ec","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":63},{"language":"default","tag":"CLI","count":49},{"language":"default","tag":"Flights","count":43},{"language":"default","tag":"Documentation","count":42},{"language":"default","tag":"MCP","count":23},{"language":"default","tag":"Manage","count":20},{"language":"default","tag":"Trip \u0026 Payment","count":19},{"language":"default","tag":"Discovery","count":17},{"language":"default","tag":"Hotels","count":16},{"language":"default","tag":"Travel Demand","count":14}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/flight-ai-search","slug":"/api/flight-ai-search","pageMetadata":{"title":"flight-ai-search","sidebarTitle":"/v1/flight_ai_search","description":"Search flights from one sentence, with follow-ups","openapi":"api-reference/public-api.yaml POST /v1/flight_ai_search","href":"/api/flight-ai-search"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Search flights from one sentence, with follow-ups\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,..._provideComponents(),...props.components};return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Send the traveller’s request in one sentence. The answer comes within about 20 seconds with `,_jsx(_components.code,{children:`200`}),`: the options, or a question to answer in the same conversation. When the search takes longer, the answer is `,_jsx(_components.code,{children:`202`}),` with the early reply and a `,_jsx(_components.code,{children:`Location`}),` to read until the task ends. Continue the conversation with its `,_jsx(_components.code,{children:`context_id`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Every option is priced live and carries `,_jsx(_components.code,{children:`fares`}),`: book one by adding its `,_jsx(_components.code,{children:`trip_item_token`}),` with `,_jsx(_components.code,{children:`POST /v1/trip`}),` `,_jsx(_components.code,{children:`add_item`}),` before its `,_jsx(_components.code,{children:`expires_at`}),`. The JSON answer of an ended turn carries its `,_jsx(_components.code,{children:`charge`}),`; the event stream does not.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"flight-ai-search","sidebarTitle":"/v1/flight_ai_search","description":"Search flights from one sentence, with follow-ups","openapi":"api-reference/public-api.yaml POST /v1/flight_ai_search","href":"/api/flight-ai-search"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Discovery"],"summary":"Search flights from one sentence, with follow-ups","description":"Search flights from one sentence, with follow-ups","security":["17528bd0-6968-4570-a12c-f1f560657255","5f9adf9b-2efa-4354-818e-ec52670723c9"],"servers":["67b9195b-c9d2-4d58-8c01-216daf7ffbc0"],"parameters":["c09dd057-00f6-45cc-aeef-a97470fef3f2","1742140d-5628-4142-9a9d-23eebc6bea05"],"requestBody":"da010dad-21c4-4269-bd73-3ba7e0560022","responses":{"200":"7f3ef5f3-e42c-4983-a1f2-9bf6d73a365b","202":"3831f1f2-3afa-49d3-b972-61b2a1f4b69d","400":"afb1b45e-d761-4dac-8bab-443b99bfb374","401":"32829944-e0c0-4860-8cb5-91b39cf2cace","402":"02f63f6f-03fb-4ce0-ba16-14809ef961d2","403":"28041eb4-75f6-4231-8299-03d2df752775","404":"fcd68536-cd8e-4d26-9fe6-a5454b401a1f","410":"b8729a0b-2826-4c88-954d-afbee1f9fd70","422":"3d9fedda-6fc8-4bad-9736-cd02cbfcf521","429":"2d39d0c5-ea65-4a91-98b3-76253bf6270b","502":"4d2dbe53-a690-4be2-a42e-40270a58a45b","503":"34b86779-8692-400e-9a5a-783765abf7be","504":"da74c518-96c1-49a3-bb4a-d8fca5c4ab54"},"method":"post","type":"path","path":"/v1/flight_ai_search","baseUrlOptions":["https://api.gojinko.com"],"title":"Search flights from one sentence, with follow-ups","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c09dd057-00f6-45cc-aeef-a97470fef3f2":{"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Makes a retried message safe: a retry with the same key answers the first message again instead of sending a second one. Keys are scoped to the caller, not to the conversation, and the retried body is not compared: a different message needs a new key. 1–200 characters.","isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"name":"Idempotency-Key","in":"header"},"1742140d-5628-4142-9a9d-23eebc6bea05":{"schema":{"type":"string","maxLength":200,"description":"`wait=N` (RFC 7240): answer after at most N seconds, never more than 20, with `202` and the early reply if the task has not ended by then. `wait=0` answers at once. Without it the wait is 20 seconds. The wait applied is returned in `Preference-Applied`.","example":"wait=0","isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"name":"Prefer","in":"header"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":2000,"description":"The traveller's request in one sentence, or the answer to the question asked in the previous turn.","example":"Paris to Tokyo 3–17 October 2027 for 4, at most one stop","isRequired":true,"uniqueKey":"text","typeLabel":"string"},"timezone":{"type":"string","description":"The traveller's IANA time zone. Relative dates such as \"next weekend\" or \"in March\" are computed in it.","example":"Europe/Paris","isRequired":true,"uniqueKey":"timezone","typeLabel":"string"},"context_id":{"type":"string","minLength":1,"maxLength":100,"description":"The conversation to continue, from an earlier answer. Omit to start a new conversation.","example":"ctx_example","uniqueKey":"context_id","typeLabel":"string"},"task_id":{"type":"string","minLength":1,"maxLength":100,"description":"The task of that conversation the message answers. Optional: without it, a message continues the task waiting for an answer, or starts a new one.","example":"atk_example","uniqueKey":"task_id","typeLabel":"string"},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"Currency of the prices (ISO 4217).","example":"EUR","uniqueKey":"currency","typeLabel":"string"},"effort":{"type":"string","enum":["low","medium","high"],"description":"How much the search may do before it answers. `low` answers soonest; `high` checks the most and searches the most options. Defaults to `medium`.","example":"medium","uniqueKey":"effort","typeLabel":"enum\u003cstring>"}},"required":["text","timezone"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"text":"Paris to Tokyo 3–17 October 2027 for 4, at most one stop","timezone":"Europe/Paris","context_id":"ctx_example","task_id":"atk_example","currency":"EUR","effort":"medium"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"7f3ef5f3-e42c-4983-a1f2-9bf6d73a365b":{"description":"The task ended this turn; or, with `Accept: text/event-stream`, the turn as it happens.","headers":{"Preference-Applied":{"schema":{"type":"string"},"description":"The wait applied, as `wait=\u003cseconds>`, when the request sent `Prefer: wait=N`."}},"content":{"application/json":{"schema":{"type":"object","properties":{"context_id":{"oneOf":[{"type":"string","description":"The conversation; send it with the next message to continue.","example":"ctx_example","isRequired":true,"uniqueKey":"context_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The conversation; send it with the next message to continue.","example":"ctx_example","isRequired":true,"uniqueKey":"context_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"context_id","typeLabel":"string | null"},"task_id":{"type":"string","example":"atk_example","isRequired":true,"uniqueKey":"task_id","typeLabel":"string"},"status":{"type":"string","enum":["working","input_required","completed","failed","canceled"],"description":"`working`: the search is still running, read the task again. `input_required`: the message asks a question; answer it in the same conversation. `completed`: the options are in the answer. `failed`: see `error`. `canceled`: a later message or a cancel replaced it.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"The reply to show the traveller, in English.","example":"Three round-trip options Paris–Tokyo, 3–17 Oct 2027, for 4 adults with at most one stop.","uniqueKey":"message","typeLabel":"string"},"question":{"type":"string","enum":["origin","which_place","dates","passengers","group_too_large","contradiction","relax","out_of_scope"],"description":"What the reply asks for, when `status` is `input_required`. `relax`: no flight met every condition of the request; the reply names them and asks which one to drop or change.","uniqueKey":"question","typeLabel":"enum\u003cstring>"},"question_options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"What to send back as `text`.","example":"SJO","isRequired":true,"uniqueKey":"question_options.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","example":"San José, Costa Rica","isRequired":true,"uniqueKey":"question_options.items.[INDEX].label","typeLabel":"string"},"detail":{"type":"string","example":"1 airport","uniqueKey":"question_options.items.[INDEX].detail","typeLabel":"string"}},"required":["value","label"],"uniqueKey":"question_options.items.[INDEX]","typeLabel":"object"},"description":"Choices for the question, when it has some.","uniqueKey":"question_options","typeLabel":"object[]"},"criteria":{"type":"object","properties":{"trip_type":{"type":"string","enum":["oneway","roundtrip","multi_city"],"isRequired":true,"uniqueKey":"criteria.trip_type","typeLabel":"enum\u003cstring>"},"origins":{"type":"array","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].code","typeLabel":"string | null"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","example":"FR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].country_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"FR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].country_code","typeLabel":"string | null"}},"required":["code","type","name","country_code"],"uniqueKey":"criteria.origins.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"criteria.origins","typeLabel":"object[]"},"passengers":{"type":"object","properties":{"adults":{"type":"integer","minimum":0,"example":4,"isRequired":true,"uniqueKey":"criteria.passengers.adults","typeLabel":"integer"},"children":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"criteria.passengers.children","typeLabel":"integer"},"infants":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"criteria.passengers.infants","typeLabel":"integer"}},"required":["adults","children","infants"],"isRequired":true,"uniqueKey":"criteria.passengers","typeLabel":"object"},"currency":{"type":"string","example":"USD","isRequired":true,"uniqueKey":"criteria.currency","typeLabel":"string"},"destinations":{"type":"array","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].code","typeLabel":"string | null"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","example":"FR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].country_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"FR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].country_code","typeLabel":"string | null"}},"required":["code","type","name","country_code"],"uniqueKey":"criteria.destinations.items.[INDEX]","typeLabel":"object"},"uniqueKey":"criteria.destinations","typeLabel":"object[]"},"legs":{"type":"array","items":{"type":"object","properties":{"origin":{"type":"string","description":"IATA city or airport code.","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].origin","typeLabel":"string"},"destination":{"type":"string","description":"IATA city or airport code.","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].destination","typeLabel":"string"},"departure":{"oneOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].departure.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].departure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].departure","typeLabel":"string | null"}},"required":["origin","destination","departure"],"uniqueKey":"criteria.legs.items.[INDEX]","typeLabel":"object"},"description":"Each flight of a multi-city trip, in order.","uniqueKey":"criteria.legs","typeLabel":"object[]"},"departure":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"One day.","example":"2027-10-03","uniqueKey":"criteria.departure.date","typeLabel":"string"},"window":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.departure.window.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.departure.window.end","typeLabel":"string"}},"required":["start","end"],"description":"Any day from `start` to `end`, when the request gives no day.","uniqueKey":"criteria.departure.window","typeLabel":"object"},"flexibility_days":{"type":"integer","minimum":0,"description":"Days either side the request accepts (\"flexible\", \"± 2 days\").","example":3,"uniqueKey":"criteria.departure.flexibility_days","typeLabel":"integer"},"weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"uniqueKey":"criteria.departure.weekdays.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The days of the week the trips leave on, when the request fixes them: `thursday` and `friday` for a long weekend, `friday` for a weekend.","uniqueKey":"criteria.departure.weekdays","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"criteria.departure","typeLabel":"object"},"return":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"One day.","example":"2027-10-03","uniqueKey":"criteria.return.date","typeLabel":"string"},"window":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.return.window.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.return.window.end","typeLabel":"string"}},"required":["start","end"],"description":"Any day from `start` to `end`, when the request gives no day.","uniqueKey":"criteria.return.window","typeLabel":"object"},"flexibility_days":{"type":"integer","minimum":0,"description":"Days either side the request accepts (\"flexible\", \"± 2 days\").","example":3,"uniqueKey":"criteria.return.flexibility_days","typeLabel":"integer"},"weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"uniqueKey":"criteria.return.weekdays.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The days of the week the trips leave on, when the request fixes them: `thursday` and `friday` for a long weekend, `friday` for a weekend.","uniqueKey":"criteria.return.weekdays","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"criteria.return","typeLabel":"object"},"stay_days":{"oneOf":[{"type":"integer","description":"How long the trip lasts, when the request gives no return day.","uniqueKey":"criteria.stay_days.oneOf.0","typeLabel":"integer"},{"type":"object","description":"How long the trip lasts, when the request gives no return day.","required":["min","max"],"properties":{"min":{"type":"integer","isRequired":true,"uniqueKey":"criteria.stay_days.oneOf.1.min","typeLabel":"integer"},"max":{"type":"integer","isRequired":true,"uniqueKey":"criteria.stay_days.oneOf.1.max","typeLabel":"integer"}},"uniqueKey":"criteria.stay_days.oneOf.1","typeLabel":"object"}],"uniqueKey":"criteria.stay_days","typeLabel":"integer | object"},"cabin_class":{"type":"string","enum":["economy","premium_economy","business","first"],"uniqueKey":"criteria.cabin_class","typeLabel":"enum\u003cstring>"},"max_stops":{"type":"integer","minimum":0,"uniqueKey":"criteria.max_stops","typeLabel":"integer"},"include_carriers":{"type":"array","items":{"type":"string","uniqueKey":"criteria.include_carriers.items.[INDEX]","typeLabel":"string"},"description":"IATA airline codes.","uniqueKey":"criteria.include_carriers","typeLabel":"string[]"},"exclude_carriers":{"type":"array","items":{"type":"string","uniqueKey":"criteria.exclude_carriers.items.[INDEX]","typeLabel":"string"},"description":"IATA airline codes.","uniqueKey":"criteria.exclude_carriers","typeLabel":"string[]"},"checked_bag_included":{"type":"boolean","uniqueKey":"criteria.checked_bag_included","typeLabel":"boolean"},"refundable_only":{"type":"boolean","uniqueKey":"criteria.refundable_only","typeLabel":"boolean"},"changeable_only":{"type":"boolean","uniqueKey":"criteria.changeable_only","typeLabel":"boolean"},"departure_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.departure_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.departure_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.departure_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.departure_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.departure_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.departure_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.departure_time_range","typeLabel":"object"},"arrival_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.arrival_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.arrival_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.arrival_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.arrival_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.arrival_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.arrival_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.arrival_time_range","typeLabel":"object"},"return_departure_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_departure_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_departure_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.return_departure_time_range","typeLabel":"object"},"return_arrival_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.return_arrival_time_range","typeLabel":"object"},"connection_time_max_minutes":{"type":"integer","uniqueKey":"criteria.connection_time_max_minutes","typeLabel":"integer"},"max_total_duration_minutes":{"type":"integer","uniqueKey":"criteria.max_total_duration_minutes","typeLabel":"integer"},"via_airports":{"type":"array","items":{"type":"string","uniqueKey":"criteria.via_airports.items.[INDEX]","typeLabel":"string"},"uniqueKey":"criteria.via_airports","typeLabel":"string[]"},"exclude_via_airports":{"type":"array","items":{"type":"string","uniqueKey":"criteria.exclude_via_airports.items.[INDEX]","typeLabel":"string"},"uniqueKey":"criteria.exclude_via_airports","typeLabel":"string[]"},"budget":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"criteria.budget.amount","typeLabel":"number"},"currency":{"type":"string","isRequired":true,"uniqueKey":"criteria.budget.currency","typeLabel":"string"},"scope":{"type":"string","enum":["total","per_person"],"isRequired":true,"uniqueKey":"criteria.budget.scope","typeLabel":"enum\u003cstring>"}},"required":["amount","currency","scope"],"uniqueKey":"criteria.budget","typeLabel":"object"},"priority":{"type":"string","enum":["price","duration","connections","schedule","balanced"],"description":"Only when the request says how to rank the options.","uniqueKey":"criteria.priority","typeLabel":"enum\u003cstring>"},"intent":{"type":"object","properties":{"user_intent":{"type":"string","isRequired":true,"uniqueKey":"criteria.intent.user_intent","typeLabel":"string"}},"required":["user_intent"],"description":"The request as understood, in English.","uniqueKey":"criteria.intent","typeLabel":"object"}},"required":["trip_type","origins","passengers","currency"],"description":"The search the request was understood as: `trip_type`, `origins`, `destinations`, `departure`, `return`, `passengers`, `priority` (only when the request says how to rank the options), `currency`, and the filters, in the `flight_search` field names. Each place of `origins` and `destinations` has `code`, `type`, `name` and `country_code`; `code` is null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`. `departure` has `weekdays` when the request fixes the days of the week the trips leave on: `thursday` and `friday` for a long weekend, `friday` for a weekend. A field is absent when the request did not state it, except `passengers` and `currency`, which carry the values searched with.","uniqueKey":"criteria","typeLabel":"object"},"notes":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","example":"passengers_assumed_adults","isRequired":true,"uniqueKey":"notes.items.[INDEX].kind","typeLabel":"string"}},"required":["kind"],"uniqueKey":"notes.items.[INDEX]","typeLabel":"object"},"description":"Assumptions and adjustments made while understanding the request and searching, each with a `kind` and the fields of that kind, and an optional `text`.","uniqueKey":"notes","typeLabel":"object[]"},"options":{"type":"array","items":{"type":"object","properties":{"option_id":{"type":"string","description":"Identifies the option within the answer; `groups` name options by it.","example":"s1_1","isRequired":true,"uniqueKey":"options.items.[INDEX].option_id","typeLabel":"string"},"trip_type":{"type":"string","enum":["oneway","roundtrip","multi_city"],"isRequired":true,"uniqueKey":"options.items.[INDEX].trip_type","typeLabel":"enum\u003cstring>"},"legs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":1,"description":"The leg number, from 1.","example":1,"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].index","typeLabel":"integer"},"origin":{"type":"object","properties":{"code":{"type":"string","description":"IATA city or airport code.","example":"PAR","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin.code","typeLabel":"string"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin.name","typeLabel":"string"},"airport":{"type":"string","description":"IATA airport code.","example":"CDG","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin.airport","typeLabel":"string"}},"required":["code","name"],"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin","typeLabel":"object"},"destination":{"type":"object","properties":{"code":{"type":"string","description":"IATA city or airport code.","example":"PAR","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination.code","typeLabel":"string"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination.name","typeLabel":"string"},"airport":{"type":"string","description":"IATA airport code.","example":"CDG","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination.airport","typeLabel":"string"}},"required":["code","name"],"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination","typeLabel":"object"},"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at the origin.","example":"2027-10-03T10:20:00","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].departure","typeLabel":"string"},"arrival":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at the destination.","example":"2027-10-03T10:20:00","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].arrival","typeLabel":"string"},"duration_minutes":{"type":"integer","example":975,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].duration_minutes","typeLabel":"integer"},"stops":{"type":"integer","minimum":0,"example":1,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].stops","typeLabel":"integer"},"segments":{"type":"array","items":{"type":"object","properties":{"marketing_carrier":{"type":"string","description":"IATA code of the marketing airline.","example":"AF","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].marketing_carrier","typeLabel":"string"},"flight_number":{"type":"string","example":"AF1240","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].flight_number","typeLabel":"string"},"origin":{"type":"string","description":"IATA airport code.","example":"CDG","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].origin","typeLabel":"string"},"destination":{"type":"string","description":"IATA airport code.","example":"AMS","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].destination","typeLabel":"string"},"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at `origin`.","example":"2027-10-03T10:20:00","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].departure","typeLabel":"string"},"arrival":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at `destination`.","example":"2027-10-03T10:20:00","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].arrival","typeLabel":"string"},"duration_minutes":{"type":"integer","example":80,"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].duration_minutes","typeLabel":"integer"},"operating_carrier":{"type":"string","description":"IATA code of the operating airline, when it differs.","example":"KL","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].operating_carrier","typeLabel":"string"},"layover_minutes":{"type":"integer","description":"The connection time before the next segment; absent on the last one.","example":140,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].layover_minutes","typeLabel":"integer"}},"required":["marketing_carrier","flight_number","origin","destination","departure","arrival","duration_minutes"],"description":"One flight of a leg.","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX]","typeLabel":"object"},"description":"The flights of the leg.","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments","typeLabel":"object[]"}},"required":["index","origin","destination","departure"],"description":"One direction of an itinerary: outbound, return, or one leg of a multi-city trip.","uniqueKey":"options.items.[INDEX].legs.items.[INDEX]","typeLabel":"object"},"description":"1 for one way, 2 for a round trip, 2 to 4 for a multi-city trip.","isRequired":true,"uniqueKey":"options.items.[INDEX].legs","typeLabel":"object[]"},"fares":{"type":"array","items":{"type":"object","properties":{"trip_item_token":{"type":"string","description":"Add this fare to a trip with `POST /v1/trip` `add_item`, before `expires_at`. After that the token is refused; use the token of a newer answer. \"Show me more\" in the same conversation searches expired options again.","example":"offer_7f3a9c21_1b2c3d4e:trip_item_0","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].trip_item_token","typeLabel":"string"},"brand_name":{"type":"string","example":"Economy Light","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].brand_name","typeLabel":"string"},"cabin_class":{"type":"string","example":"economy","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].cabin_class","typeLabel":"string"},"total":{"type":"object","description":"The price for every traveller.","required":["amount","currency"],"properties":{"amount":{"type":"number","description":"The amount in major units of `currency` (e.g. 3412.5 for EUR 3,412.50).","example":3412,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].total.amount","typeLabel":"number"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"EUR","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].total.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].total","typeLabel":"object"},"price_per_person":{"type":"object","description":"The price for one traveller.","required":["amount","currency"],"properties":{"amount":{"type":"number","description":"The amount in major units of `currency` (e.g. 3412.5 for EUR 3,412.50).","example":3412,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].price_per_person.amount","typeLabel":"number"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"EUR","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].price_per_person.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].price_per_person","typeLabel":"object"},"priced_for":{"type":"object","properties":{"adults":{"type":"integer","minimum":0,"example":4,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for.adults","typeLabel":"integer"},"children":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for.children","typeLabel":"integer"},"infants":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for.infants","typeLabel":"integer"}},"required":["adults","children","infants"],"description":"The travellers `total` is for.","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for","typeLabel":"object"},"expires_at":{"type":"string","format":"date-time","description":"Until when `trip_item_token` can be added to a trip (UTC): at most 75 minutes after the search, earlier when the fare's own deadline is.","example":"2026-10-27T10:58:12Z","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time>"},"refundable":{"type":"boolean","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].refundable","typeLabel":"boolean"},"changeable":{"type":"boolean","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].changeable","typeLabel":"boolean"},"checked_bag_included":{"type":"boolean","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].checked_bag_included","typeLabel":"boolean"},"carry_on_baggage":{"type":"string","example":"1 × 12 kg","uniqueKey":"options.items.[INDEX].fares.items.[INDEX].carry_on_baggage","typeLabel":"string"},"included_baggage":{"type":"string","description":"The checked baggage included.","example":"1 × 23 kg","uniqueKey":"options.items.[INDEX].fares.items.[INDEX].included_baggage","typeLabel":"string"}},"required":["trip_item_token","brand_name","cabin_class","total","price_per_person","priced_for","expires_at","refundable","changeable","checked_bag_included"],"description":"A bookable fare of a live option, priced live for the travellers of the request.","uniqueKey":"options.items.[INDEX].fares.items.[INDEX]","typeLabel":"object"},"description":"The bookable fares.","uniqueKey":"options.items.[INDEX].fares","typeLabel":"object[]"},"score":{"type":"integer","minimum":0,"maximum":100,"description":"How well the option fits the request, 0–100, relative to this answer.","example":100,"uniqueKey":"options.items.[INDEX].score","typeLabel":"integer"},"why":{"type":"string","description":"One sentence on why the option is shown.","example":"Cheapest total for 4; one stop each way in Amsterdam.","uniqueKey":"options.items.[INDEX].why","typeLabel":"string"}},"required":["option_id","trip_type","legs"],"description":"One itinerary of an answer and its prices.","uniqueKey":"options.items.[INDEX]","typeLabel":"object"},"description":"Every itinerary of the answer, each priced live.","uniqueKey":"options","typeLabel":"object[]"},"groups":{"type":"array","items":{"oneOf":[{"type":"object","description":"How to present the options; groups name them by `option_id`. `shortlist`: the options for one route and dates. `per_destination`: one row per destination compared. Options always meet every filter of the request; a row without one says why in `empty_reason`.","required":["kind","group_id","title","route","dates","option_ids"],"properties":{"kind":{"type":"string","enum":["shortlist"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"},"group_id":{"type":"string","example":"g_1","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.group_id","typeLabel":"string"},"title":{"type":"string","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.title","typeLabel":"string"},"route":{"oneOf":[{"type":"object","properties":{"origin":{"type":"string","example":"PAR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.0.origin","typeLabel":"string"},"destination":{"type":"string","example":"TYO","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.0.destination","typeLabel":"string"}},"required":["origin","destination"],"description":"Null for a multi-city trip.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"origin":{"type":"string","example":"PAR"},"destination":{"type":"string","example":"TYO"}},"required":["origin","destination"],"description":"Null for a multi-city trip.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route","typeLabel":"object | null"},"dates":{"oneOf":[{"type":"object","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.0.departure","typeLabel":"string"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.0.return","typeLabel":"string"}},"required":["departure"],"description":"Null when the options differ in dates.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"}},"required":["departure"],"description":"Null when the options differ in dates.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates","typeLabel":"object | null"},"option_ids":{"type":"array","items":{"type":"string","uniqueKey":"groups.items.[INDEX].oneOf.0.option_ids.items.[INDEX]","typeLabel":"string"},"description":"The options, best first.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.option_ids","typeLabel":"string[]"}},"uniqueKey":"groups.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"How to present the options; groups name them by `option_id`. `shortlist`: the options for one route and dates. `per_destination`: one row per destination compared. Options always meet every filter of the request; a row without one says why in `empty_reason`.","required":["kind","group_id","title","origin","rows"],"properties":{"kind":{"type":"string","enum":["per_destination"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"group_id":{"type":"string","example":"g_1","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.group_id","typeLabel":"string"},"title":{"type":"string","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.title","typeLabel":"string"},"origin":{"type":"object","properties":{"code":{"type":"string","description":"IATA city, airport or country code. For a region or a kind of trip, the first airport searched for it.","example":"PAR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.code","typeLabel":"string"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"description":"region: an area of several countries or a part of one (\"the Caribbean\", \"Puglia\"). theme: a kind of trip named instead of a place (\"skiing at Christmas\"), searched at the destinations that fit it; `name` says which (\"ski destinations\").","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.country_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.country_code","typeLabel":"string | null"},"alternates":{"type":"array","items":{"type":"string","uniqueKey":"groups.items.[INDEX].oneOf.1.origin.alternates.items.[INDEX]","typeLabel":"string"},"description":"Other airports searched for this place.","uniqueKey":"groups.items.[INDEX].oneOf.1.origin.alternates","typeLabel":"string[]"}},"required":["code","type","name","country_code"],"description":"A place the request was understood to name.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin","typeLabel":"object"},"rows":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"object","properties":{"code":{"type":"string","description":"IATA city, airport or country code. For a region or a kind of trip, the first airport searched for it.","example":"PAR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.code","typeLabel":"string"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"description":"region: an area of several countries or a part of one (\"the Caribbean\", \"Puglia\"). theme: a kind of trip named instead of a place (\"skiing at Christmas\"), searched at the destinations that fit it; `name` says which (\"ski destinations\").","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.country_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.country_code","typeLabel":"string | null"},"alternates":{"type":"array","items":{"type":"string","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.alternates.items.[INDEX]","typeLabel":"string"},"description":"Other airports searched for this place.","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.alternates","typeLabel":"string[]"}},"required":["code","type","name","country_code"],"description":"A place the request was understood to name.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination","typeLabel":"object"},"dates":{"oneOf":[{"type":"object","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.0.departure","typeLabel":"string"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.0.return","typeLabel":"string"}},"required":["departure"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"}},"required":["departure"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates","typeLabel":"object | null"},"option_id":{"oneOf":[{"type":"string","description":"The best live option for this destination; null when there is none.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].option_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The best live option for this destination; null when there is none.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].option_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].option_id","typeLabel":"string | null"},"live_cheapest_total":{"type":"object","description":"An amount of money and its currency.","required":["amount","currency"],"properties":{"amount":{"type":"number","description":"The amount in major units of `currency` (e.g. 3412.5 for EUR 3,412.50).","example":3412,"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].live_cheapest_total.amount","typeLabel":"number"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"EUR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].live_cheapest_total.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].live_cheapest_total","typeLabel":"object"},"summary":{"type":"string","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].summary","typeLabel":"string"},"empty_reason":{"type":"string","enum":["no_fare_within_filters","not_searched"],"description":"Why `option_id` is null.","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].empty_reason","typeLabel":"enum\u003cstring>"}},"required":["destination","dates","option_id","live_cheapest_total","summary"],"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows","typeLabel":"object[]"}},"uniqueKey":"groups.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"groups.items.[INDEX]","typeLabel":"object"},"uniqueKey":"groups","typeLabel":"object[]"},"has_more":{"type":"boolean","description":"More options are available; ask for more in the same conversation.","uniqueKey":"has_more","typeLabel":"boolean"},"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"description":"Why the task failed, when `status` is `failed`.","uniqueKey":"error","typeLabel":"object"},"superseded_by":{"type":"string","description":"The task that replaced this one, when `status` is `canceled`.","uniqueKey":"superseded_by","typeLabel":"string"},"charge":{"type":"object","properties":{"turn":{"type":"integer","description":"The message of the conversation this charge is for, from 1: the first message is 1 and each next message adds 1, whether it answers a question or asks for something new.","example":1,"isRequired":true,"uniqueKey":"charge.turn","typeLabel":"integer"},"llm_usd":{"type":"number","description":"The language-model part of the charge, in USD.","example":0.0195,"isRequired":true,"uniqueKey":"charge.llm_usd","typeLabel":"number"},"api_usd":{"type":"number","description":"The flight search part of the charge, in USD.","example":0.01,"isRequired":true,"uniqueKey":"charge.api_usd","typeLabel":"number"},"total_usd":{"type":"number","description":"`llm_usd` + `api_usd`.","example":0.0295,"isRequired":true,"uniqueKey":"charge.total_usd","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"isRequired":true,"uniqueKey":"charge.currency","typeLabel":"enum\u003cstring>"}},"required":["turn","llm_usd","api_usd","total_usd","currency"],"description":"What a turn was charged to the organization's balance, once the turn has ended (`completed`, `input_required`, `failed` or `canceled`); every amount is 0 when the turn cost nothing. Absent while the task is `working`. Carried on JSON answers only: an event stream does not carry it, so read it with `GET /v1/flight_ai_search/tasks/{task_id}`.","uniqueKey":"charge","typeLabel":"object"}},"required":["context_id","task_id","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"context_id":"ctx_example","task_id":"atk_example","status":"working","message":"Three round-trip options Paris–Tokyo, 3–17 Oct 2027, for 4 adults with at most one stop.","question":"origin","question_options":[{"value":"SJO","label":"San José, Costa Rica","detail":"1 airport"}],"criteria":{"trip_type":"oneway","origins":[{"code":"PAR","type":"city","name":"Paris","country_code":"FR"}],"passengers":{"adults":4,"children":0,"infants":0},"currency":"USD","destinations":[{"code":"PAR","type":"city","name":"Paris","country_code":"FR"}],"legs":[{"origin":"\u003cstring>","destination":"\u003cstring>","departure":"2027-10-03"}],"departure":{"date":"2027-10-03","window":{"start":"2027-10-03","end":"2027-10-03"},"flexibility_days":3,"weekdays":["monday"]},"return":{"date":"2027-10-03","window":{"start":"2027-10-03","end":"2027-10-03"},"flexibility_days":3,"weekdays":["monday"]},"stay_days":123,"cabin_class":"economy","max_stops":1,"include_carriers":["\u003cstring>"],"exclude_carriers":["\u003cstring>"],"checked_bag_included":true,"refundable_only":true,"changeable_only":true,"departure_time_range":{"earliest":"18:00","latest":null},"arrival_time_range":{"earliest":"18:00","latest":null},"return_departure_time_range":{"earliest":"18:00","latest":null},"return_arrival_time_range":{"earliest":"18:00","latest":null},"connection_time_max_minutes":123,"max_total_duration_minutes":123,"via_airports":["\u003cstring>"],"exclude_via_airports":["\u003cstring>"],"budget":{"amount":123,"currency":"\u003cstring>","scope":"total"},"priority":"price","intent":{"user_intent":"\u003cstring>"}},"notes":[{"kind":"passengers_assumed_adults"}],"options":[{"option_id":"s1_1","trip_type":"oneway","legs":[{"index":1,"origin":{"code":"PAR","name":"Paris","airport":"CDG"},"destination":{"code":"PAR","name":"Paris","airport":"CDG"},"departure":"2027-10-03T10:20:00","arrival":"2027-10-03T10:20:00","duration_minutes":975,"stops":1,"segments":[{"marketing_carrier":"AF","flight_number":"AF1240","origin":"CDG","destination":"AMS","departure":"2027-10-03T10:20:00","arrival":"2027-10-03T10:20:00","duration_minutes":80,"operating_carrier":"KL","layover_minutes":140}]}],"fares":[{"trip_item_token":"offer_7f3a9c21_1b2c3d4e:trip_item_0","brand_name":"Economy Light","cabin_class":"economy","total":{"amount":3412,"currency":"EUR"},"price_per_person":{"amount":3412,"currency":"EUR"},"priced_for":{"adults":4,"children":0,"infants":0},"expires_at":"2026-10-27T10:58:12Z","refundable":true,"changeable":true,"checked_bag_included":true,"carry_on_baggage":"1 × 12 kg","included_baggage":"1 × 23 kg"}],"score":100,"why":"Cheapest total for 4; one stop each way in Amsterdam."}],"groups":[{"kind":"shortlist","group_id":"g_1","title":"\u003cstring>","route":{"origin":"PAR","destination":"TYO"},"dates":{"departure":"2027-10-03","return":"2027-10-03"},"option_ids":["\u003cstring>"]}],"has_more":true,"error":{"code":"\u003cstring>","message":"\u003cstring>"},"superseded_by":"\u003cstring>","charge":{"turn":1,"llm_usd":0.0195,"api_usd":0.01,"total_usd":0.0295,"currency":"USD"}}}},"exampleType":"generated"},"text/event-stream":{"schema":{"type":"string","description":"Server-Sent Events, one per task event: `id` is its sequence number (send it back as `Last-Event-ID` to resume), `event` is `task.status` (`status` `submitted` or `working`), `agent.message` (the early reply first), or `task.completed` / `task.input_required` / `task.failed` / `task.canceled` / `task.expired` for the status that ends the turn; `data` is JSON and carries `task_id` and `context_id`. Events carry no `charge`: read it with `GET /v1/flight_ai_search/tasks/{task_id}` once the turn has ended. The stream ends with the turn, or after 45 seconds: resume it with the `Last-Event-ID` of the last event received.","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"\u003cstring>"}},"exampleType":"generated"}},"exampleType":"generated"},"3831f1f2-3afa-49d3-b972-61b2a1f4b69d":{"description":"The search is still running: the early reply. Read `Location` after Retry-After.","headers":{"Location":{"schema":{"type":"string"},"description":"The task to read for the final answer."},"Retry-After":{"schema":{"type":"string"},"description":"Seconds to wait before reading the task again."},"Preference-Applied":{"schema":{"type":"string"},"description":"The wait applied, as `wait=\u003cseconds>`, when the request sent `Prefer: wait=N`."}},"content":{"application/json":{"schema":{"type":"object","properties":{"context_id":{"oneOf":[{"type":"string","description":"The conversation; send it with the next message to continue.","example":"ctx_example","isRequired":true,"uniqueKey":"context_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The conversation; send it with the next message to continue.","example":"ctx_example","isRequired":true,"uniqueKey":"context_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"context_id","typeLabel":"string | null"},"task_id":{"type":"string","example":"atk_example","isRequired":true,"uniqueKey":"task_id","typeLabel":"string"},"status":{"type":"string","enum":["working","input_required","completed","failed","canceled"],"description":"`working`: the search is still running, read the task again. `input_required`: the message asks a question; answer it in the same conversation. `completed`: the options are in the answer. `failed`: see `error`. `canceled`: a later message or a cancel replaced it.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"The reply to show the traveller, in English.","example":"Three round-trip options Paris–Tokyo, 3–17 Oct 2027, for 4 adults with at most one stop.","uniqueKey":"message","typeLabel":"string"},"question":{"type":"string","enum":["origin","which_place","dates","passengers","group_too_large","contradiction","relax","out_of_scope"],"description":"What the reply asks for, when `status` is `input_required`. `relax`: no flight met every condition of the request; the reply names them and asks which one to drop or change.","uniqueKey":"question","typeLabel":"enum\u003cstring>"},"question_options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string","description":"What to send back as `text`.","example":"SJO","isRequired":true,"uniqueKey":"question_options.items.[INDEX].value","typeLabel":"string"},"label":{"type":"string","example":"San José, Costa Rica","isRequired":true,"uniqueKey":"question_options.items.[INDEX].label","typeLabel":"string"},"detail":{"type":"string","example":"1 airport","uniqueKey":"question_options.items.[INDEX].detail","typeLabel":"string"}},"required":["value","label"],"uniqueKey":"question_options.items.[INDEX]","typeLabel":"object"},"description":"Choices for the question, when it has some.","uniqueKey":"question_options","typeLabel":"object[]"},"criteria":{"type":"object","properties":{"trip_type":{"type":"string","enum":["oneway","roundtrip","multi_city"],"isRequired":true,"uniqueKey":"criteria.trip_type","typeLabel":"enum\u003cstring>"},"origins":{"type":"array","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].code","typeLabel":"string | null"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","example":"FR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].country_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"FR","isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.origins.items.[INDEX].country_code","typeLabel":"string | null"}},"required":["code","type","name","country_code"],"uniqueKey":"criteria.origins.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"criteria.origins","typeLabel":"object[]"},"passengers":{"type":"object","properties":{"adults":{"type":"integer","minimum":0,"example":4,"isRequired":true,"uniqueKey":"criteria.passengers.adults","typeLabel":"integer"},"children":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"criteria.passengers.children","typeLabel":"integer"},"infants":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"criteria.passengers.infants","typeLabel":"integer"}},"required":["adults","children","infants"],"isRequired":true,"uniqueKey":"criteria.passengers","typeLabel":"object"},"currency":{"type":"string","example":"USD","isRequired":true,"uniqueKey":"criteria.currency","typeLabel":"string"},"destinations":{"type":"array","items":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].code.oneOf.0","typeLabel":"string"},{"type":"null","description":"IATA city or airport code; null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`.","example":"PAR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].code","typeLabel":"string | null"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","example":"FR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].country_code.oneOf.0","typeLabel":"string"},{"type":"null","example":"FR","isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.destinations.items.[INDEX].country_code","typeLabel":"string | null"}},"required":["code","type","name","country_code"],"uniqueKey":"criteria.destinations.items.[INDEX]","typeLabel":"object"},"uniqueKey":"criteria.destinations","typeLabel":"object[]"},"legs":{"type":"array","items":{"type":"object","properties":{"origin":{"type":"string","description":"IATA city or airport code.","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].origin","typeLabel":"string"},"destination":{"type":"string","description":"IATA city or airport code.","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].destination","typeLabel":"string"},"departure":{"oneOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].departure.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].departure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.legs.items.[INDEX].departure","typeLabel":"string | null"}},"required":["origin","destination","departure"],"uniqueKey":"criteria.legs.items.[INDEX]","typeLabel":"object"},"description":"Each flight of a multi-city trip, in order.","uniqueKey":"criteria.legs","typeLabel":"object[]"},"departure":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"One day.","example":"2027-10-03","uniqueKey":"criteria.departure.date","typeLabel":"string"},"window":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.departure.window.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.departure.window.end","typeLabel":"string"}},"required":["start","end"],"description":"Any day from `start` to `end`, when the request gives no day.","uniqueKey":"criteria.departure.window","typeLabel":"object"},"flexibility_days":{"type":"integer","minimum":0,"description":"Days either side the request accepts (\"flexible\", \"± 2 days\").","example":3,"uniqueKey":"criteria.departure.flexibility_days","typeLabel":"integer"},"weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"uniqueKey":"criteria.departure.weekdays.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The days of the week the trips leave on, when the request fixes them: `thursday` and `friday` for a long weekend, `friday` for a weekend.","uniqueKey":"criteria.departure.weekdays","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"criteria.departure","typeLabel":"object"},"return":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"One day.","example":"2027-10-03","uniqueKey":"criteria.return.date","typeLabel":"string"},"window":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.return.window.start","typeLabel":"string"},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"criteria.return.window.end","typeLabel":"string"}},"required":["start","end"],"description":"Any day from `start` to `end`, when the request gives no day.","uniqueKey":"criteria.return.window","typeLabel":"object"},"flexibility_days":{"type":"integer","minimum":0,"description":"Days either side the request accepts (\"flexible\", \"± 2 days\").","example":3,"uniqueKey":"criteria.return.flexibility_days","typeLabel":"integer"},"weekdays":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday"],"uniqueKey":"criteria.return.weekdays.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"The days of the week the trips leave on, when the request fixes them: `thursday` and `friday` for a long weekend, `friday` for a weekend.","uniqueKey":"criteria.return.weekdays","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"criteria.return","typeLabel":"object"},"stay_days":{"oneOf":[{"type":"integer","description":"How long the trip lasts, when the request gives no return day.","uniqueKey":"criteria.stay_days.oneOf.0","typeLabel":"integer"},{"type":"object","description":"How long the trip lasts, when the request gives no return day.","required":["min","max"],"properties":{"min":{"type":"integer","isRequired":true,"uniqueKey":"criteria.stay_days.oneOf.1.min","typeLabel":"integer"},"max":{"type":"integer","isRequired":true,"uniqueKey":"criteria.stay_days.oneOf.1.max","typeLabel":"integer"}},"uniqueKey":"criteria.stay_days.oneOf.1","typeLabel":"object"}],"uniqueKey":"criteria.stay_days","typeLabel":"integer | object"},"cabin_class":{"type":"string","enum":["economy","premium_economy","business","first"],"uniqueKey":"criteria.cabin_class","typeLabel":"enum\u003cstring>"},"max_stops":{"type":"integer","minimum":0,"uniqueKey":"criteria.max_stops","typeLabel":"integer"},"include_carriers":{"type":"array","items":{"type":"string","uniqueKey":"criteria.include_carriers.items.[INDEX]","typeLabel":"string"},"description":"IATA airline codes.","uniqueKey":"criteria.include_carriers","typeLabel":"string[]"},"exclude_carriers":{"type":"array","items":{"type":"string","uniqueKey":"criteria.exclude_carriers.items.[INDEX]","typeLabel":"string"},"description":"IATA airline codes.","uniqueKey":"criteria.exclude_carriers","typeLabel":"string[]"},"checked_bag_included":{"type":"boolean","uniqueKey":"criteria.checked_bag_included","typeLabel":"boolean"},"refundable_only":{"type":"boolean","uniqueKey":"criteria.refundable_only","typeLabel":"boolean"},"changeable_only":{"type":"boolean","uniqueKey":"criteria.changeable_only","typeLabel":"boolean"},"departure_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.departure_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.departure_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.departure_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.departure_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.departure_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.departure_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.departure_time_range","typeLabel":"object"},"arrival_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.arrival_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.arrival_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.arrival_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.arrival_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.arrival_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.arrival_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.arrival_time_range","typeLabel":"object"},"return_departure_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_departure_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_departure_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_departure_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.return_departure_time_range","typeLabel":"object"},"return_arrival_time_range":{"type":"object","properties":{"earliest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.earliest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":"18:00","isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.earliest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.earliest","typeLabel":"string | null"},"latest":{"oneOf":[{"type":"string","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.latest.oneOf.0","typeLabel":"string"},{"type":"null","description":"HH:MM, local time.","example":null,"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.latest.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"criteria.return_arrival_time_range.latest","typeLabel":"string | null"}},"required":["earliest","latest"],"uniqueKey":"criteria.return_arrival_time_range","typeLabel":"object"},"connection_time_max_minutes":{"type":"integer","uniqueKey":"criteria.connection_time_max_minutes","typeLabel":"integer"},"max_total_duration_minutes":{"type":"integer","uniqueKey":"criteria.max_total_duration_minutes","typeLabel":"integer"},"via_airports":{"type":"array","items":{"type":"string","uniqueKey":"criteria.via_airports.items.[INDEX]","typeLabel":"string"},"uniqueKey":"criteria.via_airports","typeLabel":"string[]"},"exclude_via_airports":{"type":"array","items":{"type":"string","uniqueKey":"criteria.exclude_via_airports.items.[INDEX]","typeLabel":"string"},"uniqueKey":"criteria.exclude_via_airports","typeLabel":"string[]"},"budget":{"type":"object","properties":{"amount":{"type":"number","isRequired":true,"uniqueKey":"criteria.budget.amount","typeLabel":"number"},"currency":{"type":"string","isRequired":true,"uniqueKey":"criteria.budget.currency","typeLabel":"string"},"scope":{"type":"string","enum":["total","per_person"],"isRequired":true,"uniqueKey":"criteria.budget.scope","typeLabel":"enum\u003cstring>"}},"required":["amount","currency","scope"],"uniqueKey":"criteria.budget","typeLabel":"object"},"priority":{"type":"string","enum":["price","duration","connections","schedule","balanced"],"description":"Only when the request says how to rank the options.","uniqueKey":"criteria.priority","typeLabel":"enum\u003cstring>"},"intent":{"type":"object","properties":{"user_intent":{"type":"string","isRequired":true,"uniqueKey":"criteria.intent.user_intent","typeLabel":"string"}},"required":["user_intent"],"description":"The request as understood, in English.","uniqueKey":"criteria.intent","typeLabel":"object"}},"required":["trip_type","origins","passengers","currency"],"description":"The search the request was understood as: `trip_type`, `origins`, `destinations`, `departure`, `return`, `passengers`, `priority` (only when the request says how to rank the options), `currency`, and the filters, in the `flight_search` field names. Each place of `origins` and `destinations` has `code`, `type`, `name` and `country_code`; `code` is null for a country, a region or a kind of trip, whose airports searched are on each option's `legs`. `departure` has `weekdays` when the request fixes the days of the week the trips leave on: `thursday` and `friday` for a long weekend, `friday` for a weekend. A field is absent when the request did not state it, except `passengers` and `currency`, which carry the values searched with.","uniqueKey":"criteria","typeLabel":"object"},"notes":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","example":"passengers_assumed_adults","isRequired":true,"uniqueKey":"notes.items.[INDEX].kind","typeLabel":"string"}},"required":["kind"],"uniqueKey":"notes.items.[INDEX]","typeLabel":"object"},"description":"Assumptions and adjustments made while understanding the request and searching, each with a `kind` and the fields of that kind, and an optional `text`.","uniqueKey":"notes","typeLabel":"object[]"},"options":{"type":"array","items":{"type":"object","properties":{"option_id":{"type":"string","description":"Identifies the option within the answer; `groups` name options by it.","example":"s1_1","isRequired":true,"uniqueKey":"options.items.[INDEX].option_id","typeLabel":"string"},"trip_type":{"type":"string","enum":["oneway","roundtrip","multi_city"],"isRequired":true,"uniqueKey":"options.items.[INDEX].trip_type","typeLabel":"enum\u003cstring>"},"legs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":1,"description":"The leg number, from 1.","example":1,"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].index","typeLabel":"integer"},"origin":{"type":"object","properties":{"code":{"type":"string","description":"IATA city or airport code.","example":"PAR","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin.code","typeLabel":"string"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin.name","typeLabel":"string"},"airport":{"type":"string","description":"IATA airport code.","example":"CDG","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin.airport","typeLabel":"string"}},"required":["code","name"],"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].origin","typeLabel":"object"},"destination":{"type":"object","properties":{"code":{"type":"string","description":"IATA city or airport code.","example":"PAR","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination.code","typeLabel":"string"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination.name","typeLabel":"string"},"airport":{"type":"string","description":"IATA airport code.","example":"CDG","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination.airport","typeLabel":"string"}},"required":["code","name"],"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].destination","typeLabel":"object"},"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at the origin.","example":"2027-10-03T10:20:00","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].departure","typeLabel":"string"},"arrival":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at the destination.","example":"2027-10-03T10:20:00","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].arrival","typeLabel":"string"},"duration_minutes":{"type":"integer","example":975,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].duration_minutes","typeLabel":"integer"},"stops":{"type":"integer","minimum":0,"example":1,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].stops","typeLabel":"integer"},"segments":{"type":"array","items":{"type":"object","properties":{"marketing_carrier":{"type":"string","description":"IATA code of the marketing airline.","example":"AF","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].marketing_carrier","typeLabel":"string"},"flight_number":{"type":"string","example":"AF1240","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].flight_number","typeLabel":"string"},"origin":{"type":"string","description":"IATA airport code.","example":"CDG","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].origin","typeLabel":"string"},"destination":{"type":"string","description":"IATA airport code.","example":"AMS","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].destination","typeLabel":"string"},"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at `origin`.","example":"2027-10-03T10:20:00","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].departure","typeLabel":"string"},"arrival":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2})?$","description":"Local time at `destination`.","example":"2027-10-03T10:20:00","isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].arrival","typeLabel":"string"},"duration_minutes":{"type":"integer","example":80,"isRequired":true,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].duration_minutes","typeLabel":"integer"},"operating_carrier":{"type":"string","description":"IATA code of the operating airline, when it differs.","example":"KL","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].operating_carrier","typeLabel":"string"},"layover_minutes":{"type":"integer","description":"The connection time before the next segment; absent on the last one.","example":140,"uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX].layover_minutes","typeLabel":"integer"}},"required":["marketing_carrier","flight_number","origin","destination","departure","arrival","duration_minutes"],"description":"One flight of a leg.","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments.items.[INDEX]","typeLabel":"object"},"description":"The flights of the leg.","uniqueKey":"options.items.[INDEX].legs.items.[INDEX].segments","typeLabel":"object[]"}},"required":["index","origin","destination","departure"],"description":"One direction of an itinerary: outbound, return, or one leg of a multi-city trip.","uniqueKey":"options.items.[INDEX].legs.items.[INDEX]","typeLabel":"object"},"description":"1 for one way, 2 for a round trip, 2 to 4 for a multi-city trip.","isRequired":true,"uniqueKey":"options.items.[INDEX].legs","typeLabel":"object[]"},"fares":{"type":"array","items":{"type":"object","properties":{"trip_item_token":{"type":"string","description":"Add this fare to a trip with `POST /v1/trip` `add_item`, before `expires_at`. After that the token is refused; use the token of a newer answer. \"Show me more\" in the same conversation searches expired options again.","example":"offer_7f3a9c21_1b2c3d4e:trip_item_0","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].trip_item_token","typeLabel":"string"},"brand_name":{"type":"string","example":"Economy Light","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].brand_name","typeLabel":"string"},"cabin_class":{"type":"string","example":"economy","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].cabin_class","typeLabel":"string"},"total":{"type":"object","description":"The price for every traveller.","required":["amount","currency"],"properties":{"amount":{"type":"number","description":"The amount in major units of `currency` (e.g. 3412.5 for EUR 3,412.50).","example":3412,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].total.amount","typeLabel":"number"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"EUR","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].total.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].total","typeLabel":"object"},"price_per_person":{"type":"object","description":"The price for one traveller.","required":["amount","currency"],"properties":{"amount":{"type":"number","description":"The amount in major units of `currency` (e.g. 3412.5 for EUR 3,412.50).","example":3412,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].price_per_person.amount","typeLabel":"number"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"EUR","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].price_per_person.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].price_per_person","typeLabel":"object"},"priced_for":{"type":"object","properties":{"adults":{"type":"integer","minimum":0,"example":4,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for.adults","typeLabel":"integer"},"children":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for.children","typeLabel":"integer"},"infants":{"type":"integer","minimum":0,"example":0,"isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for.infants","typeLabel":"integer"}},"required":["adults","children","infants"],"description":"The travellers `total` is for.","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].priced_for","typeLabel":"object"},"expires_at":{"type":"string","format":"date-time","description":"Until when `trip_item_token` can be added to a trip (UTC): at most 75 minutes after the search, earlier when the fare's own deadline is.","example":"2026-10-27T10:58:12Z","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time>"},"refundable":{"type":"boolean","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].refundable","typeLabel":"boolean"},"changeable":{"type":"boolean","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].changeable","typeLabel":"boolean"},"checked_bag_included":{"type":"boolean","isRequired":true,"uniqueKey":"options.items.[INDEX].fares.items.[INDEX].checked_bag_included","typeLabel":"boolean"},"carry_on_baggage":{"type":"string","example":"1 × 12 kg","uniqueKey":"options.items.[INDEX].fares.items.[INDEX].carry_on_baggage","typeLabel":"string"},"included_baggage":{"type":"string","description":"The checked baggage included.","example":"1 × 23 kg","uniqueKey":"options.items.[INDEX].fares.items.[INDEX].included_baggage","typeLabel":"string"}},"required":["trip_item_token","brand_name","cabin_class","total","price_per_person","priced_for","expires_at","refundable","changeable","checked_bag_included"],"description":"A bookable fare of a live option, priced live for the travellers of the request.","uniqueKey":"options.items.[INDEX].fares.items.[INDEX]","typeLabel":"object"},"description":"The bookable fares.","uniqueKey":"options.items.[INDEX].fares","typeLabel":"object[]"},"score":{"type":"integer","minimum":0,"maximum":100,"description":"How well the option fits the request, 0–100, relative to this answer.","example":100,"uniqueKey":"options.items.[INDEX].score","typeLabel":"integer"},"why":{"type":"string","description":"One sentence on why the option is shown.","example":"Cheapest total for 4; one stop each way in Amsterdam.","uniqueKey":"options.items.[INDEX].why","typeLabel":"string"}},"required":["option_id","trip_type","legs"],"description":"One itinerary of an answer and its prices.","uniqueKey":"options.items.[INDEX]","typeLabel":"object"},"description":"Every itinerary of the answer, each priced live.","uniqueKey":"options","typeLabel":"object[]"},"groups":{"type":"array","items":{"oneOf":[{"type":"object","description":"How to present the options; groups name them by `option_id`. `shortlist`: the options for one route and dates. `per_destination`: one row per destination compared. Options always meet every filter of the request; a row without one says why in `empty_reason`.","required":["kind","group_id","title","route","dates","option_ids"],"properties":{"kind":{"type":"string","enum":["shortlist"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.kind","typeLabel":"enum\u003cstring>"},"group_id":{"type":"string","example":"g_1","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.group_id","typeLabel":"string"},"title":{"type":"string","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.title","typeLabel":"string"},"route":{"oneOf":[{"type":"object","properties":{"origin":{"type":"string","example":"PAR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.0.origin","typeLabel":"string"},"destination":{"type":"string","example":"TYO","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.0.destination","typeLabel":"string"}},"required":["origin","destination"],"description":"Null for a multi-city trip.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"origin":{"type":"string","example":"PAR"},"destination":{"type":"string","example":"TYO"}},"required":["origin","destination"],"description":"Null for a multi-city trip.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.route","typeLabel":"object | null"},"dates":{"oneOf":[{"type":"object","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.0.departure","typeLabel":"string"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.0.return","typeLabel":"string"}},"required":["departure"],"description":"Null when the options differ in dates.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"}},"required":["departure"],"description":"Null when the options differ in dates.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.dates","typeLabel":"object | null"},"option_ids":{"type":"array","items":{"type":"string","uniqueKey":"groups.items.[INDEX].oneOf.0.option_ids.items.[INDEX]","typeLabel":"string"},"description":"The options, best first.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.0.option_ids","typeLabel":"string[]"}},"uniqueKey":"groups.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"How to present the options; groups name them by `option_id`. `shortlist`: the options for one route and dates. `per_destination`: one row per destination compared. Options always meet every filter of the request; a row without one says why in `empty_reason`.","required":["kind","group_id","title","origin","rows"],"properties":{"kind":{"type":"string","enum":["per_destination"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.kind","typeLabel":"enum\u003cstring>"},"group_id":{"type":"string","example":"g_1","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.group_id","typeLabel":"string"},"title":{"type":"string","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.title","typeLabel":"string"},"origin":{"type":"object","properties":{"code":{"type":"string","description":"IATA city, airport or country code. For a region or a kind of trip, the first airport searched for it.","example":"PAR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.code","typeLabel":"string"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"description":"region: an area of several countries or a part of one (\"the Caribbean\", \"Puglia\"). theme: a kind of trip named instead of a place (\"skiing at Christmas\"), searched at the destinations that fit it; `name` says which (\"ski destinations\").","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.country_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin.country_code","typeLabel":"string | null"},"alternates":{"type":"array","items":{"type":"string","uniqueKey":"groups.items.[INDEX].oneOf.1.origin.alternates.items.[INDEX]","typeLabel":"string"},"description":"Other airports searched for this place.","uniqueKey":"groups.items.[INDEX].oneOf.1.origin.alternates","typeLabel":"string[]"}},"required":["code","type","name","country_code"],"description":"A place the request was understood to name.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.origin","typeLabel":"object"},"rows":{"type":"array","items":{"type":"object","properties":{"destination":{"type":"object","properties":{"code":{"type":"string","description":"IATA city, airport or country code. For a region or a kind of trip, the first airport searched for it.","example":"PAR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.code","typeLabel":"string"},"type":{"type":"string","enum":["city","airport","country","region","theme"],"description":"region: an area of several countries or a part of one (\"the Caribbean\", \"Puglia\"). theme: a kind of trip named instead of a place (\"skiing at Christmas\"), searched at the destinations that fit it; `name` says which (\"ski destinations\").","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","example":"Paris","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.name","typeLabel":"string"},"country_code":{"oneOf":[{"type":"string","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.country_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO 3166-1 alpha-2; null for a place in more than one country (a region such as the Caribbean, a kind of trip).","example":"FR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.country_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.country_code","typeLabel":"string | null"},"alternates":{"type":"array","items":{"type":"string","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.alternates.items.[INDEX]","typeLabel":"string"},"description":"Other airports searched for this place.","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination.alternates","typeLabel":"string[]"}},"required":["code","type","name","country_code"],"description":"A place the request was understood to name.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].destination","typeLabel":"object"},"dates":{"oneOf":[{"type":"object","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.0.departure","typeLabel":"string"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.0.return","typeLabel":"string"}},"required":["departure"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"departure":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"},"return":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2027-10-03"}},"required":["departure"],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].dates","typeLabel":"object | null"},"option_id":{"oneOf":[{"type":"string","description":"The best live option for this destination; null when there is none.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].option_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The best live option for this destination; null when there is none.","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].option_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].option_id","typeLabel":"string | null"},"live_cheapest_total":{"type":"object","description":"An amount of money and its currency.","required":["amount","currency"],"properties":{"amount":{"type":"number","description":"The amount in major units of `currency` (e.g. 3412.5 for EUR 3,412.50).","example":3412,"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].live_cheapest_total.amount","typeLabel":"number"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code.","example":"EUR","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].live_cheapest_total.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].live_cheapest_total","typeLabel":"object"},"summary":{"type":"string","isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].summary","typeLabel":"string"},"empty_reason":{"type":"string","enum":["no_fare_within_filters","not_searched"],"description":"Why `option_id` is null.","uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX].empty_reason","typeLabel":"enum\u003cstring>"}},"required":["destination","dates","option_id","live_cheapest_total","summary"],"uniqueKey":"groups.items.[INDEX].oneOf.1.rows.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"groups.items.[INDEX].oneOf.1.rows","typeLabel":"object[]"}},"uniqueKey":"groups.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"groups.items.[INDEX]","typeLabel":"object"},"uniqueKey":"groups","typeLabel":"object[]"},"has_more":{"type":"boolean","description":"More options are available; ask for more in the same conversation.","uniqueKey":"has_more","typeLabel":"boolean"},"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"description":"Why the task failed, when `status` is `failed`.","uniqueKey":"error","typeLabel":"object"},"superseded_by":{"type":"string","description":"The task that replaced this one, when `status` is `canceled`.","uniqueKey":"superseded_by","typeLabel":"string"},"charge":{"type":"object","properties":{"turn":{"type":"integer","description":"The message of the conversation this charge is for, from 1: the first message is 1 and each next message adds 1, whether it answers a question or asks for something new.","example":1,"isRequired":true,"uniqueKey":"charge.turn","typeLabel":"integer"},"llm_usd":{"type":"number","description":"The language-model part of the charge, in USD.","example":0.0195,"isRequired":true,"uniqueKey":"charge.llm_usd","typeLabel":"number"},"api_usd":{"type":"number","description":"The flight search part of the charge, in USD.","example":0.01,"isRequired":true,"uniqueKey":"charge.api_usd","typeLabel":"number"},"total_usd":{"type":"number","description":"`llm_usd` + `api_usd`.","example":0.0295,"isRequired":true,"uniqueKey":"charge.total_usd","typeLabel":"number"},"currency":{"type":"string","enum":["USD"],"isRequired":true,"uniqueKey":"charge.currency","typeLabel":"enum\u003cstring>"}},"required":["turn","llm_usd","api_usd","total_usd","currency"],"description":"What a turn was charged to the organization's balance, once the turn has ended (`completed`, `input_required`, `failed` or `canceled`); every amount is 0 when the turn cost nothing. Absent while the task is `working`. Carried on JSON answers only: an event stream does not carry it, so read it with `GET /v1/flight_ai_search/tasks/{task_id}`.","uniqueKey":"charge","typeLabel":"object"}},"required":["context_id","task_id","status"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"context_id":"ctx_example","task_id":"atk_example","status":"working","message":"Three round-trip options Paris–Tokyo, 3–17 Oct 2027, for 4 adults with at most one stop.","question":"origin","question_options":[{"value":"SJO","label":"San José, Costa Rica","detail":"1 airport"}],"criteria":{"trip_type":"oneway","origins":[{"code":"PAR","type":"city","name":"Paris","country_code":"FR"}],"passengers":{"adults":4,"children":0,"infants":0},"currency":"USD","destinations":[{"code":"PAR","type":"city","name":"Paris","country_code":"FR"}],"legs":[{"origin":"\u003cstring>","destination":"\u003cstring>","departure":"2027-10-03"}],"departure":{"date":"2027-10-03","window":{"start":"2027-10-03","end":"2027-10-03"},"flexibility_days":3,"weekdays":["monday"]},"return":{"date":"2027-10-03","window":{"start":"2027-10-03","end":"2027-10-03"},"flexibility_days":3,"weekdays":["monday"]},"stay_days":123,"cabin_class":"economy","max_stops":1,"include_carriers":["\u003cstring>"],"exclude_carriers":["\u003cstring>"],"checked_bag_included":true,"refundable_only":true,"changeable_only":true,"departure_time_range":{"earliest":"18:00","latest":null},"arrival_time_range":{"earliest":"18:00","latest":null},"return_departure_time_range":{"earliest":"18:00","latest":null},"return_arrival_time_range":{"earliest":"18:00","latest":null},"connection_time_max_minutes":123,"max_total_duration_minutes":123,"via_airports":["\u003cstring>"],"exclude_via_airports":["\u003cstring>"],"budget":{"amount":123,"currency":"\u003cstring>","scope":"total"},"priority":"price","intent":{"user_intent":"\u003cstring>"}},"notes":[{"kind":"passengers_assumed_adults"}],"options":[{"option_id":"s1_1","trip_type":"oneway","legs":[{"index":1,"origin":{"code":"PAR","name":"Paris","airport":"CDG"},"destination":{"code":"PAR","name":"Paris","airport":"CDG"},"departure":"2027-10-03T10:20:00","arrival":"2027-10-03T10:20:00","duration_minutes":975,"stops":1,"segments":[{"marketing_carrier":"AF","flight_number":"AF1240","origin":"CDG","destination":"AMS","departure":"2027-10-03T10:20:00","arrival":"2027-10-03T10:20:00","duration_minutes":80,"operating_carrier":"KL","layover_minutes":140}]}],"fares":[{"trip_item_token":"offer_7f3a9c21_1b2c3d4e:trip_item_0","brand_name":"Economy Light","cabin_class":"economy","total":{"amount":3412,"currency":"EUR"},"price_per_person":{"amount":3412,"currency":"EUR"},"priced_for":{"adults":4,"children":0,"infants":0},"expires_at":"2026-10-27T10:58:12Z","refundable":true,"changeable":true,"checked_bag_included":true,"carry_on_baggage":"1 × 12 kg","included_baggage":"1 × 23 kg"}],"score":100,"why":"Cheapest total for 4; one stop each way in Amsterdam."}],"groups":[{"kind":"shortlist","group_id":"g_1","title":"\u003cstring>","route":{"origin":"PAR","destination":"TYO"},"dates":{"departure":"2027-10-03","return":"2027-10-03"},"option_ids":["\u003cstring>"]}],"has_more":true,"error":{"code":"\u003cstring>","message":"\u003cstring>"},"superseded_by":"\u003cstring>","charge":{"turn":1,"llm_usd":0.0195,"api_usd":0.01,"total_usd":0.0295,"currency":"USD"}}}},"exampleType":"generated"}},"exampleType":"generated"},"afb1b45e-d761-4dac-8bab-443b99bfb374":{"description":"Bad request: malformed JSON, or an invalid header such as a reserved `X-End-User-Id`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"BAD_REQUEST","message":"Malformed JSON in request body"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BAD_REQUEST","message":"Malformed JSON in request body"}}}},"exampleType":"examples"}},"exampleType":"examples"},"32829944-e0c0-4860-8cb5-91b39cf2cace":{"description":"Authentication required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"AUTH_REQUIRED","message":"Invalid or expired API key.","doc_url":"https://docs.gojinko.com/authentication/api-keys"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"AUTH_REQUIRED","message":"Invalid or expired API key.","doc_url":"https://docs.gojinko.com/authentication/api-keys"}}}},"exampleType":"examples"}},"exampleType":"examples"},"02f63f6f-03fb-4ce0-ba16-14809ef961d2":{"description":"The organization's balance is below what a search turn needs. The message carries the top-up link. **`PAYMENT_REQUIRED`** — The organization's balance cannot cover this call. Top up at the link in the message. Retrying never fills an empty wallet.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"PAYMENT_REQUIRED","message":"Insufficient balance — a flight AI search turn needs at least $0.20 and your organization has $0.0500 available. Top up at https://dashboard.gojinko.com/developers/billing/topup"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"PAYMENT_REQUIRED","message":"Insufficient balance — a flight AI search turn needs at least $0.20 and your organization has $0.0500 available. Top up at https://dashboard.gojinko.com/developers/billing/topup"}}}},"exampleType":"examples"}},"exampleType":"examples"},"28041eb4-75f6-4231-8299-03d2df752775":{"description":"The key is valid but is not a tenant API key (`jnk_t_…`), is not granted the `search_live` scope, or Travel AI search is not enabled for this account. **`FORBIDDEN`** — The credential is valid, and this request is refused anyway. Do not rotate the key — it is working. Check that it is entitled to this operation, and on this environment.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"FORBIDDEN","message":"This API key is not granted the \"search_live\" scope required by this endpoint"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"FORBIDDEN","message":"This API key is not granted the \"search_live\" scope required by this endpoint"}}}},"exampleType":"examples"}},"exampleType":"examples"},"fcd68536-cd8e-4d26-9fe6-a5454b401a1f":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"NOT_FOUND","message":"Resource not found.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"NOT_FOUND","message":"Resource not found.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"b8729a0b-2826-4c88-954d-afbee1f9fd70":{"description":"The resource this request names no longer exists","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"GONE","message":"The resource no longer exists.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"GONE","message":"The resource no longer exists.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"3d9fedda-6fc8-4bad-9736-cd02cbfcf521":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"BAD_REQUEST","message":"A required field is missing or invalid.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"BAD_REQUEST","message":"A required field is missing or invalid.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"2d39d0c5-ea65-4a91-98b3-76253bf6270b":{"description":"Rate limit or quota exceeded","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Absent when no interval applies.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"4d2dbe53-a690-4be2-a42e-40270a58a45b":{"description":"The travel provider rejected the request, or an upstream call failed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UPSTREAM_REJECTED","message":"The request was declined for this offer. Try another offer.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UPSTREAM_REJECTED","message":"The request was declined for this offer. Try another offer.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"34b86779-8692-400e-9a5a-783765abf7be":{"description":"No travel provider can serve the request right now","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Absent when no interval applies.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UPSTREAM_UNAVAILABLE","message":"The service is temporarily unavailable. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UPSTREAM_UNAVAILABLE","message":"The service is temporarily unavailable. Retry after the Retry-After delay.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"},"da74c518-96c1-49a3-bb4a-d8fca5c4ab54":{"description":"The travel provider did not answer in time","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["INVALID_SEGMENTS_TO_EXCHANGE","PARTIAL_EXCHANGE_UNSUPPORTED","LEG_ALREADY_DEPARTED","DEPARTURE_DATE_IN_PAST","LEG_DATES_OUT_OF_ORDER","INVALID_EXCHANGE_REQUEST","NOT_EXCHANGEABLE","CREDENTIAL_FORMAT_INVALID","PAYMENT_TYPE_NOT_ENABLED","PAYMENT_CREDENTIAL_INVALID","TRIP_OWNED_BY_OTHER_PAYMENT","IDEMPOTENCY_KEY_REUSED","ATTEMPT_IN_PROGRESS","ATTEMPT_TERMINAL","TEMPORARILY_UNAVAILABLE","AUTH_REQUIRED","PAYMENT_REQUIRED","RATE_LIMITED","BAD_REQUEST","FORBIDDEN","NOT_FOUND","CONFLICT","GONE","QUOTE_PENDING","QUOTE_EXPIRED","TRIP_EXPIRED","TRIP_STATE_CONFLICT","OFFER_EXPIRED","OFFER_UNAVAILABLE","MISSING_CUSTOMER_DETAILS","INVALID_PHONE_NUMBER","INVALID_FLIGHT_NUMBER","CURRENCY_UNSUPPORTED","HOTEL_NAME_LOW_CONFIDENCE","DESTINATION_LOW_CONFIDENCE","UPSTREAM_REJECTED","UPSTREAM_UNAVAILABLE","UPSTREAM_TIMEOUT","UPSTREAM_ERROR","INTERNAL"],"description":"What went wrong, as a stable machine-readable code. This is a closed set — branch on it rather than on `message`, which is prose and may change. New codes arrive in a minor version, so treat an unknown one as its HTTP status. A code can also stop being emitted: it leaves this set in a minor version, named in the changelog, and a branch you wrote for it goes unreached rather than wrong.","example":"BAD_REQUEST","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What went wrong, in prose. These codes always carry the same message, and it never includes text from a supplier: `RATE_LIMITED` — \"Too many requests. Retry after the Retry-After delay.\"; `OFFER_EXPIRED` — \"This offer has expired. Search again.\"; `OFFER_UNAVAILABLE` — \"This offer is no longer available. Search again.\"; `UPSTREAM_REJECTED` — \"The request was declined for this offer. Try another offer.\"; `UPSTREAM_UNAVAILABLE` — \"The service is temporarily unavailable. Retry after the Retry-After delay.\"; `UPSTREAM_TIMEOUT` — \"The request timed out before a result was available. Retry the request.\"; `UPSTREAM_ERROR` — \"The request could not be completed.\".","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"field":{"type":"string","description":"On a 400 `BAD_REQUEST` that names one refused input: the path of that field in your request, e.g. `selections[1].quantity` for the second selection of a `select_ancillaries` call. Absent when the refusal names no single field.","example":"selections[1].quantity","uniqueKey":"error.field","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"UPSTREAM_TIMEOUT","message":"The request timed out before a result was available. Retry the request.","doc_url":"https://docs.gojinko.com/concepts/errors"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"UPSTREAM_TIMEOUT","message":"The request timed out before a result was available. Retry the request.","doc_url":"https://docs.gojinko.com/concepts/errors"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"17528bd0-6968-4570-a12c-f1f560657255":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"ApiKeyAuth"}},"5f9adf9b-2efa-4354-818e-ec52670723c9":{"BearerAuth":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"67b9195b-c9d2-4d58-8c01-216daf7ffbc0":{"url":"https://api.gojinko.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"X-API-Key"}],"title":"ApiKeyAuth"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/public-api.yaml"},"subdomain":"jinko-dev","siteName":"Jinko Platform","title":"flight-ai-search - Jinko Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T19:45:22.179Z","originalFileLocation":"api/flight-ai-search.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Search flights from one sentence, with follow-ups\">\u003cmeta data-mint-head name=\"application-name\" content=\"Jinko Platform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"flight-ai-search - Jinko Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Search flights from one sentence, with follow-ups\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Jinko Platform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dev.gojinko.com/api/flight-ai-search\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Other+endpoints\u0026amp;title=flight-ai-search\u0026amp;description=Search+flights+from+one+sentence%2C+with+follow-ups\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=b0c9d4ca995f5c7f6ebafee616de74467227ef40508e6d4e31e57cebe1c70a1b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"flight-ai-search - Jinko Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Search flights from one sentence, with follow-ups\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://jinko-dev.mintlify.site/_mintlify/api/og/v2?division=Other+endpoints\u0026amp;title=flight-ai-search\u0026amp;description=Search+flights+from+one+sentence%2C+with+follow-ups\u0026amp;theme=d8471b1916fc5bd660c4c758\u0026amp;signature=b0c9d4ca995f5c7f6ebafee616de74467227ef40508e6d4e31e57cebe1c70a1b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/jinko-dev/jotmHl7NmaCERw_m/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Jinko Platform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF6363\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dev.gojinko.com/api/flight-ai-search\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/flight-ai-search.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dev.gojinko.com/#organization\",\"name\":\"Jinko Platform\",\"url\":\"https://docs.dev.gojinko.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/jinko-dev/k6P2DyAYQF0FPJQi/logo/jinko-logo.png?fit=max\u0026auto=format\u0026n=k6P2DyAYQF0FPJQi\u0026q=85\u0026s=785a20dc553a2698bfffad325d1198d0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dev.gojinko.com#website\",\"name\":\"Jinko Platform\",\"url\":\"https://docs.dev.gojinko.com\",\"publisher\":{\"@id\":\"https://docs.dev.gojinko.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dev.gojinko.com/api/flight-ai-search#webpage\",\"url\":\"https://docs.dev.gojinko.com/api/flight-ai-search\",\"name\":\"flight-ai-search\",\"description\":\"Search flights from one sentence, with follow-ups\",\"dateModified\":\"2026-10-29T19:45:22.179Z\",\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dev.gojinko.com/api/flight-ai-search#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dev.gojinko.com/api/flight-ai-search#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Jinko Platform\",\"item\":\"https://docs.dev.gojinko.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"flight-ai-search\",\"item\":\"https://docs.dev.gojinko.com/api/flight-ai-search\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dev.gojinko.com/api/flight-ai-search#apireference\",\"headline\":\"flight-ai-search\",\"name\":\"flight-ai-search\",\"description\":\"Search flights from one sentence, with follow-ups\",\"url\":\"https://docs.dev.gojinko.com/api/flight-ai-search\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dev.gojinko.com/api/flight-ai-search#webpage\"},\"dateModified\":\"2026-10-29T19:45:22.179Z\",\"publisher\":{\"@id\":\"https://docs.dev.gojinko.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dev.gojinko.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Jinko Platform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Jinko Platform","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/tools/overview"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/cli/overview"}]},{"tab":"API reference","groups":[{"group":"Introduction","pages":[{"title":"API reference","href":"/api-reference/introduction"}]},{"group":"Travel Demand","pages":[{"group":"Destination","pages":[{"title":"destination","sidebarTitle":"/v1/destination","openapi":"api-reference/public-api.yaml GET /v1/destination","href":"/api/destination"},{"title":"destination trend","sidebarTitle":"/v1/destination/trend","openapi":"api-reference/public-api.yaml GET /v1/destination/trend","href":"/api/destination/trend"}]},{"group":"Market","pages":[{"title":"market","sidebarTitle":"/v1/market","openapi":"api-reference/public-api.yaml GET /v1/market","href":"/api/market"},{"title":"market trend","sidebarTitle":"/v1/market/trend","openapi":"api-reference/public-api.yaml GET /v1/market/trend","href":"/api/market/trend"}]},{"group":"Audience","pages":[{"title":"audience","sidebarTitle":"/v1/audience","openapi":"api-reference/public-api.yaml GET /v1/audience","href":"/api/audience"},{"title":"audience trend","sidebarTitle":"/v1/audience/trend","openapi":"api-reference/public-api.yaml GET /v1/audience/trend","href":"/api/audience/trend"}]},{"group":"Trend","pages":[{"title":"trend","sidebarTitle":"/v1/trend","openapi":"api-reference/public-api.yaml GET /v1/trend","href":"/api/trend"}]}]},{"group":"Flights","pages":[{"group":"Discovery","pages":[{"title":"find-destination","sidebarTitle":"/v1/find_destination","openapi":"api-reference/public-api.yaml POST /v1/find_destination","href":"/api/find-destination"},{"title":"flight-calendar","sidebarTitle":"/v1/flight_calendar","openapi":"api-reference/public-api.yaml POST /v1/flight_calendar","href":"/api/flight-calendar"},{"title":"find-dates","sidebarTitle":"/v1/find_dates","openapi":"api-reference/public-api.yaml POST /v1/find_dates","href":"/api/find-dates"},{"title":"lowest-fare","sidebarTitle":"/v1/lowest_fare","openapi":"api-reference/public-api.yaml POST /v1/lowest_fare","href":"/api/lowest-fare"},{"title":"price-monitoring","sidebarTitle":"/v1/price_monitoring","openapi":"api-reference/public-api.yaml POST /v1/price_monitoring","href":"/api/price-monitoring"},{"title":"flight-price-advice","sidebarTitle":"/v1/flight_price_advice","openapi":"api-reference/public-api.yaml POST /v1/flight_price_advice","href":"/api/flight-price-advice"}]},{"group":"Search","pages":[{"title":"flight-search","sidebarTitle":"/v1/flight_search","openapi":"api-reference/public-api.yaml POST /v1/flight_search","href":"/api/flight-search"},{"title":"flight-award-search (preview)","sidebarTitle":"/v1/flight_award_search (preview)","openapi":"api-reference/public-api-dev.yaml POST /v1/flight_award_search","href":"/api/flight-award-search"}]},{"group":"Manage","pages":[{"title":"refund check","sidebarTitle":"/v1/refund_check","openapi":"api-reference/public-api.yaml POST /v1/refund_check","deprecated":true,"href":"/api/refund/check"},{"title":"refund commit","sidebarTitle":"/v1/refund_commit","openapi":"api-reference/public-api.yaml POST /v1/refund_commit","deprecated":true,"href":"/api/refund/commit"},{"title":"refund status","sidebarTitle":"/v1/refund_status","openapi":"api-reference/public-api.yaml POST /v1/refund_status","deprecated":true,"href":"/api/refund/status"},{"title":"exchange shop","sidebarTitle":"/v1/exchange_shop","openapi":"api-reference/public-api.yaml POST /v1/exchange_shop","href":"/api/exchange/shop"},{"title":"exchange price","sidebarTitle":"/v1/exchange_price","openapi":"api-reference/public-api.yaml POST /v1/exchange_price","href":"/api/exchange/price"},{"title":"exchange commit","sidebarTitle":"/v1/exchange_commit","openapi":"api-reference/public-api.yaml POST /v1/exchange_commit","href":"/api/exchange/commit"},{"title":"exchange status","sidebarTitle":"/v1/exchange_status","openapi":"api-reference/public-api.yaml POST /v1/exchange_status","href":"/api/exchange/status"},{"title":"flight-refund-preview","sidebarTitle":"/v1/flight_refund_preview","openapi":"api-reference/public-api.yaml POST /v1/flight_refund_preview","href":"/api/flight-refund-preview"},{"title":"flight-refund-commit","sidebarTitle":"/v1/flight_refund_commit","openapi":"api-reference/public-api.yaml POST /v1/flight_refund_commit","href":"/api/flight-refund-commit"},{"title":"flight-refund-status","sidebarTitle":"/v1/flight_refund_status","openapi":"api-reference/public-api.yaml POST /v1/flight_refund_status","href":"/api/flight-refund-status"}]}]},{"group":"Hotels","pages":[{"title":"hotel-search","sidebarTitle":"/v1/hotel_search","openapi":"api-reference/public-api.yaml POST /v1/hotel_search","href":"/api/hotel-search"},{"title":"hotel-details","sidebarTitle":"/v1/hotel_details/{hotel_id}","openapi":"api-reference/public-api.yaml GET /v1/hotel_details/{hotel_id}","href":"/api/hotel-details"},{"title":"hotel-reviews","sidebarTitle":"/v1/hotel_reviews/{hotel_id}","openapi":"api-reference/public-api.yaml GET /v1/hotel_reviews/{hotel_id}","href":"/api/hotel-reviews"},{"title":"hotel-cancel","sidebarTitle":"/v1/hotel_cancel","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel","deprecated":true,"href":"/api/hotel-cancel"},{"title":"hotel-cancel-preview","sidebarTitle":"/v1/hotel_cancel_preview","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel_preview","href":"/api/hotel-cancel-preview"},{"title":"hotel-cancel-commit","sidebarTitle":"/v1/hotel_cancel_commit","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel_commit","href":"/api/hotel-cancel-commit"},{"title":"hotel-cancel-status","sidebarTitle":"/v1/hotel_cancel_status","openapi":"api-reference/public-api.yaml POST /v1/hotel_cancel_status","href":"/api/hotel-cancel-status"}]},{"group":"AI","pages":[{"group":"Hotel search","pages":[{"title":"hotel-ai-search","sidebarTitle":"/v1/hotel_ai_search","openapi":"api-reference/public-api.yaml POST /v1/hotel_ai_search","href":"/api/hotel-ai-search"},{"title":"hotel-ai-search-task","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}","openapi":"api-reference/public-api.yaml GET /v1/hotel_ai_search/tasks/{task_id}","href":"/api/hotel-ai-search-task"},{"title":"hotel-ai-search-events","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}/events","openapi":"api-reference/public-api.yaml GET /v1/hotel_ai_search/tasks/{task_id}/events","href":"/api/hotel-ai-search-events"},{"title":"hotel-ai-search-cancel","sidebarTitle":"/v1/hotel_ai_search/tasks/{task_id}:cancel","openapi":"api-reference/public-api.yaml POST /v1/hotel_ai_search/tasks/{task_id}:cancel","href":"/api/hotel-ai-search-cancel"}]}]},{"group":"Cars","pages":[{"title":"car-search","sidebarTitle":"/v1/car_search","openapi":"api-reference/public-api.yaml POST /v1/car_search","href":"/api/car-search"},{"title":"car-cancel-preview","sidebarTitle":"/v1/car_cancel_preview","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_preview","href":"/api/car-cancel-preview"},{"title":"car-cancel-commit","sidebarTitle":"/v1/car_cancel_commit","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_commit","href":"/api/car-cancel-commit"},{"title":"car-cancel-status","sidebarTitle":"/v1/car_cancel_status","openapi":"api-reference/public-api.yaml POST /v1/car_cancel_status","href":"/api/car-cancel-status"}]},{"group":"Trip \u0026 Payment","pages":[{"title":"trip","sidebarTitle":"/v1/trip","openapi":"api-reference/public-api.yaml POST /v1/trip","href":"/api/trip"},{"group":"Ancillaries","pages":[{"title":"select-ancillaries","sidebarTitle":"/v1/select_ancillaries","openapi":"api-reference/public-api.yaml POST /v1/select_ancillaries","href":"/api/select-ancillaries"},{"title":"trip ancillaries","sidebarTitle":"/v1/trip/{trip_id}/ancillaries","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/ancillaries","href":"/api/trip/ancillaries"}]},{"title":"checkout","sidebarTitle":"/v1/checkout","openapi":"api-reference/public-api.yaml POST /v1/checkout","href":"/api/checkout"},{"title":"agent-payment submit","sidebarTitle":"/v1/agent_payment/submit","openapi":"api-reference/public-api.yaml POST /v1/agent_payment/submit","href":"/api/agent-payment/submit"},{"title":"trip-status","sidebarTitle":"/v1/trip/{trip_id}","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}","href":"/api/trip-status"},{"title":"get-booking","sidebarTitle":"/v1/get_booking","openapi":"api-reference/public-api.yaml POST /v1/get_booking","href":"/api/get-booking"}]},{"group":"Marketing claim","tag":"Preview","pages":[{"title":"best-price-guarantee","sidebarTitle":"/v1/best_price_guarantee","openapi":"api-reference/public-api.yaml POST /v1/best_price_guarantee","href":"/api/best-price-guarantee"},{"title":"best-price-guarantee-status","sidebarTitle":"/v1/best_price_guarantee/{id}","openapi":"api-reference/public-api.yaml GET /v1/best_price_guarantee/{id}","href":"/api/best-price-guarantee-status"}]},{"group":"Webhooks","pages":[{"title":"webhooks register","sidebarTitle":"/v1/webhooks","openapi":"api-reference/public-api.yaml POST /v1/webhooks","href":"/api/webhooks/register"},{"title":"webhooks list","sidebarTitle":"/v1/webhooks","openapi":"api-reference/public-api.yaml GET /v1/webhooks","href":"/api/webhooks/list"},{"title":"webhooks get","sidebarTitle":"/v1/webhooks/{id}","openapi":"api-reference/public-api.yaml GET /v1/webhooks/{id}","href":"/api/webhooks/get"},{"title":"webhooks delete","sidebarTitle":"/v1/webhooks/{id}","openapi":"api-reference/public-api.yaml DELETE /v1/webhooks/{id}","href":"/api/webhooks/delete"},{"title":"webhooks test","sidebarTitle":"/v1/webhooks/{id}/test","openapi":"api-reference/public-api.yaml POST /v1/webhooks/{id}/test","href":"/api/webhooks/test"},{"title":"webhooks deliveries","sidebarTitle":"/v1/webhooks/{id}/deliveries","openapi":"api-reference/public-api.yaml GET /v1/webhooks/{id}/deliveries","href":"/api/webhooks/deliveries"},{"title":"webhooks replay","sidebarTitle":"/v1/webhooks/{id}/deliveries/{delivery_id}/replay","description":"Replay a webhook delivery","openapi":"api-reference/public-api.yaml POST /v1/webhooks/{id}/deliveries/{delivery_id}/replay","href":"/api/webhooks/replay"}]},{"group":"Other endpoints","pages":[{"title":"flight-ai-search","sidebarTitle":"/v1/flight_ai_search","openapi":"api-reference/public-api.yaml POST /v1/flight_ai_search","href":"/api/flight-ai-search"},{"title":"flight-ai-search-cancel","sidebarTitle":"/v1/flight_ai_search/tasks/{task_id}:cancel","description":"Cancel a flight AI search task","openapi":"api-reference/public-api.yaml POST /v1/flight_ai_search/tasks/{task_id}:cancel","href":"/api/flight-ai-search-cancel"},{"title":"flight-ai-search-events","sidebarTitle":"/v1/flight_ai_search/tasks/{task_id}/events","openapi":"api-reference/public-api.yaml GET /v1/flight_ai_search/tasks/{task_id}/events","href":"/api/flight-ai-search-events"},{"title":"flight-ai-search-task","sidebarTitle":"/v1/flight_ai_search/tasks/{task_id}","openapi":"api-reference/public-api.yaml GET /v1/flight_ai_search/tasks/{task_id}","href":"/api/flight-ai-search-task"},{"title":"flight-schedule","sidebarTitle":"/v1/flight_schedule","openapi":"api-reference/public-api.yaml POST /v1/flight_schedule","href":"/api/flight-schedule"},{"title":"trip payment-attempts","sidebarTitle":"/v1/trip/{trip_id}/payment_attempts/{payment_attempt_id}","openapi":"api-reference/public-api.yaml GET /v1/trip/{trip_id}/payment_attempts/{payment_attempt_id}","href":"/api/trip/payment-attempts"}]}]}]},"basePath":"","title":"flight-ai-search - Jinko Platform","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}