Developers
EU261 eligibility API
A public, unauthenticated endpoint that assesses flight disruption under EU Regulation 261/2004 and returns an eligibility assessment with an estimated Article 7 compensation band. Built for AI assistants to call through MCP; also available as plain REST.
Responses are informational. They are not legal advice and not a decision on any claim. Remburse does not process claims and never handles client funds.
At a glance
- MCP endpoint
https://www.remburse.com/api/mcp- OpenAPI
https://www.remburse.com/openapi.json- Authentication
- None. No account, API key or paid plan required.
- Transport
- Streamable HTTP (JSON-RPC 2.0). Stateless — no sessions, no SSE.
- Protocol versions
- 2025-06-18, 2025-03-26, 2024-11-05
- Scope
- EU Regulation 261/2004 only.
- Data handling
- No accounts, no database, no retention after the request.
- Execution region
- EU — Frankfurt (fra1).
- Rate limit
- 60 requests per minute per IP. Raisable on request.
Scope
The endpoint answers on EU261 and nothing else. Two routes into scope, from Article 3:
- Departing the EU/EEA — any flight leaving an airport in the EU-27, Iceland, Norway or Liechtenstein, on any carrier. EU outermost regions count: the Canaries, Madeira, the Azores, Guadeloupe, Martinique, Réunion, Mayotte and French Guiana.
- Arriving in the EU/EEA — only when the operating carrier holds an EU/EEA operating licence.
Everything else returns an explicit out_of_scope result with a reason, never a guess. Where a route sits under an adjacent regime the response names it: UK departures fall under UK261, Swiss ones under the EU–Switzerland air transport agreement. Neither is assessed here.
Reference data covers 303 airports and 107 carriers. An unrecognised airport or airline comes back as unrecognised — the engine never invents a location or an operating licence, because either one can move a claim across a distance band or in and out of scope.
Connecting over MCP
POST JSON-RPC 2.0 to https://www.remburse.com/api/mcp. The server is stateless: it issues no Mcp-Session-Id and opens no event stream, so GET and DELETE return 405. Every response is application/json.
curl -sS https://www.remburse.com/api/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": { "name": "example-client", "version": "1.0.0" }
}
}'curl -sS https://www.remburse.com/api/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "check_flight_compensation_eligibility",
"arguments": {
"departureAirport": "AMS",
"arrivalAirport": "BCN",
"disruptionType": "delay",
"airline": "KL",
"arrivalDelayHours": 4.1,
"airlineStatedReason": "technical fault"
}
}
}'Tool results carry both a human-readable content[0].text and a machine-readable structuredContent object matching the Assessment schema in the OpenAPI document.
Tools
check_flight_compensation_eligibility
Assess whether a disrupted flight may qualify for compensation under EU Regulation 261/2004, and estimate the Article 7 amount. Handles delays, cancellations, denied boarding and missed connections. Compensation is PER PASSENGER — pass passengerCount to get the total for a party. Covers flights departing an EU/EEA airport on any carrier, and flights arriving in the EU/EEA on an EU/EEA-licensed carrier; itineraries outside that scope return an explicit out-of-scope result rather than a guess. Check the `borderline` array in the result: it flags inputs sitting close enough to a legal threshold that a small correction flips the answer. Informational only — not legal advice, and not a decision on any claim.
- departureAirportstringrequired
- Departure airport as an IATA code or airport/city name, e.g. 'AMS' or 'Amsterdam Schiphol'. For a connecting itinerary this is the first departure.
- arrivalAirportstringrequired
- Final destination airport as an IATA code or airport/city name, e.g. 'BCN'. For a connecting itinerary this is the end of the journey, not the connection point.
- disruptionTypedelay | cancellation | denied_boarding | missed_connectionrequired
- What happened. Use 'missed_connection' when a delayed leg caused a later flight to be missed.
- passengerCountinteger
- How many passengers travelled on the booking. Article 7 pays each passenger separately, so a family of four is four times the per-passenger amount. Defaults to 1.
- airlinestring
- Operating carrier, as an IATA code or name. Required only when the flight arrives in the EU/EEA from outside it, where the carrier's licence decides scope. On a codeshare, give the airline that actually operated the flight.
- flightNumberstring
- Flight number, e.g. 'KL1667'. Optional.
- flightDatestring
- Scheduled departure date as YYYY-MM-DD. Optional; used only for context in the response.
- arrivalDelayHoursnumber
- How many hours late the passenger reached the FINAL destination — scheduled arrival against the moment the aircraft doors opened. This is the figure EU261 turns on; the departure delay is not the test. Required for delays and missed connections, and for cancellations where rerouting was offered.
- cancellationNoticeDaysinteger
- Days of notice before scheduled departure that the cancellation was announced, counted from the airline's notification. Required for cancellations.
- reroutingOfferedboolean
- Whether the airline offered alternative transport after a cancellation.
- singleBookingboolean
- Whether the connecting flights were on one reservation. Decides a missed-connection claim: separate tickets are not protected as a single journey.
- airlineStatedReasonstring
- The reason the airline gave, in their words, e.g. 'technical fault' or 'bad weather at destination'. Materially changes the outlook because of the Art. 5(3) extraordinary-circumstances defence.
- distanceKmnumber
- Great-circle distance from the departure airport to the final destination, in km. Supply this when an airport is outside the reference data; it overrides the computed distance and is recorded as a caller assertion.
- departureCountrystring
- ISO 3166-1 alpha-2 country code of the departure airport. Only needed when the airport is not recognised. Recorded as a caller assertion.
- arrivalCountrystring
- ISO 3166-1 alpha-2 country code of the arrival airport. Only needed when the airport is not recognised. Recorded as a caller assertion.
check_eu261_route_scope
Answer the scope question on its own: does Regulation 261/2004 apply to this route and carrier at all? Useful before collecting disruption details from a passenger. Returns the adjacent regime by name when a route sits under UK261 or the EU–Switzerland agreement instead.
- departureAirportstringrequired
- Departure airport as an IATA code or name.
- arrivalAirportstringrequired
- Arrival airport as an IATA code or name.
- airlinestring
- Operating carrier as an IATA code or name. Only needed for flights arriving in the EU/EEA from outside it.
check_downgrade_reimbursement
Work out what a passenger seated in a lower class than they booked is owed under Article 10(2): 30%, 50% or 75% of the ticket price depending on distance. This is separate from Article 7 compensation — a downgraded passenger on a delayed or cancelled flight can be owed both, so run the eligibility tool as well.
- departureAirportstringrequired
- Departure airport as an IATA code or name.
- arrivalAirportstringrequired
- Arrival airport as an IATA code or name.
- ticketPriceEurnumber
- Price paid for the affected flight in EUR, excluding taxes and charges the airline refunds anyway. Without it the tool returns the percentage but no amount.
- passengerCountinteger
- How many passengers were downgraded. Defaults to 1.
get_eu261_compensation_table
Return the Article 7 compensation bands, the Article 10 downgrade percentages, the distance thresholds they turn on, and the qualifying thresholds for delays and cancellation notice. Reference data — no passenger details needed.
No parameters.
REST endpoints
The same engine, without the JSON-RPC envelope. Useful for testing and for clients that don't speak MCP.
curl -sS https://www.remburse.com/api/v1/eligibility/flight \
-H 'Content-Type: application/json' \
-d '{
"departureAirport": "AMS",
"arrivalAirport": "BCN",
"disruptionType": "delay",
"airline": "KL",
"arrivalDelayHours": 4.1
}'What the assessment is based on
Compensation amounts come from Article 7, measured on the great-circle distance between the departure airport and the final destination:
- Amounts are per passenger, not per booking. Pass
passengerCountand the response returns bothamountPerPassengerandtotalAmount. A family of four on a €250 flight is owed €1,000. - Delay compensation starts at three hours late at the final destination, following Sturgeon (C-402/07). The departure delay is not the test.
- A missed connection is judged on arrival at the final destination under Folkerts (C-11/11), so a short delayed leg can still carry full compensation — provided the journey was a single booking.
- A cancellation notified fourteen days or more before departure carries no compensation. Below that, the rerouting offered can still discharge the carrier.
- Article 5(3) removes compensation where the carrier proves extraordinary circumstances. Technical faults inherent in normal operation (Wallentin-Hermann, C-549/07) and the carrier's own staff strikes (Krüsemann, C-195/17) are settled as not extraordinary.
- Rights to care under Article 9 and to refund or rerouting under Article 8 are separate, and can apply even when no compensation is due.
- Time limits are national and range from roughly one year to six, depending on which member state's courts have jurisdiction.
Being seated below the class you booked is a separate entitlement under Article 10(2), handled by check_downgrade_reimbursement. A passenger downgraded on a flight that was also delayed or cancelled can be owed both.
Borderline results
Four numbers decide almost every EU261 claim, and inputs land near them constantly: the three-hour arrival delay, fourteen days' cancellation notice, and the 1,500 km and 3,500 km distance bands. A route at 1,495 km pays €250; at 1,505 km it pays €400.
When an input sits within tolerance of one of those lines, the response carries a borderline entry naming exactly what to verify — the scheduled arrival against the moment the doors opened, or the timestamp on the airline's notification email. Relay those to the passenger rather than presenting the result as settled.
Airports outside the reference data
The engine never invents a location. If an airport isn't in the 303-entry dataset, the call returns insufficient_information rather than a guessed distance.
To proceed anyway, assert the facts yourself: distanceKm for the great-circle distance from the departure airport to the final destination, plus departureCountry and arrivalCountry as ISO 3166-1 alpha-2 codes where the airport is unrecognised. The engine computes from what you assert and lists every assertion it relied on in the assumptions array, so the provenance of the answer stays visible.
Commercial disclosure
An assessment ends with a referral to a claims handler who can file on the passenger's behalf. Those referral links are affiliate links: Remburse may be paid a commission if the passenger goes on to use the handler. It costs the passenger nothing extra and does not change the assessment.
The disclosure is attached to every response the API returns — MCP tool calls and REST alike — in the referral.disclosure and disclaimers fields, and in the rendered text. It is enforced in one place in the code so no call path can omit it.
What this API does not do
- It does not file claims, correspond with airlines, or handle money.
- It does not give legal advice, and its output binds nobody.
- It does not look up live flight status. Assessments run on the facts the caller supplies.
- It does not cover UK261, the EU–Switzerland agreement, the Montreal Convention, or any national scheme.
- It does not store passenger data. Nothing from a request survives the response.
Questions, or a higher rate limit: info@remburse.com.