Cents provides webhook support so your systems can stay in sync with real-time customer and order activity. By subscribing to specific events, you can automate workflows and trigger actions in external systems when changes occur in Cents.
This guide covers:
Supported webhook events
Common integration use cases
Example payloads for customer and order events
Supported Webhook Events
Cents currently supports the following webhook events:
Customer Created (customer_created)
Customer Updated (customer_updated)
Order Created (order_created)
Order Updated (order_updated)
Order Completed (order_completed)
Customer Marketing Opt-in (customer_marketing_optin)
Whenever one of these events is triggered, Cents will send a POST request with a JSON payload to the webhook URL(s) you provide.
Common Use Cases
Here are a few examples of how these events can be used:
Customer Created / Updated
Sync data in an external source with the Business Manager
Segment users based on commercial vs residential accounts
Order Created / Updated / Completed
Alert staff via external messaging tools
Log order activity in a spreadsheet or dashboard
To alert when Inventory is low
To calculate store capacity
Example Payloads
Below are sample JSON payloads for each type of event.
Headers
All webhook requests include the following headers including IP & timestamp:
Customer Events
Field Legend
Field | Type | Notes |
| string |
|
| integer | Customer ID associated with the Business |
| string | Customer first name |
| string | Customer last name |
| string | Customer phone number with country code |
| string | Business the customer was created for |
| string | Customer email (if given) |
| boolean | Whether the customer is a commercial account (true/false) |
| boolean | Whether invoicing is enabled for this customer (true/false) |
| integer | Customer ID associated with Cents |
| string |
|
| float | null | Dollars. Null if no credit on account |
| integer | Points balance. |
{
"event": "customer_created", // or "customer_updated"
"customer": {
"id": "cust_12345",
"firstName": "John",
"lastName": "Doe",
"phoneNumber": "+1 555-1234",
"businessName": "John's Cleaners",
"email": "[email protected]",
"isCommercial": false,
"isInvoicingEnabled": false
"centsCustomerId": 738,
"referralCode": "bd5da437"
},
"customerMetrics": {
"numOrders": 5,
"totalOrderValue": 250.0,
"lastOrderDate": "2025-02-14T10:00:00Z",
"creditBalance": 10.0,
"loyaltyPointsBalance": 200
}
}
Order Events
Field Legend
Field | Type | Notes |
| string |
|
| integer | Order ID unique identifier |
| string |
|
| string |
|
| string |
|
| float | Dollars. May be |
| float | null | Dollars. Null if no tip |
| float | null | Dollars. Null if no credit applied |
| float | Dollars. |
| float | Dollars. Remaining amount owed |
| float | Dollars. |
| float | Dollars. |
| integer | Cents. |
| string | Unix timestamp in milliseconds The start of the selected Window for the customer pickup |
| string | Unix timestamp in milliseconds |
| string | Unix timestamp in milliseconds The start of the selected Window for the customer return delivery |
| string | Unix timestamp in milliseconds The end of the selected Window for the customer return delivery |
| integer | Service ID unique service identifier in Cents |
| string | Name of the service, configured in the Business Manager |
| float | Number of units added (ie. laundry bags or dry cleaning items) |
| float | Total price of this service after weighing. If 0, then order has not been weighed |
| boolean | Whether the customer selected this service themselves, if false then placed through the Business Manager |
| integer | Price of a single unit
To calculate weight, take services.totalPrice divided by services.unitPrice |
| string |
|
| string |
|
| string | E.164 format, e.g. |
| integer | Cents-internal customer ID, distinct from |
| integer | Points balance. |
| string | null | Source of order attribution if tracked (Ads, Website, etc) |
| object | null | Raw attribution params if tracked |
{
"action": "order_created", // or "order_updated"
"order": {
"id": 12345,
"storeId": 24
"status": "SUBMITTED",
"orderTotal": 29.99,
"placedAt": "2025-02-14T10:05:00Z",
"updatedAt": "2025-02-14T10:05:30Z"
"completedAt": null,
"orderCode": "00123",
"orderType": "ONLINE"
"tipAmount": 3.0,
"creditAmount": 0.0,
"promotionAmount": 2.0,
"balanceDue": 24.99,
"returnMethod": "PICKUP",
"pickupDeliveryFee": 5.0,
"returnDeliveryFee": 5.0,
"recurringDiscountInCents": 0,
"dueDate": "2025-02-15T10:05:00Z",
"storeName": "LaundryExpress #1",
"storeName": "Dispatch Testing",
"startPickupWindow": "1776301200000",
"endPickupWindow": "1776308400000",
"startReturnWindow": "1776362400000",
"endReturnWindow": "1776369600000",
"formattedPickupWindow": "Wednesday, 4/15/2026, 9:00 PM - 11:00 PM", "formattedReturnWindow": "Thursday, 4/16/2026, 2:00 PM - 4:00 PM"
},
"services": [
{
"id": "43",
"name": "Wash & Fold",
"quantity": 1,
"totalPrice": 25.0,
"customerSelection": true,
"unitCost": 25.0,
"serviceCategory": "Wash & Fold",
"serviceCategoryType": "LAUNDRY",
"modifiers": [
{
"id": "mod_56789",
"name": "Stain Treatment",
"pricingType": "FLAT",
"totalPrice": 4.99,
"unitCost": 4.99,
"quantity": 1
}
]
}
]
},
"customer": {
"id": "314",
"firstName": "Jane",
"lastName": "Smith",
"phoneNumber": "+1 555-6789",
"businessName": "Jane's Bakery",
"email": "[email protected]",
"isCommercial": false,
"isInvoicingEnabled": false
"centsCustomerId": 738,
"referralCode": "bd5da437"
},
"customerMetrics": {
"numOrders": 12,
"totalOrderValue": 450.75,
"lastOrderDate": "2025-02-13T15:30:00Z",
"creditBalance": 5.0,
"loyaltyPointsBalance": 320
}
"attributionSource": null,
"attributionParams": null
}
Customer Marketing Opt-in
{
"event": "customer_marketing_optin",
"customer": {
"id": 815,
"firstName": "Francine",
"lastName": "Dong",
"phoneNumber": "+11701610914",
"businessName": null,
"email": "[email protected]",
"isCommercial": false,
"isInvoicingEnabled": false,
"centsCustomerId": 738,
"referralCode": "bd5da437" },
"customerMetrics":
{
"numOrders": 56,
"totalOrderValue": 447.35,
"lastOrderDate": "2026-04-15T21:22:19.782Z",
"loyaltyPointsBalance": 500 }
}
Getting Started
To begin using webhooks with Cents:
Set up your publicly accessible HTTP POST endpoint to receive webhook payloads. Make sure to test your endpoint, otherwise you will receive a webhook disabled email.
Share your webhook endpoint(s) with your CSM
Once your endpoints are tested and ready, send the URL(s) to your Cents Customer Success Manager. You can share one or multiple endpoints depending on your setup.
Cents enables event triggers for your account
Your CSM will add your endpoint(s) to your account which automatically enables all of the above Cents webhook events.
Start receiving real-time data
Once configured, Cents will begin sending event payloads to your endpoint(s) as they occur. Each event includes structured JSON data for easy parsing.
Choose your integration path
Build your own workflow: Write custom code to handle webhook events and trigger downstream systems (e.g., update a CRM or internal dashboard).
Use a no-code tool like Zapier: Let Zapier catch webhooks and automate tasks across apps (e.g., send customer messages, log data to Google Sheets, update marketing tools). Check out our Zapier Integration Guide here.
Need Help?
Webhooks let you automate your workflow and keep your systems aligned with real-time data from Cents. Check out our Zapier Integration Guide or Make Integration Guide if you have want to explore a no-code way to utilize webhooks. If you're looking for a more comprehensive API guide, please reach out to your CSM.

