Developers

Your data, your integration.

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.

OpenAPI spec Get started
Getting a key

Two minutes, and nobody has to approve it

  1. Settings → AI access → New key

    Same keys that power the AI connection. They work for the REST API too.

  2. Choose who it acts as

    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.

  3. Tick "allow changes" if you need to write

    Leave it off and the key is read-only. Every write endpoint returns 403 rather than half-working.

  4. Copy the key

    Shown once. Only a hash is stored, so we can't show it again — lose it, revoke it, make another.

Authentication

One header

# 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.

Retrying safely

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"
What's there

Thirty endpoints

The full machine-readable description lives at /api/openapi.json — point Postman, Insomnia or your code generator at it.

EndpointWhat it's for
GET/boardToday, grouped by tech, with status and access notes
GET/calendarVisits across a date range
GET/clientsClient list with balances
GET/record/client/{id}One client and every related record in a single call
POST/clientsCreate a client, and their first site if you send an address
GET/jobsJobs, filterable by date and status
POST/visitsPut work on the board
PATCH/visits/{id}Status, time, tech, notes
POST/quotesBuild a quote and get a customer link back
POST/invoicesCreate an invoice
POST/paymentsRecord cash, cheque or bank payments
GET/pipelineOpen opportunities, weighted
GET/casesCallbacks and rework, with cost and fault
POST/dispatch/planPlan and route a day — returns a preview, changes nothing
POST/timeoffBook someone off
GET/dashboardCollected, outstanding, aging, rework cost
GET/report/{name}Any of the eight reports as JSON
Also

MCP, if your tool speaks it

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.

Straight talk

What this API doesn't do yet

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.