Flavoso APIWebhooks and eventsEvent types

Event types

Every event type with its description, required scope, the fields in data and an example envelope.

Overview

An event is created exactly once per change, whether it happened in the dashboard, on the kitchen display, in the phone app, at the receipt printer or through the API. You choose which types your app receives in the console; for GET /events, with types.

Your program should ignore types it does not know.

EventsRequired scope
order.*orders:read
reservation.*reservations:read
menu.*menu:read
store.*store:read
app.*none, only the connection itself

Orders

order.created

A new order has come in: immediately for payment on site, for online payment once the payment is confirmed. Exactly once per order.

Required scope: orders:read

Fields in data

  • objectOrderrequired

    The order when the event was first read. Values that belong to a single app (external_id, acknowledged_at) are always null in events: the envelope is built once and sent the same to every receiver. Retrieve the object to see yours.

    Child fields (20)
    • objectstringrequired

      Always order.

      Values:"order"

    • idstring (uuid)required

      The order.

    • codestringrequired

      Short code the guest sees and says at the counter, e.g. K7Q2M9.

    • external_idstringrequirednullable

      Your app's reference set with POST /orders/{id}/acknowledge; null when none. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • typestringrequired

      How the guest gets the order.

      Values:"pickup""delivery""dine_in"

    • sourcestringrequired

      Where it was placed: table via a table's QR code, app in the Flavoso app by a signed-in guest, storefront everything else (the restaurant's ordering page, the app without sign-in).

      Values:"storefront""table""app"

    • statusstringrequired

      Where the order is now. Restaurants may skip statuses, see GET /store.

      Values:"pending""confirmed""preparing""ready""completed""cancelled"

    • created_atstring (date-time)required

      When the order was placed. ISO 8601 in UTC (Z).

    • updated_atstring (date-time)required

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)requirednullable

      When your app first acknowledged the order (POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • requested_forstring (date-time)requirednullable

      Pickup or delivery time chosen by the guest (pre-order); null means as soon as possible.

    • currencystringrequired

      ISO 4217, e.g. EUR.

    • amountsobjectrequired

      The amounts of the order, in cents.

      Child fields (6)
      • subtotalintegerrequired

        Sum of the items. Integer amount in the smallest currency unit (cents).

      • delivery_feeintegerrequired

        Delivery fee. Integer amount in the smallest currency unit (cents).

      • service_feeintegerrequired

        Service fee. Integer amount in the smallest currency unit (cents).

      • discountintegerrequired

        Discount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).

      • tipintegerrequired

        Tip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).

      • totalintegerrequired

        subtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).

    • taxobjectrequired

      VAT per rate of total − tip (items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.

      Child fields (2)
      • includedbooleanrequired

        Always true: prices include VAT.

        Values:true

      • linesTaxLine[]required

        One line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.

        Child fields (4)
        • rate_bpsintegerrequirednullable

          The rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.

        • grossintegerrequired

          Gross amount at this rate. Integer amount in the smallest currency unit (cents).

        • netintegerrequirednullable

          gross − tax, in cents. null when rate_bps is null.

        • taxintegerrequirednullable

          VAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.

    • paymentobjectrequired

      How and whether it is paid.

      Child fields (3)
      • methodstringrequired

        online: paid at checkout. on_site: paid at pickup, delivery or the table.

        Values:"online""on_site"

      • statusstringrequired

        paid once the online payment is confirmed. open: to be paid on site; it stays open, because Flavoso does not record payments on site.

        Values:"paid""open"

      • paid_atstring (date-time)requirednullable

        When it was paid; null while open.

    • customerobjectrequirednullable

      Only what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.

      Child fields (2)
      • namestringrequirednullable

        The guest's name.

      • phonestringrequirednullable

        Phone for questions; null for dine-in.

    • deliveryobjectrequirednullable

      The delivery address; null unless type is delivery.

      Child fields (3)
      • addressstringrequirednullable

        Street and number.

      • postal_codestringrequirednullable

        Postal code.

      • citystringrequirednullable

        City.

    • tableobjectrequirednullable

      The table of a dine-in order; null otherwise.

      Child fields (2)
      • idstring (uuid)required

        The table (GET /tables).

      • labelstringrequirednullable

        The table's name, e.g. 4.

    • notestringrequirednullable

      Guest's note for the kitchen (allergies!).

    • itemsOrderItem[]required

      The lines.

      Child fields (8)
      • idstring (uuid)required

        The line.

      • product_idstring (uuid)requirednullable

        The dish (GET /menu/products/{id}); null when it was deleted since.

      • namestringrequired

        Name at the time of ordering.

      • quantityintegerrequired

        How many.

        min 1

      • unit_priceintegerrequired

        Price of one unit including options. Integer amount in the smallest currency unit (cents).

      • line_totalintegerrequired

        unit_price × quantity. Integer amount in the smallest currency unit (cents).

      • tax_rate_bpsintegerrequirednullable

        VAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.

      • optionsobject[]required

        The chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (GET /menu/options/{id}) as long as the option exists.

        Child fields (5)
        • idstring (uuid)requirednullable

          The option (GET /menu/options/{id}); with it you find your own modifier through its external_id. null for orders placed before 8 October 2026.

        • namestringrequired

          Name of the option.

        • price_deltaintegerrequired

          Surcharge of this option, per unit. Integer amount in the smallest currency unit (cents).

        • group_idstring (uuid)requirednullable

          The option group the option was chosen in (GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.

        • group_namestringrequirednullable

          Name of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "order.created",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "order",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "code": "K7Q2M9",
      "external_id": "ART-1001",
      "type": "pickup",
      "source": "storefront",
      "status": "pending",
      "created_at": "2026-10-04T17:44:59.942Z",
      "updated_at": "2026-10-04T17:44:59.942Z",
      "acknowledged_at": "2026-10-04T17:44:59.942Z",
      "requested_for": "2026-10-04T17:44:59.942Z",
      "currency": "EUR",
      "amounts": {
        "subtotal": 1290,
        "delivery_fee": 1290,
        "service_fee": 1290,
        "discount": 1290,
        "tip": 1290,
        "total": 1290
      },
      "tax": {
        "included": true,
        "lines": [
          {
            "rate_bps": 700,
            "gross": 1290,
            "net": 1290,
            "tax": 1290
          }
        ]
      },
      "payment": {
        "method": "online",
        "status": "paid",
        "paid_at": "2026-10-04T17:44:59.942Z"
      },
      "customer": {
        "name": "string",
        "phone": "string"
      },
      "delivery": {
        "address": "string",
        "postal_code": "string",
        "city": "string"
      },
      "table": {
        "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
        "label": "string"
      },
      "note": "string",
      "items": [
        {
          "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
          "product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
          "name": "string",
          "quantity": 1,
          "unit_price": 1290,
          "line_total": 1290,
          "tax_rate_bps": 700,
          "options": [
            {
              "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
              "name": "string",
              "price_delta": 1290,
              "group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
              "group_name": "string"
            }
          ]
        }
      ]
    }
  }
}

