Connect your assistant

Untap assistant tools

Untap checks UK refunds and compensation, then gives you the amount, the deadline and the organisation’s claim link. You submit the claim yourself. Untap takes no cut.

Connect

Add https://untap.money/api/mcp as a remote MCP server using Streamable HTTP. In Claude, add a custom connector. In ChatGPT, use a custom connector where your account supports it. Setup instructions.

The five public check tools work without an account. Saving claims or commutes, reading your account and updating progress require OAuth sign-in through Untap. Your assistant never needs your password or a copied API key.

From a check to a claim

  1. Describe the journey and travel date. The assistant asks for missing details and chooses the relevant check.
  2. Confirm the actual train or flight if several match. The result gives the amount or percentage, deadline, assumptions and claim link.
  3. If you want to track it, ask to save the checked claim. Sign in through Untap and provide any missing fare or booking details.
  4. Submit on the operator or airline’s site. Tell your assistant when you have sent it or been paid to update your Untap record.

Checking eligibility alone does not save a booking or claim. Saved commutes need a specific date you request and confirmation that you took the journey. Untap does not book tickets, show live departure boards, pay charges or handle baggage claims.

What gets saved

Public checks do not save your booking, journey rows, documents or result to an account. They keep usage records containing the tool name, outcome and duration. Rate limits use a salted IP digest rather than your raw address. Train and flight lookups send the journey details needed to National Rail or our flight-data provider.

Account tools save only what you ask them to: claims, booking details, TfL journeys, progress and recurring routes. These records remain until you delete them. Saved commutes are checked only when asked, without scheduled checks or automatic claim filing.

Disconnect an assistant to revoke its access. Disconnecting does not delete claims. Use Your Data or the two-step delete_my_data tool to delete your saved data. See the privacy policy.

Limits and errors

Public lookup tools allow 40 calls per caller per hour; lighter checks allow 240. Cached results reduce repeat lookups. Across the service, daily upstream caps are 600 rail lookups and 150 flight lookups. A shared assistant address may share a caller limit.

Inputs that need clarification return candidates or the missing fields. A missing flight record asks for what happened rather than assuming it was on time. A limit or unavailable provider returns a retry message. Claim amounts rely on the supplied facts and each scheme’s rules; a claim pack is not a submitted claim.

Available tools

Save a usual train journey

Sign-in required
save_commute

Save or update one direction of a usual train journey. Use two routes for outward and homeward journeys. Checks run only when the person asks, never automatically. Repeating the same route and time updates it. Day tickets only; season tickets are not supported. Needs the person to sign in to Untap.

Limit: 30 calls per hour.

commute_id (optional)
Update or restore an existing commute owned by this account. Omit to save a route.
label (optional)
Optional short name such as Morning commute.
from (required)
Departure station name or three-letter code.
to (required)
Arrival station name or three-letter code.
departure_time (required)
Usual UK departure time, for example 08:05 or 8am.
weekdays (optional)
Usual travel days: Monday=1 through Sunday=7. Informational only; no automatic checks.
ticket_type (optional)
Day ticket type. For return, the price is the whole return fare. Season tickets are not supported by saved commutes.
ticket_price_pence (optional)
Usual day-ticket price in pence, £24.50=2450. Omit if unknown or the fare varies. Do not supply a weekly or monthly season price.

List saved commutes

Sign-in required
list_commutes

List the person’s saved routes, usual times, days and fares. No upstream checks are made. Needs the person to sign in to Untap.

Limit: 60 calls per hour.

include_stopped (optional)
Include stopped routes so they can be restored.

Check a saved commute for a travel date

Sign-in required
check_commute

Check one saved route against National Rail for the date the person requested. Returns the same verdict and claim pack as check_train_delay. If several trains match, ask which they took and pass service_id. The person must confirm they travelled and the fare is correct before saving or submitting a claim. Nothing is automatically saved or filed. Needs the person to sign in to Untap.

Limit: 20 calls per hour.

commute_id (required)
The id returned by save_commute or list_commutes.
date (required)
Specific travel date requested by the person, preferably YYYY-MM-DD. Yesterday also works. Never assume they travelled.
service_id (optional)
A candidate service_id from an earlier check, to confirm the actual train.

Stop a saved commute

Sign-in required
stop_commute

Hide a saved route from the active list. It is retained and can be restored with save_commute. No claims or bookings are changed. Needs the person to sign in to Untap.

Limit: 30 calls per hour.

commute_id (required)
The id returned by save_commute or list_commutes. The route is kept and can be restored.

Find money you may be owed

No sign-in
find_money_owed

