Build with SquidFace

Same account as the SquidFace studio — credits are shared.

Credits left
Videos remaining
API calls
Active keys

Your creations

Everything generated through the API. Renders take 1–5 minutes; the file link appears here the moment it's ready.

WhenProductEndpointKeyStatus CreditsFile
Loading…

API keys

A key is shown once, at creation — we store only its hash, so it can't be recovered later. Lost it? Revoke and create another.

NameKeyCreatedLast used
Loading…

Credits

API calls draw from the same credit balance as the SquidFace studio. One video costs 60 credits; prompt enhancement (/v1/prompt) is free.

Loading plans…

The products

One key reaches all five. Every generation call runs your prompt through Takin first, so a one-line idea becomes a production-ready prompt.

🎬

SquidMotion

POST /v1/video

Text → video, up to 60s and 4K. Returns a job id.

60 credits
🎵

SquidBeat

POST /v1/music

Text → a full song with vocals, or instrumental. Returns a job id.

25 credits
🎨

SquidPic

POST /v1/image

Text → image up to 2K. Returns the URL inline.

8 credits
🎙️

SquidVolume

POST /v1/voice

Text → speech, any language. Returns the URL inline.

5 credits
✍️

Takin

POST /v1/prompt

The prompt engine on its own — preview what the model will receive.

Free

Quickstart

Base URL https://api.squidface.ai · authenticate with Authorization: Bearer sk_squid_live_…

1 · Generate a video

# Returns a job id immediately — renders take 1-5 min.
curl -X POST https://api.squidface.ai/v1/video \
  -H "Authorization: Bearer $SQUIDFACE_KEY" \
  -H "content-type: application/json" \
  -d '{"prompt":"a squid drifting through a neon reef","duration":8}'

2 · Poll until it's done

curl https://api.squidface.ai/v1/video/{id} \
  -H "Authorization: Bearer $SQUIDFACE_KEY"

{"id":"…","status":"done","url":"https://…/video.mp4"}

Python

import httpx, time

h = {"Authorization": f"Bearer {KEY}"}
job = httpx.post("https://api.squidface.ai/v1/video", headers=h,
                 json={"prompt": "a squid in a neon reef"}).json()

while True:
    s = httpx.get(f"https://api.squidface.ai/v1/video/{job['id']}", headers=h).json()
    if s["status"] in ("done", "error"): break
    time.sleep(20)
print(s["url"])

Image, voice and music

# SquidPic — returns the URL inline, no polling.
curl -X POST https://api.squidface.ai/v1/image -H "Authorization: Bearer $KEY" \
  -H "content-type: application/json" -d '{"prompt":"a neon squid","hd":true}'

# SquidVolume — any language, up to 40k characters.
curl -X POST https://api.squidface.ai/v1/voice -H "Authorization: Bearer $KEY" \
  -H "content-type: application/json" -d '{"text":"Welcome to SquidFace."}'

# SquidBeat — a job, like video. Poll /v1/music/{id}.
curl -X POST https://api.squidface.ai/v1/music -H "Authorization: Bearer $KEY" \
  -H "content-type: application/json" \
  -d '{"prompt":"dreamy synthwave for a night drive","instrumental":true}'

Endpoints

MethodPathProductWhat it does
POST/v1/videoSquidMotionSubmit → job id
GET/v1/video/{id}SquidMotionPoll, get the file URL
POST/v1/musicSquidBeatSubmit → job id
GET/v1/music/{id}SquidBeatPoll, get every track
POST/v1/imageSquidPicImage URL, inline
POST/v1/voiceSquidVolumeAudio URL, inline
GET/v1/voicesSquidVolumeThe voice catalogue
POST/v1/promptTakinExpand a prompt — free
GET/v1/modelsProducts your key can reach
GET/v1/meKey identity + balance

Use it from Claude (MCP)

Add SquidFace to Claude Desktop or Claude Code and just ask for a video — Claude calls the API itself. Download squidface_mcp.py, then:

{
  "mcpServers": {
    "squidface": {
      "command": "python",
      "args": ["/path/to/squidface_mcp.py"],
      "env": { "SQUIDFACE_API_KEY": "sk_squid_live_…" }
    }
  }
}