API FlavosoWebhooks et événementsTypes d'événements

Types d'événements

Chaque type d'événement avec sa description, le droit requis, les champs dans data et un exemple d'enveloppe.

Vue d'ensemble

Un événement est créé exactement une fois par changement, que celui-ci ait eu lieu dans le tableau de bord, sur l'écran de cuisine, dans l'application mobile, à l'imprimante de tickets ou via l'API. Vous choisissez dans la console les types que reçoit votre application ; pour GET /events, avec types.

Votre programme devrait ignorer les types qu'il ne connaît pas.

ÉvénementsDroit requis
order.*orders:read
reservation.*reservations:read
menu.*menu:read
store.*store:read
app.*aucun, seulement la connexion elle-même

Commandes

order.created

Une nouvelle commande est arrivée : immédiatement avec paiement sur place, une fois le paiement confirmé avec paiement en ligne. Une seule fois par commande.

Droit requis: orders:read

Champs dans data

  • objectOrderobligatoire

    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.

    Champs contenus (20)
    • objectstringobligatoire

      Always order.

      Valeurs:"order"

    • idstring (uuid)obligatoire

      The order.

    • codestringobligatoire

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

    • external_idstringobligatoirepeut être null

      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.

    • typestringobligatoire

      How the guest gets the order.

      Valeurs:"pickup""delivery""dine_in"

    • sourcestringobligatoire

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

      Valeurs:"storefront""table""app"

    • statusstringobligatoire

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

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

    • created_atstring (date-time)obligatoire

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

    • updated_atstring (date-time)obligatoire

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoirepeut être null

      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)obligatoirepeut être null

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

    • currencystringobligatoire

      ISO 4217, e.g. EUR.

    • amountsobjectobligatoire

      The amounts of the order, in cents.

      Champs contenus (6)
      • subtotalintegerobligatoire

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

      • delivery_feeintegerobligatoire

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

      • service_feeintegerobligatoire

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

      • discountintegerobligatoire

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

      • tipintegerobligatoire

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

      • totalintegerobligatoire

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

    • taxobjectobligatoire

      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.

      Champs contenus (2)
      • includedbooleanobligatoire

        Always true: prices include VAT.

        Valeurs:true

      • linesTaxLine[]obligatoire

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

        Champs contenus (4)
        • rate_bpsintegerobligatoirepeut être null

          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.

        • grossintegerobligatoire

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

        • netintegerobligatoirepeut être null

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

        • taxintegerobligatoirepeut être null

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

    • paymentobjectobligatoire

      How and whether it is paid.

      Champs contenus (3)
      • methodstringobligatoire

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

        Valeurs:"online""on_site"

      • statusstringobligatoire

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

        Valeurs:"paid""open"

      • paid_atstring (date-time)obligatoirepeut être null

        When it was paid; null while open.

    • customerobjectobligatoirepeut être null

      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.

      Champs contenus (2)
      • namestringobligatoirepeut être null

        The guest's name.

      • phonestringobligatoirepeut être null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoirepeut être null

      The delivery address; null unless type is delivery.

      Champs contenus (3)
      • addressstringobligatoirepeut être null

        Street and number.

      • postal_codestringobligatoirepeut être null

        Postal code.

      • citystringobligatoirepeut être null

        City.

    • tableobjectobligatoirepeut être null

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

      Champs contenus (2)
      • idstring (uuid)obligatoire

        The table (GET /tables).

      • labelstringobligatoirepeut être null

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

    • notestringobligatoirepeut être null

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

    • itemsOrderItem[]obligatoire

      The lines.

      Champs contenus (8)
      • idstring (uuid)obligatoire

        The line.

      • product_idstring (uuid)obligatoirepeut être null

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

      • namestringobligatoire

        Name at the time of ordering.

      • quantityintegerobligatoire

        How many.

        min 1

      • unit_priceintegerobligatoire

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

      • line_totalintegerobligatoire

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

      • tax_rate_bpsintegerobligatoirepeut être null

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

      • optionsobject[]obligatoire

        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.

        Champs contenus (5)
        • idstring (uuid)obligatoirepeut être null

          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.

        • namestringobligatoire

          Name of the option.

        • price_deltaintegerobligatoire

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

        • group_idstring (uuid)obligatoirepeut être null

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

        • group_namestringobligatoirepeut être null

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

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

