Choosing your upload method
Use presigned URLs if:- File size is larger than 10 MB
- You’re uploading many files in parallel
- You want better performance and scalability
- Your API server has limited resources
- File size is 10 MB or smaller
- Simplicity is more important than performance
- You’re uploading a single file at a time
- You want a one-step process
Presigned URL uploads (recommended)
Basic flow
Upload directly to Azure
Use the returned URL to upload your file to Azure Blob Storage with a single
PUT.filename and contentType. The response returns uploadUrl, blobPath, and expiresAt. The presigned URL expires after 1 hour.
Implementation example
Parallel uploads
For batch operations, request a presigned URL per file and upload them in parallel:Direct uploads
Basic flow
Stream file to the API
POST your file to
/api/integrations/uploads/direct as multipart/form-data with the field name file.201 and is limited to 10 MB. Files larger than that return 413 with a message pointing you to the presigned URL flow.
Implementation
Supported file types and sizes
The API accepts these MIME types:| Category | Allowed content types | Max size |
|---|---|---|
| Video | video/mp4, video/quicktime, video/x-msvideo, video/x-matroska | 5 GB |
| Audio | audio/mpeg, audio/wav, audio/x-wav, audio/aac, audio/ogg | 500 MB |
| Image | image/jpeg, image/png, image/gif, image/webp, image/svg+xml | 50 MB |
| Document | application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, text/plain | 100 MB |
415 is returned when the contentType is not in this allowlist or does not match the file. The 10 MB cap applies only to the direct-upload streaming endpoint, not to the overall file size limits above.
Handling large files
Files larger than 10 MB use a presigned URL. Request the URL from/api/integrations/uploads/url, then PUT the file directly to Azure Blob Storage using the returned uploadUrl. A single PUT works for the SAS URL. For very large files you can use the Azure Blob Storage SDK against the same SAS URL, which handles the transfer for you:
PUT to Azure succeeds, and the blobPath is ready to submit.
Error handling
Network retries
Implement exponential backoff for transient failures:Validate before uploading
Check the file exists, is readable, and is within the category limit before you upload:Troubleshooting
Upload URL expired
Presigned URLs expire after 1 hour. If the upload takes longer, request a new URL and retry.Content type mismatch
Ensure thecontentType matches the actual file format and is one of the allowed MIME types above. A mismatched or unsupported type returns 415.