LuriaDocs
Install

Webhooks

Send sales, leads and bookings to Luria from Zapier, Make, n8n, WooCommerce or your own backend through one private URL (signed if you choose), and see what Luria receives from Shopify.

plain textupdated 2026-10-02

About 10 minutes

Luria receives webhooks. It does not send them: there is no outbound feed, so to move Luria's data elsewhere use the export at the bottom.

Two kinds come in. On Shopify, the app registers everything for you. Everywhere else, you get one private URL per site that accepts business events (a sale, a lead, a booked call) from any tool that can POST JSON.

What you'll need

  • The Luria tag on your site (Install on a custom site)
  • A tool that can send an HTTP POST with a JSON body: Zapier, Make, n8n, ClickFunnels, Kajabi or Systeme workflows, WooCommerce, or your own server
  • Connections in the Luria dashboard. It is rolling out; if you do not see it, email hello@luriart.com

Steps

Step 1: Get your webhook URL

In luriart.com/app, open Connections → Inbound webhook, choose what will send events (generic, or woocommerce) and save. Luria shows a URL like https://www.luriart.com/api/webhooks/source?k=... and a signing secret. The URL is the password: keep it private. Reconnecting keeps the same URL.

Step 2: Send one event per sale, lead or booking

POST JSON to the URL. The simplest body is Luria's own shape:

{
  "name": "purchase",
  "dedupe_key": "order-1042",
  "occurred_at": "2026-09-30T14:03:00Z",
  "value": 129.0,
  "currency": "USD",
  "sid": "<the visitor's luria_sid>",
  "email": "buyer@example.com"
}
FieldMeaning
namepurchase, lead, booked_call, won_deal, refund, and the other names in JavaScript events
dedupe_keyYour id for the thing (order, form entry, booking). The same key twice updates one record, so retries never double count. Send showed or no_show with the booking's key to mark attendance on that booking
occurred_atISO time or epoch milliseconds
value, currencyOptional. Currency is a three-letter code
sidOptional but what credits a split test: the visitor's localStorage.getItem("luria_sid"), passed through your form or checkout as a hidden field
emailOptional. Luria stores only its SHA-256 hash, never the address, and uses it to match the visitor when no sid came through
order_idFor refund only: the dedupe_key of the purchase it reduces; value is the total refunded so far
is_testtrue for a test event: stored and shown apart from real records (even with a real key), never counted as a conversion

You can also send an array of up to 50 events, or {"events": [...]}.

Your tool sends its own shape? Add a field map in Connections instead of reshaping, for example {"name":"=purchase","dedupe_key":"order.id","value":"order.total","email":"customer.email"}: a dot path reads from the payload, a leading = is a fixed value.

Add a header x-luria-signature: sha256=<hex HMAC-SHA256 of the raw body, keyed with your signing secret>. Luria rejects any signed body it does not match. Signing is one way: once Luria has received one correctly signed event on a connection, it refuses every unsigned event there with 401 signature required, so the URL alone can no longer send data. Until that first signed event, anyone holding the URL can post, so sign from your very first event. Zapier and Make can compute it with a code step; your backend can with any crypto library.

WooCommerce preset

Choose woocommerce in Step 1, then in WordPress open WooCommerce → Settings → Advanced → Webhooks → Add webhook: Topic Order updated, Delivery URL = your Luria URL, Secret = your signing secret, API version WP REST API Integration v3, Status Active, save. WooCommerce signs every delivery; Luria counts orders once they are processing or completed, and a refund lowers tracked revenue by the refunded amount. To tie orders to split tests, save the visitor's luria_sid to the order as order meta luria_sid (see Install on WooCommerce).

Verify it worked

  1. Send one event with "is_test": true. Luria answers 200 with "received": 1.
  2. Connections → Inbound webhook shows "Last event received" with the time.
  3. Send one real event with a sid from your own test visit; the Customers count in the Customers section on Overview goes up by one when name matches your goal.

Full checklist: Verify your install.

What Luria receives from Shopify

Installing the Shopify app registers the order, refund, uninstall, product and privacy (customer data request, customer redact, shop redact) topics for you. Every delivery is signature checked, and a verified delivery always gets an immediate 200. One order counts once even when the pixel reports it too. Billing webhooks for your own Luria plan arrive separately and only change your plan state.

Common failures

  • 404 unknown webhook. The k in the URL is wrong, or the connection was disconnected. Copy it again from Connections.
  • 401 signature required. This connection has received a signed event before, so Luria now refuses unsigned ones. Add the header to every sender.
  • 401 bad signature. The signature was computed over a re-serialized body, not the exact bytes sent, or with the wrong secret.
  • 400 with a sentence. The body is not a business event Luria knows, for example name is misspelled. The sentence names the field.
  • Stored but no test credit. No sid, and the email never reached Luria before. Pass the luria_sid hidden field.
  • Counted twice. A thank-you page also calls window.luria.convert for the same sale. Keep one of the two.

Export: on Shopify, open "Your data" in the Luria app and choose Export everything (JSON); elsewhere, email hello@luriart.com.

Next steps

On this page