Pulling exports
- Export the report
- Upload it somewhere
- Hope nothing was missed
Your warehouse is a day behind, your delivery partner learns about an order from a phone call, and when an upload fails nobody notices until the numbers do not match.
When an order is placed, a booking confirmed, a rider picks up or an ingredient runs low, Tahlib sends a signed HTTPS request to your own system within moments. If your server is down, it tries again — six attempts over two and a half hours — and every delivery is logged so nothing goes missing quietly.
An endpoint and its delivery log, as they ship.
Most restaurant systems make you pull your own data: a nightly export, a script that scrapes a report, a spreadsheet somebody uploads on Monday.
Your warehouse is a day behind, your delivery partner learns about an order from a phone call, and when an upload fails nobody notices until the numbers do not match.
Each event is pushed the moment it happens, signed so your server can prove where it came from. A failed delivery is retried on a schedule and recorded with the status your server returned, so a gap is visible and fixable rather than silent.
Your developers still build the integration. They stop building the plumbing under it.
About ten minutes for a developer who has handled a webhook before.
Give it a name and an HTTPS URL, and choose the events it should receive — orders, payments, reservations, deliveries, menu, inventory.
A 32-byte secret is shown once. Tahlib keeps only a hash of it, so store it on your side straight away.
Fire a test event from the dashboard and see the status code and response time your server returned.
Recompute the HMAC-SHA256 signature from the timestamp and the raw body with your secret, and compare it with the header.
Anything else — an error, a redirect, or no answer within ten seconds — counts as a failure and is retried.
Every delivery with its event, status, HTTP code and attempt number. Filter by status or event, and redeliver any of them.
Changing, testing or redelivering is limited to the owner; the rest of the team can read the log.
A deploy, an outage, an expired certificate — none of them should cost you an order event. This is what happens to one that fails.
Grouped by the job, not by the screen it lives on.
Seventeen events published today.
Proof that a request came from Tahlib.
For the day your server is not there.
Every attempt, kept.
Different systems, different events.
A webhook endpoint is a public URL. The signature is how your server tells Tahlib’s requests from anyone else’s.
The request’s Unix timestamp and its raw body, joined by a dot, signed with HMAC-SHA256 using your endpoint’s secret.
The X-Tahlib-Signature header carries the timestamp and the signature as t=… and v1=…, so your code has everything it needs in one place.
Because the timestamp is inside the signature, your server can reject anything older than a few minutes, even if someone captured a genuine request.
Each event carries an id that stays the same across automatic retries, so a request your server already processed can be recognised and skipped.
Webhooks carry what the rest of Tahlib records. Each product you use is another stream your systems can listen to.
Created, updated, completed and cancelled — from the till and the QR menu.
A guest’s online payment succeeded or failed, and a refund completed.
A booking created, confirmed or cancelled.
A delivery assigned to a rider, picked up and delivered.
A menu item created or changed, for systems that mirror your menu.
An ingredient crossing its low-stock level, for reorder automation.
Products are switched on individually, each priced per branch. View all products
Same events, different destination.
Written around how restaurant groups here actually connect systems.
JSON over HTTPS, HMAC-SHA256 signatures and plain retries — the same patterns your developer already knows from payment gateways.
Order and booking events go to the endpoint you choose, so the system of record for your reporting can be your own.
Your warehouse, your loyalty partner and your ops chat can each receive only the events they need.
Only the account owner can add endpoints, change them or rotate secrets, and every change is written to the audit log.
Seventeen: order created, updated, completed and cancelled; payment succeeded, failed and refunded; reservation created, confirmed and cancelled; delivery assigned, picked up and delivered; menu item created and updated; inventory low stock; and customer created, which fires when a customer is created through the API.
Yes, for payments guests make online through Online Payments & Pay-at-Table: payment succeeded when your provider confirms a payment, payment failed when one is declined, and payment refunded when a refund completes. A bill settled at the till fires order completed instead.
Read t and v1 from the X-Tahlib-Signature header, compute HMAC-SHA256 of the timestamp, a dot and the raw request body using your endpoint’s secret, and compare the result with v1. Rejecting old timestamps protects against replays.
Each delivery is attempted six times — immediately, then after 10 seconds, 30 seconds, 5 minutes, 30 minutes and 2 hours. After that it is marked failed and can be redelivered from the log. Five failed deliveries in a row switch the endpoint off until you re-enable it.
Yes, as with any webhook system — for example if your server processed a request but answered too slowly. The event id is the same across automatic retries, so de-duplicate on it. A manual redelivery is sent with a new id.
Not guaranteed. Retries can land after later events, so use the createdAt timestamp in each event when order matters.
Orders logged from delivery platforms do not send an order created event today.
Not yet. API keys can be created in the dashboard, but no endpoint accepts them today, so integrations are push-only through webhooks for now.
The new secret applies to the next request straight away, with no overlap period — update your server before or as you rotate.
The webhook screens in the dashboard are in English today.
It is priced per branch, per month, with a free trial — switched on and off from your dashboard. The pricing section above shows the current figure and what it drops to as you add branches.
Add an endpoint, send a test, and the next order is on its way to your server as it happens.
No card to start · nothing to install · cancel whenever