API de FlavosoWebhooks y eventosTipos de eventos

Tipos de eventos

Cada tipo de evento con su descripción, el permiso necesario, los campos en data y un sobre de ejemplo.

Visión general

Un evento se produce exactamente una vez por cambio, sin importar si ocurrió en el panel, en la pantalla de cocina, en la app móvil, en la impresora de tickets o a través de la API. Qué tipos recibe tu app lo eliges en la consola; en GET /events, con types.

Tu programa debe ignorar los tipos que no conozca.

EventosPermiso necesario
order.*orders:read
reservation.*reservations:read
menu.*menu:read
store.*store:read
app.*ninguno, solo la propia conexión

Pedidos

order.created

Ha llegado un pedido nuevo: de inmediato con pago en el local, con pago online en cuanto se confirma el pago. Exactamente una vez por pedido.

Permiso necesario: orders:read

Campos en data

  • objectOrderobligatorio

    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.

    Campos anidados (20)
    • objectstringobligatorio

      Always order.

      Valores:"order"

    • idstring (uuid)obligatorio

      The order.

    • codestringobligatorio

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

    • external_idstringobligatoriopuede ser 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.

    • typestringobligatorio

      How the guest gets the order.

      Valores:"pickup""delivery""dine_in"

    • sourcestringobligatorio

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

      Valores:"storefront""table""app"

    • statusstringobligatorio

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

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

    • created_atstring (date-time)obligatorio

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

    • updated_atstring (date-time)obligatorio

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoriopuede ser 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)obligatoriopuede ser null

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

    • currencystringobligatorio

      ISO 4217, e.g. EUR.

    • amountsobjectobligatorio

      The amounts of the order, in cents.

      Campos anidados (6)
      • subtotalintegerobligatorio

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

      • delivery_feeintegerobligatorio

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

      • service_feeintegerobligatorio

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

      • discountintegerobligatorio

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

      • tipintegerobligatorio

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

      • totalintegerobligatorio

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

    • taxobjectobligatorio

      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.

      Campos anidados (2)
      • includedbooleanobligatorio

        Always true: prices include VAT.

        Valores:true

      • linesTaxLine[]obligatorio

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

        Campos anidados (4)
        • rate_bpsintegerobligatoriopuede ser 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.

        • grossintegerobligatorio

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

        • netintegerobligatoriopuede ser null

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

        • taxintegerobligatoriopuede ser null

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

    • paymentobjectobligatorio

      How and whether it is paid.

      Campos anidados (3)
      • methodstringobligatorio

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

        Valores:"online""on_site"

      • statusstringobligatorio

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

        Valores:"paid""open"

      • paid_atstring (date-time)obligatoriopuede ser null

        When it was paid; null while open.

    • customerobjectobligatoriopuede ser 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.

      Campos anidados (2)
      • namestringobligatoriopuede ser null

        The guest's name.

      • phonestringobligatoriopuede ser null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoriopuede ser null

      The delivery address; null unless type is delivery.

      Campos anidados (3)
      • addressstringobligatoriopuede ser null

        Street and number.

      • postal_codestringobligatoriopuede ser null

        Postal code.

      • citystringobligatoriopuede ser null

        City.

    • tableobjectobligatoriopuede ser null

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

      Campos anidados (2)
      • idstring (uuid)obligatorio

        The table (GET /tables).

      • labelstringobligatoriopuede ser null

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

    • notestringobligatoriopuede ser null

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

    • itemsOrderItem[]obligatorio

      The lines.

      Campos anidados (8)
      • idstring (uuid)obligatorio

        The line.

      • product_idstring (uuid)obligatoriopuede ser null

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

      • namestringobligatorio

        Name at the time of ordering.

      • quantityintegerobligatorio

        How many.

        min 1

      • unit_priceintegerobligatorio

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

      • line_totalintegerobligatorio

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

      • tax_rate_bpsintegerobligatoriopuede ser null

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

      • optionsobject[]obligatorio

        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.

        Campos anidados (5)
        • idstring (uuid)obligatoriopuede ser 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.

        • namestringobligatorio

          Name of the option.

        • price_deltaintegerobligatorio

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

        • group_idstring (uuid)obligatoriopuede ser null

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

        • group_namestringobligatoriopuede ser null

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

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