Takes a plain-language description of what happened (a late train, a TfL charge, a delayed or cancelled flight, a parking ticket, a council tax, water or broadband question) and returns the UK refund and compensation schemes Untap covers that may apply. For each one it gives the fact that decides it, the tool that can check it now, and Untap’s free guide. It also picks out any flight number, date, time or amount in the text. Matching is by keywords, not a full reading of the situation, so treat the list as a starting point. No sign-in needed. Journey details are not saved to an account; limited usage metadata is recorded.

Limit: 240 calls per hour.

situation (required)
What happened, in the person’s own words. For example: "my train from Brighton to Victoria was 40 minutes late on Monday" or "I think my council tax band is wrong".

Check a delayed train for Delay Repay

No sign-in
check_train_delay

Looks up a real past train journey in Great Britain in National Rail’s historic running records and works out Delay Repay. Give the two stations (names, partial names or three-letter codes), the date and roughly when the train left. The operator, ticket type and price paid are optional. Returns the matched train with scheduled and actual times, the delay at the destination, the operator and scheme that apply, the amount (or the percentage when no price is given), the claim deadline, and a claim pack with the value for each form field. If several trains fit, it returns candidates to confirm with service_id. The records cover roughly the last year, and each day appears the day after. They hold direct trains only, so for a journey with a change, check each train separately. No sign-in needed. Journey details are not saved to an account; limited usage metadata is recorded.

Limit: 40 calls per hour.

from (required)
Station the person got on at. A name, part of a name or a three-letter code: "Brighton", "Kings Cross", "BTN".
to (required)
Station the person got off at, in the same forms.
date (required)
Date of travel. YYYY-MM-DD is best; "25/09/2026", "25 September", "yesterday" and "last Friday" also work.
departure_time (optional)
Roughly when the train left the first station, UK time: "08:05", "8am", "around 8". Leave out if unknown and Untap lists the day’s trains to choose from.
operator (optional)
Train company if known, as the person says it: "Southern", "GWR", "Avanti". Used to narrow the match.
ticket_type (optional)
As printed: "Anytime Return", "Off-Peak Single", "Advance", "Season". A return halves the single fare the amount is worked from.
price_paid (optional)
What the ticket cost: "£24.50", 24.50 or 2450 (pence). Needed for a cash amount; without it the percentage is returned.
service_id (optional)
The service_id of a candidate returned by an earlier call, to confirm which train it was.

Check a flight for UK261 or EU261 compensation

No sign-in
check_flight_compensation

Works out delay or cancellation compensation under UK261 or EU261 for one flight. Give the flight number and date. Untap looks up what happened in flight-status records, which cover about the last year, or uses what the person reports through what_happened and arrival_delay_minutes. Returns the arrival delay, the distance band, the amount per passenger, the extraordinary-circumstances caveat, the airline’s claim page, the dispute body to go to if the airline refuses, deadline guidance and a claim pack. No sign-in needed. Journey details are not saved to an account; limited usage metadata is recorded.

Limit: 40 calls per hour.

flight_number (required)
Airline code and number, as on the booking: "BA2551", "U2 8123".
date (required)
Date the flight was due to depart, local time. YYYY-MM-DD is best.
from_airport (optional)
Three-letter departure airport code, if known: "LGW". Helps pick the right flight on multi-stop numbers.
to_airport (optional)
Three-letter arrival airport code, if known: "BCN".
what_happened (optional)
Only if the person has said what happened. Otherwise leave out and Untap looks it up.
arrival_delay_minutes (optional)
How late the flight arrived at the gate, in minutes, if the person knows. Compensation turns on arrival, not departure.
cancellation_notice_days (optional)
For a cancellation: how many days before departure the airline told the person. 14 or more means no compensation.
price_paid (optional)
Optional. Not used for the amount, which is fixed in law, but needed to save the claim to an account.

Check TfL journeys for overcharges

No sign-in
check_tfl_journeys

Checks Transport for London contactless or Oyster journeys for incomplete journeys (no touch out, so charged the maximum fare) and missed Hopper fares, and prices each refund. Send the journeys as rows read from the person’s journey history, or the text of the CSV download from their TfL account. PDFs and images are not accepted by this tool. Returns the refundable journeys and total, older journeys outside TfL’s 8 week window, how to claim in the TfL account, and a claim pack. No sign-in needed. Journey details are not saved to an account; limited usage metadata is recorded.

Limit: 240 calls per hour.

journeys (optional)
Journey rows read from the person’s TfL journey history. Send these or csv_text, not both.
csv_text (optional)
The text of the CSV file from the TfL account’s journey history download.

Delay Repay rules for a train operator

No sign-in
get_delay_repay_rules

Returns one train operator’s Delay Repay rules: the delay at which it starts paying, each payout tier, the claim deadline, the link to its claim form, any automatic or one-click scheme, and the date the rules were last checked against the operator’s own page. Accepts the operator’s name as people say it, such as Avanti, GWR or Southern. No sign-in needed.