Une commande a changé de statut, où que ce soit : tableau de bord, écran de cuisine, application mobile, imprimante de tickets ou API. previous_status indique l'ancien.

Droit requis: orders:read

Champs dans data

  • objectOrderobligatoire

    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.

    Champs contenus (20)
    • objectstringobligatoire

      Always order.

      Valeurs:"order"

    • idstring (uuid)obligatoire

      The order.

    • codestringobligatoire

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

    • external_idstringobligatoirepeut être null

      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.

    • typestringobligatoire

      How the guest gets the order.

      Valeurs:"pickup""delivery""dine_in"

    • sourcestringobligatoire

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

      Valeurs:"storefront""table""app"

    • statusstringobligatoire

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

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

    • created_atstring (date-time)obligatoire

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

    • updated_atstring (date-time)obligatoire

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoirepeut être null

      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)obligatoirepeut être null

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

    • currencystringobligatoire

      ISO 4217, e.g. EUR.

    • amountsobjectobligatoire

      The amounts of the order, in cents.

      Champs contenus (6)
      • subtotalintegerobligatoire

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

      • delivery_feeintegerobligatoire

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

      • service_feeintegerobligatoire

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

      • discountintegerobligatoire

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

      • tipintegerobligatoire

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

      • totalintegerobligatoire

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

    • taxobjectobligatoire

      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.

      Champs contenus (2)
      • includedbooleanobligatoire

        Always true: prices include VAT.

        Valeurs:true

      • linesTaxLine[]obligatoire

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

        Champs contenus (4)
        • rate_bpsintegerobligatoirepeut être null

          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.

        • grossintegerobligatoire

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

        • netintegerobligatoirepeut être null

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

        • taxintegerobligatoirepeut être null

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

    • paymentobjectobligatoire

      How and whether it is paid.

      Champs contenus (3)
      • methodstringobligatoire

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

        Valeurs:"online""on_site"

      • statusstringobligatoire

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

        Valeurs:"paid""open"

      • paid_atstring (date-time)obligatoirepeut être null

        When it was paid; null while open.

    • customerobjectobligatoirepeut être null

      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.

      Champs contenus (2)
      • namestringobligatoirepeut être null

        The guest's name.

      • phonestringobligatoirepeut être null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoirepeut être null

      The delivery address; null unless type is delivery.

      Champs contenus (3)
      • addressstringobligatoirepeut être null

        Street and number.

      • postal_codestringobligatoirepeut être null

        Postal code.

      • citystringobligatoirepeut être null

        City.

    • tableobjectobligatoirepeut être null

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

      Champs contenus (2)
      • idstring (uuid)obligatoire

        The table (GET /tables).

      • labelstringobligatoirepeut être null

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

    • notestringobligatoirepeut être null

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

    • itemsOrderItem[]obligatoire

      The lines.

      Champs contenus (8)
      • idstring (uuid)obligatoire

        The line.

      • product_idstring (uuid)obligatoirepeut être null

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

      • namestringobligatoire

        Name at the time of ordering.

      • quantityintegerobligatoire

        How many.

        min 1

      • unit_priceintegerobligatoire

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

      • line_totalintegerobligatoire

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

      • tax_rate_bpsintegerobligatoirepeut être null

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

      • optionsobject[]obligatoire

        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.

        Champs contenus (5)
        • idstring (uuid)obligatoirepeut être null

          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.

        • namestringobligatoire

          Name of the option.

        • price_deltaintegerobligatoire

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

        • group_idstring (uuid)obligatoirepeut être null

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

        • group_namestringobligatoirepeut être null

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

  • previous_statusstringobligatoire

    The status before this change.

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

Une commande a été annulée ou refusée. Envoyé en plus de order.status_changed.

Droit requis: orders:read