Un pedido ha cambiado de estado, sin importar dónde: panel, pantalla de cocina, app móvil, impresora de tickets o API. previous_status indica el anterior.

Permiso necesario: orders:read

Campos en data

  • objectOrderobligatorio

    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.

    Campos anidados (20)
    • objectstringobligatorio

      Always order.

      Valores:"order"

    • idstring (uuid)obligatorio

      The order.

    • codestringobligatorio

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

    • external_idstringobligatoriopuede ser 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.

    • typestringobligatorio

      How the guest gets the order.

      Valores:"pickup""delivery""dine_in"

    • sourcestringobligatorio

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

      Valores:"storefront""table""app"

    • statusstringobligatorio

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

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

    • created_atstring (date-time)obligatorio

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

    • updated_atstring (date-time)obligatorio

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoriopuede ser 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)obligatoriopuede ser null

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

    • currencystringobligatorio

      ISO 4217, e.g. EUR.

    • amountsobjectobligatorio

      The amounts of the order, in cents.

      Campos anidados (6)
      • subtotalintegerobligatorio

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

      • delivery_feeintegerobligatorio

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

      • service_feeintegerobligatorio

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

      • discountintegerobligatorio

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

      • tipintegerobligatorio

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

      • totalintegerobligatorio

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

    • taxobjectobligatorio

      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.

      Campos anidados (2)
      • includedbooleanobligatorio

        Always true: prices include VAT.

        Valores:true

      • linesTaxLine[]obligatorio

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

        Campos anidados (4)
        • rate_bpsintegerobligatoriopuede ser 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.

        • grossintegerobligatorio

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

        • netintegerobligatoriopuede ser null

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

        • taxintegerobligatoriopuede ser null

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

    • paymentobjectobligatorio

      How and whether it is paid.

      Campos anidados (3)
      • methodstringobligatorio

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

        Valores:"online""on_site"

      • statusstringobligatorio

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

        Valores:"paid""open"

      • paid_atstring (date-time)obligatoriopuede ser null

        When it was paid; null while open.

    • customerobjectobligatoriopuede ser 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.

      Campos anidados (2)
      • namestringobligatoriopuede ser null

        The guest's name.

      • phonestringobligatoriopuede ser null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoriopuede ser null

      The delivery address; null unless type is delivery.

      Campos anidados (3)
      • addressstringobligatoriopuede ser null

        Street and number.

      • postal_codestringobligatoriopuede ser null

        Postal code.

      • citystringobligatoriopuede ser null

        City.

    • tableobjectobligatoriopuede ser null

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

      Campos anidados (2)
      • idstring (uuid)obligatorio

        The table (GET /tables).

      • labelstringobligatoriopuede ser null

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

    • notestringobligatoriopuede ser null

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

    • itemsOrderItem[]obligatorio

      The lines.

      Campos anidados (8)
      • idstring (uuid)obligatorio

        The line.

      • product_idstring (uuid)obligatoriopuede ser null

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

      • namestringobligatorio

        Name at the time of ordering.

      • quantityintegerobligatorio

        How many.

        min 1

      • unit_priceintegerobligatorio

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

      • line_totalintegerobligatorio

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

      • tax_rate_bpsintegerobligatoriopuede ser null

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

      • optionsobject[]obligatorio

        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.

        Campos anidados (5)
        • idstring (uuid)obligatoriopuede ser 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.

        • namestringobligatorio

          Name of the option.

        • price_deltaintegerobligatorio

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

        • group_idstring (uuid)obligatoriopuede ser null

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

        • group_namestringobligatoriopuede ser null

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

  • previous_statusstringobligatorio

    The status before this change.

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

Un pedido se ha cancelado o rechazado. Llega además de order.status_changed.

Permiso necesario: orders:read

