- The Webhook is a trigger, not a source of truth. Always re-fetch the underlying object via the API before acting on it.
- Ordering is not guaranteed. Events for the same object may arrive out of order. Trust the status returned by the API, not the sequence of events.
Payload structure
Every Webhook is aPOST request with a JSON body containing four fields.
Event catalog
Paylead emits two parallel event families for Rewards: consumer-facing events and technical events. They are independent, each tracking a different perspective on the same lifecycle.Consumer-facing Reward events
Consumer-facing Reward events
Track what the Consumer experiences in the bank app. These events fire when the Consumer’s view of a Reward changes, independently of Paylead’s internal processing.
Reward technical events
Reward technical events
Offer events
Offer events
Sent when an Offer changes or approaches its limits.
consumer_id and user_id are null for these events.Payout events
Payout events
Sent when Paylead executes a payout batch for the Program.
consumer_id and user_id are null for these events.Other events
Other events
Deprecated events
Deprecated events
Do not subscribe to these events for new integrations.
- Affiliation events (
affiliation_*): Paylead no longer offers Affiliation. scrapping_error: the bank synchronization failure event is deprecated.
Setting up your endpoint
Each event type is configured independently in Shift: you assign one HTTPS endpoint per event. The same endpoint URL can receive multiple event types.Securing your endpoint
Paylead offers three mechanisms to authenticate incoming Webhooks. They are all optional and can be combined on the same Program. Configure them per endpoint in Shift.HMAC SHA-256
Paylead signs the raw request body with a shared secret (minimum 32 characters) using HMAC-SHA256. The signature travels in a dedicated header.- Signature header:
X-paylead-signature-256, a hex digest (not base64). - Timestamp header (optional):
X-paylead-timestamp, included in the signed string to protect against replay attacks. - Verification: recompute the HMAC with the same secret over the raw body and compare it against the header.
Basic Auth
Paylead adds a standardAuthorization: Basic <base64(username:password)> header to every request. Use this when your endpoint already handles HTTP Basic authentication.
Custom header
Paylead injects an arbitrary header with a static name and value defined at configuration time. Use this to pass a proprietary token your system expects, for exampleX-Api-Key: <value>.
On request, Paylead can also set up a mutual TLS (mTLS) flow for the Webhook calls it makes to your endpoint.
Reliability
A robust Webhook integration handles delivery failures and ordering surprises.Retry policy
Paylead retries any delivery that returns a non-2xx response or times out. The current policy is 5 attempts maximum with an exponential backoff of 2^n minutes between attempts, where n is the attempt number.
After the final attempt fails, the event is marked as failed. Failed events surface in Shift for manual replay.
This retry schedule is the current default and may evolve. Build your handler so it tolerates a stricter or looser cadence: what matters is that you ack quickly and re-fetch the object via the API.
Ordering
Re-fetch before acting
Webhooks reflect state at the moment of dispatch. Between dispatch and your handler running, the underlying object may have moved on. Always issue an API call to read the current state before triggering money movement or notifications.Common pitfalls
What’s next
Versioning
The mandatory
X-Api-Version header and the version policy.Rate limits
Per-token request limits and backoff strategy.