API FlavosoRéférence de l'APIÉvénements

Événements

Les mêmes événements que ceux livrés par webhook, mais récupérés par votre application : pour les caisses sans adresse publique et pour rattraper le retard après une panne. Plus de détails sous Récupérer les événements.

Points de terminaison

List events

get/events

Droit:
tout jeton valide
Offre:
toutes les offres

The events of this restaurant that your connection may see (its read permissions, plus app.* of this connection), oldest first, at most 30 days back. The same events with the same envelope as webhooks, for systems that cannot receive webhooks (a POS in a local network).

Poll with after: pass the next_after of the previous answer and process the events in order. The order never skips an event: an event only appears once everything written before it is complete, so an after you received is safe to keep. Deduplicate on id if you also use webhooks.

A new integration that does not want the past starts with after=latest: the answer has no events, only a next_after that points at the newest event your connection may see, and polling from there delivers everything that happens from now on.

Events are kept for 30 days. An after Flavoso no longer keeps (your system was off for longer) is no error: the list continues with the oldest event still kept and says gap: true. Events may have been missed then; resynchronise with GET /orders?updated_since=… (and the other lists you use).

Test events that check a webhook are never listed: neither ping nor the events sent from the developer console (data.test: true).

Paramètres

NomEmplacementDescription
afterstringqueryThe id of the last event you processed (evt_…), usually the previous next_after. Without it, the list starts with the oldest event Flavoso keeps. latest starts at the newest event (no events in the answer). An id that is no longer kept continues with the oldest kept event and sets gap: true.
typesstringqueryComma-separated event types, or groups with .*: order.created,menu.*.
limitintegerqueryPage size, 1 to 100. Default 50.1 to 100 · default 50

Réponse200

OK

  • objectstringobligatoire

    Always list.

    Valeurs:"list"

  • dataEvent[]obligatoire

    The events.

    Champs contenus (9)
    • idstringobligatoire

      Unique per event (evt_…). Deduplicate on it: a delivery can arrive twice.

    • objectstringobligatoire

      Always event.

      Valeurs:"event"

    • typestringobligatoire

      What happened.

      Valeurs:"order.created""order.status_changed""order.cancelled""order.paid""reservation.created""reservation.updated""menu.category.created""menu.category.updated""menu.category.deleted""menu.product.created""menu.product.updated""menu.product.deleted""menu.option_group.created""menu.option_group.updated""menu.option_group.deleted""menu.option.created""menu.option.updated""menu.option.deleted""menu.synced""store.paused""store.resumed""store.updated""app.connected""app.scopes_changed""app.disconnected""ping"

    • created_atstring (date-time)obligatoire

      When the change happened. ISO 8601 in UTC (Z).

    • api_versionstringobligatoire

      The API version of the envelope.

    • livemodebooleanobligatoire

      false for a developer's test restaurant.

    • tenant_idstring (uuid)obligatoire

      The restaurant the event belongs to.

    • connection_idstring (uuid)obligatoirepeut être null

      Your app's connection to that restaurant. null on a restaurant's own webhooks.

    • dataobjectobligatoire

      The event's data; see the event type under webhooks. 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.

  • has_morebooleanobligatoire

    More events follow right away.

  • next_afterstringobligatoire

    Pass as after in the next request; also when has_more is false (to poll for new events later). Always set: while there are no events yet it is evt_00000000000000000000000000000000, the position before the first event.

  • gapbooleanobligatoire

    true when the after you sent is no longer kept (events live 30 days) and the list continued with the oldest kept event: events may have been missed. Resynchronise with GET /orders?updated_since=… (and the other lists you use). false otherwise.

Erreurs

  • 400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know. param names the field.
  • 401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.
  • 403insufficient_scope, plan_required (with param when an order type is not in the plan) or account_inactive.
  • 429rate_limited: more than 120 requests per minute on this connection. Wait Retry-After seconds.
  • 500server_error. Safe to retry with the same Idempotency-Key.

Tous les codes d'erreur

