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
- Go to the Data Hub section.
- Click + Create a new job.
- 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:
| Action | Behaviour |
|---|---|
| Create & run now | The job is created and executed immediately. You are redirected to the execution history of the job. |
| Create & run later | The 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
| Concept | Description |
|---|---|
| Uploaded file | A 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 window | An 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 job | An 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 rules | Unchanged. A File import job uses the same mapping, the same delimiter and the same job type as any other import job. |
Key endpoints involved
| Action | Method & path | operationId |
|---|---|---|
| Upload a CSV file | POST /v1/import/files?delimiter={delimiter} | uploadImportFile |
| Get an uploaded file and its metadata | GET /v1/import/files/{id} | getImportFile |
| Delete an uploaded file | DELETE /v1/import/files/{id} | deleteImportFile |
| Create an import job | POST /v2/mapper/jobs | createJob |
| Update an import job | PATCH /v2/mapper/jobs/{jobId} | patchJob |
| Start a job | GET /v1/mapper/jobs/start/{jobId} | startJob |
| List the executions of a job | GET /v2/jobs/{jobId}/executions | ADM-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: A400is returned when the file format or the delimiter is not supported, or when the file exceeds the accepted size. Ifcolumnscomes 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:mappingsis 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-0e02b2c3d479Returns 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-0e02b2c3d479Returns 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 key | Description |
|---|---|
fileName | Name of the source file. Kept even after the file has been purged. |
fileId | Identifier 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 bykeyrather than by position — thefileIdentry 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
columnsandrowCountreturned 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
fileIdfor each run. - Trigger inside the retention window. Read
expiresAtand 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
metadataarray (fileNameentry), which remains available even after the file has been purged. Never rely on thefileIdentry 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
| Mistake | Symptom | Fix |
|---|---|---|
Omitting the delimiter query parameter | 400 on upload | The parameter is required — send ; or , explicitly |
| Sending a delimiter that does not match the file | Upload succeeds but columns contains one long concatenated header | Delete the file, upload again with the correct delimiter |
Reusing a fileId after its retention window | The identifier is no longer usable | Upload the file again and attach the new identifier |
| Starting a job from the back office with an expired pending file | The Start action is not available | Drop a new CSV in the File section of the job, save, then start |
Reading fileName or fileId at the root of an execution | The fields are absent from ADM-JOB-550 responses | Read the fileName and fileId entries of the metadata array |
| Building a recurring integration on manual uploads | Operational overhead, no scheduling | Use an FTP or API Connector import job instead |
| Expecting an export to accept an uploaded file | The FILE type is not proposed | The File type applies to import jobs only |
Error codes
Validation and business errors follow the platform conventions. See the dedicated page: Error / Warning codes.
Updated 7 days ago

