Skip to content

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.

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.

Janela do terminal
curl 'https://infinityflow.stream/api/v1/account' \
-H "Authorization: Bearer $INFINITY_FLOW_API_KEY"
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.

Janela do terminal
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.

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"}]}
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.

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.

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.

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