Flavoso APIWebhooks und EreignisseEreignisarten

Ereignisarten

Jede Ereignisart mit Beschreibung, nötigem Recht, den Feldern in data und einem Beispiel-Umschlag.

Überblick

Ein Ereignis entsteht genau einmal je Änderung, egal ob sie im Dashboard, am Küchenbildschirm, in der Handy-App, am Bondrucker oder über die API passiert ist. Welche Arten deine App bekommt, wählst du in der Konsole; bei GET /events mit types.

Dein Programm sollte Arten, die es nicht kennt, ignorieren.

EreignisseNötiges Recht
order.*orders:read
reservation.*reservations:read
menu.*menu:read
store.*store:read
app.*keins, nur die eigene Verbindung

Bestellungen

order.created

Eine neue Bestellung ist eingegangen: bei Zahlung vor Ort sofort, bei Online-Zahlung, sobald die Zahlung bestätigt ist. Genau einmal je Bestellung.

Nötiges Recht: orders:read

Felder in data

  • objectOrderPflicht

    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.

    Felder darin (20)
    • objectstringPflicht

      Always order.

      Werte:"order"

    • idstring (uuid)Pflicht

      The order.

    • codestringPflicht

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

    • external_idstringPflichtkann null sein

      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.

    • typestringPflicht

      How the guest gets the order.

      Werte:"pickup""delivery""dine_in"

    • sourcestringPflicht

      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).

      Werte:"storefront""table""app"

    • statusstringPflicht

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

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

    • created_atstring (date-time)Pflicht

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

    • updated_atstring (date-time)Pflicht

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)Pflichtkann null sein

      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)Pflichtkann null sein

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

    • currencystringPflicht

      ISO 4217, e.g. EUR.

    • amountsobjectPflicht

      The amounts of the order, in cents.

      Felder darin (6)
      • subtotalintegerPflicht

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

      • delivery_feeintegerPflicht

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

      • service_feeintegerPflicht

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

      • discountintegerPflicht

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

      • tipintegerPflicht

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

      • totalintegerPflicht

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

    • taxobjectPflicht

      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.

      Felder darin (2)
      • includedbooleanPflicht

        Always true: prices include VAT.

        Werte:true

      • linesTaxLine[]Pflicht

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

        Felder darin (4)
        • rate_bpsintegerPflichtkann null sein

          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.

        • grossintegerPflicht

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

        • netintegerPflichtkann null sein

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

        • taxintegerPflichtkann null sein

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

    • paymentobjectPflicht

      How and whether it is paid.

      Felder darin (3)
      • methodstringPflicht

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

        Werte:"online""on_site"

      • statusstringPflicht

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

        Werte:"paid""open"

      • paid_atstring (date-time)Pflichtkann null sein

        When it was paid; null while open.

    • customerobjectPflichtkann null sein

      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.

      Felder darin (2)
      • namestringPflichtkann null sein

        The guest's name.

      • phonestringPflichtkann null sein

        Phone for questions; null for dine-in.

    • deliveryobjectPflichtkann null sein

      The delivery address; null unless type is delivery.

      Felder darin (3)
      • addressstringPflichtkann null sein

        Street and number.

      • postal_codestringPflichtkann null sein

        Postal code.

      • citystringPflichtkann null sein

        City.

    • tableobjectPflichtkann null sein

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

      Felder darin (2)
      • idstring (uuid)Pflicht

        The table (GET /tables).

      • labelstringPflichtkann null sein

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

    • notestringPflichtkann null sein

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

    • itemsOrderItem[]Pflicht

      The lines.

      Felder darin (8)
      • idstring (uuid)Pflicht

        The line.

      • product_idstring (uuid)Pflichtkann null sein

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

      • namestringPflicht

        Name at the time of ordering.

      • quantityintegerPflicht

        How many.

        min 1

      • unit_priceintegerPflicht

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

      • line_totalintegerPflicht

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

      • tax_rate_bpsintegerPflichtkann null sein

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

      • optionsobject[]Pflicht

        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.

        Felder darin (5)
        • idstring (uuid)Pflichtkann null sein

          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.

        • namestringPflicht

          Name of the option.

        • price_deltaintegerPflicht

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

        • group_idstring (uuid)Pflichtkann null sein

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

        • group_namestringPflichtkann null sein

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

