Open API. Full documentation. Build whatever you want.

Lagersystem is built with developers in mind. Full REST API, interactive Swagger documentation, webhooks and a TypeScript Rule Engine. Integrate with anything.

Broad API Catalogue

All core features in Lagersystem are available via REST API. Orders, products, stock, shipments, returns — everything can be managed programmatically.

Orders

— Create, read, update, delete orders. Manage order lines, status and metadata.

Products/Items

— CRUD on product master data. Variants, prices, images.

Stock/Inventory

— Read stock status per location and item. Adjust inventory.

Shipments

— Generate shipping labels, retrieve tracking numbers, close orders.

Returns

— Create return orders, manage the RMA flow.

Locations

— Read and manage warehouse locations.

Batch/Serial Numbers

— Read and register batch and serial number data.

Handheld Terminal

— API for handheld terminal operations.

Multipick

— Start and control multipick sessions via API.

OpenAPI/Swagger documentation

Interactive documentation — try calls directly in the browser

Complete API documentation generated from the OpenAPI v3.0 specification. Test endpoints directly in Swagger UI without writing code.

– OpenAPI v3.0 spec
– Interactive Swagger UI
– Authorisation with API key directly in the UI
– Request/response examples for all endpoints
– Try-it-yourself functionality

Authentication and access control

API access with tiered permissions

Create API keys with exactly the permissions needed. Each key has its own scope — no unnecessary access.

– API key-based authentication
– Tiered scopes per key
– Separate keys per integration/partner
– Activity log per API key

Webhooks and events

Get notified when something happens

Register webhook endpoints and get notified in real time when orders are created, labels are generated, items are received or status changes.

– Order events: created, changed, sent, cancelled
– Stock events: received, picked, adjusted
– Shipment events: label generated, tracking updated
– Configurable per event type
– Retry mechanism on failure

TypeScript Rule Engine

Write business logic without waiting for us

Beyond the API, you can write business rules directly in TypeScript. The rules run automatically on order import, carrier selection and other events.

– 8 rule types (order modification, carrier selection, subsite assignment, and more)
– Test with real order data
– Transaction log for debugging

Integration examples

Example: Create an order via API

				
					POST /api/v1/orders
Content-Type: application/json
X-API-Key: your-api-key

{
  "orderNumber": "WEB-12345",
  "customer": {
    "name": "Anders Hansen",
    "email": "anders@example.com"
  },
  "deliveryAddress": {
    "street": "Vestergade 10",
    "zip": "8000",
    "city": "Aarhus",
    "country": "DK"
  },
  "lines": [
    {
      "itemNumber": "SKU-001",
      "quantity": 2
    }
  ]
}

				
			

Example: Retrieve stock status

				
					GET /api/v1/stock?itemNumber=SKU-001
X-API-Key: your-api-key
				
			

Example: Generate a shipping label

				
					POST /api/v1/orders/12345/ship
X-API-Key: your-api-key

{
  "cargoMethod": "POSTNORD",
  "weight": 2.5
}

				
			

Who uses the API?

Businesses with their own systems

Connect your own order system, webshop platform or ERP system directly with Lagersystem via the API.

Developers and agencies

Build integrations for your clients. The API documentation makes it easy to get started.

3PL customers

Give your fulfilment customers the ability to submit orders directly via the API and receive status updates.

More API endpoints

Extended endpoint list

Beyond the primary endpoints, the Lagersystem API also has:

Cart API

— Look up cart/box via barcode

Box API

— Handling of physical boxes in multipick

Label API

— Add/remove labels on orders

Transfer API

— Create and manage stock transfers

Goods-in API

— Cancel scans, manage receiving

Shipping Package API

— Shipping package handling

Location API

— Remove/manage locations

Webhook system

Real-time notifications when something happens in the system

Lagersystem has a complete webhook system built to the standard-webhooks specification.
Create subscriptions, choose events, and receive signed HTTP POST calls in real time.

38 webhook event types

Order (5):

  • order.received — New order received
  • order.deleted — Order deleted
  • order.status_changed — Order status changed (incl. old and new status)
  • order.handled — Order handled/sent
  • order.partdelivered — Partial delivery sent


Shipment and returns (2):

  • shipment.generated — Shipping label generated (incl. label URL and carrier)
  • return.generated — Return label generated


