- Presigned URL upload — the server generates a temporary S3 URL; the client uploads directly to S3, bypassing the API gateway entirely
- Multipart upload — the file is split into chunks (parts), each uploaded independently via presigned URLs, then assembled server-side
Enabling Large Uploads
In Kodexa Studio, open the intake settings and check Enable large uploads. This exposes the presigned and multipart upload endpoints for that intake. When disabled (the default), these endpoints return403 Forbidden.
Large uploads use the same intake API tokens as direct uploads — no additional credentials are needed.
Presigned URL Upload
Best for: files between 256 MB and 5 GB over reliable connections.1
Request a presigned URL
Call the presigned upload request endpoint with the file details:Response:The presigned URL expires after 15 minutes.
2
Upload to S3
PUT the file directly to the presigned URL. This bypasses the Kodexa API — the file goes straight to S3:You can track upload progress using standard HTTP upload progress mechanisms.
3
Complete the upload
Tell Kodexa to process the uploaded file:The response is the created document family, identical to a direct upload response. All intake features work normally: metadata merging, intake scripts, activity plans, knowledge features.
Complete Request Body
The presigned complete endpoint accepts an optional JSON body with the same parameters as a direct upload:Multipart Upload
Best for: files over 5 GB, unreliable connections, or when you need resumability. Multipart uploads split the file into chunks (minimum 5 MB each, except the last chunk) and upload each independently. If the connection drops, you only re-upload the failed chunks.1
Initiate the upload
2
Get part URLs (batched)
Request presigned URLs for multiple parts in one call. Each part should be at least 5 MB (except the last). You can request up to 500 part URLs per call.Response:Each part URL expires after 15 minutes. Request part URLs just-in-time rather than all at once for large uploads.
3
Upload each part
PUT each chunk to its presigned URL. Record the The
ETag from each response header:ETag header in the response identifies the uploaded part.4
Complete the upload
Send all part numbers and ETags to finalize:The response is the created document family.
Resuming an Interrupted Upload
If the upload is interrupted, you don’t need to start over:- Keep the
uploadIdands3Keyfrom step 1 - Request new part URLs for any parts that weren’t uploaded
- Upload only the missing parts
- Complete with all parts (already-uploaded parts remain in S3)
Aborting a Multipart Upload
To cancel an in-progress multipart upload and free S3 resources:204 No Content.
S3 Constraints
Python Example
TypeScript Example
Endpoint Reference
All endpoints accept the same authentication as the direct intake upload: either an intake API token (
kit_*) or a platform API key with appropriate permissions.