What webhooks are and why they are useful
A webhook is an HTTP POST request that Crevio sends to a URL you specify whenever a specific event occurs. Common use cases include:- Syncing data — Update your CRM, database, or spreadsheet when a new lead is captured or an order is placed.
- Triggering automations — Send a Slack message, start an email sequence, or enroll a user in a course platform when a purchase completes.
- Custom fulfillment — Deliver access to external systems, generate license keys, or provision accounts in your own software.
- Analytics — Track conversion events in your own data warehouse.
Creating webhook endpoints
Create a new endpoint
Click New webhook endpoint. Enter the URL where you want to receive events. This must be an HTTPS URL in production.
Select events
Choose which events you want to subscribe to. You can select individual events or subscribe to all available events.
Available webhook events
Crevio supports the following webhook events:| Event | Description |
|---|---|
lead.created | A new lead has been captured |
checkout.created | A new checkout session has been created |
order.created | A new order has been created |
order.paid | An order has been paid |
invoice.created | A new invoice has been created |
invoice.paid | An invoice has been paid |
invoice.past_due | An invoice is past its due date |
invoice.voided | An invoice has been voided |
product.created | A new product has been created |
product.updated | A product has been updated |
Webhook payload format
Every webhook delivery is an HTTP POST request with a JSON body. The payload follows this structure:| Field | Description |
|---|---|
id | Unique identifier for this webhook event |
created_at | ISO 8601 timestamp of when the event was created |
type | The event type (e.g., order.paid) |
api_version | The API version used to generate the payload |
data | The event-specific payload containing the resource data |
data object varies by event type. It contains the serialized resource (customer, order, checkout, invoice, or product) relevant to the event.
Testing webhooks
You can send a test event to any active endpoint to verify your setup:- Go to Settings > Developer and find your webhook endpoint.
- Click Send test and select the event type you want to test.
- Crevio sends a test payload to your URL with
"test": truein the body. Test events are not persisted — they are ephemeral.
Retry behavior and error handling
Crevio expects your endpoint to respond with a2xx status code within 5 seconds. If the request fails or times out:
- The event is marked as failed.
- Failed events are retained for 7 days before being automatically deleted.
- Crevio does not automatically retry failed deliveries. If you need to re-trigger a webhook, use the test event feature or trigger the action again in your dashboard.
Endpoint statuses
| Status | Meaning |
|---|---|
| Active | The endpoint is receiving events normally |
| Inactive | The endpoint is disabled and will not receive any events |
Security considerations
Verifying webhook signatures
Every webhook request includes anX-Crevio-Hmac-SHA256 header containing a Base64-encoded HMAC-SHA256 signature of the request body. Use this to verify that the request genuinely came from Crevio.
To verify a webhook signature:
- Read the raw request body as a string.
- Compute an HMAC-SHA256 digest using your endpoint’s signing secret as the key and the raw body as the message.
- Base64-encode the result.
- Compare it to the value in the
X-Crevio-Hmac-SHA256header.
Best practices
- Respond quickly — Return a
200response as soon as you receive the event, then process it asynchronously. This prevents timeouts. - Handle duplicates — Use the event
idto deduplicate, in case the same event is delivered more than once. - Use HTTPS — Webhook endpoints must use HTTPS in production. HTTP URLs are only allowed in local development.
- Keep your secret safe — Store your signing secret in environment variables or a secrets manager. Never commit it to version control.
Webhook formats
In addition to the default JSON format, Crevio supports sending webhooks formatted for:| Format | Use case |
|---|---|
| Raw (default) | Standard JSON payload for your own server |
| Slack | Pre-formatted for Slack incoming webhooks |
| Discord | Pre-formatted for Discord webhook URLs |

