{"openapi":"3.1.0","info":{"title":"flighthelp API","version":"0.1.0","description":"Public API serving the verified dataset and exposing the passenger-rights rules engine. Successful responses wrap their payload in `data` with a `_meta` block; errors follow RFC 7807 (application/problem+json).","license":{"name":"AGPL-3.0-only"}},"servers":[{"url":"https://api.flighthelp.net"},{"url":"http://localhost:8787"}],"paths":{"/healthz":{"get":{"summary":"Liveness check","responses":{"200":{"description":"Service is up."}}}},"/openapi.json":{"get":{"summary":"This OpenAPI document","responses":{"200":{"description":"The OpenAPI 3.1 description of this API."}}}},"/v1/compensation/evaluate":{"post":{"summary":"Evaluate passenger-rights eligibility for a flight disruption","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Scenario"}}}},"responses":{"200":{"description":"A Determination wrapped in the standard envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"object"},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"}}}},"/v1/distance/calculate":{"post":{"summary":"Great-circle distance and EU 261 distance band for a route","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["origin","destination"],"properties":{"origin":{"type":"string","description":"Origin IATA code."},"destination":{"type":"string","description":"Destination IATA code."}}}}}},"responses":{"200":{"description":"Distance result.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"object","properties":{"km":{"type":"number"},"miles":{"type":"number"},"eu_261_band":{"type":"string","enum":["short","medium","long"]}}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"}}}},"/v1/airlines":{"get":{"summary":"List airlines (cursor-paginated)","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of airlines.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"array","items":{"type":"object"}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/airlines/{code}":{"get":{"summary":"Get an airline by IATA code, ICAO code, or slug id","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The airline.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"object"},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/Problem"}}}},"/v1/airlines/{code}/baggage-rules":{"get":{"summary":"Get baggage rules for an airline","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Baggage rules for the airline.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"array","items":{"type":"object"}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/Problem"}}}},"/v1/airports":{"get":{"summary":"List airports (cursor-paginated)","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of airports.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"array","items":{"type":"object"}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/airports/{code}":{"get":{"summary":"Get an airport by IATA code, ICAO code, or slug id","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The airport.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"object"},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/Problem"}}}},"/v1/regulations":{"get":{"summary":"List passenger-rights regulations (cursor-paginated)","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of regulations.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"array","items":{"type":"object"}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/regulations/{slug}":{"get":{"summary":"Get a regulation by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The regulation.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"object"},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/Problem"}}}},"/v1/scenarios":{"get":{"summary":"List passenger-rights scenarios (cursor-paginated)","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of scenarios.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"array","items":{"type":"object"}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/scenarios/{slug}":{"get":{"summary":"Get a scenario by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The scenario.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"object"},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/Problem"}}}},"/v1/search":{"get":{"summary":"Search across airlines, airports, scenarios, and regulations","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Comma-separated entity types to restrict to.","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Ranked search results.","content":{"application/json":{"schema":{"type":"object","required":["data","_meta"],"properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["airline","airport","scenario","regulation"]},"id":{"type":"string"},"title":{"type":"string"},"score":{"type":"number"}}}},"_meta":{"$ref":"#/components/schemas/Meta"}}}}}},"400":{"$ref":"#/components/responses/Problem"}}}}},"components":{"schemas":{"Meta":{"type":"object","required":["as_of","engine_version","schema_version"],"properties":{"as_of":{"type":"string","format":"date-time"},"engine_version":{"type":"string"},"schema_version":{"type":"string"},"request_id":{"type":"string"}},"additionalProperties":true},"Problem":{"type":"object","required":["type","title","status","instance"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"request_id":{"type":"string"}}},"Scenario":{"type":"object","description":"Flight-disruption scenario. See @flighthelp/rules-engine for the full type; the canonical entity schemas live in @flighthelp/schema.","required":["flight","disruption","passenger"],"properties":{"flight":{"type":"object"},"disruption":{"type":"object"},"passenger":{"type":"object"},"context":{"type":"object"}}}},"responses":{"Problem":{"description":"RFC 7807 problem detail.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}