Champs dans data

  • objectOrderobligatoire

    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.

    Champs contenus (20)
    • objectstringobligatoire

      Always order.

      Valeurs:"order"

    • idstring (uuid)obligatoire

      The order.

    • codestringobligatoire

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

    • external_idstringobligatoirepeut être null

      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.

    • typestringobligatoire

      How the guest gets the order.

      Valeurs:"pickup""delivery""dine_in"

    • sourcestringobligatoire

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

      Valeurs:"storefront""table""app"

    • statusstringobligatoire

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

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

    • created_atstring (date-time)obligatoire

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

    • updated_atstring (date-time)obligatoire

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoirepeut être null

      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)obligatoirepeut être null

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

    • currencystringobligatoire

      ISO 4217, e.g. EUR.

    • amountsobjectobligatoire

      The amounts of the order, in cents.

      Champs contenus (6)
      • subtotalintegerobligatoire

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

      • delivery_feeintegerobligatoire

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

      • service_feeintegerobligatoire

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

      • discountintegerobligatoire

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

      • tipintegerobligatoire

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

      • totalintegerobligatoire

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

    • taxobjectobligatoire

      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.

      Champs contenus (2)
      • includedbooleanobligatoire

        Always true: prices include VAT.

        Valeurs:true

      • linesTaxLine[]obligatoire

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

        Champs contenus (4)
        • rate_bpsintegerobligatoirepeut être null

          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.

        • grossintegerobligatoire

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

        • netintegerobligatoirepeut être null

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

        • taxintegerobligatoirepeut être null

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

    • paymentobjectobligatoire

      How and whether it is paid.

      Champs contenus (3)
      • methodstringobligatoire

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

        Valeurs:"online""on_site"

      • statusstringobligatoire

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

        Valeurs:"paid""open"

      • paid_atstring (date-time)obligatoirepeut être null

        When it was paid; null while open.

    • customerobjectobligatoirepeut être null

      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.

      Champs contenus (2)
      • namestringobligatoirepeut être null

        The guest's name.

      • phonestringobligatoirepeut être null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoirepeut être null

      The delivery address; null unless type is delivery.

      Champs contenus (3)
      • addressstringobligatoirepeut être null

        Street and number.

      • postal_codestringobligatoirepeut être null

        Postal code.

      • citystringobligatoirepeut être null

        City.

    • tableobjectobligatoirepeut être null

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

      Champs contenus (2)
      • idstring (uuid)obligatoire

        The table (GET /tables).

      • labelstringobligatoirepeut être null

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

    • notestringobligatoirepeut être null

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

    • itemsOrderItem[]obligatoire

      The lines.

      Champs contenus (8)
      • idstring (uuid)obligatoire

        The line.

      • product_idstring (uuid)obligatoirepeut être null

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

      • namestringobligatoire

        Name at the time of ordering.

      • quantityintegerobligatoire

        How many.

        min 1

      • unit_priceintegerobligatoire

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

      • line_totalintegerobligatoire

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

      • tax_rate_bpsintegerobligatoirepeut être null

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

      • optionsobject[]obligatoire

        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.

        Champs contenus (5)
        • idstring (uuid)obligatoirepeut être null

          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.

        • namestringobligatoire

          Name of the option.

        • price_deltaintegerobligatoire

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

        • group_idstring (uuid)obligatoirepeut être null

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

        • group_namestringobligatoirepeut être null

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

  • previous_statusstringobligatoire

    The status before the cancellation.

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

Une commande a été payée en ligne : le prestataire de paiement a confirmé le paiement, et la commande existe à partir de là (juste après order.created). Les commandes payées sur place ne sont pas enregistrées comme payées dans Flavoso et ne déclenchent jamais cet événement.

Droit requis: orders:read

