Subscriptions and payments become events on the timeline. Need a visitor snippet first? Create one in Settings → API. For web attribution, pass customData.ek_visitor_id (localStorage ek_vid) into Paddle.Checkout.open.
transaction.completed, subscription.activated and subscription.canceled. Those are acknowledged and ignored.transaction.completed. Kind subscription.
| Field | What it is |
|---|---|
kind | subscription |
title | Payment completed. |
external_id | event_id. |
occurred_at | occurred_at. |
meta.id | data.id, when present. |
subscription.activated. Kind subscription.
| Field | What it is |
|---|---|
kind | subscription |
title | Subscription started. |
external_id | event_id. |
occurred_at | occurred_at. |
meta.id | data.id, when present. |
subscription.canceled. Kind subscription.
| Field | What it is |
|---|---|
kind | subscription |
title | Subscription canceled. |
external_id | event_id. |
occurred_at | occurred_at. |
meta.id | data.id, when present. |
In the Paddle dashboard open Developer Tools → Notifications → New destination. Paste the Erdi endpoint URL as the destination URL — the exact endpoint, with no trailing redirect. Paddle expects a 200 within five seconds and treats a redirect as a failed delivery. Copy the destination's secret key from Paddle and paste it into Erdi. Select transaction.completed, subscription.activated and subscription.canceled.
On transaction.completed, Erdi also reads data.custom_data.ek_visitor_id when present. Pass that value from the marketing snippet (localStorage ek_vid) when opening Checkout — key name must be exactly ek_visitor_id. Missing custom_data or the key is fine — timeline markers still write; no attribution marker. Walkthrough: Web attribution.
HMAC-SHA256 of ts colon the raw body, hex, header Paddle-Signature (ts= unix seconds; h1= hex). The key is the destination secret from Paddle.
Set it up under Settings → Webhooks in your project.