| Method | Max Size | When to Use |
|---|---|---|
| Direct upload | 100MB | Most files |
| Presigned URL (this page) | 5GB | Large PDFs, high-res scans, large spreadsheets |
How It Works
- Request a presigned URL from Reducto (no file attached)
- Upload your file directly to cloud storage using the presigned URL
- Use the file_id with Parse, Split, or Extract endpoints
Step 1: Request a Presigned URL
Call the upload endpoint without attaching a file:Step 2: Upload to Presigned URL
Upload your file using a PUT request to the presigned URL:Step 3: Process with Parse, Split, or Extract
Use thefile_id from Step 1 (not the presigned URL) with any Reducto endpoint:
Complete Example
Hereβs the full workflow in one script:Troubleshooting
403 Forbidden on presigned URL
403 Forbidden on presigned URL
Cause: The presigned URL has expired.Fix: Presigned URLs expire after a short time (typically 1 hour). Request a new presigned URL and try again.
Upload succeeds but Parse fails
Upload succeeds but Parse fails
Cause: You might be passing the
presigned_url instead of the file_id.Fix: Always use the file_id (starts with reducto://) with Parse, Split, or Extract β not the presigned URL.Timeout during upload
Timeout during upload
Cause: Large files on slow connections can timeout.Fix:
- Use a wired connection if possible
- Consider chunked/multipart upload for files >1GB
- Implement retry logic with exponential backoff
Unexpected upload errors
Unexpected upload errors
Cause: Using incompatible upload methods or headers.Fix:
- Donβt include a Content-Type header β presigned URLs donβt require it
- For cURL, use
-T filenameinstead of--data-binary @filename - In Go, use
bytes.NewReader()to ensure proper Content-Length handling