/api/partner/v1/wolt/orders/{id}/invoice
Requires authentication
Rate limited by the `api-global` limiter
Send a bearer token in the Authorization header.
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
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The order's Fatureal id, from the feed or the order list. |
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 |
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` |
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` |
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 |
Example request
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'
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([
'Authorization' => 'Bearer YOUR_TOKEN',
'X-Client-Id' => 'YOUR_CLIENT_ID',
'X-Client-Secret' => 'YOUR_CLIENT_SECRET',
'Accept' => 'application/json',
])->get('https://fature.al/api/partner/v1/wolt/orders/8801/invoice');
$data = $response->json();
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://fature.al/api/partner/v1/wolt/orders/8801/invoice', [
'headers' => [
'Authorization' => 'Bearer YOUR_TOKEN',
'X-Client-Id' => 'YOUR_CLIENT_ID',
'X-Client-Secret' => 'YOUR_CLIENT_SECRET',
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);
const response = await fetch('https://fature.al/api/partner/v1/wolt/orders/8801/invoice', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_TOKEN',
'X-Client-Id': 'YOUR_CLIENT_ID',
'X-Client-Secret': 'YOUR_CLIENT_SECRET',
'Accept': 'application/json'
}
});
const data = await response.json();
Example response
{
"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
}
]
}
}
}
{
"status": true,
"message": "Hello there",
"code": "code"
}
{
"status": true,
"message": "Hello there",
"code": "code"
}
{
"message": "Hello there"
}