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. With more than one file, the response is the
"N file(s) submitted"string.
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:
