---
title: "Get the order's fiscal invoice"
operation_id: "api.partner.wolt.orders.invoice"
method: GET
path: "/api/partner/v1/wolt/orders/{id}/invoice"
group: "Wolt Partner API"
authenticated: true
canonical: "https://fature.al/api-reference/endpoints/api-partner-wolt-orders-invoice.html"
---

# Get the order's fiscal invoice

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

## GET /api/partner/v1/wolt/orders/{id}/invoice

Returns the fiscal invoice issued for the order: `IIC`, `FIC` and `EIC` identifiers,
verification through `pdf_url`, the client, the amounts and the lines.

The invoice object is identical to the one from `GET /api/v1/invoice/{id}/details`, so anything
already written against that endpoint works here unchanged.

## While it is still null

`invoice` is `null` until the order has been fiscalised. Track `fiscal_state` rather than
polling blindly:

| `fiscal_state` | Meaning |
| --- | --- |
| `pending` | No invoice yet. Mark the order ready to create one |
| `deferred` | Issued, waiting on the tax service. It will complete on its own |
| `fiscalised` | Done. `invoice` is populated |
| `failed` | Needs a retry |

Better still, watch the `order.fiscalized` event on the feed instead of polling.

Full URL: `https://fature.al/api/partner/v1/wolt/orders/{id}/invoice`

Authentication: required (bearer token).

### Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | The order's Fatureal id, from the feed or the order list. |

### Example request

```bash
curl -X GET 'https://fature.al/api/partner/v1/wolt/orders/8801/invoice' \
  -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.fiscal_state` | string |  |
| `data.invoice` | object, nullable |  |
| `data.invoice.lines` | array |  |
| `data.invoice.lines[].name` | string |  |
| `data.invoice.lines[].product_code` | string, nullable | Internal product code, when the line is a mapped product |
| `data.invoice.lines[].unit` | string, nullable |  |
| `data.invoice.lines[].unit_code` | string, nullable |  |
| `data.invoice.lines[].quantity` | number |  |
| `data.invoice.lines[].unitPrice` | number | Unit price with the line discount already taken off, major units |
| `data.invoice.lines[].vat_rate` | number, nullable | VAT rate percent |
| `data.invoice.lines[].vat_exempt_type` | string, nullable | VAT exemption type, when the line is exempt |
| `data.invoice.lines[].discount_rate` | number, nullable | Line discount percent, as sent in `lines[].discount` when the line was discounted |
| `data.invoice.lines[].discount` | number, nullable | Line discount amount, net-denominated, major units |
| `data.invoice.lines[].amount_net` | number |  |
| `data.invoice.lines[].amount_vat` | number |  |
| `data.invoice.lines[].total` | number | Gross line total, major units |

```json
{
    "status": true,
    "data": {
        "fiscal_state": "fiscal state",
        "invoice": {
            "lines": [
                {
                    "name": "Jane Doe",
                    "product_code": "product code",
                    "unit": "unit",
                    "unit_code": "unit code",
                    "quantity": 2,
                    "unitPrice": 1999,
                    "vat_rate": 19.99,
                    "vat_exempt_type": "vat exempt type",
                    "discount_rate": 3,
                    "discount": 3,
                    "amount_net": 4200,
                    "amount_vat": 4200,
                    "total": 4200
                }
            ]
        }
    }
}
```

**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"
}
```

**404** — No such order for this 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"
}
```
