Everything the app does is available over HTTP. Generate a key in your own settings and build whatever you need — no approval process, no partner programme, no waiting on us to prioritise it.
Same keys that power the AI connection. They work for the REST API too.
The key inherits that person's permissions. A key made for a field tech sees their jobs and no financials — useful if you're building something for the crew.
Leave it off and the key is read-only. Every write endpoint returns 403 rather than half-working.
Shown once. Only a hash is stored, so we can't show it again — lose it, revoke it, make another.
# Everything on the board today curl https://everglowdispatch.com/api/board \ -H "Authorization: Bearer eg_your_key_here" # Book a job curl -X POST https://everglowdispatch.com/api/visits \ -H "Authorization: Bearer eg_your_key_here" \ -H "Content-Type: application/json" \ -d '{"jobId":"...","scheduledOn":"2026-09-02","startTime":"09:00","durationMin":90}'
Responses are JSON. Errors come back with an HTTP status and an error field written in plain English, not a code you have to look up.
Send an X-Client-Ref header on any write with a value you generate. If the same ref arrives twice — a retry, a timeout, a duplicate job in your queue — the original response is replayed instead of the action happening again. It's the same mechanism the mobile app uses to survive a bad signal, and it means you can retry without worrying about double-invoicing someone.
-H "X-Client-Ref: my-system-invoice-8814"
The full machine-readable description lives at /api/openapi.json — point Postman, Insomnia or your code generator at it.
| Endpoint | What it's for |
|---|---|
| GET/board | Today, grouped by tech, with status and access notes |
| GET/calendar | Visits across a date range |
| GET/clients | Client list with balances |
| GET/record/client/{id} | One client and every related record in a single call |
| POST/clients | Create a client, and their first site if you send an address |
| GET/jobs | Jobs, filterable by date and status |
| POST/visits | Put work on the board |
| PATCH/visits/{id} | Status, time, tech, notes |
| POST/quotes | Build a quote and get a customer link back |
| POST/invoices | Create an invoice |
| POST/payments | Record cash, cheque or bank payments |
| GET/pipeline | Open opportunities, weighted |
| GET/cases | Callbacks and rework, with cost and fault |
| POST/dispatch/plan | Plan and route a day — returns a preview, changes nothing |
| POST/timeoff | Book someone off |
| GET/dashboard | Collected, outstanding, aging, rework cost |
| GET/report/{name} | Any of the eight reports as JSON |
The same key works against /api/mcp as a Model Context Protocol server, which is how Claude and ChatGPT connect. Twenty tools, nine read and eleven write. More on that here.
No webhooks. You poll. For most integrations — a nightly sync, a dashboard, a reporting job — that's fine. If you need to react the moment a job completes, tell us; it's the next thing we'd build here.
No sandbox. Your trial account is the sandbox. Create a shop, use it, delete what you don't want.
Rate limits aren't published because we haven't needed them. Be reasonable and we won't have to write that section.
It will change. We'll add fields and endpoints, and we won't remove or rename anything without telling the shops using it. If you build something, email us so you're on the list.
No approval, no partner tier, no revenue share. Every plan includes API access, including the $49 one. Your data belongs to you, and the API is just the second way of getting at it — CSV export being the first.