TicketToss
Open my tickets

The TicketToss API

JSON over HTTPS. Make a key under Account, then send it as Authorization: Bearer ttk_….

MethodPathWhat it does
GET/api/v1/ticketsEvery ticket on the account, with its next deadline and urgency.
POST/api/v1/ticketsAdd a ticket: citation, agency, city, plate, issuedAt, fineCents.
POST/api/v1/tickets/scanTurn notice text (or a photo, when AI is on) into a ticket draft.
POST/api/v1/tickets/{id}/statusRecord a result: review_lost, dismissed, paid and so on.
POST/api/v1/tickets/{id}/evidenceAttach a photo's details: kind, time and place.
GET/api/v1/letters?ticketId=Letters drafted for a ticket.
POST/api/v1/lettersDraft a letter: kind, ticketId or tollId, and the facts in your words.
GET/api/v1/letters/{id}/pdfThe letter as a PDF, once unlocked.
GET/api/v1/vehiclesPlates on the account.
GET/api/v1/reportsFleet cost report. Add ?format=csv for a spreadsheet.
GET/api/v1/check?city=&issued=Public: the deadlines for a ticket, no key needed.

Webhooks

Give a key a webhook URL and we post ticket.status events to it. Each one carries a header in the form t=<unix time>,v1=<hex>: an HMAC-SHA256 of t.body. Check it before you trust the event.

{ "type": "ticket.status",
  "data": { "id": "…", "citation": "4471029683", "agency": "NYC Department of Finance", "status": "dismissed", "at": "2026-11-20T18:00:00Z" },
  "at": "2026-11-20T18:00:02Z" }

Errors come back as { "error": "…" } with a 4xx status. Rate limits and delivery retries are set at launch.