API overview
The API is REST over HTTPS with JSON request and response bodies. There is one
version, v1, and it is part of the path.
https://videotranscode.cloud/api/v1Authentication
Send your API key as a bearer token on every request.
Authorization: Bearer spk_your_key_here
Content-Type: application/jsonGET /presets is the only endpoint where the key is optional. Everything else
returns 401 without one. See Authentication.
Endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /jobs | Create an encoding job |
GET | /jobs | List your jobs, newest first |
GET | /jobs/{id} | Read one job, with a signed output link |
DELETE | /jobs/{id} | Cancel a queued or processing job |
GET | /jobs/{id}/download-url | Sign a fresh download link |
POST | /edl | Create a timeline editing job |
PUT | /edl | Validate a timeline without running it |
GET | /presets | List presets, marked available or locked |
Full detail is in Jobs, Presets and EDL.
Conventions
Identifiers. Job identifiers are UUIDs, generated by the service. Do not construct them.
Timestamps. Every timestamp is ISO 8601 in UTC with milliseconds, for
example 2026-09-10T14:12:47.118Z.
Unknown fields in requests are ignored rather than rejected. Sending a field the endpoint does not define has no effect, so check the spelling of optional fields against this reference.
Absent values are returned as null, not omitted, for fields the response
always carries. Optional link fields are omitted when they do not apply.
Relative links. The links object on a job holds paths relative to the
host, not absolute URLs. Prefix them with https://videotranscode.cloud.
Status codes
| Code | Meaning |
|---|---|
200 | Request succeeded |
201 | Job created |
400 | Malformed JSON, failed validation, or an operation the job's state does not allow |
401 | Missing, malformed, unknown or revoked API key |
403 | The preset exists but your plan does not include it |
404 | No such job, or it belongs to another account |
410 | The output existed but is no longer retrievable |
429 | Monthly job quota exhausted |
500 | Unexpected server error, carrying a requestId |
Every error body and what to do about it is in Errors.
Rate limiting
There is no per-second or per-minute request rate limit. The limit that exists
is the monthly job quota on your plan, enforced when a job is created and
reported as 429. See Plans and limits.
Concurrency
Jobs are processed by a pool of workers, two at a time across the service.
Creating jobs faster than they can be encoded is safe: they queue, and
estimatedProcessingTime on the creation response describes encoding time for
that preset, not queue wait.