Skip to content
Get your keyGet a key

Reference · Video

POST/avatars/quote

Price it: make a talking avatar clip, or lip-sync a clip to a voice

The price for exactly this body, the balance beside it and any notes. Nothing runs and nothing is charged. Run it with POST /api/v1/avatars, the same body, confirmCredits set to credits and the same Idempotency-Key.

Key needs
create · Make things and spend credits
Answers
A quote · free
Request
curl -X POST https://vessero.com/api/v1/avatars/quote \
  -H "Authorization: Bearer $VESSERO_API_KEY" \
  -H "Idempotency-Key: 47f8f6f5-ea00-4fb1-925f-76aac956a0ec" \
  -H "Content-Type: application/json" \
  -d '{}'
Response200 OK
{
  "object": "quote",
  "credits": 12,
  "balance": 840,
  "lines": [
    "1 image × 12 (Nano Banana Pro · 4K)"
  ],
  "notes": [],
  "requestId": "47f8f6f5-ea00-4fb1-925f-76aac956a0ec",
  "run": {
    "method": "POST",
    "path": "/api/v1/images",
    "confirmCredits": 12,
    "idempotencyKey": "47f8f6f5-ea00-4fb1-925f-76aac956a0ec"
  }
}

Header

  • Idempotency-KeystringYour id for this request: 8–64 letters, digits, - or _. A repeat within 10 minutes gets the first answer back and never runs twice. Use the same one for the quote and the run.

Body

  • kindstringavatar (the default): a cast member speaks. revoice: footage of a real person (clipKey) says new words.avatarrevoice
  • castMemberIdstringAn avatar’s speaker: a cast member id from GET /api/v1/cast.
  • modelstringAn avatar’s talking model id, from GET /api/v1/models (studio "avatars").
  • stylestringAn avatar’s look: selfie (a phone at arm’s length, the default), studio, or cinematic.selfiestudiocinematic
  • scriptstringThe words to say, typed (up to 5,000 characters): voiced first in the cast member’s own voice, or voiceId’s, then lip-synced. Give this, voiceTakeId or recordingKey.
  • voiceIdstringWith script: the voice to read them in, from GET /api/v1/voices (a cast member’s own is its voiceId in GET /api/v1/cast). Default: the speaker’s own voice, else the default voice.
  • voiceTakeIdstringOr the words as a voiceover take of theirs: the id POST /api/v1/voiceovers returns, or the one a voiced script kept.
  • recordingKeystringOr the words as a recording they uploaded (MP3 or WAV): a storage key from POST /api/v1/files or POST /api/v1/library/use, or an https link to the file (brought into their Uploads first). Not a copy of something made in Vessero: a take made here goes in as voiceTakeId.
  • whoseRecordingobject · kind ai-voice | voiceWith recordingKey: whose voice it is, as the person says — {kind: "ai-voice"}, or {kind: "voice", name, agreed} for a real person’s.
  • clipKeystringRevoice: the footage, a clip (MP4 or MOV) of one person speaking: a storage key from POST /api/v1/files or POST /api/v1/library/use, or an https link to the file (brought into their Uploads first).
  • personInClipobjectRevoice: the real person in the footage, named, with their permission.
    • namestringrequiredTheir full name, as the person gives it.
    • agreedbooleantrue only once the person has read the statement the quote gives for this name and agreed to it. Leave it out when asking for the price; the run is refused without it.
  • modestringRevoice: lite (one person facing the camera, the default) or basic (scene cuts; finds who is speaking).litebasic

Answers

  • 200quoteThe price for exactly this body, your balance and any notes. Nothing ran.
  • 400invalid_requestA field is missing or not accepted: see details.
  • 403feature_unavailableThe studio this needs is switched off for the account right now.
  • 429rate_limitedToo many calls this minute: see Retry-After.
Next in VideoPOST/influencer-clips