OFFER

This page introduces Offer imports in DJUST. It explains the overall logic, the data structure, and the expected fields. format for creating and updating Offer Stocks and Offer Prices

⚙️ Introduction

This job allows the creation and update of Offers (stocks and prices) via CSV import or API Connector.

You can:

  • Create and update Offer Stocks
  • Create and update Offer Prices
  • Deactivate or delete stocks and prices
  • Define pricing rules including price ranges and offer types

📂 Import model

CSV Structure

The CSV file must contain one row per Offer Stock / Offer Price combination.

📄

Template CSV

You can use the following spreadsheet as a template to structure your import:

Offers - Template


API Connector

When using the API Connector, DJUST does not receive a JSON payload directly. Instead, the job executes a 3-step file generation flow:

  1. Call 1 — File generation (POST /offer/file/generate): triggers the generation of a CSV file on the external system. A sinceUpdateDateTime parameter can be passed to retrieve only records updated since the last job execution.
  2. Call 2 — Status polling (GET /offer/file/status): polls the external system until the file is ready. The job retries until the statusFile attribute returns AVAILABLE.
  3. Call 3 — File download (GET $.urlFile): retrieves the URL returned by Call 2 and downloads the CSV file for processing.
💡

Note

The API Connector processes the same CSV format as the SFTP import. The difference lies only in how the file is retrieved — via API calls rather than from an FTP server.


📋 Fields

FieldDefinitionRequired for creationRequired for updateEditableDefault Value
Stock External IdUnique external identifier of the Offer Stock✅✅
Stock Variant IdExternal identifier of the product variant associated with the stock✅✅
Supplier External IdExternal identifier of the supplier associated with the stock✅✅
Stock NumberAvailable stock quantity✅✅✅
Quantity Per PackNumber of units per pack✅
CurrencyCurrency code for the offer (e.g. EUR, USD)✅EUR
Minimum Order QuantityMinimum quantity that can be ordered✅
Maximum Order QuantityMaximum quantity that can be ordered✅
Lead Time To ShipProcessing time before the order is shipped✅
Minimum Shipping PriceMinimum shipping cost for this stock✅
Minimum Shipping Price AdditionalAdditional minimum shipping fees✅
Minimum Stock AlertStock quantity threshold that triggers a low-stock alert✅
Minimum Shipping TypeMinimum shipping method associated with this stock✅
Minimum Shipping ZoneMinimum shipping zone associated with this stock✅
Packing TypePackaging type (e.g. BOX, UNIT)✅
Delete StockDeletes the Offer Stock✅FALSE
Active StockActivates or deactivates the Offer Stock✅TRUE
Stock Available Start DateStart date of the stock availability period✅
Stock Available End DateEnd date of the stock availability period✅
Enable Quote RequestsAllows quote requests to be made on this stock✅
Price External IdUnique external identifier of the Offer Price✅✅
Price Quantity Per ItemReference quantity used for unit price calculation✅
Price RangesPrice tiers defining graduated pricing by ordered quantity. Must include a range for quantity 1✅✅✅
Offer TypeDefines the pricing audience: PUBLIC, ACCOUNT, or GROUP✅
Customer Account External IdExternal identifier of the account targeted by the price. ☑️ Required if Offer Type = ACCOUNT☑️✅
Customer TagCustomer tag targeted by the price. ☑️ Required if Offer Type = GROUP☑️✅
Stores External IdStore the Offer Price applies to. ☑️ Required in a multi-store context☑️☑️✅
Delete PriceDeletes the Offer Price✅FALSE
Active PriceActivates or deactivates the Offer Price✅TRUE
☑️

Conditionally required

⚠️

Required Custom Fields

Any custom fields configured as required in DJUST must also be included.


🧠 Key Business Rules

  • An Offer is composed of two linked objects: an Offer Stock (identified by Stock External Id) and an Offer Price (identified by Price External Id). An Offer Price must always be linked to an existing Offer Stock.
  • Price Ranges must always include a range for quantity 1. Graduated pricing (volume discounts) can be defined by adding additional ranges.
  • Offer Type determines the pricing audience: PUBLIC applies to all buyers; ACCOUNT restricts the price to a specific customer account (Customer Account External Id required); GROUP restricts the price to a customer tag (Customer Tag required).
  • An Offer Stock is not attached to a store: it is available in the stores its Supplier and its product variant have in common. Multi-store is handled at the Offer Price level — to price the same stock in several stores, add one line per store, each with its own Price External Id and its own Stores External Id.
  • An Offer Price is attached to a single store: provide one Store ID in Stores External Id. The column is required in a multi-store context; in a mono-store context it can be left empty and the default store is used.
  • The store of an Offer Price must be assigned to both the Supplier (Supplier External Id) and the product variant (Stock Variant Id) of the Offer Stock, otherwise the line is rejected.
  • Setting Delete Stock to TRUE removes the Offer Stock and all associated Offer Prices.
  • Setting Delete Price to TRUE removes only the targeted Offer Price, without affecting the stock.
  • Setting Active Stock to FALSE deactivates the stock and makes it invisible to buyers without deleting it.
  • Setting Active Price to FALSE deactivates the Offer Price without deleting it. The active / inactive state of an Offer Price is also visible and editable manually in the Back Office, so one-off corrections do not require an import job.
  • Empty fields in standard columns do not delete recorded values.
  • Empty fields in Custom Fields delete the recorded values.

Price Ranges Format

The priceRanges column uses a pipe-separated (|) format to define pricing tiers and (||) to separate ranges
Required: creation + update

Standard price:

quantity|unitPrice||quantity|unitPrice

Example: 1|100 → 1 unit, price 100

With discount price:

quantity|unitPrice|discountPrice||quantity|unitPrice|discountPrice

Empty Field Behavior

The OFFER import uses a conditional update approach: only fields that are explicitly provided are modified.

Offer Stock

FieldIf column is empty
Stock External Id❌ Error — line rejected
Stock Variant Id❌ Error — line rejected
Supplier External Id❌ Error — line rejected
Stock Number❌ Error — line rejected
Quantity Per PackPreserved (unchanged)
CurrencyPreserved (default: EUR)
Minimum Order QuantityPreserved
Maximum Order QuantityPreserved
Lead Time To ShipPreserved
Minimum Shipping PricePreserved
Minimum Shipping Price AdditionalPreserved
Minimum Stock AlertPreserved
Minimum Shipping TypePreserved
Minimum Shipping ZonePreserved
Packing TypePreserved
Delete StockEmpty = FALSE (stock not deleted)
Active StockEmpty = TRUE (stock active)
Stock Available Start DatePreserved
Stock Available End DatePreserved
Enable Quote RequestsPreserved

Offer Price

FieldIf column is empty
Price External Id❌ Error — line rejected
Price Quantity Per ItemPreserved
Price Ranges⚠️ Clears all price ranges
Offer TypePreserved
Customer Account External IdPreserved
Customer TagPreserved
Stores External Id❌ Error in a multi-store context — line rejected. In a mono-store context, the default store is used
Delete PriceEmpty = FALSE (price not deleted)
Active PriceEmpty = TRUE (price active)

📌

Best Practices

✔️ Always include a Price Range for quantity 1 to avoid import errors.

✔️ Ensure Customer Account External Id or Customer Tag is provided when using ACCOUNT or GROUP offer types.



Did this page help you?