order.status_changed

An order changed its status, wherever that happened: dashboard, kitchen display, phone app, receipt printer or API. previous_status names the old one.

Required scope: orders:read

Fields in data

  • objectOrderrequired

    An order. Guest data is limited to what is needed to hand it over: the name, the phone for pickup and delivery, the address for delivery, never an e-mail.

    Child fields (20)
    • objectstringrequired

      Always order.

      Values:"order"

    • idstring (uuid)required

      The order.

    • codestringrequired

      Short code the guest sees and says at the counter, e.g. K7Q2M9.

    • external_idstringrequirednullable

      Your app's reference set with POST /orders/{id}/acknowledge; null when none. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • typestringrequired

      How the guest gets the order.

      Values:"pickup""delivery""dine_in"

    • sourcestringrequired

      Where it was placed: table via a table's QR code, app in the Flavoso app by a signed-in guest, storefront everything else (the restaurant's ordering page, the app without sign-in).

      Values:"storefront""table""app"

    • statusstringrequired

      Where the order is now. Restaurants may skip statuses, see GET /store.

      Values:"pending""confirmed""preparing""ready""completed""cancelled"

    • created_atstring (date-time)required

      When the order was placed. ISO 8601 in UTC (Z).

    • updated_atstring (date-time)required

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)requirednullable

      When your app first acknowledged the order (POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • requested_forstring (date-time)requirednullable

      Pickup or delivery time chosen by the guest (pre-order); null means as soon as possible.

    • currencystringrequired

      ISO 4217, e.g. EUR.

    • amountsobjectrequired

      The amounts of the order, in cents.

      Child fields (6)
      • subtotalintegerrequired

        Sum of the items. Integer amount in the smallest currency unit (cents).

      • delivery_feeintegerrequired

        Delivery fee. Integer amount in the smallest currency unit (cents).

      • service_feeintegerrequired

        Service fee. Integer amount in the smallest currency unit (cents).

      • discountintegerrequired

        Discount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).

      • tipintegerrequired

        Tip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).

      • totalintegerrequired

        subtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).

    • taxobjectrequired

      VAT per rate of total − tip (items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.

      Child fields (2)
      • includedbooleanrequired

        Always true: prices include VAT.

        Values:true

      • linesTaxLine[]required

        One line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.

        Child fields (4)
        • rate_bpsintegerrequirednullable

          The rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.

        • grossintegerrequired

          Gross amount at this rate. Integer amount in the smallest currency unit (cents).

        • netintegerrequirednullable

          gross − tax, in cents. null when rate_bps is null.

        • taxintegerrequirednullable

          VAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.

    • paymentobjectrequired

      How and whether it is paid.

      Child fields (3)
      • methodstringrequired

        online: paid at checkout. on_site: paid at pickup, delivery or the table.

        Values:"online""on_site"

      • statusstringrequired

        paid once the online payment is confirmed. open: to be paid on site; it stays open, because Flavoso does not record payments on site.

        Values:"paid""open"

      • paid_atstring (date-time)requirednullable

        When it was paid; null while open.

    • customerobjectrequirednullable

      Only what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.

      Child fields (2)
      • namestringrequirednullable

        The guest's name.

      • phonestringrequirednullable

        Phone for questions; null for dine-in.

    • deliveryobjectrequirednullable

      The delivery address; null unless type is delivery.

      Child fields (3)
      • addressstringrequirednullable

        Street and number.

      • postal_codestringrequirednullable

        Postal code.

      • citystringrequirednullable

        City.

    • tableobjectrequirednullable

      The table of a dine-in order; null otherwise.

      Child fields (2)
      • idstring (uuid)required

        The table (GET /tables).

      • labelstringrequirednullable

        The table's name, e.g. 4.

    • notestringrequirednullable

      Guest's note for the kitchen (allergies!).

    • itemsOrderItem[]required

      The lines.

      Child fields (8)
      • idstring (uuid)required

        The line.

      • product_idstring (uuid)requirednullable

        The dish (GET /menu/products/{id}); null when it was deleted since.

      • namestringrequired

        Name at the time of ordering.

      • quantityintegerrequired

        How many.

        min 1

      • unit_priceintegerrequired

        Price of one unit including options. Integer amount in the smallest currency unit (cents).

      • line_totalintegerrequired

        unit_price × quantity. Integer amount in the smallest currency unit (cents).

      • tax_rate_bpsintegerrequirednullable

        VAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.

      • optionsobject[]required

        The chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (GET /menu/options/{id}) as long as the option exists.

        Child fields (5)
        • idstring (uuid)requirednullable

          The option (GET /menu/options/{id}); with it you find your own modifier through its external_id. null for orders placed before 8 October 2026.

        • namestringrequired

          Name of the option.

        • price_deltaintegerrequired

          Surcharge of this option, per unit. Integer amount in the smallest currency unit (cents).

        • group_idstring (uuid)requirednullable

          The option group the option was chosen in (GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.

        • group_namestringrequirednullable

          Name of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.

  • previous_statusstringrequired

    The status before this change.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "order.status_changed",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "order",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "code": "K7Q2M9",
      "external_id": "ART-1001",
      "type": "pickup",
      "source": "storefront",
      "status": "pending",
      "created_at": "2026-10-04T17:44:59.942Z",
      "updated_at": "2026-10-04T17:44:59.942Z",
      "acknowledged_at": "2026-10-04T17:44:59.942Z",
      "requested_for": "2026-10-04T17:44:59.942Z",
      "currency": "EUR",
      "amounts": {
        "subtotal": 1290,
        "delivery_fee": 1290,
        "service_fee": 1290,
        "discount": 1290,
        "tip": 1290,
        "total": 1290
      },
      "tax": {
        "included": true,
        "lines": [
          {
            "rate_bps": 700,
            "gross": 1290,
            "net": 1290,
            "tax": 1290
          }
        ]
      },
      "payment": {
        "method": "online",
        "status": "paid",
        "paid_at": "2026-10-04T17:44:59.942Z"
      },
      "customer": {
        "name": "string",
        "phone": "string"
      },
      "delivery": {
        "address": "string",
        "postal_code": "string",
        "city": "string"
      },
      "table": {
        "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
        "label": "string"
      },
      "note": "string",
      "items": [
        {
          "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
          "product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
          "name": "string",
          "quantity": 1,
          "unit_price": 1290,
          "line_total": 1290,
          "tax_rate_bps": 700,
          "options": [
            {
              "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
              "name": "string",
              "price_delta": 1290,
              "group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
              "group_name": "string"
            }
          ]
        }
      ]
    },
    "previous_status": "string"
  }
}