Champs dans data

  • objectOrderobligatoire

    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.

    Champs contenus (20)
    • objectstringobligatoire

      Always order.

      Valeurs:"order"

    • idstring (uuid)obligatoire

      The order.

    • codestringobligatoire

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

    • external_idstringobligatoirepeut être null

      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.

    • typestringobligatoire

      How the guest gets the order.

      Valeurs:"pickup""delivery""dine_in"

    • sourcestringobligatoire

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

      Valeurs:"storefront""table""app"

    • statusstringobligatoire

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

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

    • created_atstring (date-time)obligatoire

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

    • updated_atstring (date-time)obligatoire

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoirepeut être null

      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)obligatoirepeut être null

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

    • currencystringobligatoire

      ISO 4217, e.g. EUR.

    • amountsobjectobligatoire

      The amounts of the order, in cents.

      Champs contenus (6)
      • subtotalintegerobligatoire

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

      • delivery_feeintegerobligatoire

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

      • service_feeintegerobligatoire

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

      • discountintegerobligatoire

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

      • tipintegerobligatoire

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

      • totalintegerobligatoire

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

    • taxobjectobligatoire

      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.

      Champs contenus (2)
      • includedbooleanobligatoire

        Always true: prices include VAT.

        Valeurs:true

      • linesTaxLine[]obligatoire

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

        Champs contenus (4)
        • rate_bpsintegerobligatoirepeut être null

          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.

        • grossintegerobligatoire

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

        • netintegerobligatoirepeut être null

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

        • taxintegerobligatoirepeut être null

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

    • paymentobjectobligatoire

      How and whether it is paid.

      Champs contenus (3)
      • methodstringobligatoire

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

        Valeurs:"online""on_site"

      • statusstringobligatoire

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

        Valeurs:"paid""open"

      • paid_atstring (date-time)obligatoirepeut être null

        When it was paid; null while open.

    • customerobjectobligatoirepeut être null

      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.

      Champs contenus (2)
      • namestringobligatoirepeut être null

        The guest's name.

      • phonestringobligatoirepeut être null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoirepeut être null

      The delivery address; null unless type is delivery.

      Champs contenus (3)
      • addressstringobligatoirepeut être null

        Street and number.

      • postal_codestringobligatoirepeut être null

        Postal code.

      • citystringobligatoirepeut être null

        City.

    • tableobjectobligatoirepeut être null

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

      Champs contenus (2)
      • idstring (uuid)obligatoire

        The table (GET /tables).

      • labelstringobligatoirepeut être null

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

    • notestringobligatoirepeut être null

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

    • itemsOrderItem[]obligatoire

      The lines.

      Champs contenus (8)
      • idstring (uuid)obligatoire

        The line.

      • product_idstring (uuid)obligatoirepeut être null

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

      • namestringobligatoire

        Name at the time of ordering.

      • quantityintegerobligatoire

        How many.

        min 1

      • unit_priceintegerobligatoire

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

      • line_totalintegerobligatoire

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

      • tax_rate_bpsintegerobligatoirepeut être null

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

      • optionsobject[]obligatoire

        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.

        Champs contenus (5)
        • idstring (uuid)obligatoirepeut être null

          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.

        • namestringobligatoire

          Name of the option.

        • price_deltaintegerobligatoire

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

        • group_idstring (uuid)obligatoirepeut être null

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

        • group_namestringobligatoirepeut être null

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

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

Réservations

reservation.created

Une nouvelle réservation a été créée, en ligne par le client ou par l'équipe.

Droit requis: reservations:read

Champs dans data

  • objectReservationobligatoire

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

    Champs contenus (14)
    • objectstringobligatoire

      Always reservation.

      Valeurs:"reservation"

    • idstring (uuid)obligatoire

      The reservation.

    • codestringobligatoire

      Short code the guest sees.

    • statusstringobligatoire

      pending is a request the restaurant still has to confirm.

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

    • starts_atstring (date-time)obligatoire

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

    • duration_minutesintegerobligatoire

      How long the table is held.

    • party_sizeintegerobligatoire

      Number of guests.

    • table_idsstring (uuid)[]obligatoire

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

    • sourcestringobligatoire

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

      Valeurs:"guest""staff""api"

    • guest_namestringobligatoirepeut être null

      The guest's name.

    • notestringobligatoirepeut être null

      The guest's wish.

    • created_atstring (date-time)obligatoire

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

    • updated_atstring (date-time)obligatoire

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)obligatoirepeut être null

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

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

Le statut, l'heure, le nombre de personnes, la durée, les tables ou la remarque d'une réservation ont changé ; changed indique lesquels. Quand l'établissement supprime une réservation, un dernier événement arrive avec changed: ["deleted"] et deleted_at ; ensuite, elle répond 404.

Droit requis: reservations:read