Campos en data

  • objectOrderobligatorio

    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.

    Campos anidados (20)
    • objectstringobligatorio

      Always order.

      Valores:"order"

    • idstring (uuid)obligatorio

      The order.

    • codestringobligatorio

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

    • external_idstringobligatoriopuede ser 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.

    • typestringobligatorio

      How the guest gets the order.

      Valores:"pickup""delivery""dine_in"

    • sourcestringobligatorio

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

      Valores:"storefront""table""app"

    • statusstringobligatorio

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

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

    • created_atstring (date-time)obligatorio

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

    • updated_atstring (date-time)obligatorio

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoriopuede ser 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)obligatoriopuede ser null

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

    • currencystringobligatorio

      ISO 4217, e.g. EUR.

    • amountsobjectobligatorio

      The amounts of the order, in cents.

      Campos anidados (6)
      • subtotalintegerobligatorio

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

      • delivery_feeintegerobligatorio

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

      • service_feeintegerobligatorio

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

      • discountintegerobligatorio

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

      • tipintegerobligatorio

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

      • totalintegerobligatorio

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

    • taxobjectobligatorio

      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.

      Campos anidados (2)
      • includedbooleanobligatorio

        Always true: prices include VAT.

        Valores:true

      • linesTaxLine[]obligatorio

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

        Campos anidados (4)
        • rate_bpsintegerobligatoriopuede ser 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.

        • grossintegerobligatorio

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

        • netintegerobligatoriopuede ser null

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

        • taxintegerobligatoriopuede ser null

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

    • paymentobjectobligatorio

      How and whether it is paid.

      Campos anidados (3)
      • methodstringobligatorio

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

        Valores:"online""on_site"

      • statusstringobligatorio

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

        Valores:"paid""open"

      • paid_atstring (date-time)obligatoriopuede ser null

        When it was paid; null while open.

    • customerobjectobligatoriopuede ser 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.

      Campos anidados (2)
      • namestringobligatoriopuede ser null

        The guest's name.

      • phonestringobligatoriopuede ser null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoriopuede ser null

      The delivery address; null unless type is delivery.

      Campos anidados (3)
      • addressstringobligatoriopuede ser null

        Street and number.

      • postal_codestringobligatoriopuede ser null

        Postal code.

      • citystringobligatoriopuede ser null

        City.

    • tableobjectobligatoriopuede ser null

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

      Campos anidados (2)
      • idstring (uuid)obligatorio

        The table (GET /tables).

      • labelstringobligatoriopuede ser null

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

    • notestringobligatoriopuede ser null

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

    • itemsOrderItem[]obligatorio

      The lines.

      Campos anidados (8)
      • idstring (uuid)obligatorio

        The line.

      • product_idstring (uuid)obligatoriopuede ser null

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

      • namestringobligatorio

        Name at the time of ordering.

      • quantityintegerobligatorio

        How many.

        min 1

      • unit_priceintegerobligatorio

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

      • line_totalintegerobligatorio

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

      • tax_rate_bpsintegerobligatoriopuede ser null

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

      • optionsobject[]obligatorio

        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.

        Campos anidados (5)
        • idstring (uuid)obligatoriopuede ser 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.

        • namestringobligatorio

          Name of the option.

        • price_deltaintegerobligatorio

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

        • group_idstring (uuid)obligatoriopuede ser null

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

        • group_namestringobligatoriopuede ser null

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

  • previous_statusstringobligatorio

    The status before the cancellation.

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

Un pedido se ha pagado online: el proveedor de pagos ha confirmado el pago y el pedido existe a partir de ese momento (justo después de order.created). Los pedidos pagados en el local no se registran como pagados en Flavoso y nunca generan este evento.

Permiso necesario: orders:read

