https://omnilinker.pl/api/. It is the same API the web app uses, so most of what you
can do on a screen you can also do from a script, a middleware such as n8n or Make, or your own service. Every request
is authenticated with an API key that acts as the person who created it.
What you can integrate today
Not available yet:
- Outbound webhooks. Omnilinker does not call your endpoint when something changes. Poll the order journal instead; see Webhooks and change feeds.
- OAuth clients for your own apps. You cannot register an OAuth or OpenID Connect client in Omnilinker. Use an API key; see Authentication.
- Client libraries. There is no official SDK. Generate a client from the OpenAPI document if you need one; see API reference.
API reference
The reference lists every endpoint with its parameters and response schema:
On the API keys page, the API reference button opens the Swagger UI.
The reference describes the whole API, including endpoints an API key cannot use (managing users, roles, settings and
keys). What a key can do explains which.
Make your first request
1
Create an API key
In Omnilinker, open API keys and click New API key. Pick what will use the key, give it a name and click
Create key. Copy the key when it is shown: it is shown once. See Get a key.
2
Check the key
Call The answer names the key, the person it acts as, your organization and the permissions the key really has. If
GET /api/api-key-management/whoami with the key in the X-Api-Key header:grantedPermissions is empty, the key can do nothing yet.3
Call an endpoint
For example, list the latest orders (the key needs the Orders permission):
API areas
Each module has its own route prefix. The table lists the areas an integration is most likely to use; the reference lists them all.
The endpoints of a module that is not enabled for your organization answer
403 Forbidden. Which modules you have
depends on your plan; see Modules and feature availability.
Conventions
Requests and responses
- Request and response bodies are JSON. Property names are camelCase:
totalCount,items,orderId. - Enumerations are sent and returned as numbers. The reference lists the numbers each one takes.
- Ids are GUIDs, except where the reference says otherwise (for example the order journal’s
id, a number). - Times are returned in UTC, in ISO 8601. Send times in UTC too, with a
Zor an offset, so they are not read in another time zone. - A product’s
dimensionsandweightare in the product’s ownunit, in a response and in a request alike: a box 15 cm high reads"height": 15with the centimetre unit, and sending that back keeps it 15 cm. Despite its name,weight.amountInGramsis the amount inweight.unit. They are sent rounded to 15 significant digits, so a value sent back unchanged, even through a double, keeps the stored amount exactly. - Endpoints that return a file (an export, an import template) answer with the file itself, not with JSON.
Lists and paging
List endpoints take three query parameters:
A paged list answers with the total and one page:
SkipCount by MaxResultCount until you have totalCount items. Some endpoints have their own
paging, such as the order journal’s cursor; their reference entry says so.
Your organization
A key belongs to one organization, and every call made with it reads and writes that organization’s data only. You do not send a tenant header or a tenant id: the key decides. To work with two organizations, use one key from each.Creating orders safely
When you create an order withPOST /api/ordering/order, send an Idempotency-Key header with a value that is unique
to that order in your system, up to 128 characters. If the call times out and you send it again with the same value,
Omnilinker returns the order it already created instead of creating a second one. You can also send the value as
idempotencyKey in the body; the body wins when both are present.
Errors
When a call fails, the body describes the error in one shape, whatever the endpoint:codeidentifies the error. It is present when the error has one; base your handling on it rather than on the message.messageis meant for people, and follows the request’s language: sendAccept-Language: pl-PLfor Polish orAccept-Language: enfor English.validationErrorslists each invalid field, asmessageandmembers(the field names), when the request did not pass validation.datacarries values that belong to the error, such as the limit that was exceeded.
Omnilinker does not limit how many requests an API key makes today.
Authentication
Send the key, test it, and see what it can do.
Webhooks and change feeds
Follow order changes with the order journal.
File formats
Columns for the stock import and the exports.
API keys
Create, rotate and revoke keys.