Shipping
Introduction
The DJUST Shipping module gives operators a centralized, dimension-based way to compute shipping fees dynamically at checkout. When enabled, shipping costs are no longer embedded in each offer — they are resolved from a configurable price matrix that combines logistic families, shipping zones, shipping types, and (in marketplace contexts) suppliers.
This page covers the module at a glance: how to enable it, its building blocks, and how it drives fees at checkout. Each building block has its own dedicated page for management details.
Enabling the Shipping Module
The module is toggled per tenant via the shippingEnabled configuration setting.
| Toggle | Effect |
|---|---|
shippingEnabled: true | When enabled, shipping fees are resolved from a configurable price matrix that combines logistic families, shipping zones, shipping types, and (in marketplace contexts) suppliers. |
Enabling the module is done by DJUST support during onboarding. Contact your DJUST contact if you need to activate it on your tenant.
Free-Shipping Tax Basis
Each price line can carry a free-shipping threshold (francoAmount) — the amount above which shipping fees drop to 0 for the logistic order. The francoTaxBasis OMS setting defines which amount of the logistic order that threshold is compared to.
| Value | Comparison basis |
|---|---|
TTC | The threshold is compared to the tax-inclusive total of the logistic order. |
HT | The threshold is compared to the tax-exclusive total of the logistic order. |
The default value is TTC. Existing tenants therefore keep strictly the same behaviour — no action is required to stay on the previous logic.
francoTaxBasisonly changes the comparison basis of the free-shipping threshold. The shipping price coming from the price matrix remains expressed tax-inclusive (TTC).
Reading and Updating the Setting
| Action | Method | Path |
|---|---|---|
| Read the OMS settings | GET | /v1/settings/oms |
| Update the OMS settings | PATCH | /v1/settings/oms |
GET /v1/settings/oms returns francoTaxBasis among the OMS settings (excerpt):
{
"francoTaxBasis": "TTC"
}PATCH /v1/settings/oms accepts francoTaxBasis in the request body. Allowed values: HT, TTC.
{
"francoTaxBasis": "HT"
}| HTTP | Situation |
|---|---|
400 | The submitted value is outside the allowed enumeration (HT, TTC). |
403 | The caller does not hold the DJUST_ADMIN role. |
Restricted setting. Changing
francoTaxBasisrequires theDJUST_ADMINrole — the same level of privilege as enabling the Shipping module itself.
Carts in progress. Switching the tax basis changes the amount the threshold is compared to, so a cart that had reached free shipping may no longer reach it — or the reverse. Carts open at the moment of the switch surface a dedicated warning. See Error / Warning codes.
Where Shipping Fees Are Exposed
When the module is active, the logistic order is the source of truth for shipping fees: they are resolved per logistic order (from the price matrix), not line by line.
As a result, the per-line shipping fields carried by logistic order lines — shippingPriceWithTaxes, shippingPriceWithoutTaxes and shippingTaxAmount — are no longer populated for orders coming from direct checkout. Read the shipping amount at logistic order level instead: totalShippingFeesWithTax, totalShippingFeesWithoutTax and totalShippingTaxAmount.
Orders created from a quote keep exposing shipping per line, because on quote workflows the shipping amount is entered line by line.
| Order origin | Shipping module | Per-line shipping exposed |
|---|---|---|
| Direct checkout | Active | No — read it on the logistic order |
| Quote | Active | Yes — shipping is entered per line on quotes |
| Any | Not active | Yes — behaviour unchanged |
flowchart LR
%% Styles (Readme)
classDef create fill:#e8f1ff,stroke:#2f6feb,stroke-width:2px,color:#0b3d91;
classDef read fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b;
classDef update fill:#e0f7fa,stroke:#06b6d4,stroke-width:2px,color:#0c4a6e;
classDef add fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#064e3b;
classDef remove fill:#fee2e2,stroke:#ef4444,stroke-width:2px,color:#7f1d1d;
classDef decision fill:#fff4e5,stroke:#f59e0b,stroke-width:2px,color:#7a3e00;
classDef place fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d;
classDef sys fill:#f2f4f7,stroke:#475569,stroke-width:2px,color:#111827;
classDef ok fill:#ecfdf5,stroke:#10b981,stroke-width:2px,color:#064e3b;
classDef stop fill:#fee2e2,stroke:#ef4444,stroke-width:2px,color:#7f1d1d;
A["🧾 Read a logistic order<br>ORDER-501 or ADM-ORDER-501"]:::read
B{"Order origin"}:::decision
C["📦 Shipping read on the<br>logistic order totals"]:::place
D["🧾 Shipping read on<br>each order line"]:::sys
A --> B
B -->|"direct checkout"| C
B -->|"quote"| D
style A rx:8,ry:8
style B rx:8,ry:8
style C rx:8,ry:8
style D rx:8,ry:8
Read endpoints concerned: ORDER-501 (shop) and ADM-ORDER-501 (admin).
Integration checkpoint. Integrations that read shipping at line level for direct-checkout orders must switch to the logistic order shipping amounts. Previously those lines returned
0, which read as "no shipping fees" even though fees existed on the logistic order.
Back-Office. For the same reason, the SHIPPING column is no longer displayed in the "Order lines" view when per-line shipping does not apply — a direct-checkout order on a tenant with the Shipping module active. The reference amount is the one carried by the logistic order.
Scope
The Shipping module applies only to tenants using DJUST's native shipping — either e-commerce or native marketplace setups.
Not applicable to Mirakl-connected setups. When shipping is delegated to Mirakl, shipping pricing and rules remain handled entirely by Mirakl. The DJUST Shipping module described on this page is not used.
Quotes are out of scope. The Shipping module applies to carts and orders only. Quote workflows continue to use the legacy shipping mechanism, regardless of whether the module is enabled.
Access & Permissions
All administration endpoints require dj-client: OPERATOR and a valid dj-api-key header. In the Back-Office, users with the operator role can access the shipping settings.
The Building Blocks
The Shipping module articulates around 4 building blocks, each with its own DJUST resource and management page:
| Building block | What it defines | Deep-dive |
|---|---|---|
| Shipping Zones | Geographical areas (countries and French departments) that scope where shipping rules apply. | Shipping Zones |
| Shipping Types | Delivery modes proposed to customers at checkout (e.g. Express, Standard, Click & Collect). | Shipping Types |
| Logistic Families | Product categories with similar shipping constraints (e.g. Fragile, Bulky). Attached to product classification categories. | Logistic Families |
| Shipping Price Matrix | The tariff table that combines the above into concrete price lines with a price and an optional free-shipping threshold. | Shipping Price Matrix |
Matrix dimensions — e-commerce vs marketplace
Each row in the price matrix is one unique combination of dimensions. The number of dimensions depends on your DJUST setup:
- In an e-commerce (single-vendor) setup, the matrix combines 3 dimensions:
logistic family × shipping zone × shipping type. - In a marketplace (multi-supplier) setup, a 4th dimension is added — the supplier. Each supplier has its own set of price lines alongside the other three axes.
The supplier is not a resource of the Shipping module itself — it lives in the DJUST Suppliers module and is simply referenced by the price matrix in marketplace contexts.
Operator-only configuration for now. Even in marketplace contexts, only operators can configure shipping rates in the price matrix. Direct configuration of shipping rates by suppliers is planned for a future iteration.
E-commerce — 3 dimensions
flowchart LR classDef brick fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b; classDef matrix fill:#e8f1ff,stroke:#2f6feb,stroke-width:2px,color:#0b3d91; classDef ok fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d; Z["📍 Shipping Zones"]:::brick T["🚚 Shipping Types"]:::brick F["📦 Logistic Families"]:::brick M["🧮 Price Matrix"]:::matrix C["🛒 Shipping fees<br>at checkout"]:::ok Z --> M T --> M F --> M M --> C style Z rx:8,ry:8 style T rx:8,ry:8 style F rx:8,ry:8 style M rx:8,ry:8 style C rx:8,ry:8
Marketplace — 4 dimensions (supplier added)
flowchart LR classDef brick fill:#ede9fe,stroke:#7c3aed,stroke-width:2px,color:#1e1b4b; classDef supplier fill:#fff7ed,stroke:#ea580c,stroke-width:2px,color:#7c2d12; classDef matrix fill:#e8f1ff,stroke:#2f6feb,stroke-width:2px,color:#0b3d91; classDef ok fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d; Z["📍 Shipping Zones"]:::brick T["🚚 Shipping Types"]:::brick F["📦 Logistic Families"]:::brick S["🏪 Suppliers"]:::supplier M["🧮 Price Matrix<br>(one row per supplier<br>combination)"]:::matrix C["🛒 Shipping fees<br>at checkout"]:::ok Z --> M T --> M F --> M S --> M M --> C style Z rx:8,ry:8 style T rx:8,ry:8 style F rx:8,ry:8 style S rx:8,ry:8 style M rx:8,ry:8 style C rx:8,ry:8
Updated 15 days ago