order.cancelled

An order was cancelled or rejected. Sent in addition to order.status_changed.

Required scope: orders:read

Fields in data

  • objectOrderrequired

    An order. Guest data is limited to what is needed to hand it over: the name, the phone for pickup and delivery, the address for delivery, never an e-mail.

    Child fields (20)
    • objectstringrequired

      Always order.

      Values:"order"

    • idstring (uuid)required

      The order.

    • codestringrequired

      Short code the guest sees and says at the counter, e.g. K7Q2M9.

    • external_idstringrequirednullable

      Your app's reference set with POST /orders/{id}/acknowledge; null when none. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • typestringrequired

      How the guest gets the order.

      Values:"pickup""delivery""dine_in"

    • sourcestringrequired

      Where it was placed: table via a table's QR code, app in the Flavoso app by a signed-in guest, storefront everything else (the restaurant's ordering page, the app without sign-in).

      Values:"storefront""table""app"

    • statusstringrequired

      Where the order is now. Restaurants may skip statuses, see GET /store.

      Values:"pending""confirmed""preparing""ready""completed""cancelled"

    • created_atstring (date-time)required

      When the order was placed. ISO 8601 in UTC (Z).

    • updated_atstring (date-time)required

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)requirednullable

      When your app first acknowledged the order (POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • requested_forstring (date-time)requirednullable

      Pickup or delivery time chosen by the guest (pre-order); null means as soon as possible.

    • currencystringrequired

      ISO 4217, e.g. EUR.

    • amountsobjectrequired

      The amounts of the order, in cents.

      Child fields (6)
      • subtotalintegerrequired

        Sum of the items. Integer amount in the smallest currency unit (cents).

      • delivery_feeintegerrequired

        Delivery fee. Integer amount in the smallest currency unit (cents).

      • service_feeintegerrequired

        Service fee. Integer amount in the smallest currency unit (cents).

      • discountintegerrequired

        Discount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).

      • tipintegerrequired

        Tip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).

      • totalintegerrequired

        subtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).

    • taxobjectrequired

      VAT per rate of total − tip (items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.

      Child fields (2)
      • includedbooleanrequired

        Always true: prices include VAT.

        Values:true

      • linesTaxLine[]required

        One line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.

        Child fields (4)
        • rate_bpsintegerrequirednullable

          The rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.

        • grossintegerrequired

          Gross amount at this rate. Integer amount in the smallest currency unit (cents).

        • netintegerrequirednullable

          gross − tax, in cents. null when rate_bps is null.

        • taxintegerrequirednullable

          VAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.

    • paymentobjectrequired

      How and whether it is paid.

      Child fields (3)
      • methodstringrequired

        online: paid at checkout. on_site: paid at pickup, delivery or the table.

        Values:"online""on_site"

      • statusstringrequired

        paid once the online payment is confirmed. open: to be paid on site; it stays open, because Flavoso does not record payments on site.

        Values:"paid""open"

      • paid_atstring (date-time)requirednullable

        When it was paid; null while open.

    • customerobjectrequirednullable

      Only what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.

      Child fields (2)
      • namestringrequirednullable

        The guest's name.

      • phonestringrequirednullable

        Phone for questions; null for dine-in.

    • deliveryobjectrequirednullable

      The delivery address; null unless type is delivery.

      Child fields (3)
      • addressstringrequirednullable

        Street and number.

      • postal_codestringrequirednullable

        Postal code.

      • citystringrequirednullable

        City.

    • tableobjectrequirednullable

      The table of a dine-in order; null otherwise.

      Child fields (2)
      • idstring (uuid)required

        The table (GET /tables).

      • labelstringrequirednullable

        The table's name, e.g. 4.

    • notestringrequirednullable

      Guest's note for the kitchen (allergies!).

    • itemsOrderItem[]required

      The lines.

      Child fields (8)
      • idstring (uuid)required

        The line.

      • product_idstring (uuid)requirednullable

        The dish (GET /menu/products/{id}); null when it was deleted since.

      • namestringrequired

        Name at the time of ordering.

      • quantityintegerrequired

        How many.

        min 1

      • unit_priceintegerrequired

        Price of one unit including options. Integer amount in the smallest currency unit (cents).

      • line_totalintegerrequired

        unit_price × quantity. Integer amount in the smallest currency unit (cents).

      • tax_rate_bpsintegerrequirednullable

        VAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.

      • optionsobject[]required

        The chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (GET /menu/options/{id}) as long as the option exists.

        Child fields (5)
        • idstring (uuid)requirednullable

          The option (GET /menu/options/{id}); with it you find your own modifier through its external_id. null for orders placed before 8 October 2026.

        • namestringrequired

          Name of the option.

        • price_deltaintegerrequired

          Surcharge of this option, per unit. Integer amount in the smallest currency unit (cents).

        • group_idstring (uuid)requirednullable

          The option group the option was chosen in (GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.

        • group_namestringrequirednullable

          Name of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.

  • previous_statusstringrequired

    The status before the cancellation.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "order.cancelled",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "order",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "code": "K7Q2M9",
      "external_id": "ART-1001",
      "type": "pickup",
      "source": "storefront",
      "status": "pending",
      "created_at": "2026-10-04T17:44:59.942Z",
      "updated_at": "2026-10-04T17:44:59.942Z",
      "acknowledged_at": "2026-10-04T17:44:59.942Z",
      "requested_for": "2026-10-04T17:44:59.942Z",
      "currency": "EUR",
      "amounts": {
        "subtotal": 1290,
        "delivery_fee": 1290,
        "service_fee": 1290,
        "discount": 1290,
        "tip": 1290,
        "total": 1290
      },
      "tax": {
        "included": true,
        "lines": [
          {
            "rate_bps": 700,
            "gross": 1290,
            "net": 1290,
            "tax": 1290
          }
        ]
      },
      "payment": {
        "method": "online",
        "status": "paid",
        "paid_at": "2026-10-04T17:44:59.942Z"
      },
      "customer": {
        "name": "string",
        "phone": "string"
      },
      "delivery": {
        "address": "string",
        "postal_code": "string",
        "city": "string"
      },
      "table": {
        "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
        "label": "string"
      },
      "note": "string",
      "items": [
        {
          "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
          "product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
          "name": "string",
          "quantity": 1,
          "unit_price": 1290,
          "line_total": 1290,
          "tax_rate_bps": 700,
          "options": [
            {
              "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
              "name": "string",
              "price_delta": 1290,
              "group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
              "group_name": "string"
            }
          ]
        }
      ]
    },
    "previous_status": "string"
  }
}