Requête
curl "https://api.flavoso.com/v1/events" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Réponse
{
  "object": "list",
  "data": [
    {
      "id": "evt_3b1f9c2e8d4a4c1e9f3a2b7d6e8c1a40",
      "object": "event",
      "type": "order.created",
      "created_at": "2026-10-09T17:42:11.214Z",
      "api_version": "2026-10-08",
      "livemode": true,
      "tenant_id": "8a3e5c7d-2f14-4b9e-a6d1-0c4b7e9f2a35",
      "connection_id": "c41d7e2a-9b3f-4e8c-a015-6d2f8b4e7c19",
      "data": {
        "object": {
          "object": "order",
          "id": "5f1c9b2e-8d4a-4c1e-9f3a-2b7d6e8c1a40",
          "code": "K7Q2M9",
          "external_id": null,
          "type": "pickup",
          "source": "storefront",
          "status": "pending",
          "created_at": "2026-10-09T17:42:11.214Z",
          "updated_at": "2026-10-09T17:42:11.214Z",
          "acknowledged_at": null,
          "requested_for": null,
          "currency": "EUR",
          "amounts": {
            "subtotal": 2350,
            "delivery_fee": 0,
            "service_fee": 0,
            "discount": 0,
            "tip": 100,
            "total": 2450
          },
          "tax": {
            "included": true,
            "lines": [
              {
                "rate_bps": 700,
                "gross": 1650,
                "net": 1542,
                "tax": 108
              },
              {
                "rate_bps": 1900,
                "gross": 700,
                "net": 588,
                "tax": 112
              }
            ]
          },
          "payment": {
            "method": "on_site",
            "status": "open",
            "paid_at": null
          },
          "customer": {
            "name": "Alex",
            "phone": "+49 151 23456789"
          },
          "delivery": null,
          "table": null,
          "note": "No onions, please",
          "items": [
            {
              "id": "e9c0ce66-7f7f-42cf-a4bf-7d66f87768c1",
              "product_id": "2d6f8a1c-3e5b-4d7f-9a2c-4e6b8d0f2a46",
              "name": "Pizza Margherita",
              "quantity": 2,
              "unit_price": 825,
              "line_total": 1650,
              "tax_rate_bps": 700,
              "options": [
                {
                  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
                  "name": "Extra cheese",
                  "price_delta": 100,
                  "group_id": "5e4d3c2b-1a09-4f8e-b7d6-c5b4a3928170",
                  "group_name": "Extras"
                }
              ]
            },
            {
              "id": "f1a2b3c4-d5e6-4f70-8a9b-0c1d2e3f4a5b",
              "product_id": "7b9d1f3a-5c7e-4a9b-8d1f-3a5c7e9b1d2f",
              "name": "Cola 0.5 l",
              "quantity": 2,
              "unit_price": 350,
              "line_total": 700,
              "tax_rate_bps": 1900,
              "options": []
            }
          ]
        }
      }
    }
  ],
  "has_more": false,
  "next_after": "evt_3b1f9c2e8d4a4c1e9f3a2b7d6e8c1a40",
  "gap": false
}

Retrieve an event

get/events/{id}

Droit:
tout jeton valide
Offre:
toutes les offres

One event, exactly as a webhook delivers it, with your connection_id. An event of another connection, one your permissions do not cover, a test event (ping, or one sent from the developer console), or one older than 30 days answers 404.

Paramètres

NomEmplacementDescription
idstringobligatoirepathThe event id (evt_ and 32 hex characters).pattern ^evt_[0-9a-f]{32}$

Réponse200