Goods receipt (3):

  • goodsin.received — Goods received
  • goodsin.handled — Goods receipt completed
  • goodsin.partreceived — Partial receipt


Users (3):

  • user.created, user.updated, user.deleted


Items and stock (9):

  • item.modified — Item changed
  • stock.changed — Stock quantity changed (item number, quantity, batch, location)
  • additionalbarcode.added/updated/deleted — Additional barcodes
  • itemlocation.added/updated/deleted — Item locations
  • locationseries.added/updated/deleted — Location series


Returns / RMA (4):

  • rma.created, rma.updated, rma.deleted, rma.status_changed


Stock counting (3):

  • stockdiff.item_added, stockdiff.item_deleted, stockdiff.run


Status count (3):

  • statuscount.created, statuscount.started, statuscount.finished


Transfers (2):

  • transfer.created, transfer.finished


Reports (2):

  • report.endofday_generated, report.combinedcustoms_generated


Test (1):

  • webhook.test — Test event for verification

Payload format (standard-webhooks)

All webhooks are sent as HTTP POST with a JSON body in standard-webhooks format:

				
					{
  "type": "shipment.generated",
  "timestamp": "2026-03-23T14:30:45+00:00",
  "data": {
    "orderId": 12345,
    "orderRef": "ORD-2024-001",
    "labelUrl": "https://...",
    "provider": "PostNord"
  }
}

				
			

Signing (HMAC-SHA256)

Each webhook is signed with HMAC-SHA256. Three headers are sent along:

  • webhook-id — Unique message ID (msg_abc123...)
  • webhook-timestamp — Unix epoch seconds
  • webhook-signaturev1,{base64(HMAC-SHA256)} signature

Secret format: whsec_{base64(24 random bytes)} — generated on creation.


Verification at the recipient:

  1. Extract headers
  2. Verify that the timestamp is recent (within 5 min.)
  3. Reconstruct the signing payload: {webhook-id}.{timestamp}.{body}
  4. Calculate HMAC-SHA256 with your secret
  5. Compare with the received signature (constant-time)

Retry logic with exponential backoff

Failed deliveries are retried up to 7 times with increasing wait times:

AttemptWait time
1Immediate
25 minutes
330 minutes
42 hours
55 hours
610 hours
720 hours

All wait times have +/-20% jitter to avoid thundering herd.

Special HTTP status codes:

  • HTTP 410 Gone → Permanent failure, subscription automatically disabled
  • HTTP 429 Too Many Requests → Respect the Retry-After header
  • 5+ days of failures → Subscription automatically disabled

Webhook API endpoints

GET    /api/webhooks              — List all subscriptions
POST   /api/webhooks              — Create new subscription
GET    /api/webhooks/{id}         — Get subscription details
PUT    /api/webhooks/{id}         — Update subscription
DELETE /api/webhooks/{id}         — Delete subscription
POST   /api/webhooks/{id}/test    — Send test webhook

All endpoints require API key authentication.

Delivery logs

Complete log of all delivery attempts:

  • Timestamp with millisecond precision
  • HTTP status code and response time
  • Request headers and body size
  • Response summary (first 512 characters)
  • Filterable by subscription, event type and status
  • 30 days of history (automatic cleanup)

UI administration

Set up and manage webhooks directly in Lagersystem:

  • Create subscriptions with URL, description and event filter
  • Choose exactly which events you want to receive (or all)
  • Test button: Send a test webhook instantly
  • See delivery logs with status, HTTP code and response time
  • Enable/disable subscriptions
  • Status badges: Active, auto-disabled (failing), auto-disabled (410)
  • ACL-protected (requires webhook permission)

Order management via API

Order CRUD

Full order management via API:
Create orders with customer, address, lines, payment, shipping
Read orders with full detail incl. lines and metadata
Update orders — status, addresses, notes, extra fields
Delete/cancel orders
Order lines: Add, change, remove lines
Labels: Add/remove tags via API
Status change: Move orders through the entire status flow

User API

– Create/edit/delete users via REST
– Retrieve user groups
– Authentication (username/password)
– Retrieve all users with DataTable pagination

Product API

– Item search with pagination
– Item information with prices (configurable)
– Item information with stock status (configurable)
– Variant information
– Hash-based validation for caching

Ready to integrate?

See our API documentation or book a technical demo with our developer team.