---
title: "Event feed"
operation_id: "api.partner.wolt.events"
method: GET
path: "/api/partner/v1/wolt/events"
group: "Wolt Partner API"
authenticated: true
canonical: "https://fature.al/api-reference/endpoints/api-partner-wolt-events.html"
---

# Event feed

Part of the [fature.al API](/api-reference/index.html) documentation.

## GET /api/partner/v1/wolt/events

The spine of the integration. Poll this endpoint with the last next_cursor
you received to get the venue's order lifecycle events in order. The feed is
append-only, so nothing is missed across your downtime; delivery is
at-least-once, so treat (order_id, type) as idempotent. Each event carries a
compact snapshot of the order at that moment in `order`.

Full URL: `https://fature.al/api/partner/v1/wolt/events`

Authentication: required (bearer token).

### Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `since` | integer | no | The cursor to resume from; pass the previous next_cursor. Defaults to 0, the start of retention. Defaults to `0`. |
| `limit` | integer | no | Max events to return, 1-200. Defaults to `50`. |
| `types` | string | no | Comma-separated event types to include, e.g. order.received,order.ready. |

### Example request

```bash
curl -X GET 'https://fature.al/api/partner/v1/wolt/events' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'X-Client-Id: YOUR_CLIENT_ID' \
  -H 'X-Client-Secret: YOUR_CLIENT_SECRET' \
  -H 'Accept: application/json'
```

### Responses

**200** — OK

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean |  |
| `data` | object |  |
| `data.events` | array |  |
| `data.events[].id` | integer | Monotonic cursor id; pass the highest one you have seen as ?since= |
| `data.events[].type` | string | Event type, e.g. order.received, order.accepted, order.ready, order.delivered, order.fiscalized, order.fiscalization_failed |
| `data.events[].order_id` | integer | Fatureal order id the event is about |
| `data.events[].wolt_order_id` | string | Wolt's order id |
| `data.events[].status` | string, nullable | Order status at the moment of the event |
| `data.events[].occurred_at` | string, nullable | When the event occurred (ISO-8601) |
| `data.events[].order` | object | Compact snapshot of the order at that moment |
| `data.events[].order.id` | integer | Fatureal order id; use this as {id} in the order and action routes |
| `data.events[].order.wolt_order_id` | string | Wolt's own order id |
| `data.events[].order.display_number` | string, nullable | Human order number shown to the customer |
| `data.events[].order.status` | string | Raw Wolt lifecycle status: received, acknowledged, production, ready, picked_up, courier_at_customer, delivered, rejected, refunded, ... |
| `data.events[].order.fiscal_state` | string | Fiscal state derived from the invoice: pending, deferred, fiscalised or failed |
| `data.events[].order.total_amount` | number | Charged total in major currency units |
| `data.events[].order.currency` | string | ISO 4217 currency code |
| `data.events[].order.received_at` | string, nullable | When Wolt handed the order to us (ISO-8601) |
| `data.events[].order.pickup_at` | string, nullable | Committed handover time (ISO-8601), set when a pickup time was chosen on accept |
| `data.events[].order.delivery_type` | string, nullable | Wolt delivery type: takeaway, eatin, homedelivery, ... |
| `data.events[].order.self_delivery` | boolean | Whether the venue fulfils delivery with its own courier |
| `data.events[].order.branch` | string, nullable | Branch name |
| `data.events[].order.invoice` | object, nullable | Linked fiscal invoice reference, or null before fiscalisation |
| `data.next_cursor` | string |  |
| `data.has_more` | boolean |  |

```json
{
    "status": true,
    "data": {
        "events": [
            {
                "id": 1,
                "type": "type",
                "order_id": 1,
                "wolt_order_id": "wolt order id",
                "status": "status",
                "occurred_at": "occurred at",
                "order": {
                    "id": 1,
                    "wolt_order_id": "wolt order id",
                    "display_number": "display number",
                    "status": "status",
                    "fiscal_state": "fiscal state",
                    "total_amount": 4200,
                    "currency": "USD",
                    "received_at": "received at",
                    "pickup_at": "pickup at",
                    "delivery_type": "delivery type",
                    "self_delivery": true,
                    "branch": "branch",
                    "invoice": []
                }
            }
        ],
        "next_cursor": "next cursor",
        "has_more": true
    }
}
```

**403** — The company has no Wolt add-on, the token has no Wolt right, or it resolves to no single active venue.

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean | Always false |
| `message` | string | Localised explanation, safe to log but not to branch on |
| `code` | string | Stable machine readable reason: `unauthenticated`, `wolt_not_enabled`, `forbidden`, `no_venue`, `order_not_found`, `invalid_transition`, `invalid_data`, `action_failed`, `wolt_upstream_error`, `idempotency_key_required`, `idempotency_in_progress` |

```json
{
    "status": true,
    "message": "Hello there",
    "code": "code"
}
```

**429** — Rate limit reached: 180 reads a minute per token. Retry after the number of seconds in the Retry-After header.

| Field | Type | Description |
| --- | --- | --- |
| `message` | string |  |

```json
{
    "message": "Hello there"
}
```
