Skip to content
Back to home

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.

Handshake
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" }
    }
  }'
Call a tool
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.

POST/api/v1/eligibility/flightAssess a disrupted flight.
POST/api/v1/eligibility/downgradeArticle 10(2) downgrade reimbursement.
GET/api/v1/reference/compensationArticle 7 bands and thresholds.
GET/api/v1/healthService metadata and endpoint index.
GET/openapi.jsonThis API, described in OpenAPI 3.1.
Example
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:

250Flights of 1,500 km or less (Art. 7(1)(a))
400Intra-EU/EEA flights over 1,500 km, and all other flights between 1,500 km and 3,500 km (Art. 7(1)(b))
600All other flights over 3,500 km (Art. 7(1)(c))
  • Amounts are per passenger, not per booking. Pass passengerCount and the response returns both amountPerPassenger and totalAmount. 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.

30%Flights of 1,500 km or less (Art. 10(2)(a))
50%Intra-EU/EEA flights over 1,500 km (except to or from the French overseas departments), and all other flights between 1,500 km and 3,500 km (Art. 10(2)(b))
75%All other flights, including flights to and from the French overseas departments (Art. 10(2)(c))

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.