CLI
The faceless CLI (npm package faceless-cli) wraps the whole API in commands that work for humans and for scripts and agents.
Install
npm install -g faceless-cli
faceless --version
The command is faceless (alias fcl). Without installing, use npx -y faceless-cli <command>.
Authenticate
Two options:
faceless login: paste an API key from your team settings at https://faceless.so/team; it is stored in~/.faceless/config.jsonfor future commandsFACELESS_API_KEYenvironment variable: nothing to store; ideal for CI and agents
Verify with faceless whoami. Global flags on every command: --json (raw API envelope output), --api-key (override the key for one call) and --api-url (point at another deployment, also via FACELESS_API_URL).
Commands
faceless whoami: introspect the API key (GET /me)faceless credits: credit balance and ledger (GET /credits)faceless videos create: create a video from a script (POST /videos)faceless videos captions: caption an existing video or audio URL (POST /videos/captions)faceless videos list/faceless videos get <id>: browse videos (GET /videos, GET /videos/{id})faceless videos status <id>: generation progress (GET /videos/{id}/status)faceless videos update <id>: rename or set per-platform post metadata (PATCH /videos/{id})faceless videos render <id>: render the MP4 (POST /videos/{id}/render)faceless videos delete <id>: delete a video (DELETE /videos/{id})faceless renders get <id>: render progress and final MP4 url (GET /renders/{id})faceless series create/list/get <id>/update <id>/delete <id>: manage seriesfaceless series generate <id>: force the next episode now (POST /series/{id}/generate)faceless series episodes <id>: list a series' episodes (GET /series/{id}/episodes)faceless posts publish: publish a rendered video now (POST /posts)faceless posts schedule: schedule to one or more platforms (POST /posts/schedule)faceless posts cancel <videoId>: cancel a scheduled post (DELETE /posts/{id})faceless calendar: posting calendar (GET /calendar)faceless accounts: connected social accounts (GET /accounts)faceless voices: TTS voice catalog (GET /voices)faceless options: option catalogs, e.g.faceless options --kind models(GET /options)faceless assets create: register a media asset by URL (POST /assets)faceless analytics: cross-platform performance (GET /analytics)faceless mcp: run the local stdio MCP server (see MCP)
Scripting and agents: --json
Always pass --json when running from a script or agent, and parse the success field. The output is the raw API envelope, so the API reference documents every field.
faceless videos create --script "Did you know..." --voice-id EXAVITQu4vr4xnSDxMaL \
--model storyboard --wait --json
faceless posts publish --video-id <videoId> --platform youtube --json
The CLI sends an Idempotency-Key automatically on every mutating command, so a timed-out command is safe to re-run without double credit charges.
--wait and --timeout
Asynchronous operations (videos create, videos captions, videos render, series generate) accept --wait: the CLI polls status at the recommended cadence and exits when the operation reaches a terminal state, printing the final resource. Cap the polling with --timeout <seconds>. Without --wait, poll yourself with faceless videos status <id> --json or faceless renders get <id> --json.
faceless videos create --script "..." --voice-id <voiceId> --wait --timeout 900 --json
faceless videos render <videoId> --wait --json
Exit codes
0: success2: authentication failed (unauthorized); re-runfaceless loginor fixFACELESS_API_KEY3:insufficient_credits; top up at https://faceless.so/billing4:rate_limited; wait and retry (respect Retry-After)1: any other error