Campos en data

  • objectOrderobligatorio

    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.

    Campos anidados (20)
    • objectstringobligatorio

      Always order.

      Valores:"order"

    • idstring (uuid)obligatorio

      The order.

    • codestringobligatorio

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

    • external_idstringobligatoriopuede ser 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.

    • typestringobligatorio

      How the guest gets the order.

      Valores:"pickup""delivery""dine_in"

    • sourcestringobligatorio

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

      Valores:"storefront""table""app"

    • statusstringobligatorio

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

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

    • created_atstring (date-time)obligatorio

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

    • updated_atstring (date-time)obligatorio

      Last change. ISO 8601 in UTC (Z).

    • acknowledged_atstring (date-time)obligatoriopuede ser 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)obligatoriopuede ser null

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

    • currencystringobligatorio

      ISO 4217, e.g. EUR.

    • amountsobjectobligatorio

      The amounts of the order, in cents.

      Campos anidados (6)
      • subtotalintegerobligatorio

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

      • delivery_feeintegerobligatorio

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

      • service_feeintegerobligatorio

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

      • discountintegerobligatorio

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

      • tipintegerobligatorio

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

      • totalintegerobligatorio

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

    • taxobjectobligatorio

      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.

      Campos anidados (2)
      • includedbooleanobligatorio

        Always true: prices include VAT.

        Valores:true

      • linesTaxLine[]obligatorio

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

        Campos anidados (4)
        • rate_bpsintegerobligatoriopuede ser 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.

        • grossintegerobligatorio

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

        • netintegerobligatoriopuede ser null

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

        • taxintegerobligatoriopuede ser null

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

    • paymentobjectobligatorio

      How and whether it is paid.

      Campos anidados (3)
      • methodstringobligatorio

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

        Valores:"online""on_site"

      • statusstringobligatorio

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

        Valores:"paid""open"

      • paid_atstring (date-time)obligatoriopuede ser null

        When it was paid; null while open.

    • customerobjectobligatoriopuede ser 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.

      Campos anidados (2)
      • namestringobligatoriopuede ser null

        The guest's name.

      • phonestringobligatoriopuede ser null

        Phone for questions; null for dine-in.

    • deliveryobjectobligatoriopuede ser null

      The delivery address; null unless type is delivery.

      Campos anidados (3)
      • addressstringobligatoriopuede ser null

        Street and number.

      • postal_codestringobligatoriopuede ser null

        Postal code.

      • citystringobligatoriopuede ser null

        City.

    • tableobjectobligatoriopuede ser null

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

      Campos anidados (2)
      • idstring (uuid)obligatorio

        The table (GET /tables).

      • labelstringobligatoriopuede ser null

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

    • notestringobligatoriopuede ser null

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

    • itemsOrderItem[]obligatorio

      The lines.

      Campos anidados (8)
      • idstring (uuid)obligatorio

        The line.

      • product_idstring (uuid)obligatoriopuede ser null

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

      • namestringobligatorio

        Name at the time of ordering.

      • quantityintegerobligatorio

        How many.

        min 1

      • unit_priceintegerobligatorio

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

      • line_totalintegerobligatorio

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

      • tax_rate_bpsintegerobligatoriopuede ser null

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

      • optionsobject[]obligatorio

        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.

        Campos anidados (5)
        • idstring (uuid)obligatoriopuede ser 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.

        • namestringobligatorio

          Name of the option.

        • price_deltaintegerobligatorio

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

        • group_idstring (uuid)obligatoriopuede ser null

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

        • group_namestringobligatoriopuede ser null

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

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

Reservas

reservation.created

Hay una reserva nueva, hecha online por el cliente o creada por el equipo.

Permiso necesario: reservations:read

Campos en data

  • objectReservationobligatorio

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

    Campos anidados (14)
    • objectstringobligatorio

      Always reservation.

      Valores:"reservation"

    • idstring (uuid)obligatorio

      The reservation.

    • codestringobligatorio

      Short code the guest sees.

    • statusstringobligatorio

      pending is a request the restaurant still has to confirm.

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

    • starts_atstring (date-time)obligatorio

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

    • duration_minutesintegerobligatorio

      How long the table is held.

    • party_sizeintegerobligatorio

      Number of guests.

    • table_idsstring (uuid)[]obligatorio

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

    • sourcestringobligatorio

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

      Valores:"guest""staff""api"

    • guest_namestringobligatoriopuede ser null

      The guest's name.

    • notestringobligatoriopuede ser null

      The guest's wish.

    • created_atstring (date-time)obligatorio

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

    • updated_atstring (date-time)obligatorio

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)obligatoriopuede ser null

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

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

El estado, la hora, el número de personas, la duración, las mesas o la nota de una reserva han cambiado; changed indica qué. Si el negocio borra una reserva, llega un último evento con changed: ["deleted"] y deleted_at; después, la reserva responde con 404.

Permiso necesario: reservations:read

Campos en data

  • objectReservationobligatorio

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

    Campos anidados (14)
    • objectstringobligatorio

      Always reservation.

      Valores:"reservation"

    • idstring (uuid)obligatorio

      The reservation.

    • codestringobligatorio

      Short code the guest sees.

    • statusstringobligatorio

      pending is a request the restaurant still has to confirm.

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

    • starts_atstring (date-time)obligatorio

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

    • duration_minutesintegerobligatorio

      How long the table is held.

    • party_sizeintegerobligatorio

      Number of guests.

    • table_idsstring (uuid)[]obligatorio

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

    • sourcestringobligatorio

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

      Valores:"guest""staff""api"

    • guest_namestringobligatoriopuede ser null

      The guest's name.

    • notestringobligatoriopuede ser null

      The guest's wish.

    • created_atstring (date-time)obligatorio

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

    • updated_atstring (date-time)obligatorio

      Last change. ISO 8601 in UTC (Z).

    • deleted_atstring (date-time)obligatoriopuede ser null

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

  • previous_statusstringpuede ser null

    The status before this change.

  • changedstring[]obligatorio

    The fields this change touched.

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

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