Beispiel
{
  "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

Eine Bestellung hat ihren Stand gewechselt, egal wo: Dashboard, Küchenbildschirm, Handy-App, Bondrucker oder API. previous_status nennt den alten.

Nötiges Recht: orders:read

Felder in data

  • objectOrderPflicht

    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.

    Felder darin (20)
    • objectstringPflicht

      Always order.

      Werte:"order"

    • idstring (uuid)Pflicht

      The order.

    • codestringPflicht

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

    • external_idstringPflichtkann null sein

      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.

    • typestringPflicht

      How the guest gets the order.

      Werte:"pickup""delivery""dine_in"

    • sourcestringPflicht

      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).

      Werte:"storefront""table""app"

    • statusstringPflicht

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

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

    • created_atstring (date-time)Pflicht

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

    • updated_atstring (date-time)Pflicht

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)Pflichtkann null sein

      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)Pflichtkann null sein

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

    • currencystringPflicht

      ISO 4217, e.g. EUR.

    • amountsobjectPflicht

      The amounts of the order, in cents.

      Felder darin (6)
      • subtotalintegerPflicht

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

      • delivery_feeintegerPflicht

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

      • service_feeintegerPflicht

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

      • discountintegerPflicht

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

      • tipintegerPflicht

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

      • totalintegerPflicht

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

    • taxobjectPflicht

      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.

      Felder darin (2)
      • includedbooleanPflicht

        Always true: prices include VAT.

        Werte:true

      • linesTaxLine[]Pflicht

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

        Felder darin (4)
        • rate_bpsintegerPflichtkann null sein

          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.

        • grossintegerPflicht

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

        • netintegerPflichtkann null sein

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

        • taxintegerPflichtkann null sein

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

    • paymentobjectPflicht

      How and whether it is paid.

      Felder darin (3)
      • methodstringPflicht

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

        Werte:"online""on_site"

      • statusstringPflicht

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

        Werte:"paid""open"

      • paid_atstring (date-time)Pflichtkann null sein

        When it was paid; null while open.

    • customerobjectPflichtkann null sein

      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.

      Felder darin (2)
      • namestringPflichtkann null sein

        The guest's name.

      • phonestringPflichtkann null sein

        Phone for questions; null for dine-in.

    • deliveryobjectPflichtkann null sein

      The delivery address; null unless type is delivery.

      Felder darin (3)
      • addressstringPflichtkann null sein

        Street and number.

      • postal_codestringPflichtkann null sein

        Postal code.

      • citystringPflichtkann null sein

        City.

    • tableobjectPflichtkann null sein

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

      Felder darin (2)
      • idstring (uuid)Pflicht

        The table (GET /tables).

      • labelstringPflichtkann null sein

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

    • notestringPflichtkann null sein

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

    • itemsOrderItem[]Pflicht

      The lines.

      Felder darin (8)
      • idstring (uuid)Pflicht

        The line.

      • product_idstring (uuid)Pflichtkann null sein

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

      • namestringPflicht

        Name at the time of ordering.

      • quantityintegerPflicht

        How many.

        min 1

      • unit_priceintegerPflicht

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

      • line_totalintegerPflicht

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

      • tax_rate_bpsintegerPflichtkann null sein

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

      • optionsobject[]Pflicht

        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.

        Felder darin (5)
        • idstring (uuid)Pflichtkann null sein

          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.

        • namestringPflicht

          Name of the option.

        • price_deltaintegerPflicht

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

        • group_idstring (uuid)Pflichtkann null sein

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

        • group_namestringPflichtkann null sein

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

  • previous_statusstringPflicht

    The status before this change.

