POST request that contains an Event payload. The event includes its type, the resource snapshot in data, the creation time, whether it was generated in live or test mode, and the api_version used to render that payload.
Your endpoint should acknowledge webhook deliveries quickly. Charge treats 200, 201, 202, and 204 as successful responses. If your endpoint does not return one of those statuses in time, Charge retries the delivery according to the retry policy below.
Webhook deliveries must be verified before you trust them. Charge signs each request with the Charge-Signature header, and your handler should verify that signature against the endpoint secret using the raw request body, not a re-serialized payload.
Webhook consumers should also be built to handle retries and duplicate deliveries. A delivery can be attempted more than once, so your handler should be idempotent and should not assume that each event ID will only ever be seen once.
You control which events a destination receives through Webhook Endpoints. Each endpoint can subscribe to selected event types, and it can optionally pin api_version if one consumer needs to stay on a fixed payload shape during an upgrade.
Webhook payloads
Charge sends an Event payload to your endpoint for each event type you subscribe to. The table below shows the event types you can receive today.Supported event types
| Event type | Payload object | Description |
|---|---|---|
charge.succeeded | Transaction | Sent when a charging transaction has been successfully finalized. |
report.succeeded | Report | Sent when a report run completes successfully and is ready to retrieve. |
In practice
- Verify the
Charge-Signatureheader before trusting the payload. - Return a
2xxstatus only after your handler has accepted the event. - Store event IDs if you want deduplication on your side.

