Webhooks let your business automatically send Cents events to an external system in near real time. You configure a destination URL, optionally add authentication, and pick the events you want. When one of those events happens, Cents sends an HTTP POST request with a JSON payload to your endpoint. Because a webhook can point at any URL, you can connect Cents to your own backend, a CRM, a data platform, Zapier, or anything else that accepts incoming HTTPS requests.
Before you start
Webhooks live in the Business Manager under Integrations > Webhooks.
This feature is being rolled out gradually and must be enabled for your business. If you don't see Webhooks, contact our team to request access.
Webhook payloads can include customer and order information, so use an HTTPS endpoint for production.
Create a webhook
In the Business Manager, go to Integrations > Webhooks, select + Webhook, and configure the following:
Label (optional): A name to identify the webhook, such as CRM, Zapier, Data Warehouse, or Marketing Platform. The label is for your reference only and does not affect delivery.
Endpoint URL: The destination where Cents sends events. It must be a valid URL. HTTP and HTTPS are both supported, but HTTPS is recommended for production, especially since payloads can contain customer and order information.
Authentication (optional): Choose None or Custom Header. For a custom header, enter the header name and value. The value is sent exactly as entered, so include any prefix yourself. Cents does not add Bearer or any other prefix automatically.
Events to send: Select the events to deliver to this endpoint. All supported events are enabled by default, and you can change the selection later without changing the endpoint.
Example custom headers:
Authorization: Bearer abc123 X-API-Key: secret-value
Supported events
You can send any of these events. Each webhook has its own event selection, so you can route different events to different systems (for example, customer events to your CRM and order events to a data warehouse).
customer_created — A new customer profile is created.
customer_updated — A customer profile is updated.
customer_marketing_optin — A customer opts in to marketing communications.
order_created — A new order is placed.
order_updated — An order is updated.
order_completed — An order moves to Complete status.
Manage a webhook
The Manage Webhook page shows the webhook's configuration and recent activity, including the endpoint, authentication type, enabled events, recent delivery history, and event payloads. From here you can:
Edit the endpoint URL.
Update authentication.
Change which events are enabled.
View delivery attempts.
View the exact payload sent for an event.
Delete the webhook.
Endpoint and authentication settings and event selection can be updated independently.
Event payloads
Every webhook is delivered as an HTTP POST with Content-Type: application/json. The payload structure depends on the event.
Customer events (customer_created, customer_updated, customer_marketing_optin) include customer information such as name, phone, email, source, and identifiers, plus customer metrics such as order count, total order value, last order date, and loyalty points balance.
{
"event": "customer_created",
"customer": {
"id": 4821,
"firstName": "Jane",
"lastName": "Doe",
"phoneNumber": "+15551234567",
"businessName": null,
"email": "[email protected]",
"isCommercial": false,
"isInvoicingEnabled": false,
"centsCustomerId": 9931,
"referralCode": "JANE10",
"source": ["assist"]
},
"customerMetrics": {
"numOrders": 3,
"totalOrderValue": 142.50,
"lastOrderDate": "2026-08-20T14:32:00.000Z",
"loyaltyPointsBalance": 25
}
}
Order events (order_created, order_updated, order_completed) include order information (status, totals, dates, order type, pickup and return details, store, and payment amounts), the services on the order (with quantities, pricing, categories, and modifiers), customer information, customer metrics, and attribution information where available.
{
"event": "order_completed",
"order": {
"id": 88213,
"storeId": 42,
"status": "COMPLETED",
"orderTotal": "45.99",
"placedAt": "2026-08-30T10:15:00.000Z",
"updatedAt": "2026-09-01T09:00:00.000Z",
"completedAt": "2026-09-01T09:00:00.000Z",
"orderCode": "ORD-88213",
"orderType": "ONLINE",
"tipAmount": "5.00",
"creditAmount": "0.00",
"promotionAmount": "0.00",
"balanceDue": "0.00",
"returnMethod": "DELIVERY",
"pickupDeliveryFee": "3.00",
"returnDeliveryFee": "3.00",
"recurringDiscountInCents": 0,
"dueDate": "2026-09-01T00:00:00.000Z",
"storeName": "Main St Laundromat",
"startPickupWindow": "2026-08-30T10:00:00.000Z",
"endPickupWindow": "2026-08-30T12:00:00.000Z",
"startReturnWindow": "2026-09-01T08:00:00.000Z",
"endReturnWindow": "2026-09-01T10:00:00.000Z",
"formattedPickupWindow": "10:00 AM - 12:00 PM",
"formattedReturnWindow": "8:00 AM - 10:00 AM",
"onlineOrderUrl": "https://order.trycents.com/business-name"
},
"services": [
{
"id": 501,
"name": "Wash & Fold",
"quantity": 2,
"totalPrice": "30.00",
"customerSelection": null,
"unitCost": "15.00",
"serviceCategory": "Wash & Fold",
"serviceCategoryType": "PER_POUND",
"modifiers": [
{
"id": 12,
"name": "Extra Softener",
"pricingType": "FLAT",
"totalPrice": "2.00",
"unitCost": "2.00",
"quantity": 1
}
]
}
],
"customer": {
"id": 4821,
"firstName": "Jane",
"lastName": "Doe",
"phoneNumber": "+15551234567",
"businessName": null,
"email": "[email protected]",
"isCommercial": false,
"isInvoicingEnabled": false,
"centsCustomerId": 9931,
"referralCode": "JANE10",
"source": ["livelink"]
},
"customerMetrics": {
"numOrders": 4,
"totalOrderValue": 188.49,
"lastOrderDate": "2026-09-01T09:00:00.000Z",
"loyaltyPointsBalance": 30
},
"attributionSource": "google_ads",
"attributionParams": {
"utm_campaign": "fall_promo"
}
}
The onlineOrderUrl field is included only for order_completed events where the order type is ONLINE. It is not included for other order events or non-online orders.
Things to plan for:
Customer and order events have different payload structures.
Some fields may be null or unavailable depending on the customer or order.
Event-specific fields like onlineOrderUrl only appear in certain cases.
Payloads may evolve over time: new event types and new fields can be added. Design your system to ignore unknown fields and handle new event types without breaking, and don't assume the current structure is permanent.
You can inspect the exact payload sent for any event from Event Log > View.
Event Log
The Event Log shows recent webhook delivery attempts, including the delivery time, event name, HTTP method, request body, and response status.
Delivery statuses:
Success / 2xx — The endpoint accepted the request.
Failed — Delivery failed or the endpoint returned an error.
Pending — Delivery is still being processed.
Retries: If a delivery fails, Cents automatically retries up to 5 total attempts (1 initial attempt plus 4 retries) using exponential backoff, starting with a 1-second delay. There is no manual retry or replay option.
History: Event Log data is retained for 7 days. Older events are no longer available in the Event Log.
Duplicate events: The same event may be delivered more than once, and Cents does not currently include an idempotency ID for deduplication. Design your system to handle duplicate deliveries safely, and do not assume exactly-once delivery.
FAQ
Why can't I see Webhooks in the Business Manager?
Webhooks must be enabled for your business. If you don't see them, contact our team to request access.
Can I create multiple webhooks?
Yes. You can create multiple webhooks, each with its own endpoint and event selection.
Can I send different events to different systems?
Yes. Each webhook has its own events and destination.
Can I use webhooks with Zapier or another third-party platform?
Yes. Any platform that provides a compatible HTTP endpoint can receive Cents webhooks.
Does Cents sign webhook requests?
No. Cents does not currently provide HMAC or other cryptographic request signatures.
Can I use a custom authentication header?
Yes. You can configure a custom header with any name and value. The value is sent exactly as entered, and Cents does not add Bearer or any other prefix.
Is the payload the same for every event?
No. Payload structure varies by event type, and some fields are only available for specific events.
When is onlineOrderUrl included?
Only for order_completed events where the order type is ONLINE.
Should my system expect every field to have a value?
No. Some fields may be null or unavailable depending on the customer, order, or event.
Can I manually resend a failed webhook?
No. Failed deliveries are retried automatically up to five total attempts, but manual replay is not currently supported.
Can I send a test webhook?
Not currently. A qualifying real event must occur to generate a webhook delivery.
Does Cents guarantee exactly-once delivery?
No. Account for duplicate deliveries and do not rely on exactly-once delivery.
Need assistance?
Feel free to text our Cents Support team at 888-302-8809.