Beispiel
{
  "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

Eine Bestellung wurde storniert oder abgelehnt. Kommt zusätzlich zu order.status_changed.

Nötiges Recht: orders:read

Felder in data

  • objectOrderPflicht

    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.

    Felder darin (20)
    • objectstringPflicht

      Always order.

      Werte:"order"

    • idstring (uuid)Pflicht

      The order.

    • codestringPflicht

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

    • external_idstringPflichtkann null sein

      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.

    • typestringPflicht

      How the guest gets the order.

      Werte:"pickup""delivery""dine_in"

    • sourcestringPflicht

      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).

      Werte:"storefront""table""app"

    • statusstringPflicht

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

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

    • created_atstring (date-time)Pflicht

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

    • updated_atstring (date-time)Pflicht

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)Pflichtkann null sein

      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)Pflichtkann null sein

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

    • currencystringPflicht

      ISO 4217, e.g. EUR.

    • amountsobjectPflicht

      The amounts of the order, in cents.

      Felder darin (6)
      • subtotalintegerPflicht

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

      • delivery_feeintegerPflicht

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

      • service_feeintegerPflicht

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

      • discountintegerPflicht

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

      • tipintegerPflicht

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

      • totalintegerPflicht

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

    • taxobjectPflicht

      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.

      Felder darin (2)
      • includedbooleanPflicht

        Always true: prices include VAT.

        Werte:true

      • linesTaxLine[]Pflicht

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

        Felder darin (4)
        • rate_bpsintegerPflichtkann null sein

          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.

        • grossintegerPflicht

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

        • netintegerPflichtkann null sein

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

        • taxintegerPflichtkann null sein

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

    • paymentobjectPflicht

      How and whether it is paid.

      Felder darin (3)
      • methodstringPflicht

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

        Werte:"online""on_site"

      • statusstringPflicht

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

        Werte:"paid""open"

      • paid_atstring (date-time)Pflichtkann null sein

        When it was paid; null while open.

    • customerobjectPflichtkann null sein

      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.

      Felder darin (2)
      • namestringPflichtkann null sein

        The guest's name.

      • phonestringPflichtkann null sein

        Phone for questions; null for dine-in.

    • deliveryobjectPflichtkann null sein

      The delivery address; null unless type is delivery.

      Felder darin (3)
      • addressstringPflichtkann null sein

        Street and number.

      • postal_codestringPflichtkann null sein

        Postal code.

      • citystringPflichtkann null sein

        City.

    • tableobjectPflichtkann null sein

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

      Felder darin (2)
      • idstring (uuid)Pflicht

        The table (GET /tables).

      • labelstringPflichtkann null sein

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

    • notestringPflichtkann null sein

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

    • itemsOrderItem[]Pflicht

      The lines.

      Felder darin (8)
      • idstring (uuid)Pflicht

        The line.

      • product_idstring (uuid)Pflichtkann null sein

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

      • namestringPflicht

        Name at the time of ordering.

      • quantityintegerPflicht

        How many.

        min 1

      • unit_priceintegerPflicht

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

      • line_totalintegerPflicht

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

      • tax_rate_bpsintegerPflichtkann null sein

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

      • optionsobject[]Pflicht

        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.

        Felder darin (5)
        • idstring (uuid)Pflichtkann null sein

          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.

        • namestringPflicht

          Name of the option.

        • price_deltaintegerPflicht

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

        • group_idstring (uuid)Pflichtkann null sein

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

        • group_namestringPflichtkann null sein

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

  • previous_statusstringPflicht

    The status before the cancellation.

