Job Configuration - Import - File

This guide explains how to create and run an import job from a CSV file you upload yourself, either from the DJUST back office or through the API.

A File import job does not rely on a connector: there is no SFTP server or pull API to configure and no credentials to store. You reuse the mapping and the rules defined on the job, and you simply provide the file to process. It is designed for one-off imports — loading or correcting a batch of data without waiting for a scheduled flow.


Prerequisites

Before configuring a File import job, make sure you have:

  • A CSV file to import. CSV is the only supported format.
  • The delimiter used in the file (, or ;).
  • The mapping of the file columns to DJUST fields. See Data Hub Mapping Overview.
⚠️

Retention window: an uploaded file is kept for a limited period and exposes an expiration date. Once it has been purged, it can no longer be used to run the job — a new file must be uploaded.


File Import Job Configuration

Creation

To configure a File import job from the DJUST back office:

Step 1 – Access the Data Hub

  1. Go to the Data Hub section.
  2. Click + Create a new job.
  3. Select Import.

Step 2 – Job configuration

Fill in the general information:

  • Job name (must be unique)
  • Objects: choose the object you want to import (e.g., Products, Offers, Orders).
  • Client type: select File. No client connection, file path or scheduler is required.
  • CSV delimiter (required): select the delimiter used in your CSV file (, or ;). This field has no default value.
  • Import Full toggle (optional): same behavior as for the other import methods — see Import Full Mode.

Step 3 – Upload the file

Drop your CSV file in the File step (drag and drop). Once parsed, the back office displays:

  • a preview of the first rows,
  • the number of rows detected.

Use it to check that the columns are correctly split. If the preview shows a single concatenated column, the selected delimiter does not match the file: fix it and drop the file again. Moving on to the mapping is blocked until a valid CSV has been dropped.

Step 4 – Mapping

Map your CSV columns to DJUST field names, exactly as for an FTP import job. For more details, refer to Data Hub Mapping Overview.

Step 5 – Create and run

Two actions are available at the end of the form:

ActionBehaviour
Create & run nowThe job is created and executed immediately. You are redirected to the execution history of the job.
Create & run laterThe job is created and the file is kept pending until its expiration date. The import can be started later from the job page.

Manage and Update

Once created, a File import job is reusable. From the Data Hub > Import section, open the job:

  • the File section of the job page lets you drop or replace a CSV file, then Save;
  • start the import from the More actions menu with Start.

Rules to keep in mind:

  • A pending file that has expired can no longer be started: drop a new file first.
  • Format or size errors are displayed at upload time, and no execution is triggered.
  • Simultaneous executions of a job are not allowed — see Simultaneous execution of a job.

Source file in the execution history

The execution history of a File import job displays a File column with the name of the source file of each execution.

  • The name remains displayed after the file has been purged, because it comes from the snapshot taken at execution time.
  • A long name is truncated, with the full name available on hover.
  • The column is not displayed on FTP or API Connector jobs.

Using the File import through the API

The same workflow is available to integrations: upload the file, attach it to a job, then start the job — immediately or later.

flowchart LR
  A[📦 Upload CSV<br>with delimiter]:::create --> B[🧾 Check metadata<br>columns • rowCount • preview]:::read
  B --> C{File correct}:::decision
  C -->|No| D[➖ Delete file<br>and upload again]:::remove
  C -->|Yes| E[➕ Attach fileId<br>to the import job]:::add
  D --> A
  E --> F[✅ Start the job]:::place
  F --> G[📘 Execution history<br>metadata carries fileName]:::read

  %% 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;

  style A rx:8,ry:8
  style B rx:8,ry:8
  style C rx:8,ry:8
  style D rx:8,ry:8
  style E rx:8,ry:8
  style F rx:8,ry:8
  style G rx:8,ry:8

Key concepts