order.paid

An order was paid online: the payment provider confirmed the payment, and the order exists from then on (right after order.created). Orders paid on site are not recorded as paid in Flavoso and never produce this event.

Required scope: orders:read

Fields in data

  • objectOrderrequired

    An order. Guest data is limited to what is needed to hand it over: the name, the phone for pickup and delivery, the address for delivery, never an e-mail.

    Child fields (20)
    • objectstringrequired

      Always order.

      Values:"order"

    • idstring (uuid)required

      The order.

    • codestringrequired

      Short code the guest sees and says at the counter, e.g. K7Q2M9.

    • external_idstringrequirednullable

      Your app's reference set with POST /orders/{id}/acknowledge; null when none. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • typestringrequired

      How the guest gets the order.

      Values:"pickup""delivery""dine_in"

    • sourcestringrequired

      Where it was placed: table via a table's QR code, app in the Flavoso app by a signed-in guest, storefront everything else (the restaurant's ordering page, the app without sign-in).

      Values:"storefront""table""app"

    • statusstringrequired

      Where the order is now. Restaurants may skip statuses, see GET /store.

      Values:"pending""confirmed""preparing""ready""completed""cancelled"

    • created_atstring (date-time)required

      When the order was placed. ISO 8601 in UTC (Z).

    • updated_atstring (date-time)required

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)requirednullable

      When your app first acknowledged the order (POST /orders/{id}/acknowledge); null when not yet. Always null in webhook events and in GET /events: the envelope is built once and sent the same to every receiver, but this value belongs to a single app. Retrieve the object to see yours.

    • requested_forstring (date-time)requirednullable

      Pickup or delivery time chosen by the guest (pre-order); null means as soon as possible.

    • currencystringrequired

      ISO 4217, e.g. EUR.

    • amountsobjectrequired

      The amounts of the order, in cents.

      Child fields (6)
      • subtotalintegerrequired

        Sum of the items. Integer amount in the smallest currency unit (cents).

      • delivery_feeintegerrequired

        Delivery fee. Integer amount in the smallest currency unit (cents).

      • service_feeintegerrequired

        Service fee. Integer amount in the smallest currency unit (cents).

      • discountintegerrequired

        Discount (stamp card), already subtracted. Integer amount in the smallest currency unit (cents).

      • tipintegerrequired

        Tip. Pass-through, not revenue. Integer amount in the smallest currency unit (cents).

      • totalintegerrequired

        subtotal + delivery_fee + service_fee − discount + tip. Integer amount in the smallest currency unit (cents).

    • taxobjectrequired

      VAT per rate of total − tip (items, fees, minus discount), computed like the restaurant's accounting export: discounts and delivery fees spread over the rates as the restaurant set it.

      Child fields (2)
      • includedbooleanrequired

        Always true: prices include VAT.

        Values:true

      • linesTaxLine[]required

        One line per rate, ascending, lines without rate last. The gross amounts add up to total − tip.

        Child fields (4)
        • rate_bpsintegerrequirednullable

          The rate in basis points (700 = 7 %). null: no rate was stored for this part (not the same as 0 %); then net and tax are null.

        • grossintegerrequired

          Gross amount at this rate. Integer amount in the smallest currency unit (cents).

        • netintegerrequirednullable

          gross − tax, in cents. null when rate_bps is null.

        • taxintegerrequirednullable

          VAT contained in gross: round(gross × rate / (10000 + rate)), in cents. null when rate_bps is null.

    • paymentobjectrequired

      How and whether it is paid.

      Child fields (3)
      • methodstringrequired

        online: paid at checkout. on_site: paid at pickup, delivery or the table.

        Values:"online""on_site"

      • statusstringrequired

        paid once the online payment is confirmed. open: to be paid on site; it stays open, because Flavoso does not record payments on site.

        Values:"paid""open"

      • paid_atstring (date-time)requirednullable

        When it was paid; null while open.

    • customerobjectrequirednullable

      Only what is needed to hand the order over (data minimisation): no e-mail, and no phone for dine-in. null when neither is known.

      Child fields (2)
      • namestringrequirednullable

        The guest's name.

      • phonestringrequirednullable

        Phone for questions; null for dine-in.

    • deliveryobjectrequirednullable

      The delivery address; null unless type is delivery.

      Child fields (3)
      • addressstringrequirednullable

        Street and number.

      • postal_codestringrequirednullable

        Postal code.

      • citystringrequirednullable

        City.

    • tableobjectrequirednullable

      The table of a dine-in order; null otherwise.

      Child fields (2)
      • idstring (uuid)required

        The table (GET /tables).

      • labelstringrequirednullable

        The table's name, e.g. 4.

    • notestringrequirednullable

      Guest's note for the kitchen (allergies!).

    • itemsOrderItem[]required

      The lines.

      Child fields (8)
      • idstring (uuid)required

        The line.

      • product_idstring (uuid)requirednullable

        The dish (GET /menu/products/{id}); null when it was deleted since.

      • namestringrequired

        Name at the time of ordering.

      • quantityintegerrequired

        How many.

        min 1

      • unit_priceintegerrequired

        Price of one unit including options. Integer amount in the smallest currency unit (cents).

      • line_totalintegerrequired

        unit_price × quantity. Integer amount in the smallest currency unit (cents).

      • tax_rate_bpsintegerrequirednullable

        VAT rate frozen at order time, in basis points (700 = 7 %). null when the restaurant has not set rates.

      • optionsobject[]required

        The chosen options (extras, sizes), as ordered. Name, surcharge and group name are frozen at order time; the ids point to the menu (GET /menu/options/{id}) as long as the option exists.

        Child fields (5)
        • idstring (uuid)requirednullable

          The option (GET /menu/options/{id}); with it you find your own modifier through its external_id. null for orders placed before 8 October 2026.

        • namestringrequired

          Name of the option.

        • price_deltaintegerrequired

          Surcharge of this option, per unit. Integer amount in the smallest currency unit (cents).

        • group_idstring (uuid)requirednullable

          The option group the option was chosen in (GET /menu/option-groups/{id}). null for orders placed before 8 October 2026.

        • group_namestringrequirednullable

          Name of that group at order time, e.g. Extras or Size. null for orders placed before 8 October 2026.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "order.paid",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "order",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "code": "K7Q2M9",
      "external_id": "ART-1001",
      "type": "pickup",
      "source": "storefront",
      "status": "pending",
      "created_at": "2026-10-04T17:44:59.942Z",
      "updated_at": "2026-10-04T17:44:59.942Z",
      "acknowledged_at": "2026-10-04T17:44:59.942Z",
      "requested_for": "2026-10-04T17:44:59.942Z",
      "currency": "EUR",
      "amounts": {
        "subtotal": 1290,
        "delivery_fee": 1290,
        "service_fee": 1290,
        "discount": 1290,
        "tip": 1290,
        "total": 1290
      },
      "tax": {
        "included": true,
        "lines": [
          {
            "rate_bps": 700,
            "gross": 1290,
            "net": 1290,
            "tax": 1290
          }
        ]
      },
      "payment": {
        "method": "online",
        "status": "paid",
        "paid_at": "2026-10-04T17:44:59.942Z"
      },
      "customer": {
        "name": "string",
        "phone": "string"
      },
      "delivery": {
        "address": "string",
        "postal_code": "string",
        "city": "string"
      },
      "table": {
        "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
        "label": "string"
      },
      "note": "string",
      "items": [
        {
          "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
          "product_id": "6818680c-4376-47b0-a818-680c4376d7b0",
          "name": "string",
          "quantity": 1,
          "unit_price": 1290,
          "line_total": 1290,
          "tax_rate_bps": 700,
          "options": [
            {
              "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
              "name": "string",
              "price_delta": 1290,
              "group_id": "9594642c-e6ef-49ac-a594-642ce6efc9ac",
              "group_name": "string"
            }
          ]
        }
      ]
    }
  }
}

