Realtime Avatar

Render audio to a talking-head video (non-streaming)

POST
/api/v1/lipsync

Non-streaming lipsync: download audioUrl, render the full clip in one pass, store the MP4, and return its public URL. No LLM, no TTS, no streaming — ideal for backend and batch jobs. Provide either avatarId (an avatar you created) or portraitUrl (registered on the fly). Bills realtime seconds like a turn. Requires scope realtime:write.

AuthorizationBearer <token>

TIC API key as a bearer token: Authorization: Bearer tic_live_... or tic_test_.... Create keys in the dashboard at /platform/dashboard or via POST /api/v1/api-keys.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Provide audioUrl plus either avatarId or portraitUrl.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/lipsync" \  -H "Content-Type: application/json" \  -d '{    "audioUrl": "http://example.com"  }'
{  "url": "http://example.com",  "avatarId": "string",  "frames": 0,  "fps": 0,  "durationSeconds": 0}
{  "error": "string",  "status": 0,  "code": "string",  "retryable": true,  "billingUrl": "string"}
{  "error": "string",  "status": 0,  "code": "string",  "retryable": true,  "billingUrl": "string"}
{  "error": "string",  "status": 0,  "code": "string",  "retryable": true,  "billingUrl": "string"}
{  "error": "string",  "status": 0,  "code": "string",  "retryable": true,  "billingUrl": "string"}