Supported data types
Orders
Online and in-store orders, including tax-inclusive prices, shipments, and vouchers
Returns
Return orders with line-level quantities and reasons
Products
Product catalog with variants, categories, brand, and imagery
Product inventory
Per-warehouse stock levels and cost of goods sold
In-delivery
Outstanding purchase order quantities per line
Prerequisites
- An Omnium tenant on
api.omnium.no(production) orapitest.omnium.no(test). - An Omnium API user created inside the Omnium admin GUI under Configuration > Authorization > API Users. Use the
test.omnium.noadmin GUI for test tenants andadmin.omnium.nofor production. - Read roles assigned to that API user for the data types you want to sync:
OrderRead,ProductRead,InventoryRead, andPurchaseOrderRead. A freshly created API user has no roles — the token exchange still succeeds, but every read endpoint returns403with an empty body until roles are granted. Roles take effect on the next issued token; no secret rotation is needed.
The Omnium admin GUI signs in through Azure AD (Microsoft Entra). An Azure AD email and password that works for the portal is not an API credential and returns
401 from /api/Token. Only credentials for a provisioned API user work.Step-by-step integration guide
1
Create an Omnium API user
- Sign in to your Omnium admin GUI (
test.omnium.nofor test tenants,admin.omnium.nofor production). - Go to Configuration > Authorization > API Users and create a new API user.
- Assign the read roles your integration needs:
OrderRead,ProductRead,InventoryRead, andPurchaseOrderRead. - Copy the generated
clientIdandclientSecret. Store them securely.
2
Collect your tenant details
Gather the following before sharing credentials:
clientIdandclientSecretfor the API user you just created.apiEndpoint— the base URL for your tenant. Defaults tohttps://api.omnium.no; usehttps://apitest.omnium.nofor the test environment.- Your warehouse-code mapping — a list mapping each Omnium
warehouseCode(used on inventory records, order shipments, and returns) to a readable warehouse name. - The tenant’s order statuses and order types. In Omnium,
statusandorderTypeon an order are free text configured per tenant, so we need the values your tenant actually uses. - (Optional, multi-language tenants)
productLanguageandproductMarketId— Omnium stores each product language as a separate document. Set these to avoid duplicate product rows. - (Optional)
warehouseCodes— restrict inventory extraction to specific warehouses.
3
Submit your credentials
Package the details as shown and send them to your Customer Success Manager.
Omnium example
Send credentials through a secure channel as recommended by the Customer Success team.
Order status and order type mapping
Omnium orders carry two tenant-configurable free-text fields that must be mapped so downstream reporting is accurate.statusMap
Order status is free text constrained by each tenant’s order settings, not a fixed enum. Our connector already handles the common values (New, InProgress, Shipped, Completed, Cancelled, PartiallyReturned, Returned). Anything else maps to UNKNOWN — and an UNKNOWN order still counts as a sale in reporting (only CANCELLED is excluded).
During onboarding, list every status configured in the tenant’s Omnium order settings. Any value outside the built-in set goes into statusMap so it is routed to the correct DEMA OrderStatus (for example AwaitingPayment → PENDING, OnHold → PENDING).
offlineOrderTypes
Order orderType is also tenant-configurable free text. Types listed in offlineOrderTypes map to order type OFFLINE; everything else defaults to ONLINE. The default is ["Pos"]. If your tenant uses different values for in-store orders (for example Store, Retail), list them here.
Cost of goods sold (COGS)
COGS is sourced from the product inventory feed, not from order lines. Omnium’s order-linecost is enriched from product data, so it carries no information the inventory feed doesn’t have. Including it would let an unpopulated or zero order-line cost silently override the inventory COGS and report full margin on that line. Our order transformer drops the order-line cost, and margin is computed from cost, costCurrency, and costTotal on each Inventory/Search record.
Make sure inventory cost is populated for the SKUs and warehouses you care about — an unpopulated cost leaves margin to fall back on other configured cost sources.
Warehouse, shipment, and delivery address
Order lines take theirwarehouse, shipmentId, shipmentStatus, and shippingProvider from the shipment inside orderForm.shipments[] that carries the line (matched on lineItemId). A line that no shipment has picked up yet has none of these fields set.
The order has no shipping address of its own — the delivery address lives on each shipment. The connector reads country, zipCode, and city from the first shipment’s address, falling back to the billing address.
The warehouse code on each shipment is resolved through warehouseMap (see above), which is also applied to inventory rows and return lines.
Data synchronization process
After the integration is set up, our platform will:- Initial data load: Perform a full sync of historical orders, returns, products, inventory, and inbound deliveries.
- Ongoing synchronization: Poll Omnium daily. Orders are fetched twice per period — once by
createdFrom/createdToand once bymodifiedFrom/modifiedTo— and deduplicated, so both new orders and changes to older ones are picked up.
Troubleshooting and support
401from/api/Token— the credential is an Azure AD user, not a provisioned Omnium API user. Create one in the admin GUI under Configuration > Authorization > API Users.403with an empty body on a read endpoint — the API user is missing the read role for that data type. Assign the role in the admin GUI; a new token issued after the change carries the new permissions.- An order status maps to
UNKNOWN— the tenant is using a status value outside the built-in set. Add it tostatusMap.

