Skip to main content

Getting Started

This page describes the conventions shared by every DSWMS integration endpoint. Read it before the individual interface pages.

Base URL​

All endpoints are served over HTTPS from the DSWMS integration service:

https://{url}

The host for each environment (test and production) is provided by DSWMS during onboarding. Every path in this documentation is relative to it and starts with the API version, for example https://{url}/v1/articles.

Authentication​

Every request must be authenticated with HTTP Basic authentication.

CredentialValue
UsernameNumeric client ID issued by DSWMS, for example 42
PasswordAPI key issued by DSWMS together with the client ID
POST /v1/articles HTTP/1.1
Host: {url}
Authorization: Basic NDI6eW91ci1hcGkta2V5
Content-Type: application/json

The API is stateless: no session is created, and the credentials must be sent with every request.

The client determines the organization the data belongs to. Articles, orders and other records are always identified within that client, so the same external identifier can safely exist for other clients.

Requests without credentials, or with an unknown client ID or a wrong API key, are rejected with 401 Unauthorized. The body of this response is plain text, not JSON. Keep the API key secret; request a new one from DSWMS if it may have been exposed.

Enabled interfaces​

Each interface is enabled per client during onboarding. A request to an interface that is not enabled for your client is rejected with 400 Bad Request:

{
"success": false,
"message": "Interface 'ARTICLES' is inactive for your client",
"errors": null,
"data": null
}

Requests​

  • Request bodies are JSON and must be sent as UTF-8 with Content-Type: application/json.
  • The top-level request body is a JSON array for the article interfaces (Articles, Article Split Groups, Article Units, Article Unit Barcodes, Article Empties) and a JSON object for the others (Customer, Purchase Orders, Customer Orders, Inventory Request). Each interface page shows the expected structure.
  • Field names are snake_case, exactly as listed on each page.
  • Fields that are not documented are ignored.
  • A body that is not valid JSON, or that does not match the expected structure (for example an object where an array is expected), is rejected with 400 Bad Request and the message The request is empty.

Identifiers​

Unless stated otherwise, identifiers are the ERP's own identifiers ("external IDs"), for example article_id, id of a customer, or the external ID of a purchase or customer order. Records are created if the identifier is not yet known to DSWMS and updated if it is.

Records referenced by a request, such as the articles of an order line, must already exist in DSWMS. Requests that reference unknown identifiers are rejected, as described on each page.

Data types​

TypeFormatExample
dateyyyy-MM-dd string, used in paths2026-09-17
date-timeyyyy-MM-dd'T'HH:mm:ss string, no time zone"2026-09-17T14:30:00"
numberJSON number, decimals allowed12.250
booleantrue or falsetrue

Where a request field accepts a date-time, it also accepts a Unix epoch timestamp in seconds (10 digits) or milliseconds, sent as a string of digits. The interface pages list which fields accept this.

Date-times in responses are expressed in the time zone configured for your client and carry no time zone suffix.

Responses​

Response envelope​

Every endpoint returns a JSON envelope:

NameTypeDescription
successbooleantrue if the request was processed, false if it failed
messagestring or nullReason of the failure; null on success
errorsarray or nullPer-record errors, returned by interfaces that process records independently; otherwise null
dataany or nullResponse payload, if the endpoint returns one; otherwise null
{
"success": true,
"message": null,
"errors": null,
"data": null
}

The exceptions are successful Purchase Order Receives and Customer Order Delivery requests, which return the requested document directly, with its own success and message fields. Each interface page shows its response.

The message text is meant for logs and troubleshooting. Its wording may change, so do not parse it.

HTTP status codes​

StatusMeaning
200 OKThe request was processed successfully.
400 Bad RequestThe request was not processed, or was processed only partially. The envelope has "success": false and a message, and errors where the interface reports failures per record.
401 UnauthorizedCredentials are missing or invalid. Plain-text body.
415 Unsupported Media TypeA POST request was not sent with Content-Type: application/json.

An unexpected failure while processing a request is reported as 400 Bad Request with the message Unexpected error. Network errors and 5xx responses from the hosting infrastructure are possible as with any HTTP service; retry them with a back-off.

Partial processing​

Requests are processed synchronously: when the response arrives, the data has been saved or rejected.

  • Purchase orders, customer orders, customers and inventory requests are processed as a whole document. If the document is rejected, nothing from it is saved.
  • Article interfaces process each article independently. If some articles fail, the others are still saved, and the response is 400 Bad Request with an errors array that lists the failed articles. Only the failed records need to be sent again.

Master data, purchase orders and customer orders are created or updated by their identifiers, so resending such a request after a failure is safe.