{"service":"Emirin Flights","status":"ok","version":"3.0.2","api_version":"3","build":"2026-08-21-v3.0.2-action-defaults","guide_version":"3.0.2","checked_at":"2026-08-21T10:15:45.959Z","base_url":"https://flights.emirin.uk","purpose":"Operational manual for ChatGPT and other clients calling Emirin Flights.","authoritative_contract":"https://flights.emirin.uk/openapi.json","action_contract":"https://flights.emirin.uk/openapi.action.json","contract_source":"API_SPEC","ai_instructions":{"first_call":"Call GET /guide when the Emirin Flights contract is unknown or may have changed.","rules":["Do not invent endpoint names, fields, enum values, scopes, or filters.","Use structured POST /search for true MULTI_CITY or when arbitrary per-leg constraints are easier to express as JSON.","Do not apply a leg-specific constraint globally unless the user explicitly requested it globally.","Use uppercase 3-letter IATA airport codes and local HH:MM clock times.","Durations are minutes. Preserve the requested currency.","Prefer Authorization: Bearer <MONITOR_TOKEN>; use ?token= only when a header cannot be set.","Never place MONITOR_TOKEN in a path segment.","Never expose SERPAPI_KEY.","Interpret partial or none as bounded-search outcomes, not proof that no market fare exists.","Use GET /probe for reachability diagnostics; it never consumes SerpApi quota.","Treat X-Emirin-Request-ID as the correlation ID for Cloudflare/security-log troubleshooting.","For 'verify below X', set verification.requested=false and verification.below=X. Set requested=true only for unconditional verification.","Emirin Flights intentionally defaults sort_by to price even though SerpApi natively defaults to Top flights."]},"release":{"status":"stable","version":"3.0.2","api_version":"3","contract_source":"API_SPEC","true_multi_city":true,"automatic_multi_city_booking_verification":"unsupported","fetch_compatibility":true,"request_id_header":"X-Emirin-Request-ID","protected_cache_policy":"no-store","chatgpt_action_schema":"https://flights.emirin.uk/openapi.action.json","serpapi_default_alignment":{"get_trip_type":"ROUND_TRIP","bags":0,"stops":0,"intentional_overrides":{"currency":"MYR","sort_by":"price","hl":"en","gl":"my"}}},"contract":{"contract_version":"3.0.2","api_version":"3","generated_from":"API_SPEC","base_url":"https://flights.emirin.uk","authentication":{"protected_operations":["GET /search","GET /search/...","POST /search","POST /verify"],"preferred":{"type":"bearer","header":"Authorization","format":"Bearer <MONITOR_TOKEN>"},"query_fallback":{"name":"token","format":"?token=<MONITOR_TOKEN>","warning":"Query tokens can appear in browser history, logs, and analytics."}},"endpoints":{"root":{"method":"GET","path":"/","auth":false},"about":{"method":"GET","path":"/about","auth":false},"guide":{"method":"GET","path":"/guide","auth":false},"openapi":{"method":"GET","path":"/openapi.json","auth":false},"openapi_action":{"method":"GET","path":"/openapi.action.json","auth":false},"version":{"method":"GET","path":"/version","auth":false},"health":{"method":"GET","path":"/health","auth":false},"probe":{"method":"GET","path":"/probe","auth":false},"search_query":{"method":"GET","path":"/search","auth":true},"search_pretty":{"method":"GET","path":"/search/...","auth":true},"search_structured":{"method":"POST","path":"/search","auth":true},"verify":{"method":"POST","path":"/verify","auth":true}},"trip_types":{"ONE_WAY":{"serpapi_type":2,"legs":1},"ROUND_TRIP":{"serpapi_type":1,"legs":2},"OPEN_JAW":{"serpapi_type":3,"legs":2},"MULTI_CITY":{"serpapi_type":3,"min_legs":2,"max_legs":8,"transport":"structured_post_only"}},"pretty_path":{"route_grammar":{"one_way":"/search/one-way/{from}/{to}/{date}","round_trip":"/search/round-trip/{from}/{to}/{date}/{return_date}","open_jaw":"/search/open-jaw/{from}/{to}/{date}/{return_from}/{return_to}/{return_date}"},"scopes":{"all":["currency","travel_class","sort_by","adults","children","infants_in_seat","infants_on_lap","bags","include_airlines","exclude_airlines","stops","max_stops","max_duration","layover_duration","exclude_conns","max_price","emissions"],"out":["depart_after","depart_before","arrive_after","arrive_before","max_duration","max_stops","layover_duration","exclude_conns"],"return":["depart_after","depart_before","arrive_after","arrive_before","max_duration","max_stops","layover_duration","exclude_conns"],"results":["limit","scan_limit"],"verify":["requested","below"],"diagnostics":["serpapi_no_cache"]},"query_rule":"Only ?token= may accompany a pretty-path request."},"filters":{"global":["sort_by","include_airlines","exclude_airlines","stops","max_stops","max_duration","layover_duration","exclude_conns","max_price","emissions"],"leg":["depart_after","depart_before","arrive_after","arrive_before","max_duration","max_stops","layover_duration","exclude_conns"],"results":["limit","scan_limit"],"verification":["requested","below"],"diagnostics":["serpapi_no_cache"]},"semantics":{"depart_after":"inclusive local HH:MM","depart_before":"exclusive local HH:MM","arrive_after":"inclusive local HH:MM","arrive_before":"exclusive local HH:MM","max_stops":"0 nonstop, 1 one stop or fewer, 2 two stops or fewer","stops":"SerpApi native default 0 any; 1 nonstop, 2 one stop or fewer, 3 two stops or fewer","bags":"SerpApi native default 0; Emirin Flights now canonicalizes omitted bags to 0","sort_by":"Native values 1 Top flights, 2 Price, 3 Departure time, 4 Arrival time, 5 Duration, 6 Emissions; Emirin default is Price","get_default_trip_type":"ROUND_TRIP (SerpApi native type=1)","partial_results":"partial or none is a bounded-search outcome, not proof that no market fare exists"},"defaults":{"get_trip_type":"ROUND_TRIP","currency":"MYR","travel_class":1,"adults":1,"children":0,"infants_in_seat":0,"infants_on_lap":0,"bags":0,"stops":0,"sort_by":"price","sort_by_native_code":2,"serpapi_native_alignment":{"trip_type":true,"travel_class":true,"passengers":true,"bags":true,"stops":true,"no_cache":true},"intentional_emirin_overrides":{"currency":"MYR","sort_by":"price","hl":"en","gl":"my"}},"compatibility":{"fetch_compatibility":true,"request_id_header":"X-Emirin-Request-ID","protected_cache_policy":"no-store","public_discovery":["/about","/robots.txt","/sitemap.xml","/probe"],"action_contract":"/openapi.action.json"}}}