Skip to content
innovorder
⌘K

Service operations

Stock

System map · Stock propagation
Catalog
Stock
Channels

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.

Cursor-based pagination: inventory and movement listings are paginated with a cursor, not an offset. Each response includes a 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's safetyStock when set, otherwise the restaurant's defaultSafetyStock.

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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
searchstringNoFree-text search on the product name. Max 255 characters (query parameter).
categoryIdintegerNoFilter by category identifier (query parameter).
trackedbooleanNoWhen 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).
skustringNoFilter by exact SKU. Max 255 characters (query parameter).
hasSkubooleanNoFilter products that have (true) or do not have (false) a SKU. Omit for no filtering (query parameter).
stockStatusstringNoFilter by stock status. Values: low, out, ok, positive (query parameter).
cursorintegerNoPagination cursor from the previous response nextCursor (query parameter).
limitintegerNoPage size, between 1 and 200. Defaults to 100 (query parameter).

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_list_succeed"Machine-readable application code for the result.
messagestring"Stock inventory retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.itemsarray[…]List of items entries.
data.items[]object{…}Object containing items fields.
data.items[].productIdinteger501Identifier of the product.
data.items[].namestring"Cheeseburger"The name value.
data.items[].signaturestring"a1b2c3d4e5f6"The signature value.
data.items[].skustring"BUR-001"The sku value.
data.items[].categoryNamesarray[…]List of category names entries.
data.items[].categoryNames[]string"Burgers"The category names value.
data.items[].currentQuantityinteger42The current quantity value.
data.items[].safetyStockinteger10The safety stock value.
data.items[].webAvailabilitybooleantrueThe web availability value.
data.items[].kioskAvailabilitybooleantrueThe kiosk availability value.
data.items[].menuIdinteger300Identifier of the menu.
data.nextCursorinteger502Cursor 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

NameTypeRequiredDescription
restaurantIdintegerYesThe restaurant that owns the product stock.
productIdintegerYesThe product whose tracked quantity is reset.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_product_raz_succeed"Machine-readable application code for the result.
messagestring"Product stock reset successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.productIdinteger501Identifier of the product.
data.quantityBeforeinteger42The quantity before value.
data.quantityAfterinteger0The quantity after value.
data.autoDisabledbooleantrueThe auto disabled value.
data.autoEnabledbooleanfalseThe auto enabled value.
data.movementIdinteger9003Identifier 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

NameTypeRequiredDescription
restaurantIdintegerYesThe restaurant whose tracked stock is reset.

Request Body