Beispiel
{
  "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

Eine Bestellung wurde online bezahlt: der Zahlungsanbieter hat die Zahlung bestätigt, und ab da gibt es die Bestellung (gleich nach order.created). Was vor Ort bezahlt wird, vermerkt Flavoso nicht als bezahlt; dafür kommt dieses Ereignis nie.

Nötiges Recht: orders:read

Felder in data

  • objectOrderPflicht

    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.

    Felder darin (20)
    • objectstringPflicht

      Always order.

      Werte:"order"

    • idstring (uuid)Pflicht

      The order.

    • codestringPflicht

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

    • external_idstringPflichtkann null sein

      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.

    • typestringPflicht

      How the guest gets the order.

      Werte:"pickup""delivery""dine_in"

    • sourcestringPflicht

      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).

      Werte:"storefront""table""app"

    • statusstringPflicht

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

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

    • created_atstring (date-time)Pflicht

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

    • updated_atstring (date-time)Pflicht

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)Pflichtkann null sein

      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)Pflichtkann null sein

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

    • currencystringPflicht

      ISO 4217, e.g. EUR.

    • amountsobjectPflicht

      The amounts of the order, in cents.

      Felder darin (6)
      • subtotalintegerPflicht

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

      • delivery_feeintegerPflicht

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

      • service_feeintegerPflicht

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

      • discountintegerPflicht

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

      • tipintegerPflicht

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

      • totalintegerPflicht

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

    • taxobjectPflicht

      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.

      Felder darin (2)
      • includedbooleanPflicht

        Always true: prices include VAT.

        Werte:true

      • linesTaxLine[]Pflicht

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

        Felder darin (4)
        • rate_bpsintegerPflichtkann null sein

          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.

        • grossintegerPflicht

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

        • netintegerPflichtkann null sein

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

        • taxintegerPflichtkann null sein

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

    • paymentobjectPflicht

      How and whether it is paid.

      Felder darin (3)
      • methodstringPflicht

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

        Werte:"online""on_site"

      • statusstringPflicht

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

        Werte:"paid""open"

      • paid_atstring (date-time)Pflichtkann null sein

        When it was paid; null while open.

    • customerobjectPflichtkann null sein

      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.

      Felder darin (2)
      • namestringPflichtkann null sein

        The guest's name.

      • phonestringPflichtkann null sein

        Phone for questions; null for dine-in.

    • deliveryobjectPflichtkann null sein

      The delivery address; null unless type is delivery.

      Felder darin (3)
      • addressstringPflichtkann null sein

        Street and number.

      • postal_codestringPflichtkann null sein

        Postal code.

      • citystringPflichtkann null sein

        City.

    • tableobjectPflichtkann null sein

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

      Felder darin (2)
      • idstring (uuid)Pflicht

        The table (GET /tables).

      • labelstringPflichtkann null sein

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

    • notestringPflichtkann null sein

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

    • itemsOrderItem[]Pflicht

      The lines.

      Felder darin (8)
      • idstring (uuid)Pflicht

        The line.

      • product_idstring (uuid)Pflichtkann null sein

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

      • namestringPflicht

        Name at the time of ordering.

      • quantityintegerPflicht

        How many.

        min 1

      • unit_priceintegerPflicht

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

      • line_totalintegerPflicht

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

      • tax_rate_bpsintegerPflichtkann null sein

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

      • optionsobject[]Pflicht

        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.

        Felder darin (5)
        • idstring (uuid)Pflichtkann null sein

          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.

        • namestringPflicht

          Name of the option.

        • price_deltaintegerPflicht

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

        • group_idstring (uuid)Pflichtkann null sein

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

        • group_namestringPflichtkann null sein

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

Beispiel
{
  "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"
            }
          ]
        }
      ]
    }
  }
}

Reservierungen

reservation.created

Eine Reservierung ist neu, online vom Gast oder vom Team angelegt.

Nötiges Recht: reservations:read

Felder in data

  • objectReservationPflicht

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

    Felder darin (14)
    • objectstringPflicht

      Always reservation.

      Werte:"reservation"

    • idstring (uuid)Pflicht

      The reservation.

    • codestringPflicht

      Short code the guest sees.

    • statusstringPflicht

      pending is a request the restaurant still has to confirm.

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

    • starts_atstring (date-time)Pflicht

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

    • duration_minutesintegerPflicht

      How long the table is held.

    • party_sizeintegerPflicht

      Number of guests.

    • table_idsstring (uuid)[]Pflicht

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

    • sourcestringPflicht

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

      Werte:"guest""staff""api"

    • guest_namestringPflichtkann null sein

      The guest's name.

    • notestringPflichtkann null sein

      The guest's wish.

    • created_atstring (date-time)Pflicht

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

    • updated_atstring (date-time)Pflicht

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)Pflichtkann null sein

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

Beispiel
{
  "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

Stand, Zeit, Personenzahl, Dauer, Tische oder Anmerkung einer Reservierung haben sich geändert; changed nennt, was. Löscht der Betrieb eine Reservierung, kommt ein letztes Ereignis mit changed: ["deleted"] und deleted_at, danach antwortet sie mit 404.

Nötiges Recht: reservations:read

Felder in data

  • objectReservationPflicht

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

    Felder darin (14)
    • objectstringPflicht

      Always reservation.

      Werte:"reservation"

    • idstring (uuid)Pflicht

      The reservation.

    • codestringPflicht

      Short code the guest sees.

    • statusstringPflicht

      pending is a request the restaurant still has to confirm.

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

    • starts_atstring (date-time)Pflicht

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

    • duration_minutesintegerPflicht

      How long the table is held.

    • party_sizeintegerPflicht

      Number of guests.

    • table_idsstring (uuid)[]Pflicht

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

    • sourcestringPflicht

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

      Werte:"guest""staff""api"

    • guest_namestringPflichtkann null sein

      The guest's name.

    • notestringPflichtkann null sein

      The guest's wish.

    • created_atstring (date-time)Pflicht

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

    • updated_atstring (date-time)Pflicht

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)Pflichtkann null sein

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

  • previous_statusstringkann null sein

    The status before this change.

  • changedstring[]Pflicht

    The fields this change touched.

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

