Service operations
Stock
The stock endpoints let you manage product inventory at the restaurant level: browse the current inventory with stock levels and availability, audit every stock movement, tune the restaurant stock settings, and record stock deliveries. All stock endpoints require the authenticated user to have rights over the target restaurant; otherwise a 403 access_denied error is returned. To set the stock quantity of a single product, use PUT /menus/{menuId}/products/{signature}/quantity (see Catalog → Products & Steps); to enable or disable a product per sales channel, see Catalog → Availability & Cross-Selling. Both feed the same stock and availability data exposed here.
nextCursor value; pass it back as the cursor query parameter to fetch the next page. A null nextCursor means there are no more results.Reference Values
- movementType
DELIVERY,SALE,CANCELLATION,MANUAL_ADJUSTMENT,RAZ,INITIAL- stockStatus
out(quantity ≤ 0),low(0 < quantity ≤ threshold),ok(quantity > threshold),positive(quantity > 0). The threshold is the product'ssafetyStockwhen set, otherwise the restaurant'sdefaultSafetyStock.
GET/v2/restaurants/{restaurantId}/stockList Inventory
Retrieve the paginated inventory of the restaurant products, with search and stock status filters. Each item includes the current quantity, safety stock threshold, and sales channel availability.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| search | string | No | Free-text search on the product name. Max 255 characters (query parameter). |
| categoryId | integer | No | Filter by category identifier (query parameter). |
| tracked | boolean | No | When true, only returns products whose stock is tracked. Any other value (including false) is equivalent to omitting the parameter: no filtering is applied (query parameter). |
| sku | string | No | Filter by exact SKU. Max 255 characters (query parameter). |
| hasSku | boolean | No | Filter products that have (true) or do not have (false) a SKU. Omit for no filtering (query parameter). |
| stockStatus | string | No | Filter by stock status. Values: low, out, ok, positive (query parameter). |
| cursor | integer | No | Pagination cursor from the previous response nextCursor (query parameter). |
| limit | integer | No | Page size, between 1 and 200. Defaults to 100 (query parameter). |
Response
{
"status": 200,
"code": "stock_list_succeed",
"message": "Stock inventory retrieved successfully.",
"data": {
"items": [
{
"productId": 501,
"name": "Cheeseburger",
"signature": "a1b2c3d4e5f6",
"sku": "BUR-001",
"categoryNames": [
"Burgers"
],
"currentQuantity": 42,
"safetyStock": 10,
"webAvailability": true,
"kioskAvailability": true,
"menuId": 300
},
{
"productId": 502,
"name": "Fries",
"signature": "f6e5d4c3b2a1",
"sku": null,
"categoryNames": [
"Sides"
],
"currentQuantity": 0,
"safetyStock": null,
"webAvailability": false,
"kioskAvailability": false,
"menuId": 300
}
],
"nextCursor": 502
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_list_succeed" | Machine-readable application code for the result. |
| message | string | "Stock inventory retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.items | array | […] | List of items entries. |
| data.items[] | object | {…} | Object containing items fields. |
| data.items[].productId | integer | 501 | Identifier of the product. |
| data.items[].name | string | "Cheeseburger" | The name value. |
| data.items[].signature | string | "a1b2c3d4e5f6" | The signature value. |
| data.items[].sku | string | "BUR-001" | The sku value. |
| data.items[].categoryNames | array | […] | List of category names entries. |
| data.items[].categoryNames[] | string | "Burgers" | The category names value. |
| data.items[].currentQuantity | integer | 42 | The current quantity value. |
| data.items[].safetyStock | integer | 10 | The safety stock value. |
| data.items[].webAvailability | boolean | true | The web availability value. |
| data.items[].kioskAvailability | boolean | true | The kiosk availability value. |
| data.items[].menuId | integer | 300 | Identifier of the menu. |
| data.nextCursor | integer | 502 | Cursor to use when retrieving the next page. |
Reset Stock (RAZ)
Reset a single tracked product or every tracked product in a restaurant to zero. Both operations require stock management V2 to be enabled for the restaurant.
POST/v2/restaurants/{restaurantId}/stock/products/{productId}/razReset One Product Stock
Sets one tracked product quantity to zero, creates a RAZ movement, and updates availability when the safety threshold requires it.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The restaurant that owns the product stock. |
| productId | integer | Yes | The product whose tracked quantity is reset. |
Response
{
"status": 200,
"code": "stock_product_raz_succeed",
"message": "Product stock reset successfully.",
"data": {
"productId": 501,
"quantityBefore": 42,
"quantityAfter": 0,
"autoDisabled": true,
"autoEnabled": false,
"movementId": 9003
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_product_raz_succeed" | Machine-readable application code for the result. |
| message | string | "Product stock reset successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.productId | integer | 501 | Identifier of the product. |
| data.quantityBefore | integer | 42 | The quantity before value. |
| data.quantityAfter | integer | 0 | The quantity after value. |
| data.autoDisabled | boolean | true | The auto disabled value. |
| data.autoEnabled | boolean | false | The auto enabled value. |
| data.movementId | integer | 9003 | Identifier of the associated movement. |
POST/v2/restaurants/{restaurantId}/stock/razReset All Restaurant Stock
Resets every tracked product in the restaurant to zero. When confirmationRestaurantName is supplied, it must match the restaurant name (case-insensitively) or the request is rejected.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The restaurant whose tracked stock is reset. |
Request Body
{
"confirmationRestaurantName": "Innovorder Burgers Paris"
}Request Body Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Required | Example | Description |
|---|---|---|---|---|
| confirmationRestaurantName | string | No | "Innovorder Burgers Paris" | Optional destructive-action confirmation. When supplied, it must match the restaurant name. |
Response
{
"status": 200,
"code": "stock_raz_succeed",
"message": "Stock reset successfully.",
"data": {
"productsReset": 68
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_raz_succeed" | Machine-readable application code for the result. |
| message | string | "Stock reset successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.productsReset | integer | 68 | The products reset value. |
Stock Movements
Every change to a product stock level is recorded as a movement in an audit trail. There is no endpoint to create movements directly: movements are generated by sales, order cancellations, stock deliveries (see below), and other stock operations.
GET/v2/restaurants/{restaurantId}/stock/movementsList Stock Movements
Retrieve the audit trail of stock movements for a restaurant, paginated by cursor, with filters by product, movement type, channel, user, order, and date range.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| productId | integer | No | Filter by product identifier (query parameter). |
| search | string | No | Free-text search matched against the product name, SKU, or product ID (when numeric). Max 255 characters (query parameter). |
| movementType | string | No | Filter by movement type. Values: DELIVERY, SALE, CANCELLATION, MANUAL_ADJUSTMENT, RAZ, INITIAL (query parameter). |
| channelId | integer | No | Filter by sales channel identifier (query parameter). |
| userId | integer | No | Filter by the user who caused the movement (query parameter). |
| orderId | integer | No | Filter by the related order identifier (query parameter). |
| fromDate | string | No | Start of the date range, ISO 8601 date (query parameter). |
| toDate | string | No | End of the date range, ISO 8601 date (query parameter). |
| cursor | integer | No | Pagination cursor from the previous response nextCursor (query parameter). |
| limit | integer | No | Page size, between 1 and 200. Defaults to 50 (query parameter). |
Response
{
"status": 200,
"code": "stock_movements_list_succeed",
"message": "Stock movements retrieved successfully.",
"data": {
"items": [
{
"movementId": 9001,
"productId": 501,
"restaurantId": 200,
"brandId": 100,
"movementType": "SALE",
"quantityDelta": -2,
"quantityBefore": 44,
"quantityAfter": 42,
"channelId": 2,
"orderId": 123456,
"deliveryId": null,
"userId": null,
"reason": null,
"idempotencyKey": "order-123456-line-1",
"createdAt": "2026-07-01T12:15:00.000Z",
"productName": "Cheeseburger",
"productSku": "BUR-001"
},
{
"movementId": 9000,
"productId": 501,
"restaurantId": 200,
"brandId": 100,
"movementType": "DELIVERY",
"quantityDelta": 24,
"quantityBefore": 20,
"quantityAfter": 44,
"channelId": null,
"orderId": null,
"deliveryId": 77,
"userId": 12345,
"reason": null,
"idempotencyKey": null,
"createdAt": "2026-07-01T08:00:00.000Z",
"productName": "Cheeseburger",
"productSku": "BUR-001"
}
],
"nextCursor": null
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_movements_list_succeed" | Machine-readable application code for the result. |
| message | string | "Stock movements retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.items | array | […] | List of items entries. |
| data.items[] | object | {…} | Object containing items fields. |
| data.items[].movementId | integer | 9001 | Identifier of the associated movement. |
| data.items[].productId | integer | 501 | Identifier of the product. |
| data.items[].restaurantId | integer | 200 | Identifier of the restaurant. |
| data.items[].brandId | integer | 100 | Identifier of the brand. |
| data.items[].movementType | string | "SALE" | The movement type value. |
| data.items[].quantityDelta | integer | -2 | The quantity delta value. |
| data.items[].quantityBefore | integer | 44 | The quantity before value. |
| data.items[].quantityAfter | integer | 42 | The quantity after value. |
| data.items[].channelId | integer | 2 | Identifier of the associated channel. |
| data.items[].orderId | integer | 123456 | Identifier of the order. |
| data.items[].deliveryId | null | null | Identifier of the associated delivery. |
| data.items[].userId | null | null | Identifier of the user. |
| data.items[].reason | null | null | The reason value. |
| data.items[].idempotencyKey | string | "order-123456-line-1" | The idempotency key value. |
| data.items[].createdAt | string | "2026-07-01T12:15:00.000Z" | Timestamp when this resource was created. |
| data.items[].productName | string | "Cheeseburger" | The product name value. |
| data.items[].productSku | string | "BUR-001" | The product sku value. |
| data.nextCursor | null | null | Cursor to use when retrieving the next page. |
GET/v2/restaurants/{restaurantId}/stock/movements/by-product/{productId}Get Product Stock Timeline
Retrieve the most recent stock movements for a single product, as a flat timeline.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| productId | integer | Yes | The unique identifier of the product. |
| limit | integer | No | Maximum number of movements to return, between 1 and 200. Defaults to 100 (query parameter). |
Response
{
"status": 200,
"code": "stock_product_timeline_succeed",
"message": "Product stock movements retrieved successfully.",
"data": [
{
"movementId": 9001,
"productId": 501,
"restaurantId": 200,
"brandId": 100,
"movementType": "SALE",
"quantityDelta": -2,
"quantityBefore": 44,
"quantityAfter": 42,
"channelId": 2,
"orderId": 123456,
"deliveryId": null,
"userId": null,
"reason": null,
"idempotencyKey": "order-123456-line-1",
"createdAt": "2026-07-01T12:15:00.000Z"
}
]
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_product_timeline_succeed" | Machine-readable application code for the result. |
| message | string | "Product stock movements retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | array | […] | Endpoint-specific response payload. |
| data[] | object | {…} | Endpoint-specific response payload. |
| data[].movementId | integer | 9001 | Identifier of the associated movement. |
| data[].productId | integer | 501 | Identifier of the product. |
| data[].restaurantId | integer | 200 | Identifier of the restaurant. |
| data[].brandId | integer | 100 | Identifier of the brand. |
| data[].movementType | string | "SALE" | The movement type value. |
| data[].quantityDelta | integer | -2 | The quantity delta value. |
| data[].quantityBefore | integer | 44 | The quantity before value. |
| data[].quantityAfter | integer | 42 | The quantity after value. |
| data[].channelId | integer | 2 | Identifier of the associated channel. |
| data[].orderId | integer | 123456 | Identifier of the order. |
| data[].deliveryId | null | null | Identifier of the associated delivery. |
| data[].userId | null | null | Identifier of the user. |
| data[].reason | null | null | The reason value. |
| data[].idempotencyKey | string | "order-123456-line-1" | The idempotency key value. |
| data[].createdAt | string | "2026-07-01T12:15:00.000Z" | Timestamp when this resource was created. |
Stock Settings
Stock settings control how inventory is managed for the restaurant: whether stock management V2 is enabled, and the default safety stock threshold applied to every product that does not define its own.
GET/v2/restaurants/{restaurantId}/stock/settingsGet Stock Settings
Retrieve the stock management settings of a restaurant, including the V2 activation flag, the default safety stock, and the active sales channels.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
Response
{
"status": 200,
"code": "stock_settings_retrieve_succeed",
"message": "Stock settings retrieved successfully.",
"data": {
"name": "Innovorder Burgers Paris",
"stockManagementV2Enabled": true,
"defaultSafetyStock": 5,
"channels": {
"web": true,
"kiosk": true
}
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_settings_retrieve_succeed" | Machine-readable application code for the result. |
| message | string | "Stock settings retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.name | string | "Innovorder Burgers Paris" | The name value. |
| data.stockManagementV2Enabled | boolean | true | The stock management v2 enabled value. |
| data.defaultSafetyStock | integer | 5 | The default safety stock value. |
| data.channels | object | {…} | Object containing channels fields. |
| data.channels.web | boolean | true | The web value. |
| data.channels.kiosk | boolean | true | The kiosk value. |
PUT/v2/restaurants/{restaurantId}/stock/settingsUpdate Stock Settings
Update the stock management settings of a restaurant. Both fields are optional, but at least one of them must be provided; an empty body is rejected with a 400 error. The defaultSafetyStock value is used as the low/ok threshold for every product that has no safety stock of its own.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
Request Body
{
"stockManagementV2Enabled": true,
"defaultSafetyStock": 5
}Request Body Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| stockManagementV2Enabled | boolean | true | The stock management v2 enabled value. |
| defaultSafetyStock | integer | 5 | The default safety stock value. |
Response
{
"status": 200,
"code": "stock_settings_update_succeed",
"message": "Stock settings updated successfully.",
"data": {
"stockManagementV2Enabled": true,
"defaultSafetyStock": 5
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_settings_update_succeed" | Machine-readable application code for the result. |
| message | string | "Stock settings updated successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.stockManagementV2Enabled | boolean | true | The stock management v2 enabled value. |
| data.defaultSafetyStock | integer | 5 | The default safety stock value. |
Stock Deliveries
Stock deliveries represent goods received from a supplier. Recording a delivery is the way to increase product stock levels through the API: each delivery line generates a DELIVERY stock movement for the corresponding product.
GET/v2/restaurants/{restaurantId}/stock/deliveriesList Stock Deliveries
Retrieve the most recent stock delivery notes recorded for the restaurant.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| limit | integer | No | Maximum number of deliveries to return, between 1 and 100. Defaults to 25 (query parameter). |
Response
{
"status": 200,
"code": "stock_deliveries_list_succeed",
"message": "Stock deliveries retrieved successfully.",
"data": {
"items": [
{
"deliveryId": 77,
"restaurantId": 200,
"brandId": 100,
"userId": 12345,
"deliveryDate": "2026-07-01",
"supplier": "Metro",
"reference": "BL-2026-0701",
"sourceFileUrl": null,
"parsedPayload": null,
"status": "CONFIRMED",
"itemsCount": 2,
"createdAt": "2026-07-01T08:00:00.000Z",
"confirmedAt": "2026-07-01T08:00:00.000Z"
}
]
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_deliveries_list_succeed" | Machine-readable application code for the result. |
| message | string | "Stock deliveries retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.items | array | […] | List of items entries. |
| data.items[] | object | {…} | Object containing items fields. |
| data.items[].deliveryId | integer | 77 | Identifier of the associated delivery. |
| data.items[].restaurantId | integer | 200 | Identifier of the restaurant. |
| data.items[].brandId | integer | 100 | Identifier of the brand. |
| data.items[].userId | integer | 12345 | Identifier of the user. |
| data.items[].deliveryDate | string | "2026-07-01" | Date or timestamp for delivery. |
| data.items[].supplier | string | "Metro" | The supplier value. |
| data.items[].reference | string | "BL-2026-0701" | The reference value. |
| data.items[].sourceFileUrl | null | null | The source file url value. |
| data.items[].parsedPayload | null | null | The parsed payload value. |
| data.items[].status | string | "CONFIRMED" | HTTP status code returned by the API. |
| data.items[].itemsCount | integer | 2 | The items count value. |
| data.items[].createdAt | string | "2026-07-01T08:00:00.000Z" | Timestamp when this resource was created. |
| data.items[].confirmedAt | string | "2026-07-01T08:00:00.000Z" | Date or timestamp for confirmed. |
GET/v2/restaurants/{restaurantId}/stock/deliveries/{deliveryId}Get Stock Delivery
Retrieve a single stock delivery note by its identifier.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| deliveryId | integer | Yes | The unique identifier of the delivery. |
Response
{
"status": 200,
"code": "stock_delivery_retrieve_succeed",
"message": "Stock delivery retrieved successfully.",
"data": {
"deliveryId": 77,
"restaurantId": 200,
"brandId": 100,
"userId": 12345,
"deliveryDate": "2026-07-01",
"supplier": "Metro",
"reference": "BL-2026-0701",
"sourceFileUrl": null,
"parsedPayload": null,
"status": "CONFIRMED",
"itemsCount": 2,
"createdAt": "2026-07-01T08:00:00.000Z",
"confirmedAt": "2026-07-01T08:00:00.000Z"
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_delivery_retrieve_succeed" | Machine-readable application code for the result. |
| message | string | "Stock delivery retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.deliveryId | integer | 77 | Identifier of the associated delivery. |
| data.restaurantId | integer | 200 | Identifier of the restaurant. |
| data.brandId | integer | 100 | Identifier of the brand. |
| data.userId | integer | 12345 | Identifier of the user. |
| data.deliveryDate | string | "2026-07-01" | Date or timestamp for delivery. |
| data.supplier | string | "Metro" | The supplier value. |
| data.reference | string | "BL-2026-0701" | The reference value. |
| data.sourceFileUrl | null | null | The source file url value. |
| data.parsedPayload | null | null | The parsed payload value. |
| data.status | string | "CONFIRMED" | HTTP status code returned by the API. |
| data.itemsCount | integer | 2 | The items count value. |
| data.createdAt | string | "2026-07-01T08:00:00.000Z" | Timestamp when this resource was created. |
| data.confirmedAt | string | "2026-07-01T08:00:00.000Z" | Date or timestamp for confirmed. |
GET/v2/restaurants/{restaurantId}/stock/deliveries/{deliveryId}/reportGet Stock Delivery Report
Retrieve a delivery together with the stock movements it generated. When a source file was attached to the delivery, downloadUrl contains a signed URL valid for about 15 minutes; otherwise it is null.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| deliveryId | integer | Yes | The unique identifier of the delivery. |
Response
{
"status": 200,
"code": "stock_delivery_report_succeed",
"message": "Stock delivery report retrieved successfully.",
"data": {
"delivery": {
"deliveryId": 77,
"restaurantId": 200,
"brandId": 100,
"userId": 12345,
"deliveryDate": "2026-07-01",
"supplier": "Metro",
"reference": "BL-2026-0701",
"status": "CONFIRMED",
"itemsCount": 2
},
"movements": [
{
"movementId": 9000,
"productId": 501,
"movementType": "DELIVERY",
"quantityDelta": 24,
"quantityBefore": 20,
"quantityAfter": 44
}
],
"downloadUrl": null
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_delivery_report_succeed" | Machine-readable application code for the result. |
| message | string | "Stock delivery report retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.delivery | object | {…} | Object containing delivery fields. |
| data.delivery.deliveryId | integer | 77 | Identifier of the associated delivery. |
| data.delivery.restaurantId | integer | 200 | Identifier of the restaurant. |
| data.delivery.brandId | integer | 100 | Identifier of the brand. |
| data.delivery.userId | integer | 12345 | Identifier of the user. |
| data.delivery.deliveryDate | string | "2026-07-01" | Date or timestamp for delivery. |
| data.delivery.supplier | string | "Metro" | The supplier value. |
| data.delivery.reference | string | "BL-2026-0701" | The reference value. |
| data.delivery.status | string | "CONFIRMED" | HTTP status code returned by the API. |
| data.delivery.itemsCount | integer | 2 | The items count value. |
| data.movements | array | […] | List of movements entries. |
| data.movements[] | object | {…} | Object containing movements fields. |
| data.movements[].movementId | integer | 9000 | Identifier of the associated movement. |
| data.movements[].productId | integer | 501 | Identifier of the product. |
| data.movements[].movementType | string | "DELIVERY" | The movement type value. |
| data.movements[].quantityDelta | integer | 24 | The quantity delta value. |
| data.movements[].quantityBefore | integer | 20 | The quantity before value. |
| data.movements[].quantityAfter | integer | 44 | The quantity after value. |
| data.downloadUrl | null | null | The download url value. |
POST/v2/restaurants/{restaurantId}/stock/parse-deliveryParse a Delivery Note
Uploads a delivery note for extraction. Upload one file in the multipart field file: PDF, JPEG, PNG, or WebP, up to 10 MB. The parsed output can be reviewed and passed as parsedPayload when creating a stock delivery.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The restaurant that owns the delivery note. |
Request Body
file=[binary]Request Body Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Required | Example | Description |
|---|---|---|---|---|
| file | binary | Yes | [binary] | Delivery note file (PDF, JPEG, PNG, or WebP), maximum 10 MB. |
Response
{
"status": 200,
"code": "stock_delivery_parse_succeed",
"message": "Delivery note parsed successfully.",
"data": {
"items": [
{
"rawSku": "4798",
"rawName": "Steak haché 125 g",
"quantity": 24,
"matchedProductId": 501,
"matchType": "EXACT"
},
{
"rawSku": "",
"rawName": "Produit non reconnu",
"quantity": 4,
"matchedProductId": null,
"matchType": "NONE"
}
],
"geminiRaw": {
"items": [
{
"sku": "4798",
"name": "Steak haché 125 g",
"quantity": 24
}
]
},
"sourceFilePath": "stock-deliveries/200/2026-07-11-delivery-note.pdf"
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_delivery_parse_succeed" | Machine-readable application code for the result. |
| message | string | "Delivery note parsed successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.items | array | […] | List of items entries. |
| data.items[] | object | {…} | Object containing items fields. |
| data.items[].rawSku | string | "4798" | The raw sku value. |
| data.items[].rawName | string | "Steak haché 125 g" | The raw name value. |
| data.items[].quantity | integer | 24 | The quantity value. |
| data.items[].matchedProductId | integer | 501 | Identifier of the associated matched product. |
| data.items[].matchType | string | "EXACT" | The match type value. |
| data.geminiRaw | object | {…} | Object containing gemini raw fields. |
| data.geminiRaw.items | array | […] | List of items entries. |
| data.geminiRaw.items[] | object | {…} | Object containing items fields. |
| data.geminiRaw.items[].sku | string | "4798" | The sku value. |
| data.geminiRaw.items[].name | string | "Steak haché 125 g" | The name value. |
| data.geminiRaw.items[].quantity | integer | 24 | The quantity value. |
| data.sourceFilePath | string | "stock-deliveries/200/2026-07-11-delivery-note.pdf" | The source file path value. |
POST/v2/restaurants/{restaurantId}/stock/deliveriesCreate Stock Delivery
Create and immediately confirm a stock delivery. Each line increments the stock of the referenced product with a DELIVERY movement. Quantities must be strictly positive integers. Set reEnableAvailability to true on a line to also re-enable the sales availability of the product. Note that the response status is 200, not 201.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
Request Body
{
"deliveryDate": "2026-07-01",
"supplier": "Metro",
"reference": "BL-2026-0701",
"lines": [
{
"productId": 501,
"quantity": 24,
"reEnableAvailability": true
},
{
"productId": 502,
"quantity": 48
}
]
}Request Body Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| deliveryDate | string | "2026-07-01" | Date or timestamp for delivery. |
| supplier | string | "Metro" | The supplier value. |
| reference | string | "BL-2026-0701" | The reference value. |
| lines | array | […] | List of lines entries. |
| lines[] | object | {…} | Object containing lines fields. |
| lines[].productId | integer | 501 | Identifier of the product. |
| lines[].quantity | integer | 24 | The quantity value. |
| lines[].reEnableAvailability | boolean | true | The re enable availability value. |
Response
{
"status": 200,
"code": "stock_delivery_create_succeed",
"message": "Stock delivery created successfully.",
"data": {
"deliveryId": 78,
"itemsCount": 2,
"movements": [
{
"productId": 501,
"quantityBefore": 20,
"quantityAfter": 44,
"movementId": 9000
},
{
"productId": 502,
"quantityBefore": 0,
"quantityAfter": 48,
"movementId": 9002
}
]
}
}Response Properties
Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.
| Property | Type | Example | Description |
|---|---|---|---|
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "stock_delivery_create_succeed" | Machine-readable application code for the result. |
| message | string | "Stock delivery created successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.deliveryId | integer | 78 | Identifier of the associated delivery. |
| data.itemsCount | integer | 2 | The items count value. |
| data.movements | array | […] | List of movements entries. |
| data.movements[] | object | {…} | Object containing movements fields. |
| data.movements[].productId | integer | 501 | Identifier of the product. |
| data.movements[].quantityBefore | integer | 20 | The quantity before value. |
| data.movements[].quantityAfter | integer | 44 | The quantity after value. |
| data.movements[].movementId | integer | 9000 | Identifier of the associated movement. |