Arcads API: how it works, from credentials to video
Arcads has a public API: Basic auth with a client ID and secret, then a brand, a folder and a script, one generate call, and a poll for the video URL.

Yes, Arcads has a public API. You generate a Client ID and Client Secret under Settings > Public API, send them as HTTP Basic auth, create a brand, a folder and a script, and call POST /v1/scripts/{scriptId}/generate. Then GET /v1/scripts/{scriptId}/videos returns each video's status and its URL.
The steps come from Arcads' help-center API documentation and the endpoint details from its external API reference, both read on 2026-09-28. The help article still says "Create a Product" with POST /v1/products; the reference marks that route deprecated because "Products are now called brands", so this post uses /v1/brands.
How do I authenticate with the Arcads API?
Arcads uses a client ID and secret pair, combined into one Basic Authorization header. The help article shows the token built in Node.js:
- Log in, go to Settings > Public API, and click Generate credentials.
- Copy the Client Secret right away: it is shown only once and cannot be retrieved later.
- If you lose it, generate a new Client ID and Client Secret and update your application.
- For a failed authentication the reference lists
403"Authentication error"; it lists no401.
const token = `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`;
// Use this token in API requests:
// Authorization: <token>What is the call flow, step by step?
A brand is the container for your folders, scripts and videos. Situations belong to actors (GET /v1/actors/{actorId}/situations lists one actor's), and Arcads describes them as the conditions or templates used in script creation. One script carries the text and a videos array with one entry per situation, so a single generate call renders that script's videos.
| Step | Endpoint | What you send | What you get |
|---|---|---|---|
| 1. Brand | POST /v1/brands | name (required); optional description, targetAudience, mainFeatures, painPoint | The brand's id |
| 2. Folder | POST /v1/folders | name (required) and productId | A folderId |
| 3. Actors | GET /v1/situations or GET /v1/actors | Filters (paginated) | The situationId values to use |
| 4. Script | POST /v1/scripts | name and text (required), folderId or projectId, and videos[] with a situationId and optional voiceId | A scriptId |
| 5. Generate | POST /v1/scripts/{scriptId}/generate | No body | 201 with true |
| 6. Poll | GET /v1/scripts/{scriptId}/videos | Nothing | Videos with videoStatus and videoUrl |
Why would a generate call be refused?
The reference lists 422 for four reasons, named in the error message: the script was blocked by generation, it contains forbidden actors, it has no videos to generate, or it needs more credits than the workspace has. Earlier steps fail differently:
POST /v1/scriptswithout afolderIdor aprojectIdis400; at least one is required.- A missing folder, project, situation, or voice is
404, withFOLDER_NOT_FOUND,PROJECT_NOT_FOUND,SITUATION_NOT_FOUND, orVOICE_NOT_FOUNDin the message.
Is there a v2 endpoint for talking actors?
Yes. The reference also lists POST /v2/talking-actors/generate. It takes a model (arcads_1.0, audio_driven, or omnihuman), a productId, an actors array of situations with optional voices, and either a script or referenceAudios (at most one file). It returns one item per generation with a status of processing, completed, or failed; read one with GET /v2/talking-actors/{id}.
Arcads also runs a hosted MCP server at https://mcp.arcads.ai for MCP clients such as Claude Desktop, per its MCP page.
How much does the Arcads API cost?
The API spends plan credits; the help pages read today list credits, not dollar prices. GET /v1/credits returns creditsIncluded, creditsRemaining, and additionalCreditsUsed, and the reference notes that the app and the API draw on the same balance.
- Starter includes 8,000 monthly credits and Creator 16,000. On both, the account is temporarily blocked at the monthly limit, and credits do not roll over.
- On Pro, usage past the limit is charged per extra credit, and unused credits on Pro, Scale, and Business roll over while the subscription stays active.
What does the same job look like on Sume?
On Sume, one request replaces the brand, folder and script steps. POST /v1/avatar-1.0/talking-video names a ready avatar with avatar_handle, takes a script, and accepts an optional product_image and scene; media fields must be public HTTPS URLs. Scripts must land at an estimated 4–60 seconds, resolution is currently 720p, and in current code the avatar speaks English only. See Generate avatar video, and UGC-style video ads for products at scale for how the tools compare.
Sources
Related posts
More in Developers
- Asynchronous request-reply pattern: how it works
In the asynchronous request-reply pattern, the server accepts work with a 202 and a status URL, and the client polls or takes a callback until it's done.
- asyncio Semaphore: limit concurrent API jobs in Python
An asyncio Semaphore caps how many coroutines run a block at once. For paid API jobs, hold it from submit to the final status and size it to your limit.
- Bearer token vs API key: what's the difference?
An API key is a kind of credential; Bearer is a way to send one, in the Authorization header. A key can travel as a bearer token, as OAuth tokens do.
- Circuit breaker pattern in Python for AI API calls
A circuit breaker stops calling a failing API: after repeated failures it opens and fails fast, then lets a trial call through. A Python version.
Written by Sume