Skip to content
Navigation

order.paid

An online order's payment is confirmed by the payment provider (isPaid went from false to true).

POST
order.paid
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