Azimo
  1. Home
  2. Developers
  3. API reference

Reference

API reference

All 57 endpoints of the Azimo REST API with parameters, request bodies, response fields and a curl example, generated from the live API definition.

Copies this page as Markdown with a short Azimo context header, ready to paste into an AI assistant.View Markdown

Basics

Base URL
https://azimo.ai
Authentication
Every /v1 request sends Authorization: Bearer <API key>. Create a key in your account; the raw key is shown only once.
Projects
X-Project-ID selects a project; the default project is used when it is omitted.
Idempotency
Send an Idempotency-Key with requests that create something and reuse it when retrying; the same value with a different request returns 409.
Asynchronous jobs
POST /v1/videos returns 202 and a video id; poll GET /v1/videos/{job_id} or receive a webhook. needs_input means something is missing, not that the video is done.
Pagination
Lists return data, next_cursor and has_more; pass next_cursor as cursor to get the next page.
Pricing
The API never returns prices. For a quote, contact sales@azimo.ai.

Errors

Errors are JSON with the fields below; include the request_id when you report a problem.

NameTypeDescription
errorrequiredobject
error.coderequiredstringStable machine-readable code, e.g. unauthenticated, not_found, idempotency_conflict, validation_error, rate_limited, insufficient_balance, budget_exceeded, contact_sales, internal_error
error.messagerequiredstring
error.detailsanyStructured context: validation errors, unmet workflow requirements, or null
error.request_idrequiredstringnullable
StatusMeaning
401Missing or invalid bearer key (`WWW-Authenticate: Bearer`)
402Wallet balance or spending limit would be exceeded
403Key role or project scope does not allow this; `contact_sales` for anything about pricing
404Resource not found in this organization/project
409State conflict, or Idempotency-Key reused with a different request
422Validation error; `details` lists the failing fields or requirements
429Hourly limit reached (`Retry-After` in seconds)
500Unexpected failure; cite `request_id` when reporting it

Account and capabilities

Who the current key is, and which workflows and video types are available.

Me

GET/v1/me

API key requiredSuccess 200

Parameters

NameTypeDescription
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
key_idrequiredstringSame as id
organization_idrequiredstring
project_idrequiredstring
rolerequiredstringOne of: owner editor viewer
billing_moderequiredstringOne of: budget prepaid
walletrequiredobject
permissionsrequiredmap<string, boolean>

Example

curl "https://azimo.ai/v1/me" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Workflows

GET/v1/workflows

API key requiredSuccess 200

Parameters

NameTypeDescription
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
routerrequiredobject
workflowsrequiredmap<string, object>

Example

curl "https://azimo.ai/v1/workflows" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Video Skills

GET/v1/workflows/creative_video/skills

API key requiredSuccess 200

Parameters

NameTypeDescription
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<any>

Example

curl "https://azimo.ai/v1/workflows/creative_video/skills" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Video Types

GET/v1/video-types

API key requiredSuccess 200

Parameters

NameTypeDescription
langquerystringDisplay language, zh (default) or en; when absent the first zh/en entry of Accept-Language is used; length ≤ 16; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable
accept-languageheaderstringnullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].versionrequiredany
data[].templateany
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/video-types" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Playground

GET/v1/playground

API key requiredSuccess 200

The workflow gallery: seven fixed entries, each with routing values, whether this account can start it now, and a runnable example.

Parameters

NameTypeDescription
langquerystringDisplay language, zh (default) or en; when absent the first zh/en entry of Accept-Language is used; length ≤ 16; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable
accept-languageheaderstringnullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstringStable catalogue id
data[].namerequiredstring
data[].summaryrequiredstringOne benefit-oriented sentence
data[].workflowrequiredstringBackend routing value for options.workflow; null when the entry cannot be started yet; nullable
data[].video_typerequiredstringoptions.video_type for structured explainers, otherwise null; nullable
data[].aspectrequiredstringOne of: 16:9 9:16 1:1
data[].durationrequiredintegerDefault options.duration_max in seconds
data[].duration_rangerequiredarray<integer>[minimum, maximum] seconds the workflow accepts
data[].needs_assetsrequiredbooleanReference material (photos, product pictures) is strongly recommended
data[].availablerequiredboolean
data[].reasonrequiredstringWhy available is false: coming_soon, not_configured (this environment) or contact_sales (not sold to this account); One of: coming_soon not_configured contact_sales; nullable
data[].coming_soonrequiredboolean
data[].examplerequiredobject
data[].example.promptrequiredstringA ready-to-run creative brief for POST /v1/videos or POST /v1/plans
data[].example.content_datarequiredmap<string, string>Sample value for every input of the workflow's video type (options.content_data); empty when the workflow has none

Example

curl "https://azimo.ai/v1/playground" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Assets

Upload PDFs, slides and pictures; reference the returned asset ids in a plan.

List Assets

GET/v1/assets

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].filenamerequiredstring
data[].bytesrequiredinteger
data[].sha256requiredstring
data[].created_atrequirednumber
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/assets" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Upload Asset

POST/v1/assets

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body multipart/form-data

NameTypeDescription
filerequiredfile