ConceptDescription
Uploaded fileA CSV file pushed to DJUST and parsed at upload time. It receives an identifier and carries derived metadata (name, size, row count, columns, preview of the first rows).
Retention windowAn uploaded file is kept for a limited period and exposes an expiresAt date. Once it has been purged, its identifier can no longer be used to trigger a job.
File import jobAn import job whose step configuration is of type FILE. Instead of pointing at a directory or a URL, it points at the identifier of an uploaded file.
Mapping and rulesUnchanged. A File import job uses the same mapping, the same delimiter and the same job type as any other import job.

Key endpoints involved

ActionMethod & pathoperationId
Upload a CSV filePOST /v1/import/files?delimiter={delimiter}uploadImportFile
Get an uploaded file and its metadataGET /v1/import/files/{id}getImportFile
Delete an uploaded fileDELETE /v1/import/files/{id}deleteImportFile
Create an import jobPOST /v2/mapper/jobscreateJob
Update an import jobPATCH /v2/mapper/jobs/{jobId}patchJob
Start a jobGET /v1/mapper/jobs/start/{jobId}startJob
List the executions of a jobGET /v2/jobs/{jobId}/executionsADM-JOB-550

All of these are administration endpoints: dj-client: OPERATOR and a valid dj-api-key are required.

Example scenarios

1. Upload a CSV file

The delimiter is required — it is the character used to parse the file, and there is no default value.

POST /v1/import/files?delimiter=%3B
dj-client: OPERATOR
dj-api-key: <your-api-key>
Content-Type: multipart/form-data

[email protected]

Response 201 Created:

{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "name": "offers-2026-08.csv",
  "sizeBytes": 48213,
  "rowCount": 512,
  "columns": ["offer_external_id", "supplier_external_id", "price", "stock"],
  "preview": [
    {
      "offer_external_id": "OFF-0001",
      "supplier_external_id": "SUP-01",
      "price": "12.50",
      "stock": "120"
    },
    {
      "offer_external_id": "OFF-0002",
      "supplier_external_id": "SUP-01",
      "price": "18.90",
      "stock": "45"
    }
  ],
  "uploadedAt": "2026-08-20T09:14:22.000Z",
  "expiresAt": "2026-08-27T09:14:22.000Z"
}
⚠️

Warning: A 400 is returned when the file format or the delimiter is not supported, or when the file exceeds the accepted size. If columns comes back as a single concatenated column, the delimiter you sent does not match the file.

2. Attach the file to an import job

Two things identify a File import job: the client configuration type FILE_CLIENT on jobTypeInfo, and a stepConfiguration of type FILE carrying the fileId returned at upload. No connector is needed, so clientConfigurationId can be omitted.

{
  "jobName": "Offers - manual import August",
  "jobTypeInfo": {
    "clientConfigurationType": "FILE_CLIENT",
    "genericJobType": "OFFER",
    "readerConfigurationType": "CSV"
  },
  "readerConfiguration": {
    "type": "CSV",
    "delimiter": ";",
    "mappings": []
  },
  "stepConfiguration": {
    "type": "FILE",
    "fileId": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
  }
}
📘

Note: mappings is shown empty here for readability. It must contain the column mapping of your entity — see Data Hub Mapping Overview.

On an existing job, send the same stepConfiguration through PATCH /v2/mapper/jobs/{jobId} to point it at a new file without touching the mapping.

3. Trigger the job

GET /v1/mapper/jobs/start/2f8a1c94-7b3e-4d21-9a55-6c0d1e3f7b02
dj-client: OPERATOR
dj-api-key: <your-api-key>

Response: 204 No Content. The job runs on the attached file, using the mapping and rules already configured.

4. Inspect or remove an uploaded file

GET /v1/import/files/f47ac10b-58cc-4372-a567-0e02b2c3d479

Returns the same metadata as the upload response, including expiresAt. A 404 means the file never existed or has already been purged.

DELETE /v1/import/files/f47ac10b-58cc-4372-a567-0e02b2c3d479