Reservations

reservation.created

A reservation is new, made online by the guest or by the team.

Required scope: reservations:read

Fields in data

  • objectReservationrequired

    A table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.

    Child fields (14)
    • objectstringrequired

      Always reservation.

      Values:"reservation"

    • idstring (uuid)required

      The reservation.

    • codestringrequired

      Short code the guest sees.

    • statusstringrequired

      pending is a request the restaurant still has to confirm.

      Values:"pending""confirmed""declined""seated""done""cancelled""no_show"

    • starts_atstring (date-time)required

      Start of the reservation. ISO 8601 in UTC (Z).

    • duration_minutesintegerrequired

      How long the table is held.

    • party_sizeintegerrequired

      Number of guests.

    • table_idsstring (uuid)[]required

      Assigned tables (GET /tables); empty when none is assigned yet.

    • sourcestringrequired

      Booked online by the guest, by the restaurant's staff, or through this API.

      Values:"guest""staff""api"

    • guest_namestringrequirednullable

      The guest's name.

    • notestringrequirednullable

      The guest's wish.

    • created_atstring (date-time)required

      When it was made. ISO 8601 in UTC (Z).

    • updated_atstring (date-time)required

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)requirednullable

      Only set in the event that reports a deletion; deleted reservations are not returned otherwise.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "reservation.created",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "reservation",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "code": "K7Q2M9",
      "status": "pending",
      "starts_at": "2026-10-04T17:44:59.942Z",
      "duration_minutes": 30,
      "party_size": 2,
      "table_ids": [
        "8ca0177d-0bbd-4c8f-aca0-177d0bbd2c8f"
      ],
      "source": "guest",
      "guest_name": "string",
      "note": "string",
      "created_at": "2026-10-04T17:44:59.942Z",
      "updated_at": "2026-10-04T17:44:59.942Z",
      "deleted_at": "2026-10-04T17:44:59.942Z"
    }
  }
}

reservation.updated

Status, time, party size, duration, tables or note of a reservation changed; changed says which. When the restaurant deletes a reservation, a final event arrives with changed: ["deleted"] and deleted_at; after that it answers 404.

Required scope: reservations:read

Fields in data

  • objectReservationrequired

    A table reservation. Contact details stay in Flavoso (data minimisation); the name is enough to greet the party.

    Child fields (14)
    • objectstringrequired

      Always reservation.

      Values:"reservation"

    • idstring (uuid)required

      The reservation.

    • codestringrequired

      Short code the guest sees.

    • statusstringrequired

      pending is a request the restaurant still has to confirm.

      Values:"pending""confirmed""declined""seated""done""cancelled""no_show"

    • starts_atstring (date-time)required

      Start of the reservation. ISO 8601 in UTC (Z).

    • duration_minutesintegerrequired

      How long the table is held.

    • party_sizeintegerrequired

      Number of guests.

    • table_idsstring (uuid)[]required

      Assigned tables (GET /tables); empty when none is assigned yet.

    • sourcestringrequired

      Booked online by the guest, by the restaurant's staff, or through this API.

      Values:"guest""staff""api"

    • guest_namestringrequirednullable

      The guest's name.

    • notestringrequirednullable

      The guest's wish.

    • created_atstring (date-time)required

      When it was made. ISO 8601 in UTC (Z).

    • updated_atstring (date-time)required

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)requirednullable

      Only set in the event that reports a deletion; deleted reservations are not returned otherwise.

  • previous_statusstringnullable

    The status before this change.

  • changedstring[]required

    The fields this change touched.

    Values:"status""starts_at""party_size""duration_minutes""table_ids""note""deleted"

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "reservation.updated",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "reservation",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "code": "K7Q2M9",
      "status": "pending",
      "starts_at": "2026-10-04T17:44:59.942Z",
      "duration_minutes": 30,
      "party_size": 2,
      "table_ids": [
        "8ca0177d-0bbd-4c8f-aca0-177d0bbd2c8f"
      ],
      "source": "guest",
      "guest_name": "string",
      "note": "string",
      "created_at": "2026-10-04T17:44:59.942Z",
      "updated_at": "2026-10-04T17:44:59.942Z",
      "deleted_at": "2026-10-04T17:44:59.942Z"
    },
    "previous_status": "string",
    "changed": [
      "status"
    ]
  }
}

