All endpoints
Base URL for every route below: https://infinityflow.stream/api/v1. OAuth and the MCP transport use separate URLs.
Send Authorization: Bearer YOUR_KEY with every request. JSON writes require Content-Type: application/json. An active base plan and automation entitlement are required in addition to the operation’s scope. See authentication.
Account and capabilities
Section titled “Account and capabilities”| Method and path | Scope | 200 response |
|---|---|---|
GET /account |
account:read |
{account: {id, name}, entitlements} |
GET /usage |
usage:read |
{date, timeZone, resetsAt, limit, reserved, consumed, remaining} |
GET /models |
account:read |
{models: [...]} |
entitlements includes planId, active, automationEnabled, dailyVideoLimit, maxBatchSize, maxOutstandingJobs, maxActiveGenerations, priority, legacyPriceLocked, basePriceMinor, currency, market, intervalMonths, validFrom, validUntil and policyVersion. Unverified original price terms may be null; this does not mean a zero price. Monetary amounts use the currency’s smallest ISO unit.
For /usage, timeZone is America/Sao_Paulo and resetsAt is ISO 8601. limit and remaining are null for plans without a daily allowance. reserved includes accepted work that has not finished. An exhausted allowance returns 429 with reset metadata; requests are never accepted for a future day.
/models publishes studio-video and studio-image, 16:9 and 9:16 aspects, at most three references, and ten-second videos. Discover supported capabilities here; do not submit external provider parameters.
curl 'https://infinityflow.stream/api/v1/account' \ -H "Authorization: Bearer $INFINITY_FLOW_API_KEY"Generations
Section titled “Generations”| Method and path | Scope | Input | Success |
|---|---|---|---|
POST /generations |
generations:write |
GenerationInput; UUID Idempotency-Key header |
202 {generation} and Location |
GET /generations |
generations:read |
Optional projectId, cursor query parameters |
200 {generations, nextCursor} |
GET /generations/{id} |
generations:read |
UUID id |
200 {generation} |
POST /generations/{id}/cancel |
generations:write |
UUID id; no required body |
200 {ok: true} |
GenerationInput requires prompt (1–4,000 characters) and aspect (16:9 or 9:16). Optional fields: title (up to 100 characters), UUID projectId, mediaKind (video/image), model (studio-video/studio-image), referenceIds (up to three distinct UUIDs), referenceId (one reference), durationSeconds (only 10) and outputCount (only 1). Use a consistent model and media kind. Unpublished fields are rejected. Omitting projectId uses the default project.
curl 'https://infinityflow.stream/api/v1/generations' \ -H "Authorization: Bearer $INFINITY_FLOW_API_KEY" \ -H 'Content-Type: application/json' \ -H 'Idempotency-Key: a2b2da8a-d14a-43ad-8846-91c741bb5301' \ --data '{"prompt":"A forest at sunrise","aspect":"16:9","mediaKind":"video","model":"studio-video"}'The UUID above is illustrative. Generate and persist a new UUID for a new creation; reuse the same identity and body after a timeout. 202 means durable acceptance, not completion. Example response:
{ "generation": { "id": "6aedffb0-cead-4387-9fae-5201fd1679f1", "projectId": "bd0bffdb-da62-4ed4-844d-4570870d8d99", "title": "Opening", "mediaKind": "video", "model": "studio-video", "aspect": "16:9", "state": "queued", "createdAt": "2026-11-09T12:00:00.000Z", "updatedAt": "2026-11-09T12:00:00.000Z", "readyAt": null, "expiresAt": null, "outputs": [] }}Batch items also include batchId and batchIndex. States are queued, processing, succeeded, failed, cancelled and attention_required. The last requires inspecting the original request; do not submit another identity. See generation states and parameters.
History returns up to 24 items per page, newest first. Encode nextCursor with URLSearchParams and pass it unchanged as cursor. There is no public limit parameter. Cancellation is only available before submission; started or uncertain work may return 409.
Batches
Section titled “Batches”| Method and path | Scope | Input | Success |
|---|---|---|---|
POST /batches |
generations:write |
{items: GenerationInput[]}; UUID Idempotency-Key |
202 {batch: {id, generations}} and Location |
GET /batches/{id} |
generations:read |
UUID id |
200 {batch: {id, generations}} |
Batch limits are 3 for Creator, 20 for Pro and 100 for Enterprise. Admission is atomic: an invalid item or insufficient capacity rejects the whole batch. Each accepted item has its own ID and state. A batch does not increase concurrency; the account keeps one active generation at a time.
{"items":[{"prompt":"Exterior at sunrise","aspect":"16:9","mediaKind":"video"},{"prompt":"Portrait in natural light","aspect":"9:16","mediaKind":"image"}]}Private media
Section titled “Private media”| Method and path | Scope | Success |
|---|---|---|
GET /generations/{id}/outputs/{index}/download |
media:read |
307, private URL in Location |
GET /generations/{id}/outputs/{index}/play |
media:read |
307, private URL in Location |
GET /generations/{id}/outputs/{index}/thumbnail |
media:read |
307, real thumbnail in Location |
GET /generations/{id}/outputs/{index}/download-ticket |
media:read |
200 {url} |
id is the generation UUID and index currently only accepts 0. All four routes also accept HEAD: download/play/download-ticket return 200 media metadata headers without a body; thumbnail returns 307 with a private HEAD URL. The file must be ready, owned and unexpired. A thumbnail can still be unavailable after the main file is ready.
Temporary URLs last at most 90 seconds, bounded by media expiry. Files remain available for 24 hours from readyAt. Do not forward your Infinity Flow Bearer to the temporary storage host. A new ticket does not extend retention.
Projects
Section titled “Projects”| Method and path | Scope | Input | Success |
|---|---|---|---|
GET /projects |
projects:read |
— | 200 {projects}; up to 100 |
POST /projects |
projects:write |
{name}; UUID Idempotency-Key |
200 {project} |
GET /projects/{id} |
projects:read |
UUID id |
200 {project} |
PATCH /projects/{id} |
projects:write |
UUID id, {name} |
200 {ok: true} |
DELETE /projects/{id} |
projects:write |
UUID id |
200 {ok: true} |
name is required, 1–100 characters after trimming. Reads return id, name, createdAt, updatedAt (Unix milliseconds). Creation instead returns the timestamp fields as created and updated; use the response schema for that operation. Rename and delete do not require Idempotency-Key.
Pending work protects projects and references from deletion. IDs owned by another account return 404. See projects and references.
Reference images
Section titled “Reference images”| Method and path | Scope | Input | Success |
|---|---|---|---|
GET /references |
references:read |
— | 200 {references}; up to 100 |
POST /references |
references:write |
{projectId, filename, data}; UUID Idempotency-Key |
201 {reference: {id, filename}}; replay may return 200 |
GET /references/{id} |
references:read |
UUID id |
200 {reference} |
DELETE /references/{id} |
references:write |
UUID id |
200 {ok: true} |
projectId must be an owned UUID; filename is 1–150 characters; data is plain base64 without a data: prefix. The limit is 8 MiB decoded bytes. Image types are validated from their contents; URL fetching is not supported. The library allows 32 references and 128 MiB total. Metadata reads include id, projectId, filename, mime, byte size and Unix-millisecond createdAt. References used by pending work cannot be removed.
Headers, errors and retries
Section titled “Headers, errors and retries”Idempotency-Key is required only when creating generations, batches, projects and references. Reusing a key with a different body conflicts. Keep the original ID after an uncertain result; never retry as a new creation.
Automation errors use {error: {code, message, requestId}}, optionally with details or usage. Some delegated library/cancellation operations retain {error, code?}. Check HTTP status before interpreting the envelope. X-Request-Id identifies the call; Retry-After instructs waiting after 429; WWW-Authenticate appears on 401.
This version has no public generation-completion webhook: poll the saved ID with backoff. The Hotmart webhook belongs to the internal billing flow and is not a customer integration API.
Interactive schemas, examples and operation responses · OpenAPI JSON · Errors · Batches and retries