A webhook sends every order out of Live-cart the moment it happens, to any address you choose. That address can be Zapier, n8n, Make, a CRM we don’t have a built-in integration for, or your own software. It is the universal way to connect Live-cart to the rest of your business — and it is included on every plan.
Open your webhooksWhat a webhook actually is
Normally, if another system wants to know about your orders, it has to keep asking us “anything new yet?”. A webhook flips that around: we tell it, the instant something happens. You give us a web address; each time an order comes in we send the full order to that address as a message.
You don’t need to be a developer to use one. Tools like Zapier, n8n and Make give you a ready-made address to paste in, and then let you decide what happens next — add a row to Google Sheets, create a deal in your CRM, send yourself a Telegram message, print a label.
Setting one up
- Open Integrations → Webhooks in your dashboard and press Add endpoint.
- Paste the address that should receive your orders. It must start with https://.
- Copy the signing secret we show you. It is displayed once and never again — if you lose it, press New secret to issue a fresh one.
- Press Send test event. Automation tools build their field mapping by looking at a real message, so this is usually a required step on their side too.
You can add up to five endpoints, and each one can be switched off and on without deleting it.
What we send, and when
| Event | When it fires |
|---|---|
| order.created | A buyer completes checkout. Sent for every order, including cash-on-delivery. At this moment the order is not paid yet. |
| payment.confirmed | The payment provider confirms the money actually arrived. This is the one to act on if you only want to ship paid orders. |
| test.ping | Only ever sent when you press “Send test event”. It carries the same fields as a real order so you can build your setup, plus a “test”: true marker. |
Each endpoint can subscribe to whichever of these it wants. A common setup is to listen only to payment.confirmed, so nothing reaches your fulfilment process until the money has actually landed.
What the message looks like
We send the whole order, so your automation has everything it needs without asking us for anything else. The message arrives as JSON:
The main blocks
| Block | What’s inside |
|---|---|
| order | Order number, status, payment status, fulfilment status, and the money totals (subtotal, shipping, tax, total). |
| contact | The buyer: first name, last name, patronymic, phone, email, and whether they asked not to be called. |
| delivery | Carrier and its label, city, branch or address, plus refs — the carrier’s own internal ids, which you need if you want to create the waybill automatically. |
| payment | Which payment method the buyer chose, its display name, and whether it is paid. |
| items | One entry per line: title, SKU, quantity, unit price, line total and image. |
| shop | Which of your shops the order belongs to — useful if you point several shops at one endpoint. |
Reading the prices correctly
This trips people up more than anything else, so every amount is given three ways at once:
- amount is in kopiykas — whole numbers only, so nothing is ever lost to rounding.
- decimal is the same value written normally: 1299.00.
- In a no-code tool, use decimal. If you map amount straight into an invoice you will print ₴129900 instead of ₴1299.
Checking the message really came from us
Every request carries an Lc-Signature header, produced with the signing secret you copied when you created the endpoint. If you are sending orders into your own software, verify it — it is what stops somebody who guesses your address from posting fake orders into your system.
- Use the raw request body exactly as received. If you decode the JSON and re-encode it, the spacing and key order can change and the signature will no longer match.
- Reject anything older than five minutes. The timestamp is part of what is signed, which is what makes an intercepted request impossible to replay later.
- If you use Zapier, n8n or Make, you generally cannot check the signature there — in that case the secrecy of your webhook address is what protects it, so don’t publish it anywhere.
Retries, duplicates and the delivery log
Your endpoint should answer with any 2xx status. Anything else — or no answer within ten seconds — counts as a failure, and we try again with growing gaps: about a minute, then five, then thirty, then hours, over roughly two days.
- The same order can arrive twice. If your system accepts an order but its reply gets lost on the way back to us, we will send it again. Use the id field to recognise a message you have already handled and ignore the repeat.
- Order isn’t guaranteed. Under retries, payment.confirmed can arrive before order.created. Match on the order number rather than assuming a sequence.
- Endpoints that keep failing get switched off and marked in the dashboard, so a dead address doesn’t retry forever. Fix it, then press Enable.
- The delivery log on the webhooks page keeps 30 days of attempts with the response we got back, and a Resend button for anything that didn’t make it.
Address requirements
- Must be https://. Order data includes your customers’ names, phones and addresses, so we will not send it unencrypted.
- Must be reachable from the public internet. Addresses on a private or local network are rejected.
- Redirects are not followed — give us the final address directly.
- The same address can only be registered once per shop.
If you already sync to a CRM
Live-cart can already push orders straight into KeyCRM and SalesDrive from the CRM integrations page. Those run separately from webhooks — so if you have KeyCRM connected there and a webhook feeding the same KeyCRM through Zapier, every order will be created twice.
Pick one route per destination. Use the built-in CRM integration where we have one, and webhooks for everything else.
What people build with it
- Every order appended to a Google Sheet for the accountant.
- A Telegram or Viber message to the packing team the moment a payment clears.
- Orders pushed into a CRM we don’t integrate with natively — any of them, via Zapier or Make.
- A Nova Poshta waybill created automatically in n8n from the carrier ids in the delivery block.
- Your own warehouse or accounting software, fed directly.
Didn’t solve it?
Write to us and we’ll work through your case with you.