DocsAPI referenceClient
Create an upload with a client token
The body and answer of POST /v1/uploads, within the token's upload grant, counted over its chain. An Idempotency-Key makes a retry answer the same upload (200) for 24 hours, after a refresh too.
POST /v1/client/uploads
Needs an API key: Authorization: Bearer $VIDEXO_API_KEY.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
idempotency-key | header | string, up to 255 characters |
Body CreateUploadRequest
| Name | Type | Description |
|---|---|---|
filename required | string, up to 105 characters | |
size_bytes required | integer | Exact byte length. At most 100 MB and the plan input limit. |
content_type | string, up to 128 characters | Default application/octet-stream. |
Request
bash
curl -X POST "$VIDEXO_API_URL/v1/client/uploads" \
-H "Authorization: Bearer $CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"filename": "input.mp4",
"size_bytes": 52428800,
"content_type": "video/mp4"
}'Copy failed. The text is selected; copy it with your keyboard.
JavaScript
const response = await fetch(`${process.env.VIDEXO_API_URL}/v1/client/uploads`, {
method: 'POST',
headers: {
Authorization: `Bearer ${clientToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"filename": "input.mp4",
"size_bytes": 52428800,
"content_type": "video/mp4"
}),
});
const upload = await response.json();Copy failed. The text is selected; copy it with your keyboard.
Response
201 JSON
{
"id": "up_0123456789abcdef01234567",
"input_url": "videxo://uploads/up_0123456789abcdef01234567",
"upload_url": "https://api.videxo.io/v1/uploads/up_0123456789abcdef01234567?account=acc_7Gq2x9LmTnV4&expires=1793800800&signature=example",
"upload_url_expires_at": "2026-11-04T13:00:00.000Z",
"expires_at": "2026-11-05T12:00:00.000Z",
"max_size_bytes": 100000000
}Copy failed. The text is selected; copy it with your keyboard.
Responses
| Status | Body | When |
|---|---|---|
| 200 | Upload | The upload this Idempotency-Key created earlier. |
| 201 | Upload | PUT the exact file bytes to upload_url, then hand input_url to your server for the job. |
| 400 | Problem | invalid_request: a field outside the grant (content_type, size_bytes) |
| 401 | Problem | authentication_failed (missing_client_token, invalid_client_token, client_token_expired, client_token_superseded, client_token_revoked) |
| 403 | Problem | permission_denied (client_token_required, token_scope, origin_not_allowed, account_disabled) |
| 409 | Problem | conflict (idempotency_key_reused) |
| 413 | Problem | limit_exceeded (token_uploads, upload_size, request_body_size) |
| 429 | Problem | rate_limited, with Retry-After in seconds |