Beispiel
{
  "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"
    ]
  }
}

Betrieb

store.paused

Die Bestellannahme wurde pausiert, bis paused_until; object ist der Laden, wie bei store.updated. Endet die Pause von selbst, kommt kein eigenes Ereignis.

Nötiges Recht: store:read

Felder in data

  • objectStorePflicht

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

    Felder darin (22)
    • objectstringPflicht

      Always store.

      Werte:"store"

    • idstring (uuid)Pflicht

      The restaurant.

    • namestringPflicht

      Name.

    • slugstringPflicht

      Its address: <slug>.flavoso.com.

    • timezonestringPflicht

      IANA time zone of all local times.

    • currencystringPflicht

      ISO 4217.

    • statusstringPflicht

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

      Werte:"open""closed""paused"

    • paused_untilstring (date-time)Pflichtkann null sein

      End of the running pause; null without one.

    • pause_notestringPflichtkann null sein

      Reason of the running pause.

    • next_opening_atstring (date-time)Pflichtkann null sein

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

    • preordersbooleanPflicht

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

    • order_typesobjectPflicht

      Which order types guests can choose.

      Felder darin (3)
      • pickupbooleanPflicht

        Pickup.

      • deliverybooleanPflicht

        Delivery.

      • dine_inbooleanPflicht

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

    • order_statusesstring[]Pflicht

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

    • lead_timesobjectPflicht

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

      Felder darin (2)
      • pickup_minutesintegerPflicht

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerPflicht

        Minutes until delivery, 0 to 360.

    • min_orderintegerPflicht

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

    • always_openbooleanPflicht

      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[]Pflicht

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

      Felder darin (3)
      • weekdayintegerPflicht

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringPflicht

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

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

      • closestringPflicht

        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[]Pflicht

      Weekly delivery windows; empty means delivery follows opening_hours.

      Felder darin (3)
      • weekdayintegerPflicht

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringPflicht

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

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

      • closestringPflicht

        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[]Pflicht

      Upcoming special days (today and later).

      Felder darin (5)
      • objectstringPflicht

        Always closure.

        Werte:"closure"

      • datestring (date)Pflicht

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

      • closedbooleanPflicht

        Closed all day.

      • hoursTimeWindow[]Pflicht

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

        Felder darin (2)
        • openstringPflicht

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

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

        • closestringPflicht

          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]$

      • notestringPflichtkann null sein

        Note, e.g. the reason.

    • contactobjectPflicht

      Public contact details.

      Felder darin (3)
      • phonestringPflichtkann null sein

        Phone.

      • emailstringPflichtkann null sein

        E-mail.

      • websitestringPflichtkann null sein

        Website.

    • addressobjectPflichtkann null sein

      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.

      Felder darin (4)
      • linestringPflichtkann null sein

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

      • postal_codestringPflichtkann null sein

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

      • citystringPflichtkann null sein

        City, when it can be read from the address.

      • countrystringPflichtkann null sein

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

    • locationobjectPflichtkann null sein

      Coordinates; null when not set.

      Felder darin (2)
      • latnumberPflicht

        Latitude.

      • lonnumberPflicht

        Longitude.

  • paused_untilstring (date-time)Pflicht

    When ordering resumes by itself.

  • notestringPflichtkann null sein

    The reason, if given.

