# order.updated

`POST order.updated`

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


```yaml
security: []
parameters:
  - name: Beauty-Router-Signature
    in: header
    required: true
    description: >
      `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](/webhooks/).
    schema:
      type: string
    example: t=1793200437,v1=5f2b8c0e4d6a7b1c9e3f0a2d4b6c8e1f3a5b7d9c0e2f4a6b8d1c3e5f7a9b0c2d
requestBody:
  required: true
  content:
    application/json:
      schema:
        allOf:
          - type: object
            description: Every webhook event has these fields, plus `type` and `data`.
            required:
              - id
              - type
              - createdAt
              - data
            properties:
              id:
                type: string
                description: The event ID. Skip an event you already handled.
                examples:
                  - event-7Zx1cVb9Nm
              createdAt:
                type: string
                format: date-time
          - type: object
            properties:
              type:
                type: string
                enum:
                  - order.created
                  - order.updated
              data:
                type: object
                required:
                  - id
                  - number
                  - companyId
                  - userId
                  - status
                  - supplier
                  - lines
                  - productsTotal
                  - discount
                  - shipping
                  - salesTax
                  - total
                  - currency
                  - deliveryAddress
                  - trackingNumbers
                  - createdAt
                  - updatedAt
                  - deliveredAt
                properties:
                  id:
                    type: string
                    description: The order ID.
                    examples:
                      - order-8Jd3kFs6Gh
                  number:
                    type: string
                    description: The order number people see.
                    examples:
                      - 4821-7730
                  companyId:
                    type: string
                    description: The company the order belongs to.
                    examples:
                      - loc-7Hk2pQx9Lm
                  userId:
                    type: string
                    description: The user who placed the order.
                    examples:
                      - user-3Vb8nWq1Rt
                  status:
                    type: string
                    description: >
                      `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.
                    enum:
                      - draft
                      - pending_verification
                      - payment_failed
                      - placed
                      - ready_to_ship
                      - in_transit
                      - delivered
                      - delivery_failed
                      - canceled
                  cancelReason:
                    type: string
                    description: >
                      `salon`: the salon canceled the order. `supplier`: the
                      brand or distributor canceled it. `payment`: the card

                      charge failed, or the payment was disputed or refunded.
                      `verification`: the company did not pass verification.
                    enum:
                      - salon
                      - supplier
                      - payment
                      - verification
                  supplier:
                    type: object
                    description: The brand or distributor that fulfills the order.
                    required:
                      - id
                      - name
                    properties:
                      id:
                        type: string
                        examples:
                          - sup-1Ry6tUi3Op
                      name:
                        type: string
                  lines:
                    type: array
                    items:
                      type: object
                      required:
                        - productId
                        - name
                        - quantity
                        - unitPrice
                        - discount
                        - total
                      properties:
                        productId:
                          type: string
                          description: The product ID.
                        name:
                          type: string
                          description: The product name.
                        quantity:
                          type: integer
                          minimum: 1
                        unitPrice:
                          type: number
                          description: An amount in dollars, with up to two decimal places.
                        discount:
                          type: number
                          description: An amount in dollars, with up to two decimal places.
                        total:
                          type: number
                          description: An amount in dollars, with up to two decimal places.
                  productsTotal:
                    type: number
                    description: An amount in dollars, with up to two decimal places.
                  discount:
                    type: number
                    description: An amount in dollars, with up to two decimal places.
                  shipping:
                    type:
                      - number
                      - "null"
                    description: >
                      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.
                  salesTax:
                    type:
                      - number
                      - "null"
                    description: The sales tax, in US dollars. `null` on a draft with no address.
                  total:
                    type:
                      - number
                      - "null"
                    description: >
                      The amount the salon pays, in US dollars. It can change
                      until the order is `placed`. `null` on a draft with no

                      address.
                  currency:
                    type: string
                    const: usd
                    description: Always `usd`.
                  deliveryAddress:
                    description: Where the order is delivered. `null` on a draft with no address.
                    oneOf:
                      - type: object
                        required:
                          - line1
                          - city
                          - state
                          - postalCode
                          - country
                        properties:
                          line1:
                            type: string
                            description: Street address.
                          line2:
                            type: string
                            description: Suite, unit, or floor.
                          city:
                            type: string
                          state:
                            type: string
                            pattern: ^[A-Z]{2}$
                            description: A two-letter US state code.
                            examples:
                              - CO
                          postalCode:
                            type: string
                            description: ZIP code.
                          country:
                            type: string
                            const: US
                          phone:
                            type: string
                            description: Phone number for the delivery. Required on the company. Optional on
                              an order, which then uses the company's phone.
                      - type: "null"
                  trackingNumbers:
                    type: array
                    items:
                      type: object
                      required:
                        - number
                      properties:
                        number:
                          type: string
                        url:
                          type: string
                          format: uri
                          description: The carrier's tracking page. Left out when there is none.
                        carrier:
                          type: string
                          description: The carrier. Left out when it is not known.
                  createdAt:
                    type: string
                    format: date-time
                  updatedAt:
                    type: string
                    format: date-time
                  deliveredAt:
                    type:
                      - string
                      - "null"
                    format: date-time
                    description: When the order was delivered, or `null`.
      examples:
        Order shipped:
          value:
            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
responses:
  2XX:
    description: >
      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.
```
