This is the delivery half of a Partner to Extole integration: server-side code in the partner platform posts the platform’s own events to the Events API. The other half lives in Extole, where Map Partner Events to Business Events turns each arriving event into a canonical business event.Build a sender only when you control the sending code. A platform that emits nothing but its own fixed webhook has no sender to write — a prehandler reshapes what it sends instead.
Send events server-side. A token in storefront templates, theme files, or browser code is published to every site visitor. Platforms whose events can only be produced in the browser use the JavaScript SDK instead.
Send events from a worker, not the hook that observed them: the hook persists a sanitized record and returns, the worker delivers it. An Extole timeout or network failure must never fail a checkout, block an order-status transition, or slow a page the customer waits on.
labels goes inside data and holds the integration’s current program label, not one copied from another account.
Name every source key exactly as the partner page does; data components read keys by name, so a renamed key arrives with that field missing rather than an error.
Send what the integration maps and nothing more. Payment-card data, passwords, session identifiers, and unrelated metadata have no mapped destination.
Use /v6/events for a new sender: it responds synchronously, so the worker can verify what Extole did with each event. For sustained high-volume delivery, evaluate /v6/async-events, where acceptance no longer means the event has been processed — update the worker’s verification and retry behavior. Some partner pages document /v5/events, a still-supported path.
A valid submission returns 200 with a JSON body carrying both event_id and person_id. Keep the event_id: it is how you find the event, and every event it caused, in an event stream. An empty 204 No Content means the request is not reaching the Events API — check the host.
Extole answers an accepted submission with a 2xx. Retry network failures, 429, and retryable 5xx responses; authentication and validation failures fail identically on every attempt. Expect the same event more than once, because platforms re-fire hooks and replay status history — Extole deduplicates on the field mapped as the unique partner event key, so a replay resolves to the same outcome rather than a second conversion.
Confirm the event carries the canonical event name, not the platform’s; the transaction identifier and value match the source record; person keys resolve; and resending the same source identifier produces a duplicate outcome, not a second conversion. Repeat for every event. Map Partner Events to Business Events shows how to use event_id to follow the complete processing chain in Event Streams.