Limit: 240 calls per hour.

operator (required)
Train company name as people say it: "Avanti", "GWR", "Southern", "LNER", or a two-letter operator code.

Save a checked claim to your Untap account

Sign-in required
save_claim

Saves the result of check_train_delay, check_flight_compensation or check_tfl_journeys to the person’s Untap account, so it sits on their dashboard with its deadline. Pass the save_claim.arguments object from the check result, adding anything listed in save_claim.missing (usually the price paid). The verdict is worked out again from those facts rather than copied. Needs the person to sign in to Untap.

Limit: 30 calls per hour.

category (required)
Which kind of check the claim came from.
train (optional)
For category "train": save_claim.arguments.train from check_train_delay, with ticket_price_pence filled in.
flight (optional)
For category "flight": save_claim.arguments.flight from check_flight_compensation, with ticket_price_pence filled in.
tfl (optional)
For category "tfl": save_claim.arguments.tfl from check_tfl_journeys.

List my claims

Sign-in required
list_my_claims

Lists the claims in the person’s Untap account with amounts, status, what they have marked (sent, paid, rejected) and deadlines. By default it shows claims that are still open; set include_closed to see paid, rejected and archived ones too. Needs the person to sign in to Untap.

Limit: 60 calls per hour.

category (optional)
Only this category. Leave out for all.
include_closed (optional)
Also show claims marked paid, rejected or archived, and ones with nothing to claim.
limit (optional)
Most rows to return. Defaults to 25.

Update a claim’s status

Sign-in required
update_claim_status

Records progress on a claim in the person’s Untap account: sent (submitted to the operator or airline), paid (with the amount received, if known), rejected, or archived. Use the claim_id from list_my_claims or save_claim. This only updates Untap’s record; it does not contact the operator or airline. Needs the person to sign in to Untap.

Limit: 60 calls per hour.

claim_id (required)
The claim_id from list_my_claims or save_claim.
status (required)
sent: submitted to the operator or airline. paid: money received. rejected: the claim was refused. archived: hide it without an outcome.
amount_received_pence (optional)
For paid: the amount actually received, in pence. £12.40 = 1240.
note (optional)
Optional short note, such as the operator’s reference or the reason given for a refusal.

Add a train booking

Sign-in required
add_train_journey

Add a UK train booking to the person’s Untap account. One booking = one tool call. Pass every journey in the legs[] array (single = 1, return = 2 in journey order). Untap checks the National Rail Historical Service Performance records for each journey and returns the combined Delay Repay verdict. There is no need to ask whether the train was delayed: leave delay_minutes / actual_arrival / was_cancelled undefined and Untap looks it up. Only set those fields when the person has said what happened ("my outbound was 47 min late, return was on time"). Operators only accept one journey per claim form, so when both directions of a return are claimable the person files two separate claims. To check a journey without saving it, check_train_delay does the same lookup. Needs the person to sign in to Untap.

Limit: 30 calls per hour.

ticket_price_pence (required)
Total fare paid in pence for the whole booking. £62.00 = 6200.
ticket_type (required)
Ticket type as printed. "return" or "open_return" trigger half-fare-per-leg compensation; everything else uses the full ticket as the single-fare basis.
booking_reference (required)
Booking reference if available, otherwise null.
legs (required)
Every leg of this booking. Single ticket = 1 leg. Return = 2 legs (outbound first, then return). Multi-stop bookings can have more legs in journey order. Untap runs Delay Repay eligibility per leg and sums the entitlements.

Add a flight

Sign-in required
add_flight

Add a flight to the person’s Untap account. Untap checks the AeroDataBox flight-status records for past flights and returns the UK261/EU261 verdict, amount and claim link. Useful when a person shares a flight booking or confirmation and wants it tracked. There is no need to ask what happened: leave status / delay_minutes / actual_arrival undefined and Untap looks it up. Only set those fields if the person has said what happened (for example, "my flight was cancelled" or "we landed 4 hours late"). Use the airline’s 2-letter IATA code (BA, U2, FR) and 3-letter airport codes (LHR, BCN). Compensation applies for arrival delays of 3 hours or more, or for cancellations. Needs the person to sign in to Untap.

Limit: 30 calls per hour.

airline_iata (required)
Two-letter IATA airline code, e.g. "BA" for British Airways, "U2" for easyJet.
flight_number (required)
Flight number including the airline prefix, e.g. "BA2551".
departure_iata (required)
Three-letter IATA departure airport code, e.g. "LHR".
arrival_iata (required)
Three-letter IATA arrival airport code, e.g. "BCN".
scheduled_departure (required)
Scheduled departure as ISO 8601 datetime.
scheduled_arrival (required)
Scheduled arrival as ISO 8601 datetime.
ticket_price_pence (required)
Total fare paid in pence.
booking_reference (required)
PNR / airline booking reference if available, otherwise null.
passenger_name (required)
Passenger name as printed on the ticket, or null if not visible.
status (optional)
OPTIONAL. Pass only if the user explicitly told you what happened. Otherwise leave undefined and Untap will look up the flight via AeroDataBox.
actual_arrival (optional)
OPTIONAL. Actual arrival as ISO 8601 datetime, if the user told you. Otherwise leave undefined.
delay_minutes (optional)
OPTIONAL. Delay duration in minutes, if the user told you.