Beispiel
{
  "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

Eine laufende Pause wurde vorzeitig beendet; object ist der Laden.

Nötiges Recht: store:read

Felder in data

  • objectStorePflicht

    The store when the event was first read.

    Felder darin (22)
    • objectstringPflicht

      Always store.

      Werte:"store"

    • idstring (uuid)Pflicht

      The restaurant.

    • namestringPflicht

      Name.

    • slugstringPflicht

      Its address: <slug>.flavoso.com.

    • timezonestringPflicht

      IANA time zone of all local times.

    • currencystringPflicht

      ISO 4217.

    • statusstringPflicht

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

      Werte:"open""closed""paused"

    • paused_untilstring (date-time)Pflichtkann null sein

      End of the running pause; null without one.

    • pause_notestringPflichtkann null sein

      Reason of the running pause.

    • next_opening_atstring (date-time)Pflichtkann null sein

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

    • preordersbooleanPflicht

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

    • order_typesobjectPflicht

      Which order types guests can choose.

      Felder darin (3)
      • pickupbooleanPflicht

        Pickup.

      • deliverybooleanPflicht

        Delivery.

      • dine_inbooleanPflicht

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

    • order_statusesstring[]Pflicht

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

    • lead_timesobjectPflicht

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

      Felder darin (2)
      • pickup_minutesintegerPflicht

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerPflicht

        Minutes until delivery, 0 to 360.

    • min_orderintegerPflicht

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

    • always_openbooleanPflicht

      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[]Pflicht

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

      Felder darin (3)
      • weekdayintegerPflicht

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringPflicht

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

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

      • closestringPflicht

        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[]Pflicht

      Weekly delivery windows; empty means delivery follows opening_hours.

      Felder darin (3)
      • weekdayintegerPflicht

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringPflicht

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

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

      • closestringPflicht

        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[]Pflicht

      Upcoming special days (today and later).

      Felder darin (5)
      • objectstringPflicht

        Always closure.

        Werte:"closure"

      • datestring (date)Pflicht

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

      • closedbooleanPflicht

        Closed all day.

      • hoursTimeWindow[]Pflicht

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

        Felder darin (2)
        • openstringPflicht

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

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

        • closestringPflicht

          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]$

      • notestringPflichtkann null sein

        Note, e.g. the reason.

    • contactobjectPflicht

      Public contact details.

      Felder darin (3)
      • phonestringPflichtkann null sein

        Phone.

      • emailstringPflichtkann null sein

        E-mail.

      • websitestringPflichtkann null sein

        Website.

    • addressobjectPflichtkann null sein

      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.

      Felder darin (4)
      • linestringPflichtkann null sein

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

      • postal_codestringPflichtkann null sein

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

      • citystringPflichtkann null sein

        City, when it can be read from the address.

      • countrystringPflichtkann null sein

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

    • locationobjectPflichtkann null sein

      Coordinates; null when not set.

      Felder darin (2)
      • latnumberPflicht

        Latitude.

      • lonnumberPflicht

        Longitude.

Beispiel
{
  "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

Öffnungszeiten, Sondertage, Vorlaufzeiten, Bestellarten, der Mindestbestellwert oder die Stände, die der Betrieb benutzt (order_statuses), haben sich geändert; changed nennt, was.

Nötiges Recht: store:read

Felder in data

  • objectStorePflicht

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

    Felder darin (22)
    • objectstringPflicht

      Always store.

      Werte:"store"

    • idstring (uuid)Pflicht

      The restaurant.

    • namestringPflicht

      Name.

    • slugstringPflicht

      Its address: <slug>.flavoso.com.

    • timezonestringPflicht

      IANA time zone of all local times.

    • currencystringPflicht

      ISO 4217.

    • statusstringPflicht

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

      Werte:"open""closed""paused"

    • paused_untilstring (date-time)Pflichtkann null sein

      End of the running pause; null without one.

    • pause_notestringPflichtkann null sein

      Reason of the running pause.

    • next_opening_atstring (date-time)Pflichtkann null sein

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

    • preordersbooleanPflicht

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

    • order_typesobjectPflicht

      Which order types guests can choose.

      Felder darin (3)
      • pickupbooleanPflicht

        Pickup.

      • deliverybooleanPflicht

        Delivery.

      • dine_inbooleanPflicht

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

    • order_statusesstring[]Pflicht

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

    • lead_timesobjectPflicht

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

      Felder darin (2)
      • pickup_minutesintegerPflicht

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerPflicht

        Minutes until delivery, 0 to 360.

    • min_orderintegerPflicht

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

    • always_openbooleanPflicht

      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[]Pflicht

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

      Felder darin (3)
      • weekdayintegerPflicht

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringPflicht

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

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

      • closestringPflicht

        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[]Pflicht

      Weekly delivery windows; empty means delivery follows opening_hours.

      Felder darin (3)
      • weekdayintegerPflicht

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringPflicht

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

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

      • closestringPflicht

        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[]Pflicht

      Upcoming special days (today and later).

      Felder darin (5)
      • objectstringPflicht

        Always closure.

        Werte:"closure"

      • datestring (date)Pflicht

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

      • closedbooleanPflicht

        Closed all day.

      • hoursTimeWindow[]Pflicht

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

        Felder darin (2)
        • openstringPflicht

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

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

        • closestringPflicht

          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]$

      • notestringPflichtkann null sein

        Note, e.g. the reason.

    • contactobjectPflicht

      Public contact details.

      Felder darin (3)
      • phonestringPflichtkann null sein

        Phone.

      • emailstringPflichtkann null sein

        E-mail.

      • websitestringPflichtkann null sein

        Website.

    • addressobjectPflichtkann null sein

      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.

      Felder darin (4)
      • linestringPflichtkann null sein

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

      • postal_codestringPflichtkann null sein

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

      • citystringPflichtkann null sein

        City, when it can be read from the address.

      • countrystringPflichtkann null sein

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

    • locationobjectPflichtkann null sein

      Coordinates; null when not set.

      Felder darin (2)
      • latnumberPflicht

        Latitude.

      • lonnumberPflicht

        Longitude.

  • changedstring[]Pflicht

    The Store fields this change touched.

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