Champs dans data

  • objectReservationobligatoire

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

    Champs contenus (14)
    • objectstringobligatoire

      Always reservation.

      Valeurs:"reservation"

    • idstring (uuid)obligatoire

      The reservation.

    • codestringobligatoire

      Short code the guest sees.

    • statusstringobligatoire

      pending is a request the restaurant still has to confirm.

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

    • starts_atstring (date-time)obligatoire

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

    • duration_minutesintegerobligatoire

      How long the table is held.

    • party_sizeintegerobligatoire

      Number of guests.

    • table_idsstring (uuid)[]obligatoire

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

    • sourcestringobligatoire

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

      Valeurs:"guest""staff""api"

    • guest_namestringobligatoirepeut être null

      The guest's name.

    • notestringobligatoirepeut être null

      The guest's wish.

    • created_atstring (date-time)obligatoire

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

    • updated_atstring (date-time)obligatoire

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)obligatoirepeut être null

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

  • previous_statusstringpeut être null

    The status before this change.

  • changedstring[]obligatoire

    The fields this change touched.

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

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

Établissement

store.paused

La prise de commandes a été mise en pause, jusqu'à paused_until ; object est l'établissement, comme dans store.updated. Quand la pause se termine d'elle-même, aucun événement distinct n'est envoyé.

Droit requis: store:read

Champs dans data

  • objectStoreobligatoire

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

    Champs contenus (22)
    • objectstringobligatoire

      Always store.

      Valeurs:"store"

    • idstring (uuid)obligatoire

      The restaurant.

    • namestringobligatoire

      Name.

    • slugstringobligatoire

      Its address: <slug>.flavoso.com.

    • timezonestringobligatoire

      IANA time zone of all local times.

    • currencystringobligatoire

      ISO 4217.

    • statusstringobligatoire

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

      Valeurs:"open""closed""paused"

    • paused_untilstring (date-time)obligatoirepeut être null

      End of the running pause; null without one.

    • pause_notestringobligatoirepeut être null

      Reason of the running pause.

    • next_opening_atstring (date-time)obligatoirepeut être null

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

    • preordersbooleanobligatoire

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

    • order_typesobjectobligatoire

      Which order types guests can choose.

      Champs contenus (3)
      • pickupbooleanobligatoire

        Pickup.

      • deliverybooleanobligatoire

        Delivery.

      • dine_inbooleanobligatoire

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

    • order_statusesstring[]obligatoire

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

    • lead_timesobjectobligatoire

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

      Champs contenus (2)
      • pickup_minutesintegerobligatoire

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerobligatoire

        Minutes until delivery, 0 to 360.

    • min_orderintegerobligatoire

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

    • always_openbooleanobligatoire

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

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

      Champs contenus (3)
      • weekdayintegerobligatoire

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatoire

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

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

      • closestringobligatoire

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

      Weekly delivery windows; empty means delivery follows opening_hours.

      Champs contenus (3)
      • weekdayintegerobligatoire

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatoire

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

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

      • closestringobligatoire

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

      Upcoming special days (today and later).

      Champs contenus (5)
      • objectstringobligatoire

        Always closure.

        Valeurs:"closure"

      • datestring (date)obligatoire

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

      • closedbooleanobligatoire

        Closed all day.

      • hoursTimeWindow[]obligatoire

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

        Champs contenus (2)
        • openstringobligatoire

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

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

        • closestringobligatoire

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

      • notestringobligatoirepeut être null

        Note, e.g. the reason.

    • contactobjectobligatoire

      Public contact details.

      Champs contenus (3)
      • phonestringobligatoirepeut être null

        Phone.

      • emailstringobligatoirepeut être null

        E-mail.

      • websitestringobligatoirepeut être null

        Website.

    • addressobjectobligatoirepeut être null

      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.

      Champs contenus (4)
      • linestringobligatoirepeut être null

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

      • postal_codestringobligatoirepeut être null

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

      • citystringobligatoirepeut être null

        City, when it can be read from the address.

      • countrystringobligatoirepeut être null

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

    • locationobjectobligatoirepeut être null

      Coordinates; null when not set.

      Champs contenus (2)
      • latnumberobligatoire

        Latitude.

      • lonnumberobligatoire

        Longitude.

  • paused_untilstring (date-time)obligatoire

    When ordering resumes by itself.

  • notestringobligatoirepeut être null

    The reason, if given.

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

Une pause en cours a été levée avant son terme ; object est l'établissement.

Droit requis: store:read