Response 201 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
filenamerequiredstring
bytesrequiredinteger
sha256requiredstring
created_atrequirednumber

Example

curl -X POST "https://azimo.ai/v1/assets" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F "file=@deck.pdf"

Get Asset

GET/v1/assets/{asset_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
asset_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
filenamerequiredstring
bytesrequiredinteger
sha256requiredstring
created_atrequirednumber

Example

curl "https://azimo.ai/v1/assets/<asset_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Delete Asset

DELETE/v1/assets/{asset_id}

API key requiredSuccess 200

Remove an upload and its bytes. Jobs that already consumed it keep their own copies.

Parameters

NameTypeDescription
asset_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
deletedbooleanDefault true

Example

curl -X DELETE "https://azimo.ai/v1/assets/<asset_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Download Asset

GET/v1/assets/{asset_id}/file

API key requiredSuccess 200

Parameters

NameTypeDescription
asset_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/octet-stream

Returns the file bytes.

Example

curl "https://azimo.ai/v1/assets/<asset_id>/file" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Plans

Plan before producing: workflow, specs, assets and structure are frozen and anything missing is reported.

List Plans

GET/v1/plans

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].kindrequiredstring
data[].namerequiredstring
data[].versionrequiredinteger
data[].created_atrequirednumber
data[].updated_atrequirednumber
data[].datarequiredobject
data[].data.statusrequiredstringOne of: planning ready needs_input unavailable
data[].data.requestrequiredobject
data[].data.assetsarray<object>
data[].data.routingobjectnullable
data[].data.requirementsarray<object>
data[].data.reasonstringnullable
data[].data.job_idstringThe production this plan started; a plan starts at most one; nullable
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/plans" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create Plan

POST/v1/plans

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
promptstringlength ≤ 4000
assetsarray<string>up to 30 items
optionsobject
options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
options.goalstringlength ≤ 2000
options.audiencestringlength ≤ 1000
options.duration_maxintegerDefault 60; range 5–180
options.widthintegerDefault 1920; range 640–3840
options.heightintegerDefault 1080; range 360–2160
options.fpsintegerDefault 30; range 24–60
options.subtitlesbooleanDefault false
options.musicbooleanDefault true
options.skill_idstringlength ≤ 200; nullable
options.credit_budgetintegerrange 1–1000000; nullable
options.video_typestringOne of: project product personal corporate; nullable
options.content_datamap<string, string>
options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
options.brandobject
options.motion_stylestringOne of: mono photo; Default mono
options.photo_subjectstringlength ≤ 120
options.photo_licensestringOne of: strict sharealike; Default strict
webhook_urlstringlength ≤ 2000; nullable
plan_idstringnullable
template_idstringnullable
brand_idstringnullable
variablesmap<string, string>

Response 201 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject
data.statusrequiredstringOne of: planning ready needs_input unavailable
data.requestrequiredobject
data.assetsarray<object>
data.routingobjectnullable
data.requirementsarray<object>
data.reasonstringnullable
data.job_idstringThe production this plan started; a plan starts at most one; nullable

Example

curl -X POST "https://azimo.ai/v1/plans" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "<prompt>", "assets": ["<asset id>"]}'

Get Plan

GET/v1/plans/{plan_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
plan_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject
data.statusrequiredstringOne of: planning ready needs_input unavailable
data.requestrequiredobject
data.assetsarray<object>
data.routingobjectnullable
data.requirementsarray<object>
data.reasonstringnullable
data.job_idstringThe production this plan started; a plan starts at most one; nullable

Example

curl "https://azimo.ai/v1/plans/<plan_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Preview Route

POST/v1/route

API key requiredSuccess 200

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
promptstringlength ≤ 4000
assetsarray<string>up to 30 items
optionsobject
options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
options.goalstringlength ≤ 2000
options.audiencestringlength ≤ 1000
options.duration_maxintegerDefault 60; range 5–180
options.widthintegerDefault 1920; range 640–3840
options.heightintegerDefault 1080; range 360–2160
options.fpsintegerDefault 30; range 24–60
options.subtitlesbooleanDefault false
options.musicbooleanDefault true
options.skill_idstringlength ≤ 200; nullable
options.credit_budgetintegerrange 1–1000000; nullable
options.video_typestringOne of: project product personal corporate; nullable
options.content_datamap<string, string>
options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
options.brandobject
options.motion_stylestringOne of: mono photo; Default mono
options.photo_subjectstringlength ≤ 120
options.photo_licensestringOne of: strict sharealike; Default strict
webhook_urlstringlength ≤ 2000; nullable
plan_idstringnullable
template_idstringnullable
brand_idstringnullable
variablesmap<string, string>

Response 200 application/json

NameTypeDescription
plan_idrequiredstring
workflowstringnullable
requirementsarray<object>

Example

curl -X POST "https://azimo.ai/v1/route" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "<prompt>", "assets": ["<asset id>"]}'

Videos

Produce a video from a confirmed plan, follow its progress, download it, resume, revise or cancel it.

List Videos

