Docs

Quickstart

One key, one request shape, every image and video model. Submit a job, poll it, get the file.

PlannedThis is the planned API shape. Field names and responses may still change before launch. Accounts and keys are opening soon.
Base URLhttps://api.revana.si/v1
AuthAuthorization: Bearer <key>
SubmitPOST /v1/generations
PollGET /v1/generations/{id}
FormatJSON in, JSON out. Prices in USD.

Authentication

Create a key from your account, then send it as a bearer token on every request. Keep it on your server; never ship it in a browser or mobile app.

Submit a generation

POSThttps://api.revana.si/v1/generations

Send the model id and its input. The response comes back straight away with a generation id and status queued; the work happens in the background.

FieldTypeDescription
modelstring, requiredA model id from the models page, e.g. veo-3.1-fast.
inputobject, requiredThe prompt and settings. Which fields a model accepts is listed on its page.

Get the result

GEThttps://api.revana.si/v1/generations/{id}

Poll every few seconds until status is succeeded or failed. Images usually take seconds; video takes from under a minute to several minutes depending on the model and length.

A finished generation:

Input fields

The same names are used across models. If a model doesn’t support a field or value, the request is rejected with 422 before anything is charged.

FieldTypeUsed for
promptstringWhat to generate. Required for text-to-image and text-to-video.
image_urlstring (URL)Start frame for image-to-video, or the image to edit for image-to-image.
end_image_urlstring (URL)Last frame, for models with first + last frame.
image_urlsstring[]Reference images, up to the model’s limit.
resolutionstring720p, 1080p, 2K... one of the model’s resolutions.
durationnumberVideo length in seconds, one of the model’s durations.
aspect_ratiostring16:9, 9:16, 1:1...
audiobooleanGenerate sound with the video, where the model supports it. May change the price.

Generation object

FieldTypeDescription
idstringGeneration id, used to poll.
modelstringThe model you asked for.
statusstringSee statuses.
outputobject | nullWhen succeeded: urls, a list of result files. Download them promptly; links expire.
cost_usdnumber | nullWhat was charged. Set once the generation succeeds; 0 when it fails.
attemptsnumberRoutes tried, including fallbacks. Only the successful one is billed.
errorobject | nullWhen failed: code and message.
created_at, completed_atstringISO 8601 timestamps.

Statuses

StatusMeaning
queuedAccepted, waiting for a route.
runningGenerating. If a route fails, the job stays running while it moves to the next one.
succeededDone. output.urls holds the files and cost_usd what you paid.
failedEvery route failed or the input was refused. Nothing is charged.

Billing

  • You pay from prepaid USD credits, bought in packs from $10 to $5,000.
  • When you submit, the job’s price is held from your balance. If it fails, the hold is released.
  • Only the route that succeeds is charged. Failed attempts on other routes cost nothing.
  • Each model’s price is on its page and in the price table.

Errors

Errors use HTTP status codes and a JSON body: {"error": {"code": "...", "message": "..."}}.

HTTPCodeWhen
401unauthorizedMissing or invalid API key.
402insufficient_creditsYour balance doesn’t cover the job. Top up and retry.
404not_foundUnknown model id or generation id.
422invalid_inputA field or value the model doesn’t support.
429rate_limitedToo many requests. Back off and retry.
5xxserver_errorSomething broke on our side. Safe to retry.

Model list

Every model, its options and prices are published as JSON at /data/models.json, the same file this site renders from.