Webhooks
Receive real-time notifications when warehouse operations complete.
Overview
Instead of polling the API for status changes, LogisticsWMS can call your system automatically when key events occur. Webhooks deliver a POST request to your
configured endpoint with the event payload.
Webhook Types
| Webhook | Trigger | Use Case |
|---|---|---|
| Close Reception | A reception is completed in the WMS | Update your ERP with received quantities, confirm purchase orders, trigger invoicing |
| Close Shipping Order | A shipping order is fully packed and dispatched | Generate shipping labels, update order status, notify customers |
| Stock Regularization | Stock is adjusted (inventory count, damage, etc.) | Sync stock levels with your e-commerce platform or ERP |
Configuration
Webhook URLs and credentials are configured directly in the WMS application under Plugins → REST API → Webhooks:
- Authentication — set the username and password that the WMS sends with outgoing webhook requests (HTTP Basic Auth)
- Endpoint URLs — configure the URL for each webhook type: reception close, client return close, shipping order close, supplier return close and stock regularization. A webhook whose URL is left empty is not sent.
Close Reception Webhook
Trigger
Fired when a reception is closed in the WMS. Documents of type PURCHASE_ORDER and WAREHOUSE_TRANSFER_IN are sent to the reception close URL; documents of type
CLIENT_RETURN are sent to the separate client return close URL, with the same payload. Other reception types are not sent.
Payload
{
"closingDocumentCode": "REC-2026-0042",
"documentNumber": ["PO-2026-0001"],
"documentExternalCode": "PO-2026-0001",
"documentType": "PURCHASE_ORDER",
"company": "ACME Corp",
"originCode": "SUPPLIER-ACME",
"receptionDate": "2026-04-16",
"observations": "All goods received in good condition",
"lines": [
{
"externalCode": "ERP-SKU-001",
"quantity": 500,
"lotCode": "LOT-2026-A",
"expirationDate": "2028-12-31",
"serialNumbers": []
}
]
}
Payload Fields
| Field | Type | Description |
|---|---|---|
closingDocumentCode |
string | WMS internal code for the closing document |
documentNumber |
string[] | List of document numbers associated with this reception |
documentExternalCode |
string | Your external code for the original document |
documentType |
string | The document type (see Enum Reference) |
company |
string | Company name |
originCode |
string | Supplier or origin identifier |
receptionDate |
date | Date the reception was completed (ISO 8601) |
observations |
string | Operator notes from the reception |
lines |
array | Received product lines with actual quantities |
lines[].externalCode |
string | Product external code |
lines[].quantity |
number | Actual quantity received |
lines[].lotCode |
string | Lot code (if lot-tracked) |
lines[].expirationDate |
date | Lot expiration date (if applicable) |
lines[].serialNumbers |
string[] | Serial numbers registered (if serial-tracked) |
Expected Response
Your endpoint must return a 2xx status code (e.g., 200 OK) to acknowledge receipt. The body is optional. To reject the document, return
{"success": false, "message": "..."}: the WMS then marks the integration as failed and shows your message to the operator. Any non-2xx response is also treated as a
failure.
Close Shipping Order Webhook
Trigger
Fired when a shipping order is fully dispatched. Documents of type CLIENT_EXPEDITION are sent to the shipping order close URL; documents of type SUPPLIER_RETURN are
sent to the separate supplier return close URL, with the same payload. Other shipping types are not sent.
Payload
{
"closingDocumentCode": "EXP-2026-0015",
"documentNumber": ["SO-2026-0003"],
"documentExternalCode": "SO-2026-0003",
"documentType": "CLIENT_EXPEDITION",
"company": "Customer XYZ",
"destinationCode": "CUST-XYZ",
"deliveryPointExternalCode": "DP-LISBON-01",
"carrier": "DHL Express",
"deliveryPlace": "Lisbon, Portugal",
"observations": "",
"lines": [
{
"externalCode": "ERP-SKU-001",
"quantity": 30,
"lotCode": "LOT-2026-A",
"expirationDate": "2028-12-31",
"serialNumbers": []
}
],
"packingList": [
{
"packingCode": "PKG-001",
"weight": 10.5,
"lines": [
{
"externalCode": "ERP-SKU-001",
"quantity": 30
}
]
}
]
}
The packingList array provides details about how items were physically packed, including the package code, weight, and which products are in each package. This is useful for
generating shipping labels and customs documentation.
Stock Regularization Webhook
Trigger
Fired when stock is adjusted outside normal reception/shipping flows (a positive or negative stock regularization). One request is sent per adjusted product and lot, and only for products that have an API external code.
Payload
{
"productExternalCode": "ERP-SKU-001",
"lotCode": "LOT-2026-A",
"quantity": -5,
"movementTime": "2026-04-16T10:30:00+01:00",
"warehouse": "WAREHOUSE-A"
}
Payload Fields
| Field | Type | Description |
|---|---|---|
productExternalCode |
string | Product external code |
lotCode |
string | Lot code (null if the product is not lot-tracked) |
quantity |
number | Adjusted quantity (see below for the sign) |
movementTime |
date-time | When the adjustment was made (ISO 8601) |
warehouse |
string | External code of the warehouse (null if the warehouse has none) |
Unlike the close webhooks, a failed stock regularization delivery is not shown to the operator and cannot be re-sent, so reconcile stock periodically with
POST /api/external/v1/product/stock.
quantity indicates stock was removed (e.g., damaged or missing). A positive quantity indicates stock was added (e.g., found during
count).
Security
-
Use HTTPS. The payload and the Basic Auth credentials travel in every request, so your endpoint should use HTTPS. The WMS does not enforce it: an
http://URL is called as configured. - Basic Auth. LogisticsWMS authenticates to your endpoint using HTTP Basic Authentication. You provide the username and password during webhook configuration.
-
Idempotency. Your endpoint should be idempotent. The same webhook may be delivered more than once, for example when your endpoint processed a request but answered after
the timeout and an operator then re-sent the document. For the close webhooks, use the
closingDocumentCodeas a deduplication key. - Timeouts. LogisticsWMS waits up to 10 seconds to connect to your endpoint and up to 45 seconds for it to respond. If your endpoint does not respond within this window, the delivery is considered failed. The close webhooks are sent while the operator waits for the close to finish, so respond as fast as you can.
- No automatic retries. A failed delivery is not retried by the WMS. A failed close webhook is shown to the operator, who can re-send the document once your endpoint is available again.
Your Endpoint Requirements
- Accepts
POSTrequests withContent-Type: application/json - Validates the Basic Auth credentials in the
Authorizationheader - Returns a 2xx status code to acknowledge receipt
- Processes the payload asynchronously (respond quickly, process later)
- Handles duplicate deliveries idempotently (use
closingDocumentCodeas key) - Available over HTTPS with a valid SSL certificate
- Responds well within 45 seconds
- Configure your webhook URLs in the WMS under Plugins → REST API → Webhooks
- Review the Error Catalog for handling API errors
- Explore the Enum Reference for all document types and statuses