GET/v1/videos

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
statusquerystringOne of: queued running needs_input complete rejected failed cancelled; nullable
batch_idquerystringlength ≤ 32; nullable
created_afterquerynumberrange ≥ 0; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].batch_idstringnullable
data[].parent_idstringnullable
data[].statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
data[].stagerequiredstringnullable
data[].progressrequiredintegernullable
data[].errorstringnullable
data[].created_atrequirednumbernullable
data[].updated_atnumbernullable
data[].started_atnumbernullable
data[].finished_atnumbernullable
data[].deleted_atnumbernullable
data[].recoveryrequiredobject
data[].recovery.attemptrequiredinteger
data[].recovery.max_attemptsrequiredinteger
data[].recovery.retry_atnumbernullable
data[].resultobjectnullable
data[].result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
data[].result.durationnumbernullable
data[].result.shot_countintegernullable
data[].result.visual_mixany
data[].result.qaany
data[].result.briefany
data[].result.workflowstringnullable
data[].result.routingany
data[].result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
data[].result.native_projectany
data[].requested_workflowrequiredstring
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/videos" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create Video

POST/v1/videos

API key requiredSuccess 202

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
promptstringlength ≤ 4000
assetsarray<string>up to 30 items
optionsobject
options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
options.goalstringlength ≤ 2000
options.audiencestringlength ≤ 1000
options.duration_maxintegerDefault 60; range 5–180
options.widthintegerDefault 1920; range 640–3840
options.heightintegerDefault 1080; range 360–2160
options.fpsintegerDefault 30; range 24–60
options.subtitlesbooleanDefault false
options.musicbooleanDefault true
options.skill_idstringlength ≤ 200; nullable
options.credit_budgetintegerrange 1–1000000; nullable
options.video_typestringOne of: project product personal corporate; nullable
options.content_datamap<string, string>
options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
options.brandobject
options.motion_stylestringOne of: mono photo; Default mono
options.photo_subjectstringlength ≤ 120
options.photo_licensestringOne of: strict sharealike; Default strict
webhook_urlstringlength ≤ 2000; nullable
plan_idstringnullable
template_idstringnullable
brand_idstringnullable
variablesmap<string, string>

Response 202 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
batch_idstringnullable
parent_idstringnullable
statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
stagerequiredstringnullable
progressrequiredintegernullable
errorstringnullable
created_atrequirednumbernullable
updated_atnumbernullable
started_atnumbernullable
finished_atnumbernullable
deleted_atnumbernullable
recoveryrequiredobject
recovery.attemptrequiredinteger
recovery.max_attemptsrequiredinteger
recovery.retry_atnumbernullable
resultobjectnullable
result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
result.durationnumbernullable
result.shot_countintegernullable
result.visual_mixany
result.qaany
result.briefany
result.workflowstringnullable
result.routingany
result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
result.native_projectany
requested_workflowrequiredstring
webhook_signing_secretstringOnly present when the request set webhook_url: the project secret that signs that per-job callback (Vidgen-Signature). Store it; verify deliveries with it; nullable

Example

curl -X POST "https://azimo.ai/v1/videos" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "<prompt>", "assets": ["<asset id>"]}'

Resume

POST/v1/videos/{job_id}/resume

API key requiredSuccess 202

Parameters

NameTypeDescription
job_idrequiredpathstring
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
messagestringlength ≤ 4000
questionnaire_idstringlength ≤ 200; nullable
answersarray<object>up to 30 items
assetsarray<string>up to 9 items
approve_budgetbooleanApprove the pending budget stop; the server computes the new limit; Default false
credit_budgetintegerLegacy: explicit new Vikoo credit budget for a credit budget stop; range 1–1000000; nullable
budget_usdnumberLegacy: explicit new total USD limit for a budget stop; range 0–100000; nullable

Response 202 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
batch_idstringnullable
parent_idstringnullable
statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
stagerequiredstringnullable
progressrequiredintegernullable
errorstringnullable
created_atrequirednumbernullable
updated_atnumbernullable
started_atnumbernullable
finished_atnumbernullable
deleted_atnumbernullable
recoveryrequiredobject
recovery.attemptrequiredinteger
recovery.max_attemptsrequiredinteger
recovery.retry_atnumbernullable
resultobjectnullable
result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
result.durationnumbernullable
result.shot_countintegernullable
result.visual_mixany
result.qaany
result.briefany
result.workflowstringnullable
result.routingany
result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
result.native_projectany
requested_workflowrequiredstring

Example

curl -X POST "https://azimo.ai/v1/videos/<job_id>/resume" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"message": "<message>", "questionnaire_id": "<questionnaire_id>"}'

Revise Video

POST/v1/videos/{job_id}/revisions

API key requiredSuccess 202

Parameters

NameTypeDescription
job_idrequiredpathstring
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
promptstringlength 10–4000; nullable
assetsarray<string>up to 30 items; nullable
optionsobject
options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
options.goalstringlength ≤ 2000
options.audiencestringlength ≤ 1000
options.duration_maxintegerDefault 60; range 5–180
options.widthintegerDefault 1920; range 640–3840
options.heightintegerDefault 1080; range 360–2160
options.fpsintegerDefault 30; range 24–60
options.subtitlesbooleanDefault false
options.musicbooleanDefault true
options.skill_idstringlength ≤ 200; nullable
options.credit_budgetintegerrange 1–1000000; nullable
options.video_typestringOne of: project product personal corporate; nullable
options.content_datamap<string, string>
options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
options.brandobject
options.motion_stylestringOne of: mono photo; Default mono
options.photo_subjectstringlength ≤ 120
options.photo_licensestringOne of: strict sharealike; Default strict

