List Batches
GET/v1/batches
API key requiredSuccess 200
Parameters
| Name | Type | Description |
|---|---|---|
limitquery | integer | Default 50; range 1–200 |
cursorquery | string | length ≤ 256; nullable |
afterquery | string | length ≤ 256; nullable |
X-Project-IDheader | string | The project to act on; the default project when omitted; nullable |
Response 200 application/json
| Name | Type | Description |
|---|---|---|
datarequired | array<object> | |
data[].idrequired | string | |
data[].namerequired | string | |
data[].created_atrequired | number | |
next_cursor | string | Opaque; pass as cursor (or the after alias) for the next page; nullable |
has_more | boolean | Default false |
Example
curl "https://axiomlab.online/v1/batches" \ -H "Authorization: Bearer $AZIMO_API_KEY"
Create Batch
POST/v1/batches
API key requiredSuccess 202
Parameters
| Name | Type | Description |
|---|---|---|
Idempotency-Keyheader | string | A unique value you generate and keep; reuse it when retrying so the request never runs twice; length 1–128; nullable |
X-Project-IDheader | string | The project to act on; the default project when omitted; nullable |
Request body application/json
| Name | Type | Description |
|---|---|---|
name | string | Default Batch; length 1–160 |
itemsrequired | array<object> | up to 50 items |
items[].prompt | string | length ≤ 4000 |
items[].assets | array<string> | up to 30 items |
items[].options | object | |
items[].options.workflow | string | One of: auto explainer short_drama creative_video motion_explainer profile_card product_pitch; Default explainer |
items[].options.goal | string | length ≤ 2000 |
items[].options.audience | string | length ≤ 1000 |
items[].options.duration_max | integer | Planned length in seconds, checked against the workflow's range, whose lower bound depends on the workflow (GET /v1/workflows: 30–180 for most, profile_card 30–90). It does not cap the film: its length is confirmed after the materials are analysed (needs_input with confirm_duration); Default 60; range 5–180 |
items[].options.width | integer | With height, the aspect ratio: 1920×1080 (16:9); profile_card 1080×1920 (9:16); Default 1920; range 640–3840 |
items[].options.height | integer | Default 1080; range 360–2160 |
items[].options.fps | integer | Default 30; range 24–60 |
items[].options.subtitles | boolean | Subtitle preference, applied by profile_card only; other films usually come with subtitles burned in; Default false |
items[].options.music | boolean | Background music preference, applied by profile_card only; Default true |
items[].options.skill_id | string | length ≤ 200; nullable |
items[].options.credit_budget | integer | range 1–1000000; nullable |
items[].options.video_type | string | One of: project product personal corporate name_card; nullable |
items[].options.content_data | map<string, string> | |
items[].options.style_preset | string | One of: cinematic_realism clean_3d product_studio; Default cinematic_realism |
items[].options.brand | object | |
items[].options.profile | object | |
items[].options.motion_style | string | One of: mono photo; Default mono |
items[].options.photo_subject | string | length ≤ 120 |
items[].options.photo_license | string | One of: strict sharealike; Default strict |
items[].options.style | string | A style id from GET /v1/styles; for video_type product one of the 15-second TVC looks cinematic, tech, lifestyle; unset uses the default style; nullable |
items[].options.language | string | The film's language when the request has no text of its own; unset: Chinese; One of: zh en; nullable |
items[].options.founder | object | 企业家名片: name, company, titles, facts (0–12; a card counts as two), photos[{asset, role, caption}], template (ink | grid | renwu), consent, optional industry and name_pinyin; required with video_type name_card. Length is 30–90 seconds, set from the material; nullable |
items[].webhook_url | string | length ≤ 2000; nullable |
items[].plan_id | string | nullable |
items[].template_id | string | nullable |
items[].brand_id | string | nullable |
items[].variables | map<string, string> |
Response 202 application/json
| Name | Type | Description |
|---|---|---|
idrequired | string | |
namerequired | string | |
jobsrequired | array<object> | |
jobs[].idrequired | string | |
jobs[].project_idrequired | string | nullable |
jobs[].batch_id | string | nullable |
jobs[].parent_id | string | nullable |
jobs[].statusrequired | string | One of: queued running needs_input complete rejected failed cancelled |
jobs[].stagerequired | string | nullable |
jobs[].progressrequired | integer | nullable |
jobs[].error | string | nullable |
jobs[].created_atrequired | number | nullable |
jobs[].updated_at | number | nullable |
jobs[].started_at | number | nullable |
jobs[].finished_at | number | nullable |
jobs[].deleted_at | number | nullable |
jobs[].waited_s | number | GET /v1/videos/{id} only: seconds the video waited for its length to be confirmed, null until it is confirmed; its working time is (finished_at or now) - created_at - waited_s; nullable |
jobs[].recoveryrequired | object | |
jobs[].recovery.attemptrequired | integer | |
jobs[].recovery.max_attemptsrequired | integer | |
jobs[].recovery.retry_at | number | nullable |
jobs[].result | object | nullable |
jobs[].result.files | map<string, string> | Signed download links; present on GET once complete/rejected; nullable |
jobs[].result.duration | number | nullable |
jobs[].result.shot_count | integer | nullable |
jobs[].result.visual_mix | any | |
jobs[].result.qa | any | |
jobs[].result.brief | any | |
jobs[].result.workflow | string | nullable |
jobs[].result.routing | any | |
jobs[].result.input_required | object | Why the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and carries no amounts. With approvable: true answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; with approvable: false (actor: operator, prepaid flat-priced jobs) it is an internal review: nothing to approve, the price does not change; nullable |
jobs[].result.native_project | any | |
jobs[].requested_workflowrequired | string | |
jobs[].video_type | string | The video type within the workflow, e.g. project, when the request set one; nullable |
jobs[].style | string | The style the request chose (options.style, see GET /v1/styles); null: the default style; nullable |
jobs[].title | string | A short name for lists: the subject named in the brief (e.g. the project name) or the start of the prompt; nullable |
jobs[].profile_draft | string | profile_card: the confirmed 行家访谈 draft this film was made from (the web app offers a retry); nullable |
datarequired | array<object> | Alias of jobs, kept for v0.3 clients |
data[].idrequired | string | |
data[].project_idrequired | string | nullable |
data[].batch_id | string | nullable |
data[].parent_id | string | nullable |
data[].statusrequired | string | One of: queued running needs_input complete rejected failed cancelled |
data[].stagerequired | string | nullable |
data[].progressrequired | integer | nullable |
data[].error | string | nullable |
data[].created_atrequired | number | nullable |
data[].updated_at | number | nullable |
data[].started_at | number | nullable |
data[].finished_at | number | nullable |
data[].deleted_at | number | nullable |
data[].waited_s | number | GET /v1/videos/{id} only: seconds the video waited for its length to be confirmed, null until it is confirmed; its working time is (finished_at or now) - created_at - waited_s; nullable |
data[].recoveryrequired | object | |
data[].recovery.attemptrequired | integer | |
data[].recovery.max_attemptsrequired | integer | |
data[].recovery.retry_at | number | nullable |
data[].result | object | nullable |
data[].result.files | map<string, string> | Signed download links; present on GET once complete/rejected; nullable |
data[].result.duration | number | nullable |
data[].result.shot_count | integer | nullable |
data[].result.visual_mix | any | |
data[].result.qa | any | |
data[].result.brief | any | |
data[].result.workflow | string | nullable |
data[].result.routing | any | |
data[].result.input_required | object | Why the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and carries no amounts. With approvable: true answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; with approvable: false (actor: operator, prepaid flat-priced jobs) it is an internal review: nothing to approve, the price does not change; nullable |
data[].result.native_project | any | |
data[].requested_workflowrequired | string | |
data[].video_type | string | The video type within the workflow, e.g. project, when the request set one; nullable |
data[].style | string | The style the request chose (options.style, see GET /v1/styles); null: the default style; nullable |
data[].title | string | A short name for lists: the subject named in the brief (e.g. the project name) or the start of the prompt; nullable |
data[].profile_draft | string | profile_card: the confirmed 行家访谈 draft this film was made from (the web app offers a retry); nullable |
countsrequired | map<string, integer> | |
webhook_signing_secret | string | Set 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://axiomlab.online/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
| Name | Type | Description |
|---|---|---|
batch_idrequiredpath | string | |
X-Project-IDheader | string | The project to act on; the default project when omitted; nullable |
Response 200 application/json
| Name | Type | Description |
|---|---|---|
idrequired | string | |
namerequired | string | |
jobsrequired | array<object> | |
jobs[].idrequired | string | |
jobs[].project_idrequired | string | nullable |
jobs[].batch_id | string | nullable |
jobs[].parent_id | string | nullable |
jobs[].statusrequired | string | One of: queued running needs_input complete rejected failed cancelled |
jobs[].stagerequired | string | nullable |
jobs[].progressrequired | integer | nullable |
jobs[].error | string | nullable |
jobs[].created_atrequired | number | nullable |
jobs[].updated_at | number | nullable |
jobs[].started_at | number | nullable |
jobs[].finished_at | number | nullable |
jobs[].deleted_at | number | nullable |
jobs[].waited_s | number | GET /v1/videos/{id} only: seconds the video waited for its length to be confirmed, null until it is confirmed; its working time is (finished_at or now) - created_at - waited_s; nullable |
jobs[].recoveryrequired | object | |
jobs[].recovery.attemptrequired | integer | |
jobs[].recovery.max_attemptsrequired | integer | |
jobs[].recovery.retry_at | number | nullable |
jobs[].result | object | nullable |
jobs[].result.files | map<string, string> | Signed download links; present on GET once complete/rejected; nullable |
jobs[].result.duration | number | nullable |
jobs[].result.shot_count | integer | nullable |
jobs[].result.visual_mix | any | |
jobs[].result.qa | any | |
jobs[].result.brief | any | |
jobs[].result.workflow | string | nullable |
jobs[].result.routing | any | |
jobs[].result.input_required | object | Why the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and carries no amounts. With approvable: true answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; with approvable: false (actor: operator, prepaid flat-priced jobs) it is an internal review: nothing to approve, the price does not change; nullable |
jobs[].result.native_project | any | |
jobs[].requested_workflowrequired | string | |
jobs[].video_type | string | The video type within the workflow, e.g. project, when the request set one; nullable |
jobs[].style | string | The style the request chose (options.style, see GET /v1/styles); null: the default style; nullable |
jobs[].title | string | A short name for lists: the subject named in the brief (e.g. the project name) or the start of the prompt; nullable |
jobs[].profile_draft | string | profile_card: the confirmed 行家访谈 draft this film was made from (the web app offers a retry); nullable |
datarequired | array<object> | Alias of jobs, kept for v0.3 clients |
data[].idrequired | string | |
data[].project_idrequired | string | nullable |
data[].batch_id | string | nullable |
data[].parent_id | string | nullable |
data[].statusrequired | string | One of: queued running needs_input complete rejected failed cancelled |
data[].stagerequired | string | nullable |
data[].progressrequired | integer | nullable |
data[].error | string | nullable |
data[].created_atrequired | number | nullable |
data[].updated_at | number | nullable |
data[].started_at | number | nullable |
data[].finished_at | number | nullable |
data[].deleted_at | number | nullable |
data[].waited_s | number | GET /v1/videos/{id} only: seconds the video waited for its length to be confirmed, null until it is confirmed; its working time is (finished_at or now) - created_at - waited_s; nullable |
data[].recoveryrequired | object | |
data[].recovery.attemptrequired | integer | |
data[].recovery.max_attemptsrequired | integer | |
data[].recovery.retry_at | number | nullable |
data[].result | object | nullable |
data[].result.files | map<string, string> | Signed download links; present on GET once complete/rejected; nullable |
data[].result.duration | number | nullable |
data[].result.shot_count | integer | nullable |
data[].result.visual_mix | any | |
data[].result.qa | any | |
data[].result.brief | any | |
data[].result.workflow | string | nullable |
data[].result.routing | any | |
data[].result.input_required | object | Why the job is needs_input: code, actor, message and what to send to /resume. A spending stop has code: budget_approval and carries no amounts. With approvable: true answer it with POST /v1/videos/{id}/resume {"approve_budget": true}; with approvable: false (actor: operator, prepaid flat-priced jobs) it is an internal review: nothing to approve, the price does not change; nullable |
data[].result.native_project | any | |
data[].requested_workflowrequired | string | |
data[].video_type | string | The video type within the workflow, e.g. project, when the request set one; nullable |
data[].style | string | The style the request chose (options.style, see GET /v1/styles); null: the default style; nullable |
data[].title | string | A short name for lists: the subject named in the brief (e.g. the project name) or the start of the prompt; nullable |
data[].profile_draft | string | profile_card: the confirmed 行家访谈 draft this film was made from (the web app offers a retry); nullable |
countsrequired | map<string, integer> |
Example
curl "https://axiomlab.online/v1/batches/<batch_id>" \ -H "Authorization: Bearer $AZIMO_API_KEY"