Store

store.paused

Online ordering was paused, until paused_until; object is the store, as in store.updated. When the pause ends by itself, no separate event is sent.

Required scope: store:read

Fields in data

  • objectStorerequired

    The store when the event was first read. paused_until and note next to it are the values of this pause.

    Child fields (22)
    • objectstringrequired

      Always store.

      Values:"store"

    • idstring (uuid)required

      The restaurant.

    • namestringrequired

      Name.

    • slugstringrequired

      Its address: <slug>.flavoso.com.

    • timezonestringrequired

      IANA time zone of all local times.

    • currencystringrequired

      ISO 4217.

    • statusstringrequired

      Right now: open, closed (outside hours or a closed special day), or paused.

      Values:"open""closed""paused"

    • paused_untilstring (date-time)requirednullable

      End of the running pause; null without one.

    • pause_notestringrequirednullable

      Reason of the running pause.

    • next_opening_atstring (date-time)requirednullable

      Next opening while closed (looks two weeks ahead); null while open.

    • preordersbooleanrequired

      Guests may order for a later time, also while closed.

    • order_typesobjectrequired

      Which order types guests can choose.

      Child fields (3)
      • pickupbooleanrequired

        Pickup.

      • deliverybooleanrequired

        Delivery.

      • dine_inbooleanrequired

        Ordering at the table via QR code (Pro and up).

    • order_statusesstring[]required

      Statuses this restaurant uses, in order, plus completed and cancelled.

    • lead_timesobjectrequired

      How long the kitchen needs; the earliest pickup or delivery time.

      Child fields (2)
      • pickup_minutesintegerrequired

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerrequired

        Minutes until delivery, 0 to 360.

    • min_orderintegerrequired

      Minimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).

    • always_openbooleanrequired

      No weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.

    • opening_hoursWeekWindow[]required

      The weekly opening windows; a weekday without windows is closed.

      Child fields (3)
      • weekdayintegerrequired

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringrequired

        Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • closestringrequired

        Closing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

    • delivery_hoursWeekWindow[]required

      Weekly delivery windows; empty means delivery follows opening_hours.

      Child fields (3)
      • weekdayintegerrequired

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringrequired

        Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • closestringrequired

        Closing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

    • closuresClosure[]required

      Upcoming special days (today and later).

      Child fields (5)
      • objectstringrequired

        Always closure.

        Values:"closure"

      • datestring (date)required

        The day. A date YYYY-MM-DD in the restaurant's time zone.

      • closedbooleanrequired

        Closed all day.

      • hoursTimeWindow[]required

        The windows of that day when not closed (at most two).

        Child fields (2)
        • openstringrequired

          Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

        • closestringrequired

          Closing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • notestringrequirednullable

        Note, e.g. the reason.

    • contactobjectrequired

      Public contact details.

      Child fields (3)
      • phonestringrequirednullable

        Phone.

      • emailstringrequirednullable

        E-mail.

      • websitestringrequirednullable

        Website.

    • addressobjectrequirednullable

      The address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.

      Child fields (4)
      • linestringrequirednullable

        Street and number (or the whole address when it cannot be split).

      • postal_codestringrequirednullable

        Postal code, when it can be read from the address.

      • citystringrequirednullable

        City, when it can be read from the address.

      • countrystringrequirednullable

        ISO 3166-1 alpha-2, as in GET /me.

    • locationobjectrequirednullable

      Coordinates; null when not set.

      Child fields (2)
      • latnumberrequired

        Latitude.

      • lonnumberrequired

        Longitude.

  • paused_untilstring (date-time)required

    When ordering resumes by itself.

  • notestringrequirednullable

    The reason, if given.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "store.paused",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "store",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "name": "string",
      "slug": "pizzeria-example",
      "timezone": "Europe/Berlin",
      "currency": "EUR",
      "status": "open",
      "paused_until": "2026-10-04T17:44:59.942Z",
      "pause_note": "string",
      "next_opening_at": "2026-10-04T17:44:59.942Z",
      "preorders": true,
      "order_types": {
        "pickup": true,
        "delivery": true,
        "dine_in": true
      },
      "order_statuses": [
        "string"
      ],
      "lead_times": {
        "pickup_minutes": 30,
        "delivery_minutes": 30
      },
      "min_order": 1290,
      "always_open": true,
      "opening_hours": [
        {
          "weekday": 0,
          "open": "11:30",
          "close": "22:00"
        }
      ],
      "delivery_hours": [
        {
          "weekday": 0,
          "open": "11:30",
          "close": "22:00"
        }
      ],
      "closures": [
        {
          "object": "closure",
          "date": "2026-10-04",
          "closed": true,
          "hours": [
            {
              "open": "11:30",
              "close": "22:00"
            }
          ],
          "note": "string"
        }
      ],
      "contact": {
        "phone": "string",
        "email": "string",
        "website": "string"
      },
      "address": {
        "line": "string",
        "postal_code": "string",
        "city": "string",
        "country": "DE"
      },
      "location": {
        "lat": 0,
        "lon": 0
      }
    },
    "paused_until": "2026-10-04T17:44:59.942Z",
    "note": "string"
  }
}

store.resumed

A running pause was lifted early; object is the store.

Required scope: store:read