Response 202 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
batch_idstringnullable
parent_idstringnullable
statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
stagerequiredstringnullable
progressrequiredintegernullable
errorstringnullable
created_atrequirednumbernullable
updated_atnumbernullable
started_atnumbernullable
finished_atnumbernullable
deleted_atnumbernullable
recoveryrequiredobject
recovery.attemptrequiredinteger
recovery.max_attemptsrequiredinteger
recovery.retry_atnumbernullable
resultobjectnullable
result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
result.durationnumbernullable
result.shot_countintegernullable
result.visual_mixany
result.qaany
result.briefany
result.workflowstringnullable
result.routingany
result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
result.native_projectany
requested_workflowrequiredstring
webhook_signing_secretstringOnly present when the request set webhook_url: the project secret that signs that per-job callback (Vidgen-Signature). Store it; verify deliveries with it; nullable

Example

curl -X POST "https://azimo.ai/v1/videos/<job_id>/revisions" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "<prompt>", "assets": ["<asset id>"]}'

Get Video

GET/v1/videos/{job_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
job_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
batch_idstringnullable
parent_idstringnullable
statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
stagerequiredstringnullable
progressrequiredintegernullable
errorstringnullable
created_atrequirednumbernullable
updated_atnumbernullable
started_atnumbernullable
finished_atnumbernullable
deleted_atnumbernullable
recoveryrequiredobject
recovery.attemptrequiredinteger
recovery.max_attemptsrequiredinteger
recovery.retry_atnumbernullable
resultobjectnullable
result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
result.durationnumbernullable
result.shot_countintegernullable
result.visual_mixany
result.qaany
result.briefany
result.workflowstringnullable
result.routingany
result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
result.native_projectany
requested_workflowrequiredstring

Example

curl "https://azimo.ai/v1/videos/<job_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Delete Video

DELETE/v1/videos/{job_id}

API key requiredSuccess 200

Purge a finished job's films, uploads copies and diagnostics; the job record stays for usage history.

Parameters

NameTypeDescription
job_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
deletedbooleanDefault true

Example

curl -X DELETE "https://azimo.ai/v1/videos/<job_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Cancel Video

POST/v1/videos/{job_id}/cancel

API key requiredSuccess 200

queued / needs_input jobs cancel at once; a running job stops before its next paid step (cancelling).

Parameters

NameTypeDescription
job_idrequiredpathstring
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
statusrequiredstringOne of: cancelled cancelling

Example

curl -X POST "https://azimo.ai/v1/videos/<job_id>/cancel" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Get File

GET/v1/videos/{job_id}/files/{name}

Signed link, no keySuccess 200

Parameters

NameTypeDescription
job_idrequiredpathstring
namerequiredpathstring
expiresrequiredqueryinteger
sigrequiredquerystring

Response 200 application/octet-stream

Returns the file bytes.

Example

curl "https://azimo.ai/v1/videos/<job_id>/files/<name>?expires=<expires>&sig=<sig>"

Batches

Submit several videos at once.

List Batches

GET/v1/batches

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].namerequiredstring
data[].created_atrequirednumber
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/batches" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create Batch

POST/v1/batches

API key requiredSuccess 202

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namestringDefault Batch; length 1–160
itemsrequiredarray<object>up to 50 items
items[].promptstringlength ≤ 4000
items[].assetsarray<string>up to 30 items
items[].optionsobject
items[].options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
items[].options.goalstringlength ≤ 2000
items[].options.audiencestringlength ≤ 1000
items[].options.duration_maxintegerDefault 60; range 5–180
items[].options.widthintegerDefault 1920; range 640–3840
items[].options.heightintegerDefault 1080; range 360–2160
items[].options.fpsintegerDefault 30; range 24–60
items[].options.subtitlesbooleanDefault false
items[].options.musicbooleanDefault true
items[].options.skill_idstringlength ≤ 200; nullable
items[].options.credit_budgetintegerrange 1–1000000; nullable
items[].options.video_typestringOne of: project product personal corporate; nullable
items[].options.content_datamap<string, string>
items[].options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
items[].options.brandobject
items[].options.motion_stylestringOne of: mono photo; Default mono
items[].options.photo_subjectstringlength ≤ 120
items[].options.photo_licensestringOne of: strict sharealike; Default strict
items[].webhook_urlstringlength ≤ 2000; nullable
items[].plan_idstringnullable
items[].template_idstringnullable
items[].brand_idstringnullable
items[].variablesmap<string, string>

Response 202 application/json

