Skip to main content

API and MCP

Everything you can do on your account page, from your own software or from an AI assistant. Make a key on your account page; it opens your cases and nothing else, and you can revoke it there at any time.

Connect an MCP client

The server is https://byefine.com/api/mcp, Streamable HTTP, with your key as a bearer token. It offers four tools: check_notice, list_cases, get_case and go_ahead.

The Claude app (claude.ai and the desktop app)

Open Settings, then Connectors, then add a custom connector, and give it https://byefine.com/api/mcp. Claude opens ByeFine in your browser: sign in, press Allow, and it is connected. No key to copy. The connection shows under API and MCP keys on your account page, where you can remove it.

Claude Code

claude mcp add --transport http byefine https://byefine.com/api/mcp --header "Authorization: Bearer bf_live_YOUR_KEY"

Cursor, and most other clients (mcp.json)

{
  "mcpServers": {
    "byefine": {
      "url": "https://byefine.com/api/mcp",
      "headers": { "Authorization": "Bearer bf_live_YOUR_KEY" }
    }
  }
}

Then ask the assistant to check a ticket: give it the photo, or a link to one. The check is free; go_ahead files the appeal on your plan or a free appeal when one applies, and otherwise answers with a link to pay by card.

REST

Every request carries Authorization: Bearer bf_live_…. Answers are JSON; an error is { "error": { "code", "message" } } with a 4xx or 5xx status. Reads are limited to 120 a minute per key; notices to 10 an hour and 30 a day.

Check a notice

POST https://byefine.com/api/v1/cases with the photo or PDF as multipart files (up to six), or as JSON. It answers once the notice has been read, usually within half a minute.

curl https://byefine.com/api/v1/cases \
  -H "Authorization: Bearer bf_live_YOUR_KEY" \
  -F "files=@ticket.jpg"
{ "files": [{ "name": "ticket.jpg", "mime": "image/jpeg", "base64": "..." }] }

Your cases

GET https://byefine.com/api/v1/cases lists them, newest first. GET https://byefine.com/api/v1/cases/BF-XXXXXX is one case in full.

Go ahead

POST https://byefine.com/api/v1/cases/BF-XXXXXX/go-ahead, optionally with { "account": "what happened" }. The answer is either { "status": "paid", "covered_by": "plan" | "credit" } or { "status": "pay", "checkout_url": "…" }, the link to the case page, where the person reads a short summary of what they are buying and their 14-day right to cancel, ticks two boxes and pays by card on Stripe. Nothing can be paid for without them. After that the driver gives their name and address on the case page (the link in every answer) and ticks the box that lets ByeFine act for them, which we record with its wording and time. The appeal is then written and filed. Nothing is filed without that permission, so a case that is paid and waiting shows action_needed. Notices from the police or a camera partnership, and court papers, are not handled; the check says so and charges nothing.

A case

notice.category is one of council_parking (council parking ticket), private_parking (private parking charge), bus_lane (bus lane penalty), moving_traffic (moving traffic penalty), road_charge (road charge penalty), penalty_fare (rail, tram or bus penalty fare), toll_charge (toll or crossing charge), other_penalty (penalty or charge notice), speeding (speeding notice), red_light (red light camera notice), police_offence (police fixed penalty or offence notice). A document we do not handle comes back with status rejected and a plain reason in rejected_because.

{
  "ref": "BF-7K2M9Q",
  "status": "scanned",
  "summary": "Worth fighting. Not paid yet",
  "link": "https://byefine.com/c/…",
  "price_pence": 699,
  "notice": { "issuer": "…", "reference": "…", "vehicle_registration": "…",
              "amount_pence": 13000, "discount_until": "2026-10-21", "respond_by": "2026-11-01", … },
  "verdict": { "verdict": "strong", "summary": "…", "grounds": [{ "title": "…", "why": "…" }] },
  "action_needed": null, "legal_note": null,
  "filed_at": null, "outcome_at": null
}

The same rules apply as on the site: the check is free, you pay only if you go ahead, and the terms and privacy policy cover what we do with a notice.