Negocio

store.paused

Los pedidos online se han pausado hasta paused_until; object es el negocio, como en store.updated. Si la pausa termina sola, no llega ningún evento propio.

Permiso necesario: store:read

Campos en data

  • objectStoreobligatorio

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

    Campos anidados (22)
    • objectstringobligatorio

      Always store.

      Valores:"store"

    • idstring (uuid)obligatorio

      The restaurant.

    • namestringobligatorio

      Name.

    • slugstringobligatorio

      Its address: <slug>.flavoso.com.

    • timezonestringobligatorio

      IANA time zone of all local times.

    • currencystringobligatorio

      ISO 4217.

    • statusstringobligatorio

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

      Valores:"open""closed""paused"

    • paused_untilstring (date-time)obligatoriopuede ser null

      End of the running pause; null without one.

    • pause_notestringobligatoriopuede ser null

      Reason of the running pause.

    • next_opening_atstring (date-time)obligatoriopuede ser null

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

    • preordersbooleanobligatorio

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

    • order_typesobjectobligatorio

      Which order types guests can choose.

      Campos anidados (3)
      • pickupbooleanobligatorio

        Pickup.

      • deliverybooleanobligatorio

        Delivery.

      • dine_inbooleanobligatorio

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

    • order_statusesstring[]obligatorio

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

    • lead_timesobjectobligatorio

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

      Campos anidados (2)
      • pickup_minutesintegerobligatorio

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerobligatorio

        Minutes until delivery, 0 to 360.

    • min_orderintegerobligatorio

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

    • always_openbooleanobligatorio

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

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

      Campos anidados (3)
      • weekdayintegerobligatorio

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatorio

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

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

      • closestringobligatorio

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

      Weekly delivery windows; empty means delivery follows opening_hours.

      Campos anidados (3)
      • weekdayintegerobligatorio

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatorio

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

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

      • closestringobligatorio

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

      Upcoming special days (today and later).

      Campos anidados (5)
      • objectstringobligatorio

        Always closure.

        Valores:"closure"

      • datestring (date)obligatorio

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

      • closedbooleanobligatorio

        Closed all day.

      • hoursTimeWindow[]obligatorio

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

        Campos anidados (2)
        • openstringobligatorio

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

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

        • closestringobligatorio

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

      • notestringobligatoriopuede ser null

        Note, e.g. the reason.

    • contactobjectobligatorio

      Public contact details.

      Campos anidados (3)
      • phonestringobligatoriopuede ser null

        Phone.

      • emailstringobligatoriopuede ser null

        E-mail.

      • websitestringobligatoriopuede ser null

        Website.

    • addressobjectobligatoriopuede ser 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.

      Campos anidados (4)
      • linestringobligatoriopuede ser null

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

      • postal_codestringobligatoriopuede ser null

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

      • citystringobligatoriopuede ser null

        City, when it can be read from the address.

      • countrystringobligatoriopuede ser null

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

    • locationobjectobligatoriopuede ser null

      Coordinates; null when not set.

      Campos anidados (2)
      • latnumberobligatorio

        Latitude.

      • lonnumberobligatorio

        Longitude.

  • paused_untilstring (date-time)obligatorio

    When ordering resumes by itself.

  • notestringobligatoriopuede ser null

    The reason, if given.

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

Una pausa en curso se ha terminado antes de tiempo; object es el negocio.

Permiso necesario: store:read

