Skip to content

order.updated

View as Markdown
POST

The status, tracking, delivery address, or other order details changed, such as payment_failed to placed. data is the order.

Beauty-Router-Signature
required
string

t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" with your webhook secret>. While several secrets are live, the header has one v1 per live secret, and you accept the event if any v1 matches. Reject a request when t is more than 5 minutes old or more than 5 minutes in the future. See Webhooks.

Example

t=1793200437,v1=5f2b8c0e4d6a7b1c9e3f0a2d4b6c8e1f3a5b7d9c0e2f4a6b8d1c3e5f7a9b0c2d
Media typeapplication/json
object
id
required

The event ID. Skip an event you already handled.

string
createdAt
required
string format: date-time
type
required
string
Allowed values: order.created order.updated
data
required
object
id
required

The order ID.

string
number
required

The order number people see.

string
companyId
required

The company the order belongs to.

string
userId
required

The user who placed the order.

string
status
required

draft: the order is saved for later. It holds no stock, and the supplier does not see it. pending_verification: the company is prequalified, and the order waits until its verification ends, with no charge yet. payment_failed: the card charge failed, or a payment is waiting for 3-D Secure. Beauty Router tries once more after 24 hours when the failure can be retried. If that fails too, or the failure cannot be retried, it cancels the order at 24 hours. placed: the card was charged, and the brand or distributor starts preparing the order right after. ready_to_ship, in_transit, delivered, delivery_failed, and canceled follow the delivery. Only a placed order takes stock from the supplier.

string
Allowed values: draft pending_verification payment_failed placed ready_to_ship in_transit delivered delivery_failed canceled
cancelReason

Why the order was canceled. Only on canceled orders.

string
Allowed values: salon supplier payment verification
supplier
required

The brand or distributor that fulfills the order.

object
id
required
string
name
required
string
lines
required
Array<object>
object
productId
required

The product ID.

string
name
required

The product name.

string
quantity
required
integer
>= 1
unitPrice
required

The wholesale price of one unit before the discount, in US dollars.

number
discount
required

The discount on the whole line, in US dollars.

number
total
required

The line total, in US dollars.

number
productsTotal
required

The total of the lines, in US dollars.

number
discount
required

The discount on the order, in US dollars.

number
shipping
required

The shipping charge, in US dollars: a flat amount or a carrier quote, free above the supplier’s threshold. It is locked when the order is created. null on a draft with no address.

number | null
salesTax
required

The sales tax, in US dollars. null on a draft with no address.

number | null
total
required

The amount the salon pays, in US dollars. It can change until the order is placed. null on a draft with no address.

number | null
currency
required

Always usd.

string
Allowed value: usd
deliveryAddress
required
One of:
object
line1
required

Street address.

string
line2

Suite, unit, or floor.

string
city
required
string
state
required

A two-letter US state code.

string
/^[A-Z]{2}$/
postalCode
required

ZIP code.

string
country
required
string
Allowed value: US
phone

Phone number for the delivery. Required on the company. Optional on an order, which then uses the company’s phone.

string
trackingNumbers
required
Array<object>
object
number
required
string
url

The carrier’s tracking page. Left out when there is none.

string format: uri
carrier

The carrier. Left out when it is not known.

string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
deliveredAt
required

When the order was delivered, or null.

string | null format: date-time

Examples

ExampleOrder shipped
{
"id": "event-5Uj3kLo9Qs",
"type": "order.updated",
"createdAt": "2026-10-28T19:03:57Z",
"data": {
"id": "order-8Jd3kFs6Gh",
"number": "4821-7730",
"companyId": "loc-7Hk2pQx9Lm",
"userId": "user-3Vb8nWq1Rt",
"status": "in_transit",
"supplier": {
"id": "sup-1Ry6tUi3Op",
"name": "Amberlin"
},
"lines": [
{
"productId": "prod-4Fz9QbX2kL",
"name": "Amberlin Bond Repair Shampoo 33.8 fl oz",
"quantity": 6,
"unitPrice": 24.5,
"discount": 0,
"total": 147
},
{
"productId": "prod-6Gh2jKl8Zx",
"name": "Amberlin Bond Repair Conditioner 33.8 fl oz",
"quantity": 4,
"unitPrice": 26.5,
"discount": 0,
"total": 106
}
],
"productsTotal": 253,
"discount": 0,
"shipping": 0,
"salesTax": 22.01,
"total": 275.01,
"currency": "usd",
"deliveryAddress": {
"line1": "1450 Larimer St",
"line2": "Suite 200",
"city": "Denver",
"state": "CO",
"postalCode": "80202",
"country": "US",
"phone": "+13035550142"
},
"trackingNumbers": [
{
"number": "1Z999AA10123456784",
"url": "https://www.ups.com/track?tracknum=1Z999AA10123456784",
"carrier": "UPS"
}
],
"createdAt": "2026-10-26T15:42:10Z",
"updatedAt": "2026-10-28T19:03:55Z",
"deliveredAt": null
}
}

Respond with a 2xx status within 10 seconds. Otherwise Beauty Router retries with backoff for up to 24 hours. Delivery is at least once, so skip an event id you already handled.