Champs dans data

  • objectStoreobligatoire

    The store when the event was first read.

    Champs contenus (22)
    • objectstringobligatoire

      Always store.

      Valeurs:"store"

    • idstring (uuid)obligatoire

      The restaurant.

    • namestringobligatoire

      Name.

    • slugstringobligatoire

      Its address: <slug>.flavoso.com.

    • timezonestringobligatoire

      IANA time zone of all local times.

    • currencystringobligatoire

      ISO 4217.

    • statusstringobligatoire

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

      Valeurs:"open""closed""paused"

    • paused_untilstring (date-time)obligatoirepeut être null

      End of the running pause; null without one.

    • pause_notestringobligatoirepeut être null

      Reason of the running pause.

    • next_opening_atstring (date-time)obligatoirepeut être null

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

    • preordersbooleanobligatoire

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

    • order_typesobjectobligatoire

      Which order types guests can choose.

      Champs contenus (3)
      • pickupbooleanobligatoire

        Pickup.

      • deliverybooleanobligatoire

        Delivery.

      • dine_inbooleanobligatoire

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

    • order_statusesstring[]obligatoire

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

    • lead_timesobjectobligatoire

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

      Champs contenus (2)
      • pickup_minutesintegerobligatoire

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerobligatoire

        Minutes until delivery, 0 to 360.

    • min_orderintegerobligatoire

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

    • always_openbooleanobligatoire

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

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

      Champs contenus (3)
      • weekdayintegerobligatoire

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatoire

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

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

      • closestringobligatoire

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

      Weekly delivery windows; empty means delivery follows opening_hours.

      Champs contenus (3)
      • weekdayintegerobligatoire

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatoire

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

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

      • closestringobligatoire

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

      Upcoming special days (today and later).

      Champs contenus (5)
      • objectstringobligatoire

        Always closure.

        Valeurs:"closure"

      • datestring (date)obligatoire

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

      • closedbooleanobligatoire

        Closed all day.

      • hoursTimeWindow[]obligatoire

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

        Champs contenus (2)
        • openstringobligatoire

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

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

        • closestringobligatoire

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

      • notestringobligatoirepeut être null

        Note, e.g. the reason.

    • contactobjectobligatoire

      Public contact details.

      Champs contenus (3)
      • phonestringobligatoirepeut être null

        Phone.

      • emailstringobligatoirepeut être null

        E-mail.

      • websitestringobligatoirepeut être null

        Website.

    • addressobjectobligatoirepeut être null

      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.

      Champs contenus (4)
      • linestringobligatoirepeut être null

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

      • postal_codestringobligatoirepeut être null

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

      • citystringobligatoirepeut être null

        City, when it can be read from the address.

      • countrystringobligatoirepeut être null

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

    • locationobjectobligatoirepeut être null

      Coordinates; null when not set.

      Champs contenus (2)
      • latnumberobligatoire

        Latitude.

      • lonnumberobligatoire

        Longitude.

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

Les horaires d'ouverture, les jours particuliers, les délais de préparation, les modes de commande, le minimum de commande ou les statuts utilisés par l'établissement (order_statuses) ont changé ; changed indique lesquels.

Droit requis: store:read

