Webhooks & Events
Reporting Webhook Configuration
This document provides detailed instructions for configuring the Reporting Webhook within your contract creation, signing, and payment system. This webhook allows real-time updates and notifications based on specified triggers and conditions.
Accessing the Webhook Configuration
To configure the Reporting Webhook, follow these steps:
Navigate to Dashboard -> Configurations -> Reporting.
Click New Reporting.
From the list, choose Webhook and click Next. You will be presented with the webhook configuration page.
Note: Screenshot of webhook configuration interface will be added here.
Webhook Configuration Settings
The webhook configuration page contains several settings that you need to fill out. Below is a detailed description of each setting:
Business Units (Required)
Select the Business Units to which this configuration will be linked. This is a mandatory field.
Triggers (Required)
Select the triggers that will activate the webhook. You can choose multiple triggers from the following options:
create
Contract (transaction) is created
update
Any field on the contract (transaction) is updated
send
Contract (transaction) email is dispatched to the recipient
review
Recipient reviews the contract through the checkout
expired
Contract reaches its expiry date/time
confirmed
Contract is confirmed/accepted by the recipient
paid
Payment is successfully completed
canceled
Contract is canceled
Payload URL (Required)
Enter the Webhook URL where the payload will be sent. This is a mandatory field.
Content Type (Required)
Select the content type for the payload. This is a mandatory field. The available options are:
application/jsonapplication/x-www-form-urlencoded
Secret (Optional)
Enter a secret value that will be used to compute an HMAC-SHA256 hash.
SSL Verification (Required)
Select the SSL verification option. This is a mandatory field and contains the following options:
Enable SSL verification (default)
Disable SSL verification
This setting determines if SSL verification is required when making HTTP or HTTPS requests.
Data to Receive (Required)
Select the type of data you want the webhook to receive. This is a mandatory field and contains the following options:
Only Update Status
Send me everything (default)
Choose whether to receive only the status update of the contract or all the data of the contract along with the status.
Assignments Fields (Optional)
Provide an array of field names that define which extra field data to report for each company that belongs to the Business Units. This field is optional.
Data Field Mapping (Optional)
Provide an array of field names that define how each field in the transaction (contract) is mapped to the properties in the pushback report. This field is optional.
Example Configuration
Here is an example of how to fill out the configuration:
Business Units: Provider BU
Triggers: create, update, send
Payload URL:
https://example.com/webhookContent-Type:
application/jsonSecret:
your_secret_keySSL Verification: Enable SSL verification
Data to Receive: Send me everything
By following these steps and filling out the configuration settings as described, you can successfully set up the Reporting Webhook to meet your specific needs.
For further assistance or troubleshooting, please refer to the support documentation or contact our support team.
Webhook Payload Envelope
Every webhook delivery wraps the contract payload in a standard envelope. The envelope contains the following fields:
eventId
Globally unique identifier for this event (use for idempotency)
eventType
Trigger name that caused this delivery (e.g. contract.confirmed)
apiVersion
API version that produced this payload
timestamp
ISO-8601 UTC timestamp of the first dispatch attempt
data
Full contract payload (or status-only if configured)
contract.confirmedandcontract.paidevents β when "Send me everything" is selected, thedataobject includes acheckoutfield with fully resolved customer, beneficiary, billing, payment, and card data (no raw IDs). See the payload examples below.
Request Headers
Every delivery also includes the following HTTP headers:
X-Webhook-Id
The eventId of the delivery (same as in the envelope body)
X-Webhook-Timestamp
Unix epoch (seconds) β used in signature computation
X-Webhook-Signature
HMAC-SHA256 signature β only present when a Secret is configured
HMAC Signature Verification
When you configure a Secret, every delivery includes an X-Webhook-Signature header. Verify it to confirm the request is genuine and has not been tampered with.
How to verify
To verify a delivery, compute an HMAC-SHA256 hash over the string formed by concatenating the timestamp, a dot (.), and the raw request body β using your configured secret as the key. Compare the resulting hex string against the value in the X-Webhook-Signature header.
The X-Webhook-Timestamp header contains the Unix epoch (seconds) used in the signature. Reject any delivery where the timestamp is more than 5 minutes old to prevent replay attacks.
Important: Always use a timing-safe string comparison when checking the signature to prevent timing attacks.
Retry Behaviour
If your endpoint does not return a 2xx response, or the connection times out, the delivery is retried automatically using exponential back-off with Β±10% random jitter.
1st (immediate)
β
2nd retry
~1 minute
3rd retry
~5 minutes
4th retry
~15 minutes
5th retry
~1 hour
6th retry
~6 hours
7th retry
~24 hours
8th retry
~24 hours
After 8 failed attempts the delivery is marked ERROR and no further automatic retries are made. You can trigger a manual retry from the Dashboard β Contracts β [Contract] β Reporting Events panel.
Delivery Statuses
PENDING
Delivery queued, first attempt not yet made
RETRYING
One or more failed attempts; waiting for the next retry
SEND
Endpoint returned 2xx
ERROR
All retry attempts exhausted
Idempotency
Each delivery carries a unique eventId. If you receive the same eventId more than once (e.g. after a network failure caused the delivery to be retried even though you already processed it), you should deduplicate on your side using this field.
Payload Examples
contract.confirmed β "Send me everything"
Sent when a contract is confirmed. Includes full checkout and payment schedule with resolved data.
contract.paid β "Send me everything"
Sent when payment is successfully completed. Includes the same full checkout structure as contract.confirmed, with the payment event status updated to PAID and the payment reference resolved.
contract.paid β "Only Update Status"
Sent when payment is completed. Only the envelope fields and contract status are included.
contract.confirmed β "Only Update Status"
Signature Verification β Code Examples
Node.js
Python
All data is access-controlled and only shows deliveries belonging to your accessible Business Units.
Last updated