Fields in data

  • objectStorerequired

    The store when the event was first read.

    Child fields (22)
    • objectstringrequired

      Always store.

      Values:"store"

    • idstring (uuid)required

      The restaurant.

    • namestringrequired

      Name.

    • slugstringrequired

      Its address: <slug>.flavoso.com.

    • timezonestringrequired

      IANA time zone of all local times.

    • currencystringrequired

      ISO 4217.

    • statusstringrequired

      Right now: open, closed (outside hours or a closed special day), or paused.

      Values:"open""closed""paused"

    • paused_untilstring (date-time)requirednullable

      End of the running pause; null without one.

    • pause_notestringrequirednullable

      Reason of the running pause.

    • next_opening_atstring (date-time)requirednullable

      Next opening while closed (looks two weeks ahead); null while open.

    • preordersbooleanrequired

      Guests may order for a later time, also while closed.

    • order_typesobjectrequired

      Which order types guests can choose.

      Child fields (3)
      • pickupbooleanrequired

        Pickup.

      • deliverybooleanrequired

        Delivery.

      • dine_inbooleanrequired

        Ordering at the table via QR code (Pro and up).

    • order_statusesstring[]required

      Statuses this restaurant uses, in order, plus completed and cancelled.

    • lead_timesobjectrequired

      How long the kitchen needs; the earliest pickup or delivery time.

      Child fields (2)
      • pickup_minutesintegerrequired

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerrequired

        Minutes until delivery, 0 to 360.

    • min_orderintegerrequired

      Minimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).

    • always_openbooleanrequired

      No weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.

    • opening_hoursWeekWindow[]required

      The weekly opening windows; a weekday without windows is closed.

      Child fields (3)
      • weekdayintegerrequired

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringrequired

        Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • closestringrequired

        Closing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

    • delivery_hoursWeekWindow[]required

      Weekly delivery windows; empty means delivery follows opening_hours.

      Child fields (3)
      • weekdayintegerrequired

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringrequired

        Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • closestringrequired

        Closing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

    • closuresClosure[]required

      Upcoming special days (today and later).

      Child fields (5)
      • objectstringrequired

        Always closure.

        Values:"closure"

      • datestring (date)required

        The day. A date YYYY-MM-DD in the restaurant's time zone.

      • closedbooleanrequired

        Closed all day.

      • hoursTimeWindow[]required

        The windows of that day when not closed (at most two).

        Child fields (2)
        • openstringrequired

          Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

        • closestringrequired

          Closing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • notestringrequirednullable

        Note, e.g. the reason.

    • contactobjectrequired

      Public contact details.

      Child fields (3)
      • phonestringrequirednullable

        Phone.

      • emailstringrequirednullable

        E-mail.

      • websitestringrequirednullable

        Website.

    • addressobjectrequirednullable

      The address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.

      Child fields (4)
      • linestringrequirednullable

        Street and number (or the whole address when it cannot be split).

      • postal_codestringrequirednullable

        Postal code, when it can be read from the address.

      • citystringrequirednullable

        City, when it can be read from the address.

      • countrystringrequirednullable

        ISO 3166-1 alpha-2, as in GET /me.

    • locationobjectrequirednullable

      Coordinates; null when not set.

      Child fields (2)
      • latnumberrequired

        Latitude.

      • lonnumberrequired

        Longitude.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "store.resumed",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "store",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "name": "string",
      "slug": "pizzeria-example",
      "timezone": "Europe/Berlin",
      "currency": "EUR",
      "status": "open",
      "paused_until": "2026-10-04T17:44:59.942Z",
      "pause_note": "string",
      "next_opening_at": "2026-10-04T17:44:59.942Z",
      "preorders": true,
      "order_types": {
        "pickup": true,
        "delivery": true,
        "dine_in": true
      },
      "order_statuses": [
        "string"
      ],
      "lead_times": {
        "pickup_minutes": 30,
        "delivery_minutes": 30
      },
      "min_order": 1290,
      "always_open": true,
      "opening_hours": [
        {
          "weekday": 0,
          "open": "11:30",
          "close": "22:00"
        }
      ],
      "delivery_hours": [
        {
          "weekday": 0,
          "open": "11:30",
          "close": "22:00"
        }
      ],
      "closures": [
        {
          "object": "closure",
          "date": "2026-10-04",
          "closed": true,
          "hours": [
            {
              "open": "11:30",
              "close": "22:00"
            }
          ],
          "note": "string"
        }
      ],
      "contact": {
        "phone": "string",
        "email": "string",
        "website": "string"
      },
      "address": {
        "line": "string",
        "postal_code": "string",
        "city": "string",
        "country": "DE"
      },
      "location": {
        "lat": 0,
        "lon": 0
      }
    }
  }
}

store.updated

Opening hours, special days, lead times, order types, the minimum order or the statuses the restaurant uses (order_statuses) changed; changed says which.

Required scope: store:read

