API and webhooks
Connect docket to n8n, Make, Zapier or your own scripts: personal API keys for the GraphQL API, and webhooks that tell your tools when something happens.
Two things connect docket to the tools around it. The API lets a script or an automation tool read and write what a person can in the app. Webhooks tell an address of yours when something happened, so nothing has to ask again and again.
Switching the API on
An admin switches it on under Admin → Integrations → API. Until then nobody can make a key, and no key works.
API keys
Every person makes their own keys in their profile settings, under API keys. A key acts as the person who made it, with exactly their role: a time tracker's key sees their own projects and time, an admin's key sees the figures.
- Making a key asks for your password.
- The key is shown once, when you make it. docket keeps only a fingerprint of it. Lost keys are replaced, not recovered.
- A key expires after 90 days unless you pick 30 days, a year or Never.
- A key stops working when you remove it or when the admin switches the API off.
- A key is deleted when its owner changes their password, is archived, or when an admin signs everyone out. Automations using it stop until you make a new key; signing out of docket leaves keys alone.
- What only a signed-in person does stays closed to keys: the workspace's settings, users, the connections to Jira and AI apps, and keys and webhooks themselves.
- A key may send 120 requests a minute.
Calling the API
docket's API is GraphQL, the same one the app uses. It lives at your workspace's address:
POST https://yourworkspace.docket.rocks/graphql
Authorization: Bearer dkt_…
Content-Type: application/json
{ "query": "{ viewer { id } }" }
The schema, with every query and mutation and a description on each, is at /graphql/schema (send
the same header). Ids in webhook events are the ids the API takes. The
API guide for developers walks through the common calls.
The API is the app's own, so it grows with the app. A field that goes away is marked as deprecated in the schema first.
Webhooks
An admin adds a webhook under Admin → Integrations → API: an https address and the events it should hear about. An n8n Webhook node, a Make Custom webhook or a Zapier Catch Hook gives you such an address.
| Event | When |
|---|---|
project.created |
a project is created |
ticket.created, ticket.closed, ticket.reopened |
a ticket is created, closed or reopened (not tickets mirrored from Jira when they are created) |
time_entry.created |
time is booked (not worklogs taken over from Jira) |
quotation.published, quotation.confirmed, quotation.canceled |
a quote goes out, is confirmed or cancelled |
order_confirmation.published, delivery_note.published |
the document goes out |
invoice.published, invoice.paid, invoice.payment_reversed, invoice.canceled |
an invoice goes out, is marked paid, the payment is taken back, or it is cancelled |
Each event is a small JSON document: what happened, when, in which workspace, who did it, and the record's id and a few facts. An invoice carries its number, dates, net and gross.
{
"id": "6c1f…",
"event": "invoice.paid",
"created_at": "2026-11-12T09:30:00Z",
"workspace": "yourworkspace",
"actor": { "id": "…", "name": "Ada Lovelace" },
"data": { "type": "invoice", "id": "…", "number": "20042", "status": "paid", "net": 4230.0, "gross": 5033.7, "currency": "EUR" }
}
Checking that it is docket
Every delivery is signed with the webhook's secret, which the webhook's row shows:
X-Docket-Signature: t=1794475800,v1=5f3a…
v1 is the HMAC-SHA256 of <t>.<body> with the secret. Compute it yourself and compare; refuse
deliveries whose t is old. X-Docket-Delivery stays the same when a delivery is repeated, so
you can drop repeats.
When your address doesn't answer
Any answer in the 200s counts as arrived. Otherwise docket tries again, five times within about an hour, then gives up on that delivery. After twenty deliveries in a row that didn't arrive, docket switches the webhook off; an admin switches it on again. The webhook's row lists its latest deliveries with the answer each got, for two weeks.
docket only delivers to https addresses on the public internet.
Related: API guide for developers · Connect AI apps · User roles