NameTypeDescription
idrequiredstring
namerequiredstring
jobsrequiredarray<object>
jobs[].idrequiredstring
jobs[].project_idrequiredstringnullable
jobs[].batch_idstringnullable
jobs[].parent_idstringnullable
jobs[].statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
jobs[].stagerequiredstringnullable
jobs[].progressrequiredintegernullable
jobs[].errorstringnullable
jobs[].created_atrequirednumbernullable
jobs[].updated_atnumbernullable
jobs[].started_atnumbernullable
jobs[].finished_atnumbernullable
jobs[].deleted_atnumbernullable
jobs[].recoveryrequiredobject
jobs[].recovery.attemptrequiredinteger
jobs[].recovery.max_attemptsrequiredinteger
jobs[].recovery.retry_atnumbernullable
jobs[].resultobjectnullable
jobs[].result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
jobs[].result.durationnumbernullable
jobs[].result.shot_countintegernullable
jobs[].result.visual_mixany
jobs[].result.qaany
jobs[].result.briefany
jobs[].result.workflowstringnullable
jobs[].result.routingany
jobs[].result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
jobs[].result.native_projectany
jobs[].requested_workflowrequiredstring
datarequiredarray<object>Alias of jobs, kept for v0.3 clients
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].batch_idstringnullable
data[].parent_idstringnullable
data[].statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
data[].stagerequiredstringnullable
data[].progressrequiredintegernullable
data[].errorstringnullable
data[].created_atrequirednumbernullable
data[].updated_atnumbernullable
data[].started_atnumbernullable
data[].finished_atnumbernullable
data[].deleted_atnumbernullable
data[].recoveryrequiredobject
data[].recovery.attemptrequiredinteger
data[].recovery.max_attemptsrequiredinteger
data[].recovery.retry_atnumbernullable
data[].resultobjectnullable
data[].result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
data[].result.durationnumbernullable
data[].result.shot_countintegernullable
data[].result.visual_mixany
data[].result.qaany
data[].result.briefany
data[].result.workflowstringnullable
data[].result.routingany
data[].result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
data[].result.native_projectany
data[].requested_workflowrequiredstring
countsrequiredmap<string, integer>
webhook_signing_secretstringSet when an item carried webhook_url: the project secret that signs those per-job callbacks (Vidgen-Signature). Store it; verify deliveries with it; nullable

Example

curl -X POST "https://azimo.ai/v1/batches" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"items": [{}]}'

Get Batch

GET/v1/batches/{batch_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
batch_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
namerequiredstring
jobsrequiredarray<object>
jobs[].idrequiredstring
jobs[].project_idrequiredstringnullable
jobs[].batch_idstringnullable
jobs[].parent_idstringnullable
jobs[].statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
jobs[].stagerequiredstringnullable
jobs[].progressrequiredintegernullable
jobs[].errorstringnullable
jobs[].created_atrequirednumbernullable
jobs[].updated_atnumbernullable
jobs[].started_atnumbernullable
jobs[].finished_atnumbernullable
jobs[].deleted_atnumbernullable
jobs[].recoveryrequiredobject
jobs[].recovery.attemptrequiredinteger
jobs[].recovery.max_attemptsrequiredinteger
jobs[].recovery.retry_atnumbernullable
jobs[].resultobjectnullable
jobs[].result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
jobs[].result.durationnumbernullable
jobs[].result.shot_countintegernullable
jobs[].result.visual_mixany
jobs[].result.qaany
jobs[].result.briefany
jobs[].result.workflowstringnullable
jobs[].result.routingany
jobs[].result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
jobs[].result.native_projectany
jobs[].requested_workflowrequiredstring
datarequiredarray<object>Alias of jobs, kept for v0.3 clients
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].batch_idstringnullable
data[].parent_idstringnullable
data[].statusrequiredstringOne of: queued running needs_input complete rejected failed cancelled
data[].stagerequiredstringnullable
data[].progressrequiredintegernullable
data[].errorstringnullable
data[].created_atrequirednumbernullable
data[].updated_atnumbernullable
data[].started_atnumbernullable
data[].finished_atnumbernullable
data[].deleted_atnumbernullable
data[].recoveryrequiredobject
data[].recovery.attemptrequiredinteger
data[].recovery.max_attemptsrequiredinteger
data[].recovery.retry_atnumbernullable
data[].resultobjectnullable
data[].result.filesmap<string, string>Signed download links; present on GET once complete/rejected; nullable
data[].result.durationnumbernullable
data[].result.shot_countintegernullable
data[].result.visual_mixany
data[].result.qaany
data[].result.briefany
data[].result.workflowstringnullable
data[].result.routingany
data[].result.input_requiredobjectWhy the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and approvable: true and carries no amounts; answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; nullable
data[].result.native_projectany
data[].requested_workflowrequiredstring
countsrequiredmap<string, integer>

Example

curl "https://azimo.ai/v1/batches/<batch_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Events and webhooks

Instead of polling, receive status changes through signed webhooks or the event list.

List Events

GET/v1/events

API key requiredSuccess 200

Parameters

NameTypeDescription
afterqueryintegerDefault 0; range ≥ 0
limitqueryintegerDefault 50; range 1–200
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].sequencerequiredinteger
data[].typerequiredstring
data[].created_atrequirednumber
data[].api_versionrequiredstring
data[].project_idrequiredstringnullable
data[].datarequiredobject
next_cursorrequiredintegerSequence number to pass as after; unchanged when the page is empty
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/events" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

