---
title: "Reject an order"
operation_id: "api.partner.wolt.orders.reject"
method: POST
path: "/api/partner/v1/wolt/orders/{id}/reject"
group: "Wolt Partner API"
authenticated: true
canonical: "https://fature.al/api-reference/endpoints/api-partner-wolt-orders-reject.html"
---

# Reject an order

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

## POST /api/partner/v1/wolt/orders/{id}/reject

Declines the order and relays the refusal to Wolt. This is terminal: a rejected order cannot
be accepted afterwards, and no fiscal invoice is created for it.

| Field | Notes |
| --- | --- |
| `reason` | Free text, up to 255 characters. **Wolt may show it to the customer**, so keep it presentable |
| `code` | `GENERIC`, `ITEMS_UNAVAILABLE` or `VENUE_CLOSING_SOON`. Defaults to `GENERIC` |

Both are optional, but sending a specific `code` helps Wolt route the customer to a sensible
alternative instead of a generic apology.

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

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

### Header parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `Idempotency-Key` | string | yes | Your own unique key for this action. A retry with the same key replays the first result instead of relaying a second action to Wolt, and the replay carries an Idempotent-Replayed: true header. Kept for 24 hours. |

### Body parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `reason` | string, maxLength 255, nullable | no | A short human-readable reason; Wolt may show it to the customer. |
| `code` | string, nullable | no | Machine reason code. Defaults to GENERIC. |

### Example request

```bash
curl -X POST 'https://fature.al/api/partner/v1/wolt/orders/8801/reject' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'X-Client-Id: YOUR_CLIENT_ID' \
  -H 'X-Client-Secret: YOUR_CLIENT_SECRET' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: a2f1c9e4-5b60-4d7a-9c31-8e0f2b6d4a17' \
  -d '{
    "reason": "Kitchen is closing",
    "code": "ITEMS_UNAVAILABLE"
}'
```

### Responses

**201** — Created

| Field | Type | Description |
| --- | --- | --- |
| `status` | boolean |  |
| `data` | object |  |
| `data.order` | object |  |
| `data.order.customer` | object |  |
| `data.order.customer.name` | string, nullable |  |
| `data.order.customer.phone` | string, nullable | Shared by Wolt only for self-delivery orders |
| `data.order.customer.note` | string, nullable | Customer note left with the order |
| `data.order.company` | object, nullable | B2B billing company, or null for a normal consumer order |
| `data.order.company.tax_id` | string | Tax id (NUIS/NIPT) the customer asked to bill |
| `data.order.company.name` | string, nullable |  |
| `data.order.company.address` | string, nullable |  |
| `data.order.preorder` | object, nullable | Scheduled pre-order info, or null for an instant order |
| `data.order.preorder.time` | string | Scheduled time (ISO-8601) |
| `data.order.preorder.status` | string, nullable | Wolt pre-order status |
| `data.order.lines` | array |  |
| `data.order.lines[].name` | string | Item name |
| `data.order.lines[].quantity` | number |  |
| `data.order.lines[].unit_price` | number | Unit price in major units |
| `data.order.lines[].total` | number | Line total in major units, after discount |
| `data.order.lines[].discount` | number | Discount applied to the line, major units |
| `data.order.lines[].product` | object, nullable | Linked internal product, or null when the Wolt item is unmapped |
| `data.order.lines[].options` | array | Chosen modifiers/options for the line |
| `data.order.totals` | object |  |
| `data.order.totals.subtotal_before_discount` | number | Basket total before any discount, major units |
| `data.order.totals.discount` | number | Total discount applied, major units |
| `data.order.totals.total` | number | Charged total, major units |
| `data.order.totals.currency` | string | ISO 4217 currency code |
| `data.order.totals.campaigns` | array | Applied promotion labels |

```json
{
    "status": true,
    "data": {
        "order": {
            "customer": {
                "name": "Jane Doe",
                "phone": "+15551234567",
                "note": "note"
            },
            "company": {
                "tax_id": "tax id",
                "name": "Jane Doe",
                "address": "1 Example Street"
            },
            "preorder": {
                "time": "time",
                "status": "status"
            },
            "lines": [
                {
                    "name": "Jane Doe",
                    "quantity": 2,
                    "unit_price": 1999,
                    "total": 4200,
                    "discount": 3,
                    "product": [],
                    "options": [
                        "options"
                    ]
                }
            ],
            "totals": {
                "subtotal_before_discount": 4200,
                "discount": 3,
                "total": 4200,
                "currency": "USD",
                "campaigns": [
                    "campaigns"
                ]
            }
        }
    }
}
```

**400** — The Idempotency-Key header is missing.

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

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

**409** — The order's current status does not allow this action, or a call with the same Idempotency-Key is still in flight. Nothing was relayed to Wolt.

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

**422** — The reject code is not one of GENERIC, ITEMS_UNAVAILABLE or VENUE_CLOSING_SOON, or the action failed on our side. A validation failure adds an errors object to the envelope.

| 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: 60 writes a minute per token. Retry after the number of seconds in the Retry-After header.

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

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

**502** — Wolt refused or did not answer. Safe to retry with the same Idempotency-Key.

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