Documentation
How it works, and how to build against it.
The API and webhook reference, plus the pages that explain how AtTable runs day to day.
Verify a webhook
import crypto from 'node:crypto';
// AtTable-Signature: t=<unix>,v1=<hex>
export function verify(rawBody, header, secret) {
const { t, v1 = '' } = Object.fromEntries(
String(header ?? '').split(',').map((kv) => kv.split('='))
);
const ts = Number(t);
if (!ts || Math.abs(Date.now() / 1000 - ts) > 300) return false;
const mac = crypto
.createHmac('sha256', secret)
.update(`${t}.${rawBody}`) // the raw bytes, not re-serialised JSON
.digest('hex');
const a = Buffer.from(v1);
const b = Buffer.from(mac);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}HMAC-SHA256 · every planLive
01 · For developers
Webhooks, signatures and payloads.
Register an HTTPS endpoint and we post a signed JSON payload when something happens — with an event id for idempotency and retries with backoff.
- API referenceEndpoints, authentication and payload shapes./docs/api
- Webhook eventsWhat AtTable emits, when, and what each event carries.#events
- Verifying signaturesCheck a webhook really came from us before you act on it.#verify
- Integration recipesWorked examples for the things people build first.#recipes
Every event starts somewhere on the floor.order.settled
02 · Running it
For the people using the dashboard.
Every link here goes somewhere real. Written topic pages get added when they exist — not before.
01Setting up The order to do things in, from importing the menu to taking the first payment.02The whole loop How a scan at the table becomes a change you make the following week.03What each part does Every feature, grouped by the job it does.04Plans and limits What each tier includes, the add-ons, and what things cost.05Common questions Contracts, hardware, your data, and what happens if you leave.06Experiments · coming soon How testing a menu change on half the room will work, keeping the winner only if it makes money.
Not covered here? Ask us directly.
The written documentation is still growing. If what you need isn't here, a person will answer — and the question usually becomes the next page.