How uploads work
Files are uploaded with a presigned URL: request a time-limited URL from the API, then upload the file straight to Azure Blob Storage. This keeps upload bandwidth off your API server, handles files up to the per-category maximums, and works well for parallel uploads.Presigned URL uploads
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.
This same upload flow is used for supporting context files, not just primary assets. Upload the file here, then reference its
blobPath in a submission’s contextItems instead of assets. Document types (PDF, DOCX, TXT) are accepted in addition to media. See Tags and supporting context.Implementation example
Parallel uploads
For batch operations, request a presigned URL per file and upload them in parallel: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.
Handling large files
Large files use the same presigned URL flow. A singlePUT 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.