The TicketToss API
JSON over HTTPS. Make a key under Account, then send it as Authorization: Bearer ttk_….
| Method | Path | What it does |
|---|---|---|
| GET | /api/v1/tickets | Every ticket on the account, with its next deadline and urgency. |
| POST | /api/v1/tickets | Add a ticket: citation, agency, city, plate, issuedAt, fineCents. |
| POST | /api/v1/tickets/scan | Turn notice text (or a photo, when AI is on) into a ticket draft. |
| POST | /api/v1/tickets/{id}/status | Record a result: review_lost, dismissed, paid and so on. |
| POST | /api/v1/tickets/{id}/evidence | Attach a photo's details: kind, time and place. |
| GET | /api/v1/letters?ticketId= | Letters drafted for a ticket. |
| POST | /api/v1/letters | Draft a letter: kind, ticketId or tollId, and the facts in your words. |
| GET | /api/v1/letters/{id}/pdf | The letter as a PDF, once unlocked. |
| GET | /api/v1/vehicles | Plates on the account. |
| GET | /api/v1/reports | Fleet 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.