List Webhooks

GET/v1/webhooks

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].kindrequiredstring
data[].namerequiredstring
data[].versionrequiredinteger
data[].created_atrequirednumber
data[].updated_atrequirednumber
data[].datarequiredobject
data[].data.namerequiredstring
data[].data.urlrequiredstring
data[].data.activebooleanDefault true
data[].data.has_secretrequiredboolean
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/webhooks" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create Webhook

POST/v1/webhooks

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namestringDefault Webhook; length ≤ 160
urlrequiredstringlength ≤ 2000
activebooleanDefault true

Response 201 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject
data.namerequiredstring
data.urlrequiredstring
data.activebooleanDefault true
data.has_secretrequiredboolean
signing_secretrequiredstringShown at creation/rotation and for the same actor's idempotent retry within 24 hours; nullable

Example

curl -X POST "https://azimo.ai/v1/webhooks" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"url": "<url>"}'

Rotate Webhook Secret

POST/v1/webhooks/{webhook_id}/rotate-secret

API key requiredSuccess 200

Parameters

NameTypeDescription
webhook_idrequiredpathstring
expected_versionrequiredqueryintegerrange ≥ 1
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject
data.namerequiredstring
data.urlrequiredstring
data.activebooleanDefault true
data.has_secretrequiredboolean
signing_secretrequiredstringShown at creation/rotation and for the same actor's idempotent retry within 24 hours; nullable

Example

curl -X POST "https://azimo.ai/v1/webhooks/<webhook_id>/rotate-secret?expected_version=<expected_version>" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Update Webhook

PUT/v1/webhooks/{webhook_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
webhook_idrequiredpathstring
expected_versionrequiredqueryintegerrange ≥ 1
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namestringDefault Webhook; length ≤ 160
urlrequiredstringlength ≤ 2000
activebooleanDefault true

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject
data.namerequiredstring
data.urlrequiredstring
data.activebooleanDefault true
data.has_secretrequiredboolean

Example

curl -X PUT "https://azimo.ai/v1/webhooks/<webhook_id>?expected_version=<expected_version>" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "<url>"}'

Delete Webhook

DELETE/v1/webhooks/{webhook_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
webhook_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
deletedbooleanDefault true

Example

curl -X DELETE "https://azimo.ai/v1/webhooks/<webhook_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

List Deliveries

GET/v1/webhook-deliveries

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].event_idrequiredstring
data[].urlrequiredstring
data[].statusrequiredstring
data[].attemptsrequiredinteger
data[].last_errorrequiredstringnullable
data[].delivered_atrequirednumbernullable
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/webhook-deliveries" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Replay

POST/v1/webhook-deliveries/{delivery_id}/replay

API key requiredSuccess 202

Parameters

NameTypeDescription
delivery_idrequiredpathstring
webhook_idquerystringlength ≤ 32; nullable
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 202 application/json

NameTypeDescription
idrequiredstring
statusrequiredstringOne of: pending

Example

curl -X POST "https://azimo.ai/v1/webhook-deliveries/<delivery_id>/replay" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Brands and templates

Save brand kits and reusable templates, then reference them when producing.

Listing

GET/v1/brands

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].kindrequiredstring
data[].namerequiredstring
data[].versionrequiredinteger
data[].created_atrequirednumber
data[].updated_atrequirednumber
data[].datarequiredobject
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/brands" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create

POST/v1/brands

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namerequiredstringlength 1–120
sloganstringlength ≤ 500
primary_colorstringDefault #0F4C81
themestringOne of: light dark; Default dark
assetsarray<string>up to 30 items
notesstringlength ≤ 2000

Response 201 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject

Example

curl -X POST "https://azimo.ai/v1/brands" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name": "<name>"}'

Get