Returns 204 No Content. If the file was attached to a job, it is detached from it first — the job itself is preserved.

5. Read the source file of each execution

The execution history of a job is returned by GET /v2/jobs/{jobId}/executions (operationId ADM-JOB-550). For a File import job, each execution carries a snapshot of its source file in the metadata array, as key/value entries:

metadata keyDescription
fileNameName of the source file. Kept even after the file has been purged.
fileIdIdentifier of the source file, present only while the file is still available. The entry disappears from the array once the file has been deleted or purged.

An execution of an FTP or API Connector job returns an empty metadata array.

GET /v2/jobs/2f8a1c94-7b3e-4d21-9a55-6c0d1e3f7b02/executions
dj-client: OPERATOR
dj-api-key: <your-api-key>

Response 200 OK — the first execution ran on a file still within its retention window, the second one on a file that has since been purged:

{
  "content": [
    {
      "id": "3f1c8e02-5a47-4c11-9d3b-70e2a9c1b845",
      "status": "INTEGRATION_COMPLETED",
      "createdAt": "2026-08-20T09:15:00.000Z",
      "startedAt": "2026-08-20T09:15:02.000Z",
      "endedAt": "2026-08-20T09:16:41.000Z",
      "metadata": [
        { "key": "fileName", "value": "offers-2026-08.csv" },
        { "key": "fileId", "value": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }
      ]
    },
    {
      "id": "8c2e4b71-0d9f-4a36-b5e2-1f7c3a9d6e04",
      "status": "INTEGRATION_COMPLETED_WITH_WARNINGS",
      "createdAt": "2026-07-02T14:03:00.000Z",
      "startedAt": "2026-07-02T14:03:01.000Z",
      "endedAt": "2026-07-02T14:04:12.000Z",
      "metadata": [
        { "key": "fileName", "value": "offers-2026-07.csv" }
      ]
    }
  ],
  "numberOfElements": 2,
  "number": 0,
  "size": 20,
  "first": true,
  "last": true,
  "empty": false
}

Tip: Always look up entries by key rather than by position — the fileId entry is absent once the file no longer exists, so the array length varies from one execution to another.


Best practices

  • Always check the metadata before triggering. The columns and rowCount returned at upload are the cheapest way to catch a wrong delimiter or a truncated export, before any data reaches the platform.
  • Reuse an existing job rather than creating one per file. The point of a File import job is to reuse a mapping that is already validated. Point the same job at a new fileId for each run.
  • Trigger inside the retention window. Read expiresAt and start the job before that date. For a deferred run, plan the upload accordingly rather than uploading far in advance.
  • Keep the delimiter consistent between the upload call and the reader configuration of the job.
  • Use the execution history to audit. Each execution carries the name of the file it processed in its metadata array (fileName entry), which remains available even after the file has been purged. Never rely on the fileId entry to display the file name: it disappears with the file.
  • Prefer FTP or API Connector jobs for recurring flows. The File import is for occasional imports; an automated flow should still rely on a scheduled source.

Common mistakes

MistakeSymptomFix
Omitting the delimiter query parameter400 on uploadThe parameter is required — send ; or , explicitly
Sending a delimiter that does not match the fileUpload succeeds but columns contains one long concatenated headerDelete the file, upload again with the correct delimiter
Reusing a fileId after its retention windowThe identifier is no longer usableUpload the file again and attach the new identifier
Starting a job from the back office with an expired pending fileThe Start action is not availableDrop a new CSV in the File section of the job, save, then start
Reading fileName or fileId at the root of an executionThe fields are absent from ADM-JOB-550 responsesRead the fileName and fileId entries of the metadata array
Building a recurring integration on manual uploadsOperational overhead, no schedulingUse an FTP or API Connector import job instead
Expecting an export to accept an uploaded fileThe FILE type is not proposedThe File type applies to import jobs only

Error codes

Validation and business errors follow the platform conventions. See the dedicated page: Error / Warning codes.


Did this page help you?