How Pulses Work
1
Event Occurs
An event happens in your store (e.g., a sale is completed).
2
Pulse Triggered
Chariow sends a signed HTTP POST request to your configured endpoint.
3
Verify the Signature
Your server checks the
x-chariow-signature header before trusting the payload.4
Process the Event
Your server deduplicates on
x-pulse-delivery-id and processes the payload.5
Acknowledge Receipt
Your server returns a 2xx status code to confirm receipt.
Request Headers
Every delivery carries these headers:Full signing contract, verification snippets and troubleshooting: Pulse Security.
Setting Up Pulses
You can configure Pulses in several ways:Via Store Dashboard
- Go to Automation → Pulses
- Click Add Pulse
- Enter your webhook endpoint URL (must be HTTPS)
- Select the events you want to receive
- Optionally select specific products (leave empty for all products)
- Save your Pulse
Your Pulse endpoint must be accessible via HTTPS. HTTP endpoints are not supported for security reasons.
Pulse Events
Pulses support the following events. When an event fires, the webhook payload contains anevent field with the event value.
Sale Events
License Events
Affiliate Events
Pulse Payload
When a configured event occurs, Chariow sends an HTTP POST request to your webhook URL with event data in the request body. The exact payload structure depends on the event type.Pulse payloads contain comprehensive event data, including details about the entity (sale, license, etc.), customer information, product details, and store context. The payload structure varies by event type to provide relevant information for each event.
Successful Sale Example
When a successful sale occurs, Chariow sends a webhook with thesuccessful.sale event:
License Activated Example
When a license is activated, Chariow sends a webhook with thelicense.activated event:
License Nearing Expiry Example
Chariow scans licenses daily and sends thelicense.nearing_expiry event once per license, as soon as it enters the seven-day window before its expires_at date. Use it to prompt a renewal before the customer loses access.
days_until_expiry is only present on this event. It is rounded up, so a license lapsing in a few hours reports 1. A license is announced once and only once, even if the scan runs again before it expires.Affiliate Joined Example
When a new affiliate joins your store, Chariow sends a webhook with theaffiliate.joined event:
Handling Pulses
Basic Example (Node.js/Express)
PHP Example
Retry Policy
If your endpoint doesn’t respond with a 2xx status code, Chariow retries the delivery. A delivery gets 5 attempts in total, spaced with an exponential backoff:
Each attempt times out after 30 seconds. The signature is computed once at dispatch and reused unchanged by every retry, so a retry landing hours later still verifies.
Delivery History and Replay
Every attempt is recorded, so you can see whether Chariow ever called your endpoint and what it answered. Open Automations → Pulses → select your Pulse → Deliveries tab. The table lists each delivery with:pending means queued or mid-retry, not failed. A delivery only becomes failed once all 5 attempts are exhausted.Best Practices
Respond Quickly
Respond Quickly
Return a 200 response immediately, then process the Pulse asynchronously to avoid timeouts:
Handle Duplicates
Handle Duplicates
Due to retry logic, the same delivery may reach you more than once. Deduplicate on the Do not deduplicate on the entity id inside the payload: one sale legitimately produces one delivery per subscribed Pulse.
x-pulse-delivery-id header, which is stable across every attempt of a delivery:Verify the Signature
Verify the Signature
Never act on a payload before checking
x-chariow-signature. See Pulse Security for the full contract and ready-to-use snippets.Use HTTPS
Use HTTPS
Always use HTTPS for your Pulse endpoint to ensure data is encrypted in transit. Chariow will reject HTTP endpoints for security reasons.
Monitor Failures
Monitor Failures
Check the Deliveries tab of your Pulse regularly. It shows the status code and response body of every attempt, so you can diagnose failures without adding logging on your side.
Filter by Products
Filter by Products
For high-volume stores, consider creating separate Pulses for different products to make processing more efficient and organised.
Testing Pulses
Use the Pulse testing feature in your dashboard:- Go to Automations → Pulses
- Click on your Pulse
- Click Send test pulse
- Check your endpoint received the test payload
A test event is signed exactly like a real one, but it carries no
x-pulse-delivery-id header (no delivery record is created for it) and its payload contains an extra note field. To validate your integration against a real payload, replay a delivery from the Deliveries tab instead.For local development, use a service like ngrok to expose your local server to the internet.
Managing Pulses via API
You can programmatically manage your Pulses using the Chariow Public API:List All Pulses
Example List Response
Get a Specific Pulse
Filter Pulses
You can filter pulses by URL or event type using the search parameter:For complete API documentation, see the List Pulses and Get Pulse endpoints.
Related Resources
Pulse Security
Verify signatures and deduplicate retries
API Reference - List Pulses
View detailed API documentation
API Reference - Get Pulse
Get a specific pulse via API
Sales Guide
Learn about sale events
Licenses Guide
Learn about license events
Affiliates Guide
Learn about affiliate events