Campos en data

  • objectStoreobligatorio

    The store when the event was first read.

    Campos anidados (22)
    • objectstringobligatorio

      Always store.

      Valores:"store"

    • idstring (uuid)obligatorio

      The restaurant.

    • namestringobligatorio

      Name.

    • slugstringobligatorio

      Its address: <slug>.flavoso.com.

    • timezonestringobligatorio

      IANA time zone of all local times.

    • currencystringobligatorio

      ISO 4217.

    • statusstringobligatorio

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

      Valores:"open""closed""paused"

    • paused_untilstring (date-time)obligatoriopuede ser null

      End of the running pause; null without one.

    • pause_notestringobligatoriopuede ser null

      Reason of the running pause.

    • next_opening_atstring (date-time)obligatoriopuede ser null

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

    • preordersbooleanobligatorio

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

    • order_typesobjectobligatorio

      Which order types guests can choose.

      Campos anidados (3)
      • pickupbooleanobligatorio

        Pickup.

      • deliverybooleanobligatorio

        Delivery.

      • dine_inbooleanobligatorio

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

    • order_statusesstring[]obligatorio

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

    • lead_timesobjectobligatorio

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

      Campos anidados (2)
      • pickup_minutesintegerobligatorio

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerobligatorio

        Minutes until delivery, 0 to 360.

    • min_orderintegerobligatorio

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

    • always_openbooleanobligatorio

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

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

      Campos anidados (3)
      • weekdayintegerobligatorio

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatorio

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

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

      • closestringobligatorio

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

      Weekly delivery windows; empty means delivery follows opening_hours.

      Campos anidados (3)
      • weekdayintegerobligatorio

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatorio

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

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

      • closestringobligatorio

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

      Upcoming special days (today and later).

      Campos anidados (5)
      • objectstringobligatorio

        Always closure.

        Valores:"closure"

      • datestring (date)obligatorio

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

      • closedbooleanobligatorio

        Closed all day.

      • hoursTimeWindow[]obligatorio

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

        Campos anidados (2)
        • openstringobligatorio

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

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

        • closestringobligatorio

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

      • notestringobligatoriopuede ser null

        Note, e.g. the reason.

    • contactobjectobligatorio

      Public contact details.

      Campos anidados (3)
      • phonestringobligatoriopuede ser null

        Phone.

      • emailstringobligatoriopuede ser null

        E-mail.

      • websitestringobligatoriopuede ser null

        Website.

    • addressobjectobligatoriopuede ser 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.

      Campos anidados (4)
      • linestringobligatoriopuede ser null

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

      • postal_codestringobligatoriopuede ser null

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

      • citystringobligatoriopuede ser null

        City, when it can be read from the address.

      • countrystringobligatoriopuede ser null

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

    • locationobjectobligatoriopuede ser null

      Coordinates; null when not set.

      Campos anidados (2)
      • latnumberobligatorio

        Latitude.

      • lonnumberobligatorio

        Longitude.

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

Los horarios de apertura, los días especiales, los tiempos de preparación, los tipos de pedido, el pedido mínimo o los estados que usa el negocio (order_statuses) han cambiado; changed indica qué.

Permiso necesario: store:read

