Inventory Management

Inventory Management Guide

This guide explains how to create, update, and delete SKUs using the inventory management endpoint.

Endpoint

POST /inventory

Full URL: https://api.spreetaileu.com/api/api/v1/inventory

Authentication

Use Bearer token authentication:

Authorization: Bearer your-access-token

Get your token from POST /auth/login.

How SKU scoping works

  • You send your SKU as plain text, for example SKU123
  • The API stores and manages it in Linnworks as BRAND_SKU123
  • BRAND is taken from your authenticated client name
  • You only see and submit your own SKU, never the brand prefix

This guarantees you can only manage SKUs in your own brand scope.

Operations

Set operation to one of:

  • create
  • update
  • delete

Each request supports multiple SKUs in one items array. sku is always required for each item.

Request format

Use the same items array shape for all operations.
If required fields are missing for the selected operation, the response will tell you exactly which fields are required.

{
  "operation": "create",
  "items": [
    {
      "sku": "SKU123",
      "itemTitle": "Test Product",
      "barcodeNumber": "1231231231231",
      "height": 34,
      "width": 21,
      "length": 123,
      "weight_kg": 12
    }
  ]
}

Operation examples

Create (all fields required)

{
  "operation": "create",
  "items": [
    {
      "sku": "SKU123",
      "itemTitle": "Test Product",
      "barcodeNumber": "1231231231231",
      "height": 34,
      "width": 21,
      "length": 123,
      "weight_kg": 12
    }
  ]
}

Update (sku + itemTitle required)

{
  "operation": "update",
  "items": [
    {
      "sku": "SKU123",
      "itemTitle": "Updated Title",
      "length": 42,
      "weight_kg": 11.5
    }
  ]
}

Delete

{
  "operation": "delete",
  "items": [
    { "sku": "SKU123" },
    { "sku": "SKU124" }
  ]
}

Field notes

  • length maps to Linnworks Depth
  • weight_kg is in kilograms

Validation and business rules

For every SKU, the API checks Linnworks first.

  • If a SKU already exists during create:
    • SKU already exists, Please use Update operation to change details
  • If a SKU exists and has inventory during create:
    • SKU already exists and with Inventory, please reach out to AM for any changes
  • If update/delete is requested for a SKU with inventory:
    • Can't Update/Delete SKU as we already have inventory, please reach out to AM for any changes.

Delete logging

Delete responses include:

  • delete_log.deleted - SKUs archived successfully
  • delete_log.unable_to_delete - SKUs that failed with reason

Typical workflow

  1. Create SKU(s)
  2. Use update for metadata changes
  3. Delete/archive only when no inventory is present

Example response

{
  "success": true,
  "operation": "delete",
  "client": "EMKE",
  "processed": 2,
  "success_count": 1,
  "failed_count": 1,
  "results": [
    {
      "sku": "SKU123",
      "status": "success",
      "message": "Deleted successfully",
      "operation": "delete"
    },
    {
      "sku": "SKU124",
      "status": "failed",
      "message": "Can't Update/Delete SKU as we already have inventory, please reach out to AM for any changes.",
      "operation": "delete"
    }
  ],
  "delete_log": {
    "deleted": ["SKU123"],
    "unable_to_delete": [
      {
        "sku": "SKU124",
        "reason": "Can't Update/Delete SKU as we already have inventory, please reach out to AM for any changes."
      }
    ]
  }
}

Related docs