Verbatik LogoVerbatik
Developer API

Image, video, and audio generations

Create asynchronous media jobs and retrieve their outputs.

POST /generations creates media. GET /generations/{id} retrieves its status and outputs. Both paths are relative to https://app.verbatik.com/api/v1.

Request

Required fields are mode, model, and prompt.

FieldMeaning
modeimage, video, or audio
modelExact model ID from GET /models
promptNon-empty direction, up to 10,000 characters; model-specific limits can be lower
persona_idOptional reusable persona resource ID
inputModel-supported reference inputs
parametersSupported count, size, aspect ratio, quality, duration, resolution, voice, speed, looping, lyrics, or language boost
deliverypublic_url (default) or signed_url

Discover the model's capabilities and defaults first. duration, speed, and other enumerated settings are strings in this API. Not every field is valid for every model.

Supported input slots include reference_images, start_frame, end_frame, image_refs, video_refs, audio_refs, video, character, and motion_video. They hold arrays of HTTPS URLs. Supply only the slots accepted by the selected model.

Example request body

{
  "mode": "image",
  "model": "openai/gpt-image-2",
  "prompt": "Photograph this product on a neutral studio background",
  "input": { "reference_images": ["https://example.com/product.png"] },
  "parameters": { "count": 1 },
  "delivery": "signed_url"
}

Replace example media URLs with actual reachable assets or use the upload flow. Individual models impose stricter reference and output limits than the general request schema.

Lifecycle

Creation returns 202 and reserves the quoted credits before queuing work. Poll GET /generations/{id} with generations:read.

StatusWhat to do
queuedWait and poll with backoff
completedRead outputs
partially_completedKeep successful outputs and inspect errors
failedInspect errors before submitting another operation

Each successful output includes an id, url, and media_type. Signed URLs also include expires_at. Retrieve the resource again for a fresh signed link.

List generations

GET /generations?limit=20 returns API generations with has_more and next_cursor. Pass the returned cursor as cursor to continue. The maximum limit is 100.

For event-driven completion, subscribe to generation.completed and generation.failed webhooks. Use idempotency on creation requests and check partial results before retrying a batch.

On this page