Beispiel
{
  "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"
    ]
  }
}

Verbindung

app.connected

Ein Betrieb hat deine App verbunden, oder neu verbunden, nachdem die Verbindung beendet war.

Nötiges Recht: keins, nur die eigene Verbindung

Felder in data

  • objectConnectionSummaryPflicht

    The connection in app.* events.

    Felder darin (5)
    • objectstringPflicht

      Always connection.

      Werte:"connection"

    • idstring (uuid)Pflicht

      The connection.

    • scopesstring[]Pflicht

      The permissions the restaurant granted.

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

    • created_atstring (date-time)Pflicht

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

    • revoked_atstring (date-time)Pflichtkann null sein

      When the connection ended; null while it is active.

Beispiel
{
  "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

Die Rechte einer bestehenden Verbindung haben sich geändert, weil der Inhaber deine App mit anderen Rechten neu verbunden hat. previous_scopes nennt die alten.

Nötiges Recht: keins, nur die eigene Verbindung

Felder in data

  • objectConnectionSummaryPflicht

    The connection in app.* events.

    Felder darin (5)
    • objectstringPflicht

      Always connection.

      Werte:"connection"

    • idstring (uuid)Pflicht

      The connection.

    • scopesstring[]Pflicht

      The permissions the restaurant granted.

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

    • created_atstring (date-time)Pflicht

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

    • revoked_atstring (date-time)Pflichtkann null sein

      When the connection ended; null while it is active.

  • previous_scopesstring[]Pflicht

    The permissions before this change.

Beispiel
{
  "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

Die Verbindung zu einem Betrieb ist beendet: der Inhaber hat getrennt, deine App hat getrennt (DELETE /connection) oder Flavoso. reason sagt, wer. Danach gilt kein Token dieser Verbindung mehr; über GET /events kommt es deshalb nie an.

Nötiges Recht: keins, nur die eigene Verbindung

Felder in data

  • objectConnectionSummaryPflicht

    The connection in app.* events.

    Felder darin (5)
    • objectstringPflicht

      Always connection.

      Werte:"connection"

    • idstring (uuid)Pflicht

      The connection.

    • scopesstring[]Pflicht

      The permissions the restaurant granted.

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

    • created_atstring (date-time)Pflicht

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

    • revoked_atstring (date-time)Pflichtkann null sein

      When the connection ended; null while it is active.

  • reasonstringPflicht

    Who ended the connection.

    Werte:"owner""app""admin"

Beispiel
{
  "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

Nur über „Test-Ereignis senden“ in der Konsole. Entsteht nie von selbst.

Nötiges Recht: keins, nur die eigene Verbindung

Felder in data

  • messagestring
Beispiel
{
  "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"
  }
}

Etwas unklar geblieben? Schreib an support@flavoso.com und nenne die Kennung aus X-Request-Id. Damit finden wir deine Anfrage im Protokoll.