GET/v1/brands/{resource_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
resource_idrequiredpathstring
versionqueryintegerrange ≥ 1; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject

Example

curl "https://azimo.ai/v1/brands/<resource_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Revise

PUT/v1/brands/{resource_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
resource_idrequiredpathstring
expected_versionrequiredqueryintegerrange ≥ 1
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namerequiredstringlength 1–120
sloganstringlength ≤ 500
primary_colorstringDefault #0F4C81
themestringOne of: light dark; Default dark
assetsarray<string>up to 30 items
notesstringlength ≤ 2000

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject

Example

curl -X PUT "https://azimo.ai/v1/brands/<resource_id>?expected_version=<expected_version>" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "<name>"}'

Remove

DELETE/v1/brands/{resource_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
resource_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
deletedbooleanDefault true

Example

curl -X DELETE "https://azimo.ai/v1/brands/<resource_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Listing

GET/v1/templates

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].project_idrequiredstringnullable
data[].kindrequiredstring
data[].namerequiredstring
data[].versionrequiredinteger
data[].created_atrequirednumber
data[].updated_atrequirednumber
data[].datarequiredobject
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/templates" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create

POST/v1/templates

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namerequiredstringlength 1–160
promptrequiredstringUse $variable or ${variable} placeholders; length 10–4000
optionsobject
options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
options.goalstringlength ≤ 2000
options.audiencestringlength ≤ 1000
options.duration_maxintegerDefault 60; range 5–180
options.widthintegerDefault 1920; range 640–3840
options.heightintegerDefault 1080; range 360–2160
options.fpsintegerDefault 30; range 24–60
options.subtitlesbooleanDefault false
options.musicbooleanDefault true
options.skill_idstringlength ≤ 200; nullable
options.credit_budgetintegerrange 1–1000000; nullable
options.video_typestringOne of: project product personal corporate; nullable
options.content_datamap<string, string>
options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
options.brandobject
options.motion_stylestringOne of: mono photo; Default mono
options.photo_subjectstringlength ≤ 120
options.photo_licensestringOne of: strict sharealike; Default strict
assetsarray<string>up to 30 items
brand_idstringnullable

Response 201 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject

Example

curl -X POST "https://azimo.ai/v1/templates" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name": "<name>", "prompt": "<prompt>"}'

Get

GET/v1/templates/{resource_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
resource_idrequiredpathstring
versionqueryintegerrange ≥ 1; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject

Example

curl "https://azimo.ai/v1/templates/<resource_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Revise

PUT/v1/templates/{resource_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
resource_idrequiredpathstring
expected_versionrequiredqueryintegerrange ≥ 1
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namerequiredstringlength 1–160
promptrequiredstringUse $variable or ${variable} placeholders; length 10–4000
optionsobject
options.workflowstringOne of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer
options.goalstringlength ≤ 2000
options.audiencestringlength ≤ 1000
options.duration_maxintegerDefault 60; range 5–180
options.widthintegerDefault 1920; range 640–3840
options.heightintegerDefault 1080; range 360–2160
options.fpsintegerDefault 30; range 24–60
options.subtitlesbooleanDefault false
options.musicbooleanDefault true
options.skill_idstringlength ≤ 200; nullable
options.credit_budgetintegerrange 1–1000000; nullable
options.video_typestringOne of: project product personal corporate; nullable
options.content_datamap<string, string>
options.style_presetstringOne of: cinematic_realism clean_3d product_studio; Default cinematic_realism
options.brandobject
options.motion_stylestringOne of: mono photo; Default mono
options.photo_subjectstringlength ≤ 120
options.photo_licensestringOne of: strict sharealike; Default strict
assetsarray<string>up to 30 items
brand_idstringnullable

Response 200 application/json

NameTypeDescription
idrequiredstring
project_idrequiredstringnullable
kindrequiredstring
namerequiredstring
versionrequiredinteger
created_atrequirednumber
updated_atrequirednumber
datarequiredobject

Example

curl -X PUT "https://azimo.ai/v1/templates/<resource_id>?expected_version=<expected_version>" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "<name>", "prompt": "<prompt>"}'

Remove

DELETE/v1/templates/{resource_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
resource_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
deletedbooleanDefault true

Example

curl -X DELETE "https://azimo.ai/v1/templates/<resource_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Projects, keys and audit

Manage projects and API keys, and read the change log.

List Projects

GET/v1/projects

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].organization_idrequiredstring
data[].namerequiredstring
data[].created_atrequirednumber
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/projects" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create Project

POST/v1/projects

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namerequiredstringlength 1–120

Response 201 application/json

NameTypeDescription
idrequiredstring
organization_idrequiredstring
namerequiredstring
created_atrequirednumber

Example

curl -X POST "https://azimo.ai/v1/projects" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name": "<name>"}'

Delete Project

DELETE/v1/projects/{project_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
project_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
deletedbooleanDefault true

Example

curl -X DELETE "https://azimo.ai/v1/projects/<project_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

List Keys

GET/v1/api-keys

API key requiredSuccess 200

Parameters

NameTypeDescription
limitqueryintegerDefault 50; range 1–200
cursorquerystringlength ≤ 256; nullable
afterquerystringlength ≤ 256; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].namerequiredstringLabel given at creation (also returned as owner)
data[].ownerrequiredstring
data[].prefixrequiredstringnullable
data[].organization_idrequiredstringnullable
data[].project_idstringSet when the key is bound to one project; nullable
data[].rolerequiredstringOne of: owner editor viewer
data[].activerequiredboolean
data[].created_atrequirednumbernullable
data[].last_used_atnumbernullable
data[].expires_atnumbernullable
data[].revoked_atnumbernullable
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/api-keys" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Create Key

POST/v1/api-keys

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
namerequiredstringlength 1–120
rolestringOne of: owner editor viewer; Default editor
project_idstringnullable
monthly_budget_usdnumberrange ≥ 0; nullable
rate_per_hourintegerrange ≥ 1; nullable

Response 201 application/json

NameTypeDescription
idrequiredstring
namerequiredstringLabel given at creation (also returned as owner)
ownerrequiredstring
prefixrequiredstringnullable
organization_idrequiredstringnullable
project_idstringSet when the key is bound to one project; nullable
rolerequiredstringOne of: owner editor viewer
activerequiredboolean
created_atrequirednumbernullable
last_used_atnumbernullable
expires_atnumbernullable
revoked_atnumbernullable
keyrequiredstringThe bearer secret; shown once (an idempotent replay returns the same value)

Example

curl -X POST "https://azimo.ai/v1/api-keys" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name": "<name>"}'

Rotate Key

POST/v1/api-keys/{key_id}/rotate

API key requiredSuccess 200

The old secret dies at once, or after grace_seconds so running fleets can switch without downtime.

Parameters

NameTypeDescription
key_idrequiredpathstring
grace_secondsqueryintegerDefault 0; range 0–604800
Idempotency-KeyheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
keyrequiredstring
previous_idrequiredstring
previous_expires_inrequiredintegernullable

Example

curl -X POST "https://azimo.ai/v1/api-keys/<key_id>/rotate" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Revoke Key

DELETE/v1/api-keys/{key_id}

API key requiredSuccess 200

Parameters

NameTypeDescription
key_idrequiredpathstring
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
idrequiredstring
activebooleanDefault false

Example

curl -X DELETE "https://azimo.ai/v1/api-keys/<key_id>" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Audit Log

GET/v1/audit

API key requiredSuccess 200

Identity and configuration changes for this organization (keys, projects, webhooks), oldest first from after.

Parameters

NameTypeDescription
afterqueryintegerDefault 0; range ≥ 0
limitqueryintegerDefault 50; range 1–200
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].sequencerequiredinteger
data[].typerequiredstring
data[].created_atrequirednumber
data[].api_versionrequiredstring
data[].project_idrequiredstringnullable
data[].datarequiredobject
next_cursorrequiredintegerSequence number to pass as after; unchanged when the page is empty
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/audit" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Wallet and usage

Balance, statement and usage, and online top-up.

Wallet

GET/v1/wallet

API key requiredSuccess 200

Parameters

NameTypeDescription
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
balance_centsrequiredinteger
held_centsrequiredinteger
available_centsrequiredinteger
low_balance_centsrequiredintegernullable
currencyrequiredstring
organization_idrequiredstring

Example

curl "https://azimo.ai/v1/wallet" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Wallet Entries

GET/v1/wallet/entries

API key requiredSuccess 200

Parameters

NameTypeDescription
afterquerystringlength ≤ 64; nullable
limitqueryintegerDefault 50; range 1–200
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
datarequiredarray<object>
data[].idrequiredstring
data[].organization_idrequiredstring
data[].kindrequiredstring
data[].amount_centsrequiredinteger
data[].hold_centsrequiredinteger
data[].job_idrequiredstringnullable
data[].noterequiredstringnullable
data[].actorrequiredstringnullable
data[].created_atrequirednumber
next_cursorstringOpaque; pass as cursor (or the after alias) for the next page; nullable
has_morebooleanDefault false

Example

curl "https://azimo.ai/v1/wallet/entries" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Checkout

POST/v1/wallet/checkout

API key requiredSuccess 201

Parameters

NameTypeDescription
Idempotency-KeyrequiredheaderstringA unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Request body application/json

NameTypeDescription
amount_centsrequiredintegerUSD cents, $5–$10,000; range 500–1000000

Response 201 application/json

NameTypeDescription
idrequiredstring
urlrequiredstring
amount_centsrequiredinteger
currencystringDefault USD

Example

curl -X POST "https://azimo.ai/v1/wallet/checkout" \
  -H "Authorization: Bearer $AZIMO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"amount_cents": 500}'

Usage

GET/v1/usage

API key requiredSuccess 200

The amount billed for this project's paid calls in [from, to) (default: the last 30 days), plus job counts, grouped on request. group_by=job pages by job id with after; group_by=workflow reads at most 5000 jobs' request options.

Parameters

NameTypeDescription
fromquerynumberrange ≥ 0; nullable
toquerynumberrange ≥ 0; nullable
group_byquerystringDefault none
limitqueryintegerDefault 50; range 1–200
afterquerystringlength ≤ 32; nullable
X-Project-IDheaderstringThe project to act on; the default project when omitted; nullable

Response 200 application/json

NameTypeDescription
project_idrequiredstring
rangerequiredmap<string, number>
jobsrequiredmap<string, integer>
list_usdrequirednumberAmount billed for the paid calls in the range
group_byrequiredstring
groupsrequiredarray<object>nullable
next_cursorrequiredstringnullable

Example

curl "https://azimo.ai/v1/usage" \
  -H "Authorization: Bearer $AZIMO_API_KEY"

Service health

Health checks; no key needed.

Healthz

GET/healthz

No authSuccess 200

Response 200 application/json

Example

curl "https://azimo.ai/healthz"

Readyz

GET/readyz

No authSuccess 200

Response 200 application/json

NameTypeDescription
okrequiredboolean
dbrequiredboolean
versionrequiredstring
queue_depthrequiredinteger
runningrequiredinteger
worker_seen_atnumberLatest job start or running-job heartbeat; nullable
worker_aliverequiredbooleanA worker sent a durable heartbeat within the last 5 minutes

Other status codes

  • 503 Service Unavailable

Example

curl "https://azimo.ai/readyz"
Feedback