{"service":"Emirin Flights","status":"ok","version":"2.2.2","api_version":"v2","build":"2026-08-18-v2.2.2-stable","checked_at":"2026-08-18T11:55:55.047Z","description":"Flight fare monitoring service for finding and tracking qualifying Google Flights itineraries with native trip types, SerpApi-aligned filters, resilient resolution, calculated overnight layovers, and optional booking verification.","version_check":{"current":"2.2.2","endpoint":"GET /version","note":"The /version and /health endpoints are public and do not consume SerpApi quota."},"generic_result":{"availability_values":{"complete":"Requested number of qualifying itineraries was returned.","partial":"At least one qualifying itinerary was returned, but fewer than requested.","none":"No qualifying complete itinerary was returned."},"stop_reasons":["target_reached","time_budget_reached","candidate_pool_exhausted","scan_limit_reached","no_candidates"]},"defaults":{"trip_type":"OPEN_JAW","serpapi_type":3,"currency":"MYR","travel_class":{"code":1,"name":"Economy"},"adults":1,"children":0,"infants_in_seat":0,"infants_on_lap":0,"bags":0,"stops":0,"resolve":3,"max_resolve":5,"scan_limit":"default max(resolve * 3, 10), capped at 15; user override capped at 25","sort_by":"price","serpapi_no_cache":false,"timeout_policy":{"check_budget_ms":25000,"serpapi_timeout_ms":7000,"resolution_retry_timeout_ms":3000,"response_margin_ms":1500,"resolution_concurrency":3}},"trip_types":{"ROUND_TRIP":{"serpapi_type":1,"required":["from","to","date","return_date"],"selection_mode":"departure_token_resolution","note":"return_from and return_to are optional compatibility fields and must match the reverse route when supplied."},"ONE_WAY":{"serpapi_type":2,"required":["from","to","date"],"selection_mode":"direct_discovery","note":"One-way results are complete at discovery, so no departure-token resolution requests are needed."},"OPEN_JAW":{"serpapi_type":3,"required":["from","to","date","return_from","return_to","return_date"],"selection_mode":"departure_token_resolution","note":"Uses the SerpApi multi-city flow for the existing two-leg open-jaw interface."}},"aliases":{"MULTI_CITY":"Accepted as an alias for OPEN_JAW. v2.2 supports the existing two-leg multi-city/open-jaw interface; arbitrary 3+ leg input is not yet exposed."},"capabilities":{"native_trip_types":true,"round_trip":true,"one_way":true,"open_jaw":true,"two_leg_multi_city_alias":true,"arbitrary_multi_city_legs":false,"exact_time_filters":true,"serpapi_native_parameter_alignment":true,"configurable_travel_class":true,"native_stops_filter":true,"max_stops_compatibility_alias":true,"include_or_exclude_airlines":true,"max_duration_filter":true,"layover_duration_filter":true,"excluded_connections_filter":true,"max_price_filter":true,"passenger_types":true,"carry_on_bags_filter":true,"emissions_filter":true,"qualified_fill_resolution":true,"one_way_direct_completion":true,"scan_limit":true,"conditional_booking_verification":true,"timeout_resilience":true,"bounded_parallel_resolution":true,"cache_assisted_resolution_retry":true,"partial_results_on_resolution_timeout":true,"calculated_overnight_layovers":true,"serpapi_cache_bypass_diagnostic":true},"endpoints":{"root":"GET /","version":"GET /version","health":"GET /health","one_way":"GET /check?trip_type=ONE_WAY&from=KUL&to=NRT&date=2026-12-23&currency=MYR&resolve=5&token=...","round_trip":"GET /check?trip_type=ROUND_TRIP&from=KUL&to=NRT&date=2026-12-23&return_date=2027-01-01&currency=MYR&resolve=5&token=...","open_jaw":"GET /check?trip_type=OPEN_JAW&from=KUL&to=MXP&date=2026-12-23&return_from=FCO&return_to=KUL&return_date=2027-01-01&currency=MYR&resolve=5&token=...","cache_diagnostic":"GET /check?...&resolve=5&scan_limit=15&serpapi_no_cache=true&token=...","verify":"POST /verify"},"parameters":{"trip_type":{"native":"type=1|2|3","alias":"trip_type=ROUND_TRIP|ONE_WAY|OPEN_JAW|MULTI_CITY","compatibility":"If neither type nor trip_type is supplied, OPEN_JAW/type=3 remains the default for v2.0/v2.1 compatibility."},"common_optional":["currency","travel_class","adults","children","infants_in_seat","infants_on_lap","bags","resolve","scan_limit","verify","verify_below","serpapi_no_cache","stops","max_stops","include_airlines","exclude_airlines","max_duration","layover_duration","exclude_conns","max_price","emissions","depart_after","depart_before","arrive_after","arrive_before","return_depart_after","return_depart_before","return_arrive_after","return_arrive_before"]},"native_parameters":{"type":{"1":"Round trip","2":"One way","3":"Multi-city / open jaw"},"travel_class":{"1":"Economy","2":"Premium economy","3":"Business","4":"First"},"stops":{"0":"Any number of stops","1":"Nonstop only","2":"1 stop or fewer","3":"2 stops or fewer"},"emissions":{"1":"Less emissions only"},"compatibility":{"max_stops":"Legacy Emirin Flights alias. 0 maps to stops=1, 1 maps to stops=2, and 2 maps to stops=3."},"intentionally_not_exposed":{"deep_search":"Not exposed because it increases response time and conflicts with the service's timeout-resilience goals.","sort_by":"Fixed internally to SerpApi sort_by=2 (Price) because fare monitoring is price-first."}},"cache_diagnostic":{"parameter":"serpapi_no_cache","values":["1","true"],"default":false,"behavior":"When enabled, passes SerpApi no_cache=true to discovery, departure-token resolution, and booking verification. Resolution timeout retries are disabled in this diagnostic mode so fresh-search behavior remains measurable. Use for diagnostics only because fresh searches can be slower and consume SerpApi quota."},"resolution_retry":{"enabled":true,"applies_to":"departure-token resolution SERPAPI_TIMEOUT only","maximum_retries_per_candidate":1,"default_retry_timeout_ms":3000,"disabled_when_serpapi_no_cache":true,"behavior":"After a primary resolution timeout, Emirin Flights may retry the same departure-token request once with a short timeout if caching is allowed and enough overall check budget remains."},"authentication":{"protected_endpoints":["/check","/verify"],"query":"?token=<MONITOR_TOKEN>","bearer":"Authorization: Bearer <MONITOR_TOKEN>"}}