Skip to main content

Getting Started

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

Base URL​

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

https://{url}

The host for each environment (test and production) is provided by DSOrder during onboarding. Every URL in this documentation is relative to it, for example https://{url}/orders/submitted.

All calls are initiated by the ERP. DSOrder never calls the ERP; data that flows from DSOrder to the ERP is fetched by the ERP with GET requests.

Authentication​

Every request must be authenticated with HTTP Basic authentication.

CredentialValue
UsernameNumeric client ID issued by DSOrder, for example 42
PasswordAPI key issued by DSOrder together with the client ID
GET /orders/submitted HTTP/1.1
Host: {url}
Authorization: Basic NDI6eW91ci1hcGkta2V5

The client determines the organization the data belongs to. Store, article, supplier, promotion and placement type identifiers are always resolved within that organization, so the same external identifier can safely exist in other organizations.

Requests without credentials, or with an unknown client ID or a wrong API key, are rejected with 401 Unauthorized and an empty body. Keep the API key secret; request a new one from DSOrder if it may have been exposed.

Requests​

  • Request bodies are JSON and must be sent as UTF-8 with Content-Type: application/json.
  • Every endpoint that accepts a body expects a JSON array of objects, even for a single record.
  • Field names are snake_case, exactly as listed on each page.
  • Do not send fields that are not documented. Unknown fields make the whole request fail with "success": false.
  • Path parameters that contain characters outside A-Z a-z 0-9 - _ . must be URL-encoded.

Identifiers​

Unless stated otherwise, identifiers are the ERP's own identifiers ("external IDs"): store_id, article_id, supplier_id, promotion_id and type_id. Stores, articles, suppliers, promotion types and placement types must already be known to DSOrder (they are set up during onboarding or by master data interfaces); records that reference unknown identifiers are rejected or skipped, as described on each page.

order_id is the exception: it is the identifier DSOrder assigns to a purchase order, returned by Get Submitted Orders.

Data types​

TypeFormatExample
dateyyyy-mm-dd string, no time and no time zone"2026-09-17"
timestampUnix epoch time in milliseconds, JSON number1758067200000
numberJSON number, decimals allowed12.250
booleantrue or falsetrue

Stock and sales quantities are stored with three decimal places and rounded half-up.

Timestamps are only used in responses. Where a timestamp represents a calendar date (such as a delivery date), it points to midnight UTC of that date.

Responses​

Response envelope​

Write operations (POST, PATCH, DELETE) and Get Submitted Orders return a JSON envelope:

NameTypeDescription
successbooleantrue if the request was processed, false if it failed
messagestring or nullReason of the failure; null on success
dataany or nullResponse payload, if the endpoint returns one; otherwise null
warningsarray of stringsNon-fatal issues found while processing; usually empty
{
"success": true,
"message": null,
"data": null,
"warnings": []
}

The other GET endpoints return a plain JSON array on success, and the same envelope with "success": false if the request fails (for example, when the store is unknown).

Business errors are returned with HTTP 200​

A request that DSOrder understood but could not process is answered with 200 OK and "success": false. Always check the success field; the HTTP status alone does not tell whether the data was saved.

{
"success": false,
"message": "Store with external ID 'STORE-9999' was not found for organization '42'",
"data": null,
"warnings": []
}

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 handled. Check success in the body.
401 UnauthorizedCredentials are missing or invalid. Empty body.
409 ConflictThe request could not be handled at all, for example a path date that is not in yyyy-mm-dd format or a missing request body. Empty body.

Network errors and 5xx responses from the hosting infrastructure are possible as with any HTTP service; retry them with a back-off.

Partial processing​

Records in a request are processed one by one, in the order they are sent. Unless an endpoint states otherwise, a failure stops processing at the failing record, records before it stay saved, and the response reports "success": false. All import endpoints are safe to retry, so the recommended recovery is to fix the cause and resend the whole request.