Get an upload URL
Request a one-time presigned URL to upload a video directly to S3, so large files never proxy through the API. After uploading, call Submit a video with the returned storage_key.
POST/api/v4/video-recognition/upload-url/
Request (JSON body)
| Field | Type | Required | Description |
|---|---|---|---|
filename | string | Yes | Original filename, including extension. The extension must be one of .mp4, .mov, .avi, .mpeg. It is used to validate the type and pin the Content-Type on the upload. |
curl https://api.slipstreammusic.com/api/v4/video-recognition/upload-url/ \
-X POST \
-H "Authorization: Bearer $PARTNER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "clip.mp4"}'Response (201 Created)
{
"upload_url": "https://bucket.s3.amazonaws.com/temp/video-recognition/8f3c...2a_clip.mp4?X-Amz-...",
"storage_key": "video-recognition/8f3c...2a_clip.mp4",
"expires_in": 600,
"content_type": "video/mp4"
}| Field | Description |
|---|---|
upload_url | Presigned S3 PUT URL. Upload the file here within expires_in seconds. |
storage_key | Reference to the uploaded file. Pass this to Submit a video. |
expires_in | Seconds until upload_url expires (default 600). |
content_type | The exact Content-Type header you must send on the PUT. |
Upload the file
PUT the raw bytes to upload_url, using the exact content_type returned. Do not add an Authorization header to this request, the URL is already signed.
curl "$UPLOAD_URL" \
-X PUT \
-H "Content-Type: video/mp4" \
--upload-file /path/to/clip.mp4Then start recognition with the storage_key:
curl https://api.slipstreammusic.com/api/v4/video-recognition/ \
-X POST \
-H "Authorization: Bearer $PARTNER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"storage_key": "video-recognition/8f3c...2a_clip.mp4"}'⚠️
Send the Content-Type on the PUT exactly as returned in content_type. It is pinned at signing time, so a mismatched header is rejected by S3.
Errors
| HTTP | Body | When |
|---|---|---|
| 400 | { "filename": ["File extension must be one of: mov, mpeg, mp4, avi."] } | Unsupported file extension. |
| 401 / 403 | { "detail": "Authentication credentials were not provided." } | Missing or invalid partner key. |
| 501 | { "detail": "Presigned uploads require S3 temporary storage." } | The environment is not configured for S3 temporary storage. Use the direct file upload instead. |