Champs dans data

  • objectStoreobligatoire

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

    Champs contenus (22)
    • objectstringobligatoire

      Always store.

      Valeurs:"store"

    • idstring (uuid)obligatoire

      The restaurant.

    • namestringobligatoire

      Name.

    • slugstringobligatoire

      Its address: <slug>.flavoso.com.

    • timezonestringobligatoire

      IANA time zone of all local times.

    • currencystringobligatoire

      ISO 4217.

    • statusstringobligatoire

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

      Valeurs:"open""closed""paused"

    • paused_untilstring (date-time)obligatoirepeut être null

      End of the running pause; null without one.

    • pause_notestringobligatoirepeut être null

      Reason of the running pause.

    • next_opening_atstring (date-time)obligatoirepeut être null

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

    • preordersbooleanobligatoire

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

    • order_typesobjectobligatoire

      Which order types guests can choose.

      Champs contenus (3)
      • pickupbooleanobligatoire

        Pickup.

      • deliverybooleanobligatoire

        Delivery.

      • dine_inbooleanobligatoire

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

    • order_statusesstring[]obligatoire

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

    • lead_timesobjectobligatoire

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

      Champs contenus (2)
      • pickup_minutesintegerobligatoire

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerobligatoire

        Minutes until delivery, 0 to 360.

    • min_orderintegerobligatoire

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

    • always_openbooleanobligatoire

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

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

      Champs contenus (3)
      • weekdayintegerobligatoire

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatoire

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

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

      • closestringobligatoire

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

      Weekly delivery windows; empty means delivery follows opening_hours.

      Champs contenus (3)
      • weekdayintegerobligatoire

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatoire

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

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

      • closestringobligatoire

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

      Upcoming special days (today and later).

      Champs contenus (5)
      • objectstringobligatoire

        Always closure.

        Valeurs:"closure"

      • datestring (date)obligatoire

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

      • closedbooleanobligatoire

        Closed all day.

      • hoursTimeWindow[]obligatoire

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

        Champs contenus (2)
        • openstringobligatoire

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

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

        • closestringobligatoire

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

      • notestringobligatoirepeut être null

        Note, e.g. the reason.

    • contactobjectobligatoire

      Public contact details.

      Champs contenus (3)
      • phonestringobligatoirepeut être null

        Phone.

      • emailstringobligatoirepeut être null

        E-mail.

      • websitestringobligatoirepeut être null

        Website.

    • addressobjectobligatoirepeut être null

      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.

      Champs contenus (4)
      • linestringobligatoirepeut être null

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

      • postal_codestringobligatoirepeut être null

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

      • citystringobligatoirepeut être null

        City, when it can be read from the address.

      • countrystringobligatoirepeut être null

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

    • locationobjectobligatoirepeut être null

      Coordinates; null when not set.

      Champs contenus (2)
      • latnumberobligatoire

        Latitude.

      • lonnumberobligatoire

        Longitude.

  • changedstring[]obligatoire

    The Store fields this change touched.

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

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

Connexion

app.connected

Un établissement a connecté votre application, ou l'a connectée à nouveau après la fin de la connexion.

Droit requis: aucun, seulement la connexion elle-même

Champs dans data

  • objectConnectionSummaryobligatoire

    The connection in app.* events.

    Champs contenus (5)
    • objectstringobligatoire

      Always connection.

      Valeurs:"connection"

    • idstring (uuid)obligatoire

      The connection.

    • scopesstring[]obligatoire

      The permissions the restaurant granted.

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

    • created_atstring (date-time)obligatoire

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

    • revoked_atstring (date-time)obligatoirepeut être null

      When the connection ended; null while it is active.

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

Les droits d'une connexion existante ont changé, parce que le propriétaire a connecté à nouveau votre application avec d'autres droits. previous_scopes contient les anciens.

Droit requis: aucun, seulement la connexion elle-même

Champs dans data

  • objectConnectionSummaryobligatoire

    The connection in app.* events.

    Champs contenus (5)
    • objectstringobligatoire

      Always connection.

      Valeurs:"connection"

    • idstring (uuid)obligatoire

      The connection.

    • scopesstring[]obligatoire

      The permissions the restaurant granted.

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

    • created_atstring (date-time)obligatoire

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

    • revoked_atstring (date-time)obligatoirepeut être null

      When the connection ended; null while it is active.

  • previous_scopesstring[]obligatoire

    The permissions before this change.

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

La connexion à un établissement a pris fin : le propriétaire a déconnecté l'application, votre application s'est déconnectée (DELETE /connection) ou Flavoso y a mis fin. reason indique qui. Ensuite, plus aucun jeton de cette connexion ne fonctionne ; c'est pourquoi il n'arrive jamais via GET /events.

Droit requis: aucun, seulement la connexion elle-même

Champs dans data

  • objectConnectionSummaryobligatoire

    The connection in app.* events.

    Champs contenus (5)
    • objectstringobligatoire

      Always connection.

      Valeurs:"connection"

    • idstring (uuid)obligatoire

      The connection.

    • scopesstring[]obligatoire

      The permissions the restaurant granted.

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

    • created_atstring (date-time)obligatoire

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

    • revoked_atstring (date-time)obligatoirepeut être null

      When the connection ended; null while it is active.

  • reasonstringobligatoire

    Who ended the connection.

    Valeurs:"owner""app""admin"

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

Uniquement via « Envoyer un événement de test » dans la console. N'est jamais créé de lui-même.

Droit requis: aucun, seulement la connexion elle-même

Champs dans data

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

Une question reste ouverte ? Écrivez à support@flavoso.com en indiquant l'identifiant de X-Request-Id. Il nous permet de retrouver votre requête dans le journal.