Skip to content
Navigation

order.created

Sent right after POST /orders placed an order, whatever its payment type, with the status the order ended up in. It is the first event for an order. An external order is already paid here: no order.paid follows.

POST
order.created
Webhook

Header parameters

  • X-Unipage-Event
    string
    required

    The event name, the same as event in the body.

  • X-Unipage-Timestamp
    string
    required

    Unix seconds when this delivery was signed.

  • X-Unipage-Signature
    string
    required

    sha256= plus the hex HMAC-SHA256 of <X-Unipage-Timestamp>.<raw body> with your webhook's signing secret. See Order webhooks.

Request body JSON required

  • id
    string
    required

    The event id. A retry of the same event keeps it: use it to drop repeats.

    format: uuid
  • event
    order.created
    or
    order.paid
    or
    order.status_changed
    required
  • created_at
    string
    required

    When the event was sent (ISO 8601).

    format: date-time
  • business_id
    string
    required

    The restaurant id, as id in GET /store.

  • data
    object
    required
    • order
      object
      required

      The order as GET /orders/{id} returns it at the moment of sending.

      • id
        optional
        string
      • status
        optional
        PENDING_PLACEMENT
        or
        PENDING_PAYMENT
        or
        PAYMENT_FAILED
        or
        PLACED
        or
        CHEF_STARTED
        or
        CHEF_COMPLETED
        +2 more
        • PENDING_PAYMENT: an online order, until the payment provider confirms.
        • PAYMENT_FAILED: the online payment failed or was cancelled.
        • PLACED: the restaurant received the order (offline, external, or a confirmed payment).
        • CHEF_STARTED: the restaurant started preparing it.
        • CHEF_COMPLETED: ready for pickup or out for delivery.
        • DECLINED, CANCELED: the restaurant refused or cancelled it.
        • PENDING_PLACEMENT: being placed; you will rarely see it.

        New statuses may be added: treat an unknown one as "in progress".

      • label
        optional
        string

        The status in the order's locale.

      • orderType
        optional
        TAKEOUT
        or
        DELIVERY
      • slotAt
        optional
        integer
      • paymentType
        optional
        online
        or
        offline
        or
        external
      • isPaid
        optional
        boolean

        Read the payment outcome from this, never from the return URL.

      • customerNotifications
        optional
        boolean

        false when Unipage sends the customer nothing for this order.

      • lines
        optional
        array of
        object

        Includes the restaurant's charges as lines with productId: null.

        • productId
          optional
          string | null
        • name
          optional
          string
        • quantity
          optional
          integer
        • optionsLabel
          optional
          string
        • total
          optional
          number
      • subtotal
        optional
        number
      • deliveryCost
        optional
        number
      • serviceCost
        optional
        number
      • couponDiscount
        optional
        number

        Every reduction (coupon, promotional offer).

      • total
        optional
        number
      • currency
        optional
        string
      • locale
        optional
        string
      • customer
        optional
        object
        • firstName
          optional
          string
        • lastName
          optional
          string
        • email
          optional
          string
      • delivery
        optional
        object | null

        For DELIVERY orders, else null.

        • street
          optional
          string
        • number
          optional
          string
        • postcode
          optional
          string
        • city
          optional
          string
        • zone
          optional
          string
      • createdAt
        optional
        integer

        Unix seconds.

Example request

{
  "id": "3f6c2a1e-9b7d-4c1a-8e2f-0a5b6c7d8e9f",
  "event": "order.created",
  "created_at": "2026-10-28T11:30:00+00:00",
  "business_id": "k3x9p",
  "data": {
    "order": {
      "id": "q4m8z",
      "status": "PLACED",
      "label": "Order received",
      "orderType": "TAKEOUT",
      "slotAt": 1792750500,
      "paymentType": "online",
      "isPaid": true,
      "customerNotifications": true,
      "lines": [
        {
          "productId": "p7d2x",
          "name": "Medium fries",
          "quantity": 1,
          "optionsLabel": "",
          "total": 4
        }
      ],
      "subtotal": 4,
      "deliveryCost": 0,
      "serviceCost": 0.5,
      "couponDiscount": 0,
      "total": 4.5,
      "currency": "EUR",
      "locale": "nl",
      "customer": {
        "firstName": "Ann",
        "lastName": "Example",
        "email": "ann@example.com"
      },
      "delivery": {
        "street": "string",
        "number": "string",
        "postcode": "string",
        "city": "string",
        "zone": "string"
      },
      "createdAt": 1792749000
    }
  }
}

Returns

200

Any 2xx acknowledges the event. Anything else (a 3xx included, redirects are not followed) or no answer within 5 seconds is a failed delivery.

Type to search…

↑↓ navigate↵ selectEsc close