json
{
  "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.

PropertyTypeRequiredExampleDescription
confirmationRestaurantNamestringNo"Innovorder Burgers Paris"Optional destructive-action confirmation. When supplied, it must match the restaurant name.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_raz_succeed"Machine-readable application code for the result.
messagestring"Stock reset successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.productsResetinteger68The 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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
productIdintegerNoFilter by product identifier (query parameter).
searchstringNoFree-text search matched against the product name, SKU, or product ID (when numeric). Max 255 characters (query parameter).
movementTypestringNoFilter by movement type. Values: DELIVERY, SALE, CANCELLATION, MANUAL_ADJUSTMENT, RAZ, INITIAL (query parameter).
channelIdintegerNoFilter by sales channel identifier (query parameter).
userIdintegerNoFilter by the user who caused the movement (query parameter).
orderIdintegerNoFilter by the related order identifier (query parameter).
fromDatestringNoStart of the date range, ISO 8601 date (query parameter).
toDatestringNoEnd of the date range, ISO 8601 date (query parameter).
cursorintegerNoPagination cursor from the previous response nextCursor (query parameter).
limitintegerNoPage size, between 1 and 200. Defaults to 50 (query parameter).

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_movements_list_succeed"Machine-readable application code for the result.
messagestring"Stock movements retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.itemsarray[…]List of items entries.
data.items[]object{…}Object containing items fields.
data.items[].movementIdinteger9001Identifier of the associated movement.
data.items[].productIdinteger501Identifier of the product.
data.items[].restaurantIdinteger200Identifier of the restaurant.
data.items[].brandIdinteger100Identifier of the brand.
data.items[].movementTypestring"SALE"The movement type value.
data.items[].quantityDeltainteger-2The quantity delta value.
data.items[].quantityBeforeinteger44The quantity before value.
data.items[].quantityAfterinteger42The quantity after value.
data.items[].channelIdinteger2Identifier of the associated channel.
data.items[].orderIdinteger123456Identifier of the order.
data.items[].deliveryIdnullnullIdentifier of the associated delivery.
data.items[].userIdnullnullIdentifier of the user.
data.items[].reasonnullnullThe reason value.
data.items[].idempotencyKeystring"order-123456-line-1"The idempotency key value.
data.items[].createdAtstring"2026-07-01T12:15:00.000Z"Timestamp when this resource was created.
data.items[].productNamestring"Cheeseburger"The product name value.
data.items[].productSkustring"BUR-001"The product sku value.
data.nextCursornullnullCursor 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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
productIdintegerYesThe unique identifier of the product.
limitintegerNoMaximum number of movements to return, between 1 and 200. Defaults to 100 (query parameter).

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_product_timeline_succeed"Machine-readable application code for the result.
messagestring"Product stock movements retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].movementIdinteger9001Identifier of the associated movement.
data[].productIdinteger501Identifier of the product.
data[].restaurantIdinteger200Identifier of the restaurant.
data[].brandIdinteger100Identifier of the brand.
data[].movementTypestring"SALE"The movement type value.
data[].quantityDeltainteger-2The quantity delta value.
data[].quantityBeforeinteger44The quantity before value.
data[].quantityAfterinteger42The quantity after value.
data[].channelIdinteger2Identifier of the associated channel.
data[].orderIdinteger123456Identifier of the order.
data[].deliveryIdnullnullIdentifier of the associated delivery.
data[].userIdnullnullIdentifier of the user.
data[].reasonnullnullThe reason value.
data[].idempotencyKeystring"order-123456-line-1"The idempotency key value.
data[].createdAtstring"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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_settings_retrieve_succeed"Machine-readable application code for the result.
messagestring"Stock settings retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.namestring"Innovorder Burgers Paris"The name value.
data.stockManagementV2EnabledbooleantrueThe stock management v2 enabled value.
data.defaultSafetyStockinteger5The default safety stock value.
data.channelsobject{…}Object containing channels fields.
data.channels.webbooleantrueThe web value.
data.channels.kioskbooleantrueThe 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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "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.

PropertyTypeExampleDescription
stockManagementV2EnabledbooleantrueThe stock management v2 enabled value.
defaultSafetyStockinteger5The default safety stock value.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_settings_update_succeed"Machine-readable application code for the result.
messagestring"Stock settings updated successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.stockManagementV2EnabledbooleantrueThe stock management v2 enabled value.
data.defaultSafetyStockinteger5The 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.

Immediate side effect: creating a delivery confirms it immediately. There is no draft state through this endpoint. Stock quantities are incremented as soon as the request succeeds.

GET/v2/restaurants/{restaurantId}/stock/deliveriesList Stock Deliveries

Retrieve the most recent stock delivery notes recorded for the restaurant.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
limitintegerNoMaximum number of deliveries to return, between 1 and 100. Defaults to 25 (query parameter).

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_deliveries_list_succeed"Machine-readable application code for the result.
messagestring"Stock deliveries retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.itemsarray[…]List of items entries.
data.items[]object{…}Object containing items fields.
data.items[].deliveryIdinteger77Identifier of the associated delivery.
data.items[].restaurantIdinteger200Identifier of the restaurant.
data.items[].brandIdinteger100Identifier of the brand.
data.items[].userIdinteger12345Identifier of the user.
data.items[].deliveryDatestring"2026-07-01"Date or timestamp for delivery.
data.items[].supplierstring"Metro"The supplier value.
data.items[].referencestring"BL-2026-0701"The reference value.
data.items[].sourceFileUrlnullnullThe source file url value.
data.items[].parsedPayloadnullnullThe parsed payload value.
data.items[].statusstring"CONFIRMED"HTTP status code returned by the API.
data.items[].itemsCountinteger2The items count value.
data.items[].createdAtstring"2026-07-01T08:00:00.000Z"Timestamp when this resource was created.
data.items[].confirmedAtstring"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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
deliveryIdintegerYesThe unique identifier of the delivery.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_delivery_retrieve_succeed"Machine-readable application code for the result.
messagestring"Stock delivery retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.deliveryIdinteger77Identifier of the associated delivery.
data.restaurantIdinteger200Identifier of the restaurant.
data.brandIdinteger100Identifier of the brand.
data.userIdinteger12345Identifier of the user.
data.deliveryDatestring"2026-07-01"Date or timestamp for delivery.
data.supplierstring"Metro"The supplier value.
data.referencestring"BL-2026-0701"The reference value.
data.sourceFileUrlnullnullThe source file url value.
data.parsedPayloadnullnullThe parsed payload value.
data.statusstring"CONFIRMED"HTTP status code returned by the API.
data.itemsCountinteger2The items count value.
data.createdAtstring"2026-07-01T08:00:00.000Z"Timestamp when this resource was created.
data.confirmedAtstring"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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
deliveryIdintegerYesThe unique identifier of the delivery.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_delivery_report_succeed"Machine-readable application code for the result.
messagestring"Stock delivery report retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.deliveryobject{…}Object containing delivery fields.
data.delivery.deliveryIdinteger77Identifier of the associated delivery.
data.delivery.restaurantIdinteger200Identifier of the restaurant.
data.delivery.brandIdinteger100Identifier of the brand.
data.delivery.userIdinteger12345Identifier of the user.
data.delivery.deliveryDatestring"2026-07-01"Date or timestamp for delivery.
data.delivery.supplierstring"Metro"The supplier value.
data.delivery.referencestring"BL-2026-0701"The reference value.
data.delivery.statusstring"CONFIRMED"HTTP status code returned by the API.
data.delivery.itemsCountinteger2The items count value.
data.movementsarray[…]List of movements entries.
data.movements[]object{…}Object containing movements fields.
data.movements[].movementIdinteger9000Identifier of the associated movement.
data.movements[].productIdinteger501Identifier of the product.
data.movements[].movementTypestring"DELIVERY"The movement type value.
data.movements[].quantityDeltainteger24The quantity delta value.
data.movements[].quantityBeforeinteger20The quantity before value.
data.movements[].quantityAfterinteger44The quantity after value.
data.downloadUrlnullnullThe 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

NameTypeRequiredDescription
restaurantIdintegerYesThe restaurant that owns the delivery note.

Request Body

json
file=[binary]
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeRequiredExampleDescription
filebinaryYes[binary]Delivery note file (PDF, JPEG, PNG, or WebP), maximum 10 MB.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_delivery_parse_succeed"Machine-readable application code for the result.
messagestring"Delivery note parsed successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.itemsarray[…]List of items entries.
data.items[]object{…}Object containing items fields.
data.items[].rawSkustring"4798"The raw sku value.
data.items[].rawNamestring"Steak haché 125 g"The raw name value.
data.items[].quantityinteger24The quantity value.
data.items[].matchedProductIdinteger501Identifier of the associated matched product.
data.items[].matchTypestring"EXACT"The match type value.
data.geminiRawobject{…}Object containing gemini raw fields.
data.geminiRaw.itemsarray[…]List of items entries.
data.geminiRaw.items[]object{…}Object containing items fields.
data.geminiRaw.items[].skustring"4798"The sku value.
data.geminiRaw.items[].namestring"Steak haché 125 g"The name value.
data.geminiRaw.items[].quantityinteger24The quantity value.
data.sourceFilePathstring"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

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "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.

PropertyTypeExampleDescription
deliveryDatestring"2026-07-01"Date or timestamp for delivery.
supplierstring"Metro"The supplier value.
referencestring"BL-2026-0701"The reference value.
linesarray[…]List of lines entries.
lines[]object{…}Object containing lines fields.
lines[].productIdinteger501Identifier of the product.
lines[].quantityinteger24The quantity value.
lines[].reEnableAvailabilitybooleantrueThe re enable availability value.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"stock_delivery_create_succeed"Machine-readable application code for the result.
messagestring"Stock delivery created successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.deliveryIdinteger78Identifier of the associated delivery.
data.itemsCountinteger2The items count value.
data.movementsarray[…]List of movements entries.
data.movements[]object{…}Object containing movements fields.
data.movements[].productIdinteger501Identifier of the product.
data.movements[].quantityBeforeinteger20The quantity before value.
data.movements[].quantityAfterinteger44The quantity after value.
data.movements[].movementIdinteger9000Identifier of the associated movement.