Fields in data

  • objectStorerequired

    The restaurant as a store: status, schedule, ordering rules and contact.

    Child fields (22)
    • objectstringrequired

      Always store.

      Values:"store"

    • idstring (uuid)required

      The restaurant.

    • namestringrequired

      Name.

    • slugstringrequired

      Its address: <slug>.flavoso.com.

    • timezonestringrequired

      IANA time zone of all local times.

    • currencystringrequired

      ISO 4217.

    • statusstringrequired

      Right now: open, closed (outside hours or a closed special day), or paused.

      Values:"open""closed""paused"

    • paused_untilstring (date-time)requirednullable

      End of the running pause; null without one.

    • pause_notestringrequirednullable

      Reason of the running pause.

    • next_opening_atstring (date-time)requirednullable

      Next opening while closed (looks two weeks ahead); null while open.

    • preordersbooleanrequired

      Guests may order for a later time, also while closed.

    • order_typesobjectrequired

      Which order types guests can choose.

      Child fields (3)
      • pickupbooleanrequired

        Pickup.

      • deliverybooleanrequired

        Delivery.

      • dine_inbooleanrequired

        Ordering at the table via QR code (Pro and up).

    • order_statusesstring[]required

      Statuses this restaurant uses, in order, plus completed and cancelled.

    • lead_timesobjectrequired

      How long the kitchen needs; the earliest pickup or delivery time.

      Child fields (2)
      • pickup_minutesintegerrequired

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerrequired

        Minutes until delivery, 0 to 360.

    • min_orderintegerrequired

      Minimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).

    • always_openbooleanrequired

      No weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.

    • opening_hoursWeekWindow[]required

      The weekly opening windows; a weekday without windows is closed.

      Child fields (3)
      • weekdayintegerrequired

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringrequired

        Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • closestringrequired

        Closing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

    • delivery_hoursWeekWindow[]required

      Weekly delivery windows; empty means delivery follows opening_hours.

      Child fields (3)
      • weekdayintegerrequired

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringrequired

        Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • closestringrequired

        Closing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

        pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

    • closuresClosure[]required

      Upcoming special days (today and later).

      Child fields (5)
      • objectstringrequired

        Always closure.

        Values:"closure"

      • datestring (date)required

        The day. A date YYYY-MM-DD in the restaurant's time zone.

      • closedbooleanrequired

        Closed all day.

      • hoursTimeWindow[]required

        The windows of that day when not closed (at most two).

        Child fields (2)
        • openstringrequired

          Opening. 24-hour local time "HH:MM" in the restaurant's time zone.

          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

        • closestringrequired

          Closing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.

          pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$

      • notestringrequirednullable

        Note, e.g. the reason.

    • contactobjectrequired

      Public contact details.

      Child fields (3)
      • phonestringrequirednullable

        Phone.

      • emailstringrequirednullable

        E-mail.

      • websitestringrequirednullable

        Website.

    • addressobjectrequirednullable

      The address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.

      Child fields (4)
      • linestringrequirednullable

        Street and number (or the whole address when it cannot be split).

      • postal_codestringrequirednullable

        Postal code, when it can be read from the address.

      • citystringrequirednullable

        City, when it can be read from the address.

      • countrystringrequirednullable

        ISO 3166-1 alpha-2, as in GET /me.

    • locationobjectrequirednullable

      Coordinates; null when not set.

      Child fields (2)
      • latnumberrequired

        Latitude.

      • lonnumberrequired

        Longitude.

  • changedstring[]required

    The Store fields this change touched.

    Values:"opening_hours""delivery_hours""closures""lead_times""preorders""order_types""min_order""order_statuses"

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "store.updated",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "store",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "name": "string",
      "slug": "pizzeria-example",
      "timezone": "Europe/Berlin",
      "currency": "EUR",
      "status": "open",
      "paused_until": "2026-10-04T17:44:59.942Z",
      "pause_note": "string",
      "next_opening_at": "2026-10-04T17:44:59.942Z",
      "preorders": true,
      "order_types": {
        "pickup": true,
        "delivery": true,
        "dine_in": true
      },
      "order_statuses": [
        "string"
      ],
      "lead_times": {
        "pickup_minutes": 30,
        "delivery_minutes": 30
      },
      "min_order": 1290,
      "always_open": true,
      "opening_hours": [
        {
          "weekday": 0,
          "open": "11:30",
          "close": "22:00"
        }
      ],
      "delivery_hours": [
        {
          "weekday": 0,
          "open": "11:30",
          "close": "22:00"
        }
      ],
      "closures": [
        {
          "object": "closure",
          "date": "2026-10-04",
          "closed": true,
          "hours": [
            {
              "open": "11:30",
              "close": "22:00"
            }
          ],
          "note": "string"
        }
      ],
      "contact": {
        "phone": "string",
        "email": "string",
        "website": "string"
      },
      "address": {
        "line": "string",
        "postal_code": "string",
        "city": "string",
        "country": "DE"
      },
      "location": {
        "lat": 0,
        "lon": 0
      }
    },
    "changed": [
      "opening_hours"
    ]
  }
}

Connection

app.connected

A restaurant connected your app, or connected it again after the connection had ended.

Required scope: none, only the connection itself

Fields in data

  • objectConnectionSummaryrequired

    The connection in app.* events.

    Child fields (5)
    • objectstringrequired

      Always connection.

      Values:"connection"

    • idstring (uuid)required

      The connection.

    • scopesstring[]required

      The permissions the restaurant granted.

      Values:"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"

    • created_atstring (date-time)required

      When the restaurant connected the app. ISO 8601 in UTC (Z).

    • revoked_atstring (date-time)requirednullable

      When the connection ended; null while it is active.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "app.connected",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "connection",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "scopes": [
        "orders:read"
      ],
      "created_at": "2026-10-04T17:44:59.942Z",
      "revoked_at": "2026-10-04T17:44:59.942Z"
    }
  }
}

app.scopes_changed

The scopes of an existing connection changed, because the owner connected your app again with other scopes. previous_scopes holds the old ones.

Required scope: none, only the connection itself

Fields in data

  • objectConnectionSummaryrequired

    The connection in app.* events.

    Child fields (5)
    • objectstringrequired

      Always connection.

      Values:"connection"

    • idstring (uuid)required

      The connection.

    • scopesstring[]required

      The permissions the restaurant granted.

      Values:"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"

    • created_atstring (date-time)required

      When the restaurant connected the app. ISO 8601 in UTC (Z).

    • revoked_atstring (date-time)requirednullable

      When the connection ended; null while it is active.

  • previous_scopesstring[]required

    The permissions before this change.

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "app.scopes_changed",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "connection",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "scopes": [
        "orders:read"
      ],
      "created_at": "2026-10-04T17:44:59.942Z",
      "revoked_at": "2026-10-04T17:44:59.942Z"
    },
    "previous_scopes": [
      "string"
    ]
  }
}

app.disconnected

The connection to a restaurant ended: the owner disconnected, your app disconnected (DELETE /connection) or Flavoso did. reason says who. After that, no token of this connection works any more; that is why it never arrives through GET /events.

Required scope: none, only the connection itself

Fields in data

  • objectConnectionSummaryrequired

    The connection in app.* events.

    Child fields (5)
    • objectstringrequired

      Always connection.

      Values:"connection"

    • idstring (uuid)required

      The connection.

    • scopesstring[]required

      The permissions the restaurant granted.

      Values:"orders:read""orders:write""menu:read""menu:write""store:read""store:write""reservations:read""reservations:write""reports:read"

    • created_atstring (date-time)required

      When the restaurant connected the app. ISO 8601 in UTC (Z).

    • revoked_atstring (date-time)requirednullable

      When the connection ended; null while it is active.

  • reasonstringrequired

    Who ended the connection.

    Values:"owner""app""admin"

Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "app.disconnected",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "object": {
      "object": "connection",
      "id": "37386ae0-ca76-4d50-a738-6ae0ca766d50",
      "scopes": [
        "orders:read"
      ],
      "created_at": "2026-10-04T17:44:59.942Z",
      "revoked_at": "2026-10-04T17:44:59.942Z"
    },
    "reason": "owner"
  }
}

Test

ping

Only via “Send a test event” in the console. Never created by itself.

Required scope: none, only the connection itself

Fields in data

  • messagestring
Example
{
  "id": "evt_2bf5a9b06b75442a9244e884a1acfc57",
  "object": "event",
  "type": "ping",
  "created_at": "2026-10-04T17:46:12.410Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
  "connection_id": "4b3f7c1e-9a2d-4e8b-b5f6-0c1d2e3f4a5b",
  "data": {
    "message": "string"
  }
}

Still unclear? Write to support@flavoso.com and include the id from X-Request-Id. It lets us find your request in the log.