Skip to main content
Direct uploads to an intake endpoint are limited to 256 MB by the API gateway. For larger files, Kodexa provides two mechanisms:
  • 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
Both require the Enable large uploads option to be turned on in the intake settings.

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 return 403 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

Response:
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 ETag from each response header:
The 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:
  1. Keep the uploadId and s3Key from step 1
  2. Request new part URLs for any parts that weren’t uploaded
  3. Upload only the missing parts
  4. 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:
Returns 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.