Add TfL journeys from a contactless statement

Sign-in required
add_tfl_journeys

Add a batch of TfL contactless journeys to the person’s Untap account and run overcharge, incomplete-journey and missed-Hopper detection across everything they have saved. Extract every journey row into the journeys array, up to 500 per call. Mark is_incomplete=true for any row labelled "Incomplete" or with no tap-out, is_max_fare=true for failed-revenue-inspection rows, is_hopper_free=true for second bus/tram taps already shown free, is_auto_corrected=true for TfL-corrected rows. Cap-hit rows can be marked too but are informational. To check journeys without saving them, use check_tfl_journeys. Needs the person to sign in to Untap.

Limit: 10 calls per hour.

card_last4 (required)
Last 4 digits of the contactless card, if shown.
period_start (required)
Statement period start date YYYY-MM-DD.
period_end (required)
Statement period end date YYYY-MM-DD.
journeys (required)
Every journey on the statement. Up to 500 per call.

Add a parking ticket (PCN)

Sign-in required
add_parking_fine

Add a UK parking charge notice to the person’s Untap account. Untap then runs the appeal-grounds engine and returns the strongest plausible grounds plus the steps to appeal. Read every field from the notice itself (front and back). Pay particular attention to: issuer_type (council vs private parking operator), contravention_code (council only), and any text on the notice that hints at signage problems, machine faults, or grace-period claims. Capture those phrases in observed_notes verbatim. Without observed_notes the grounds engine has very little to match against. Needs the person to sign in to Untap.

Limit: 30 calls per hour.

pcn_reference (required)
PCN or notice reference number printed on the document.
issuer_type (required)
Council = local authority issued under TMA 2004. Private = on private land by a parking operator (BPA or IPC member).
issuer_name (required)
Issuer name as written, e.g. "London Borough of Camden" or "ParkingEye Ltd".
contravention_code (required)
Council contravention code, e.g. "01", "12", "MR11". Null for private tickets.
contravention_description (required)
Full text of the alleged contravention as printed on the notice.
vehicle_registration (required)
Vehicle registration mark, or null if not shown.
location (required)
Street or car park name where the contravention allegedly occurred.
contravention_date (required)
Date the contravention allegedly occurred, ISO 8601 date.
issued_date (required)
Date the notice was issued or served, ISO 8601 date.
amount_pence (required)
Full charge amount in pence. £65 = 6500.
discounted_amount_pence (required)
Reduced amount in pence if paid promptly (usually 50% within 14 or 21 days). Null if none stated.
discount_deadline (required)
ISO date by which the discount applies, or null if not stated.
full_deadline (required)
ISO date by which the full amount must be paid or appeal lodged.
appeal_url (required)
Direct https URL on the notice for online appeals, or null if none.
has_windscreen_notice (required)
True if a paper notice was placed on the windscreen. False if it arrived in the post only.
keeper_notice_served_date (required)
Private only: date the Notice to Keeper was served.
observed_notes (required)
Short phrases supporting grounds of appeal, drawn from the notice or the user’s description.

List the person’s refund opportunities

Sign-in required
list_savings

Read claimable, pending and historic savings rows for the signed-in person. Filter by category and status. Kept for existing clients; list_my_claims returns the same rows with deadlines and progress. Needs the person to sign in to Untap.

Limit: 60 calls per hour.

category (required)
Restrict to a single category, or null for all categories.
status (required)
Restrict to a single status, or null for all.
limit (optional)
Maximum number of savings rows to return. Defaults to 25, capped at 100.

Delete all my Untap data

Sign-in required
delete_my_data

Two-step destructive action. First call (confirm=false): returns a summary of what will be deleted plus a confirmation_token (valid 5 minutes). Second call: pass confirm=true and the same confirmation_token to actually delete every booking, statement, and claim. The person’s account itself is preserved so they can continue using Untap with a clean slate. To delete the account too, they can visit untap.money/data. Needs the person to sign in to Untap.

Limit: 5 calls per hour.

confirm (optional)
Must be true on the second call. The first call returns a confirmation_token; pass it back with confirm=true to actually delete.
confirmation_token (optional)
The confirmation_token returned by the first call. Required when confirm is true.

Questions or errors: contact@untap.money.