Campos en data

  • objectStoreobligatorio

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

    Campos anidados (22)
    • objectstringobligatorio

      Always store.

      Valores:"store"

    • idstring (uuid)obligatorio

      The restaurant.

    • namestringobligatorio

      Name.

    • slugstringobligatorio

      Its address: <slug>.flavoso.com.

    • timezonestringobligatorio

      IANA time zone of all local times.

    • currencystringobligatorio

      ISO 4217.

    • statusstringobligatorio

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

      Valores:"open""closed""paused"

    • paused_untilstring (date-time)obligatoriopuede ser null

      End of the running pause; null without one.

    • pause_notestringobligatoriopuede ser null

      Reason of the running pause.

    • next_opening_atstring (date-time)obligatoriopuede ser null

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

    • preordersbooleanobligatorio

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

    • order_typesobjectobligatorio

      Which order types guests can choose.

      Campos anidados (3)
      • pickupbooleanobligatorio

        Pickup.

      • deliverybooleanobligatorio

        Delivery.

      • dine_inbooleanobligatorio

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

    • order_statusesstring[]obligatorio

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

    • lead_timesobjectobligatorio

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

      Campos anidados (2)
      • pickup_minutesintegerobligatorio

        Minutes until pickup, 0 to 240.

      • delivery_minutesintegerobligatorio

        Minutes until delivery, 0 to 360.

    • min_orderintegerobligatorio

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

    • always_openbooleanobligatorio

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

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

      Campos anidados (3)
      • weekdayintegerobligatorio

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatorio

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

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

      • closestringobligatorio

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

      Weekly delivery windows; empty means delivery follows opening_hours.

      Campos anidados (3)
      • weekdayintegerobligatorio

        0 = Monday … 6 = Sunday.

        0 to 6

      • openstringobligatorio

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

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

      • closestringobligatorio

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

      Upcoming special days (today and later).

      Campos anidados (5)
      • objectstringobligatorio

        Always closure.

        Valores:"closure"

      • datestring (date)obligatorio

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

      • closedbooleanobligatorio

        Closed all day.

      • hoursTimeWindow[]obligatorio

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

        Campos anidados (2)
        • openstringobligatorio

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

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

        • closestringobligatorio

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

      • notestringobligatoriopuede ser null

        Note, e.g. the reason.

    • contactobjectobligatorio

      Public contact details.

      Campos anidados (3)
      • phonestringobligatoriopuede ser null

        Phone.

      • emailstringobligatoriopuede ser null

        E-mail.

      • websitestringobligatoriopuede ser null

        Website.

    • addressobjectobligatoriopuede ser 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.

      Campos anidados (4)
      • linestringobligatoriopuede ser null

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

      • postal_codestringobligatoriopuede ser null

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

      • citystringobligatoriopuede ser null

        City, when it can be read from the address.

      • countrystringobligatoriopuede ser null

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

    • locationobjectobligatoriopuede ser null

      Coordinates; null when not set.

      Campos anidados (2)
      • latnumberobligatorio

        Latitude.

      • lonnumberobligatorio

        Longitude.

  • changedstring[]obligatorio

    The Store fields this change touched.

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

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

Conexión

app.connected

Un negocio ha conectado tu app, o la ha vuelto a conectar después de que terminara la conexión.

Permiso necesario: ninguno, solo la propia conexión

Campos en data

  • objectConnectionSummaryobligatorio

    The connection in app.* events.

    Campos anidados (5)
    • objectstringobligatorio

      Always connection.

      Valores:"connection"

    • idstring (uuid)obligatorio

      The connection.

    • scopesstring[]obligatorio

      The permissions the restaurant granted.

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

    • created_atstring (date-time)obligatorio

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

    • revoked_atstring (date-time)obligatoriopuede ser null

      When the connection ended; null while it is active.

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

Los permisos de una conexión existente han cambiado porque el propietario ha vuelto a conectar tu app con otros permisos. previous_scopes indica los anteriores.

Permiso necesario: ninguno, solo la propia conexión

Campos en data

  • objectConnectionSummaryobligatorio

    The connection in app.* events.

    Campos anidados (5)
    • objectstringobligatorio

      Always connection.

      Valores:"connection"

    • idstring (uuid)obligatorio

      The connection.

    • scopesstring[]obligatorio

      The permissions the restaurant granted.

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

    • created_atstring (date-time)obligatorio

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

    • revoked_atstring (date-time)obligatoriopuede ser null

      When the connection ended; null while it is active.

  • previous_scopesstring[]obligatorio

    The permissions before this change.

Ejemplo
{
  "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 conexión con un negocio ha terminado: la desconectó el propietario, tu app (DELETE /connection) o Flavoso. reason indica quién. A partir de ese momento, ningún token de esa conexión es válido; por eso nunca llega a través de GET /events.

Permiso necesario: ninguno, solo la propia conexión

Campos en data

  • objectConnectionSummaryobligatorio

    The connection in app.* events.

    Campos anidados (5)
    • objectstringobligatorio

      Always connection.

      Valores:"connection"

    • idstring (uuid)obligatorio

      The connection.

    • scopesstring[]obligatorio

      The permissions the restaurant granted.

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

    • created_atstring (date-time)obligatorio

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

    • revoked_atstring (date-time)obligatoriopuede ser null

      When the connection ended; null while it is active.

  • reasonstringobligatorio

    Who ended the connection.

    Valores:"owner""app""admin"

Ejemplo
{
  "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"
  }
}

Prueba

ping

Solo con «Enviar un evento de prueba» en la consola. Nunca se produce por sí solo.

Permiso necesario: ninguno, solo la propia conexión

Campos en data

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

¿Algo no ha quedado claro? Escribe a support@flavoso.com e indica el identificador de X-Request-Id. Así podremos encontrar tu solicitud en el registro.