Product & Variant Identifiers
Understanding the different identifier types for products and variants in the DJUST API.
Every product and variant in DJUST carries multiple identifiers. Some are auto-generated by the platform, others are provided by the integrator or imported through Data Hub. Understanding which identifier to use — and when — is essential for a smooth integration.
Key concepts
Identifier categories
DJUST identifiers fall into two categories:
- Platform-generated: Created automatically by DJUST when a product or variant is created. These are immutable and cannot be set or modified by the caller.
- Integrator-provided: Supplied by the integrator at creation time (via API or Data Hub import). Some are required, others are optional.
The idType query parameter
idType query parameterMost product and variant endpoints accept an idType query parameter. This tells the API which identifier you are passing in the path:
GET /v1/products/{id}?idType=EXTERNAL_ID
GET /v1/product-variants/{id}?idType=SKUIf idType is omitted, the API defaults to DJUST_ID.
Product identifiers
| Identifier | Type | Generated by | Unique | Required at creation | Mutable | idType value |
|---|---|---|---|---|---|---|
id | String | Platform | Yes | — | No | DJUST_ID (default) |
sku | String | Platform (sequence) | Yes | — | No | SKU |
externalId | String | Integrator | Yes | Yes | No | EXTERNAL_ID |
id (DJUST_ID)
id (DJUST_ID)The platform-generated business identifier. It is assigned automatically when the product is created and is the default identifier used in all API calls.
sku
skuAn auto-generated numeric identifier produced by a sequential counter (starting at 10000). It is unique and immutable. Useful for internal referencing and media association.
externalId
externalIdThe primary identifier for integrators. It must be provided at creation, must be unique across all products, and cannot be changed after creation. This is typically your product ID from an external system (PIM, ERP, etc.).
Variant identifiers
| Identifier | Type | Generated by | Unique | Required at creation | Mutable | idType value | Admin API | Shop API |
|---|---|---|---|---|---|---|---|---|
id | String | Platform | Yes | — | No | DJUST_ID (default) | Yes | Yes |
skuVariant | String | Platform (sequence) | Yes | — | No | SKU | Yes | Yes |
skuProduct | String | Derived from parent | No | — | No | — | Yes | Yes |
externalId | String | Integrator | Yes | Yes | No | EXTERNAL_ID | Yes | Yes |
externalSku | String | Integrator | Yes | No | Yes | — | Yes | No |
ean | String | Integrator | No | No | Yes | EAN (batch only) | Yes | Yes |
mpn | String | Integrator | No | No | Yes | MPN (batch only) | Yes | No |
id (DJUST_ID)
id (DJUST_ID)Same behavior as the product id — platform-generated, immutable, default identifier.
skuVariant
skuVariantAuto-generated numeric identifier from the same sequential counter as product sku. Unique across all variants. Used for media association and direct lookups.
skuProduct
skuProductAutomatically copied from the parent product's sku at variant creation time. It allows grouping variants by their parent product without an additional lookup.
externalId
externalIdSame behavior as the product externalId — integrator-provided, required, unique, and immutable.
externalSku
externalSkuAn optional identifier typically used to store a SKU from an external system (e.g., supplier catalog, Mirakl). Unlike externalId, it is mutable after creation and is not exposed in Shop APIs.
ean (European Article Number)
ean (European Article Number)An optional industry-standard barcode identifier. Not enforced as unique — multiple variants may share the same EAN.
mpn (Manufacturer Part Number)
mpn (Manufacturer Part Number)An optional manufacturer reference. Not enforced as unique. Not exposed in Shop APIs.
Batch-only identifiers:EANandMPNare only supported asidTypevalues in list/batch queries. A single-entity lookup withidType=EANoridType=MPNwill return an error.
Supported idType values per context
idType values per context| Context | Supported idType values |
|---|---|
| Product (Admin API) | DJUST_ID (default), SKU, EXTERNAL_ID |
| Variant (Admin API) | DJUST_ID (default), SKU, EXTERNAL_ID |
| Variant (Shop API) | DJUST_ID (default), EXTERNAL_ID |
Creation behavior
When a product or variant is created via the API, the following happens automatically:
| Identifier | Behavior |
|---|---|
id | Auto-generated by the platform. Never provided by the caller. |
sku / skuVariant | Auto-generated from a sequential counter (starting at 10000). Never provided by the caller. |
skuProduct | Automatically set to the parent product's sku. |
externalId | Required. Must be unique. Provided by the integrator. |
externalSku | Optional. Typically set during imports from external systems. |
ean / mpn | Optional. Provided by the integrator when available. |
Tip: Always provide a meaningfulexternalIdthat maps to your source system. This is the key you will use most often to look up and synchronize data.
Immutability rules
| Identifier | Immutable after creation? |
|---|---|
id | Yes |
sku / skuVariant / skuProduct | Yes |
externalId | Yes |
externalSku | No — can be updated |
ean | No — can be updated |
mpn | No — can be updated |
Platform-generated identifiers (id, sku, skuVariant, skuProduct) and integrator-required identifiers (externalId) are immutable — they do not appear in update request payloads.
Only externalSku, ean, and mpn can be modified after creation.
Data Hub behavior
When products and variants are imported through Data Hub, the identifier handling depends on the source system.
| Identifier | Handling | Auto-generated? |
|---|---|---|
externalId (product) | Mapped from source field (e.g., Mirakl productParentId) | No |
externalId (variant) | Mapped from source field (e.g., Mirakl product ID) | No |
externalSku | Mapped from source field (e.g., Mirakl productSku) | Yes — UUID if null (Mirakl only) |
ean / mpn | Mapped from source field if configured | No |
id, sku, skuVariant, skuProduct | Not handled by Data Hub — generated downstream by the platform | N/A |
Mirakl-specific behavior: When importing from Mirakl, if the source product has no SKU value, Data Hub automatically generates a random UUID asexternalSku. For FTP/CSV sources,externalSkuremains empty if not explicitly mapped.
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 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;
A[📦 Source system<br>PIM / ERP / Mirakl] -->|externalId, externalSku,<br>ean, mpn| B[🔄 Data Hub<br>Field mapping]
B --> C{externalSku<br>provided?}
C -->|Yes| D[✅ Use provided value]
C -->|No + Mirakl| E[🆕 Generate UUID]
C -->|No + FTP/CSV| F[Leave empty]
D --> G[📤 Send to platform]
E --> G
F --> G
G -->|Platform generates<br>id, sku, skuVariant| H[✅ Product/Variant<br>created]
class A sys
class B update
class C decision
class D place
class E create
class F sys
class G create
class H place
Typical workflow
A typical product integration follows these steps:
- Create a product via API or Data Hub, providing an
externalId. - The platform generates
idandskuautomatically. - Create one or more variants for that product, each with its own
externalId. - The platform generates
id,skuVariant, and copiesskuProductfrom the parent. - Query products/variants using
idTypeto specify which identifier you are passing. - Update variant metadata (
externalSku,ean,mpn) as needed.
sequenceDiagram participant Integrator participant DJUST API Integrator->>DJUST API: POST /v1/products (externalId: "ERP-1001") DJUST API-->>Integrator: 201 Created (id: "abc123", sku: "10000") Integrator->>DJUST API: POST /v1/product-variants (externalId: "ERP-1001-BLUE-M") DJUST API-->>Integrator: 201 Created (id: "def456", skuVariant: "10001", skuProduct: "10000") Integrator->>DJUST API: GET /v1/products/ERP-1001?idType=EXTERNAL_ID DJUST API-->>Integrator: 200 OK (product details) Integrator->>DJUST API: GET /v1/product-variants/10001?idType=SKU DJUST API-->>Integrator: 200 OK (variant details)
Best practices
- Use
externalIdas your primary integration key. It maps directly to your source system and is supported in both Admin and Shop APIs. - Do not store or rely on
skufor external integrations. SKUs are platform-generated numeric values meant for internal use and media association. - Always specify
idTypeexplicitly when not usingDJUST_ID, to avoid ambiguity. - Use
externalSkufor supplier-facing references when your variants have a different SKU in the supplier's system. - Provide
eanwhen available — it improves product identification and is exposed in Shop APIs for storefront use.
Common mistakes
| Mistake | Why it fails | What to do instead |
|---|---|---|
Trying to set id or sku at creation | These fields are auto-generated and not part of the creation payload | Let the platform generate them; use externalId for your own reference |
Updating externalId after creation | externalId is immutable | Choose your externalId carefully at creation time |
Using idType=EAN for a single GET | EAN is only supported in batch/list queries | Use DJUST_ID or EXTERNAL_ID for single lookups |
Expecting externalSku in Shop API responses | externalSku is only returned in Admin API responses | Use externalId or ean for shop-facing integrations |
Omitting idType when passing an externalId | The API defaults to DJUST_ID and will return a 404 | Always pass idType=EXTERNAL_ID when using an external ID |
Deprecated identifiers
| Identifier | Status | Replacement |
|---|---|---|
technicalId (UUID) | Deprecated since v2.4.0 | Use id (DJUST_ID) |
gtin | Deprecated since v2.4.0 | Use ean |
These fields may still appear in some API responses for backward compatibility, but they should not be used in new integrations.
Updated about 1 month ago
