Endpoint
Request
The request usesmultipart/form-data encoding with the following parts:
Example
Response
A successful upload returns HTTP 200 with a bare string body — the pipeline token itself (a unique UUID generated for the job), not a JSON object:Compressed Files
When the uploaded file has a compressed extension, the archive is extracted in memory and processed synchronously — nothing is staged to MinIO:
Compressed archives may contain multiple data files. Handling depends on the pipeline type:
- CSV pipelines — when an archive contains multiple inner files, they are concatenated into a single job. The header is kept from the first file and stripped from the 2nd and later files. The response is the single pipeline token.
- Non-CSV pipelines, or single-file archives — each inner file is submitted as its own job. The response is always the
"N file(s) submitted"string on this path, even for a single file (1 file(s) submitted) — the pipeline token is not returned.
Uncompressed Files
Files without a recognized compressed extension (e.g.,.csv, .json, .xml, .xls, .pdf, .docx, .txt, etc) are read into memory and submitted directly. They are not staged to MinIO.
Processing Flow
- The client sends the multipart request.
- The endpoint validates that the named
pipelineis registered. - The file bytes are read into memory and the extension is inspected.
- Compressed path: the archive is decompressed in memory. For CSV pipelines with multiple inner files, the files are concatenated (headers stripped after the first) and submitted as one job; otherwise each inner file is submitted individually.
- Uncompressed path: the file contents are passed directly to the ingestion pipeline.
- The endpoint returns the pipeline token (or the
"N file(s) submitted"string).
Error Responses
The 500 response covers all errors handled by the controller, including an empty file and an unregistered pipeline. There is no explicit
413 handler; exceeding the configured multipart size limit produces Spring’s default multipart-size error.
Size Limits
The maximum upload size is controlled byspring.servlet.multipart.max-file-size in application.yaml. The default is 1 GB. Adjust this value if your files exceed the limit:
End-to-end example: CSV to PostgreSQL
Register a pipeline, upload a CSV, and query the result — the whole loop over REST, no agent involved.1. Start the stack
If you haven’t installed yet, follow Installation — the one-command installer gets the stack running in a./datris directory. Already
installed? Start it from your install directory:
datris container to show Started Application.
2. Register a pipeline
Create a pipeline configuration that defines the source schema and PostgreSQL destination:3. Upload a CSV file
Create a sample CSV file:pipelineToken for tracking — a plain UUID:
4. Check status
begin, processing, end.
5. Verify the data
Query the data via the REST API:datris — this is where all PostgreSQL pipelines write unless you specify a different dbName in the pipeline’s destination config.