API reference

The Rezeis API is REST over HTTPS. All requests and responses are JSON, all timestamps are RFC 3339 in UTC, and every endpoint lives under https://api.rezeis.click/v1. New to the API? Start with the quickstart.

Authentication

Pass your secret key as a bearer token on every request. Keys are scoped per project and can be restricted to read-only.

Authorization: Bearer sk_live_<your key>

Never ship a secret key in a browser or mobile bundle. For client-side uploads, mint a short-lived upload token server-side instead.

Idempotency

All create endpoints accept an Idempotency-Key header. Retrying a request with the same key returns the original response instead of creating a second job — safe to retry after a network blip.

curl -X POST https://api.rezeis.click/v1/jobs \
  -H "Authorization: Bearer $REZEIS_KEY" \
  -H "Idempotency-Key: 9f1c-c0ffee-42" \
  -d '{"input":"...","profile":"abr-720p"}'

Keys are retained for 24 hours. After that, the same key starts a fresh request.

Pagination

List endpoints are cursor-paginated. Pass limit (max 100) and starting_after with the id of the last item you saw. The has_more flag tells you when to stop.

{ "data": [ ... ], "has_more": true, "last_id": "job_8f2a71c4" }

Versioning

The version is pinned in the path. Additive changes (new fields, new enum members) ship without a version bump, so parse defensively and ignore unknown fields. Breaking changes get a new path segment and twelve months of overlap — see the changelog.

Encoding jobs

POST/v1/jobs

Creates an encoding job.

FieldTypeDescription
inputstringRequired. HTTP(S) or s3:// URL of the source.
profilestringLadder preset, e.g. abr-1080p. Defaults to auto.
outputsarrayAny of hls, dash, mp4. Defaults to ["hls"].
codecstringh264 (default), hevc or av1.
webhookstringURL notified on every status transition.
metadataobjectUp to 16 key/value pairs echoed back on the asset.
{
  "id": "job_8f2a71c4", "status": "queued",
  "created_at": "2026-09-13T18:04:11Z",
  "renditions": [1080, 720, 480, 360],
  "playback": "https://cdn.rezeis.click/v/8f2a71c4/master.m3u8"
}

GET/v1/jobs/{id}

Returns the current state. status moves through queued → analysing → encoding → packaging → ready, or terminates as failed. While encoding, progress is an integer percentage.

GET/v1/jobs

Lists jobs newest first. Supports limit, starting_after and a status filter.

DELETE/v1/jobs/{id}

Cancels a job that has not reached packaging. Encoded segments are discarded and the minutes are not billed.

Assets

A completed job produces an asset — the manifests, renditions and thumbnails kept in storage.

GET/v1/assets/{id}

Returns manifest URLs, per-rendition byte sizes, duration and the thumbnail set.

DELETE/v1/assets/{id}

Removes the asset and purges it from the edge, usually within 30 seconds.

Playback tokens

For private content, sign a short-lived token server-side and append it to the manifest URL.

POST /v1/playback-tokens
{ "asset": "ast_5c19be20", "ttl": 3600, "restrict": { "country": ["PL","DE"] } }

Webhooks

Every status transition posts a JSON body to your webhook URL. Delivery is retried with exponential backoff for 24 hours.

{ "event": "job.ready", "job": "job_8f2a71c4", "asset": "ast_5c19be20", "duration": 742.5 }

Verify the Rezeis-Signature header — an HMAC-SHA256 of the raw body — in constant time, and treat redelivered events as idempotent.

Rate limits

PlanRequests / minConcurrent jobs
Free602
Starter60020
Growth1,50060
Scale6,000200

Every response carries X-RateLimit-Remaining and X-RateLimit-Reset. On 429, honour Retry-After.

Error codes

StatusCodeMeaning
400invalid_requestMalformed body or unknown field value.
401bad_credentialsMissing, malformed or revoked API key.
402quota_exhaustedPlan limit reached.
404not_foundNo such job or asset in this project.
409invalid_stateAction not allowed from the current status.
415unsupported_sourceThe probe could not decode the input.
429rate_limitedToo many requests this minute.
5xxinternalOur fault. Safe to retry with backoff.