OK

  • idstringobligatoire

    Unique per event (evt_…). Deduplicate on it: a delivery can arrive twice.

  • objectstringobligatoire

    Always event.

    Valeurs:"event"

  • typestringobligatoire

    What happened.

    Valeurs:"order.created""order.status_changed""order.cancelled""order.paid""reservation.created""reservation.updated""menu.category.created""menu.category.updated""menu.category.deleted""menu.product.created""menu.product.updated""menu.product.deleted""menu.option_group.created""menu.option_group.updated""menu.option_group.deleted""menu.option.created""menu.option.updated""menu.option.deleted""menu.synced""store.paused""store.resumed""store.updated""app.connected""app.scopes_changed""app.disconnected""ping"

  • created_atstring (date-time)obligatoire

    When the change happened. ISO 8601 in UTC (Z).

  • api_versionstringobligatoire

    The API version of the envelope.

  • livemodebooleanobligatoire

    false for a developer's test restaurant.

  • tenant_idstring (uuid)obligatoire

    The restaurant the event belongs to.

  • connection_idstring (uuid)obligatoirepeut être null

    Your app's connection to that restaurant. null on a restaurant's own webhooks.

  • dataobjectobligatoire

    The event's data; see the event type under webhooks. 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.

Erreurs

  • 400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know. param names the field.
  • 401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.
  • 403insufficient_scope, plan_required (with param when an order type is not in the plan) or account_inactive.
  • 404not_found: no such object in this restaurant (objects of other restaurants are never found).
  • 429rate_limited: more than 120 requests per minute on this connection. Wait Retry-After seconds.
  • 500server_error. Safe to retry with the same Idempotency-Key.

Tous les codes d'erreur

Requête
curl "https://api.flavoso.com/v1/events/EVENT_ID" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
Réponse
{
  "id": "evt_3b1f9c2e8d4a4c1e9f3a2b7d6e8c1a40",
  "object": "event",
  "type": "order.created",
  "created_at": "2026-10-09T17:42:11.214Z",
  "api_version": "2026-10-08",
  "livemode": true,
  "tenant_id": "8a3e5c7d-2f14-4b9e-a6d1-0c4b7e9f2a35",
  "connection_id": "c41d7e2a-9b3f-4e8c-a015-6d2f8b4e7c19",
  "data": {
    "object": {
      "object": "order",
      "id": "5f1c9b2e-8d4a-4c1e-9f3a-2b7d6e8c1a40",
      "code": "K7Q2M9",
      "external_id": null,
      "type": "pickup",
      "source": "storefront",
      "status": "pending",
      "created_at": "2026-10-09T17:42:11.214Z",
      "updated_at": "2026-10-09T17:42:11.214Z",
      "acknowledged_at": null,
      "requested_for": null,
      "currency": "EUR",
      "amounts": {
        "subtotal": 2350,
        "delivery_fee": 0,
        "service_fee": 0,
        "discount": 0,
        "tip": 100,
        "total": 2450
      },
      "tax": {
        "included": true,
        "lines": [
          {
            "rate_bps": 700,
            "gross": 1650,
            "net": 1542,
            "tax": 108
          },
          {
            "rate_bps": 1900,
            "gross": 700,
            "net": 588,
            "tax": 112
          }
        ]
      },
      "payment": {
        "method": "on_site",
        "status": "open",
        "paid_at": null
      },
      "customer": {
        "name": "Alex",
        "phone": "+49 151 23456789"
      },
      "delivery": null,
      "table": null,
      "note": "No onions, please",
      "items": [
        {
          "id": "e9c0ce66-7f7f-42cf-a4bf-7d66f87768c1",
          "product_id": "2d6f8a1c-3e5b-4d7f-9a2c-4e6b8d0f2a46",
          "name": "Pizza Margherita",
          "quantity": 2,
          "unit_price": 825,
          "line_total": 1650,
          "tax_rate_bps": 700,
          "options": [
            {
              "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
              "name": "Extra cheese",
              "price_delta": 100,
              "group_id": "5e4d3c2b-1a09-4f8e-b7d6-c5b4a3928170",
              "group_name": "Extras"
            }
          ]
        },
        {
          "id": "f1a2b3c4-d5e6-4f70-8a9b-0c1d2e3f4a5b",
          "product_id": "7b9d1f3a-5c7e-4a9b-8d1f-3a5c7e9b1d2f",
          "name": "Cola 0.5 l",
          "quantity": 2,
          "unit_price": 350,
          "line_total": 700,
          "tax_rate_bps": 1900,
          "options": []
        }
      ]
    }
  }
}

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.