Browse the catalog
string
Business-role category, e.g.
professional, recruiter, sales, coach, executive, casual, illustrated.string
male, female, or neutral (illustrated/abstract avatars).string
curated (global catalog), generated, or uploaded (your own).string
portrait or landscape. Omit to get both. See Portrait or landscape — this is also the meeting’s layout.string
Every shape and room of the same face, e.g.
F-3. Use it to offer the same person in a different setting.id, image url, category, gender, orientation, environment, identity_key, an optional video_url idle loop, and — when set — a default paired Voice.
Portrait or landscape
An avatar carries its own shape, and the shape decides how the meeting is laid out. There is no separate layout setting to keep in sync: assign the face and you have chosen the stage.
Landscape avatars in the curated catalog carry an
environment naming the room they were shot in — hospital-clinic, hospital-ward, conference-room, conference-glass, home-warm, home-bright, home-study, home-kitchen, home-evening — so you can match the setting to the conversation. identity_key groups both shapes of one face, so the same person can be offered in either layout:
video_url is present it is a seamless idle loop of that exact still — the meeting plays it under the agent until the live renderer takes over, and falls back to the still if it can’t.
Assign an avatar to a persona
string
ID from
GET /avatars. Takes precedence over url. The avatar’s image URL and gender are copied onto the persona so voice pairing stays coherent.string
Escape hatch: any hosted image URL. For best results match the catalog’s framing — 3:4 portrait, face centered, eyes about a third from the top — since the same image is cropped into circles and cards across the meeting UI.
boolean
default:"false"
When
true and the avatar has a default voice, the persona’s voice_id switches to it.avatar_id directly when creating or updating a persona.
Create your own avatar
Point us at any hosted image and we take it from there: the image is fetched once, validated, and re-hosted on WaterrAI storage with immutable cache headers. Meetings load the avatar from our infrastructure (and the participant’s browser cache), never from your origin — so a slow CDN, hotlink protection, or a deleted file on your side can’t blank the avatar mid-call. It becomes part of your private catalog (source: uploaded, visible only to your account):
string
required
Public https URL of the image — jpeg, png, or webp; max 10MB; min 128×128px. Fetched once at creation, then never again (the original is kept in
tags.source_url for reference). Match one of the two catalog shapes: 3:4 portrait (face centered, eyes about a third from the top) or 16:9 landscape framed like a video call.string
Optional room label for a landscape avatar, e.g.
hospital-ward. Free text — it is shown to your creators when they pick a face.orientation is measured from the image, not taken from the request body. A 3:4 still labelled landscape would be stretched across the meeting stage, so the image itself decides.string
default:"professional"
Any category string; used for filtering your catalog.
string
male, female, or neutral. Copied onto the persona on assignment so voice pairing stays coherent.Generate an avatar from a photo
The curated catalog is generated to a spec the live renderer was tuned on: camera at eye level, face centred, mouth closed, webcam framing, a real room out of focus. A selfie rarely matches that — shot from above, tilted, mouth open — and the renderer shows it as lag and drift in the lip-sync.POST /avatars/generate turns any photo of a person into a still that does match, keeping their face and putting them in a room you choose, in either shape.
202 Accepted straight away with the new avatar in status: "generating" and a poll path. Generation takes 20–90 seconds; poll GET /avatars/{id} until status is active (the url is now the still) or failed (tags.generation.error says why). The result is yours (source: generated), shows up in GET /avatars like an upload, and can be assigned to a persona the same way.
string
An avatar you can see — curated or your own — whose face to use. Give this or
source_url. The result inherits its identity_key, so one person can be generated into several rooms and still be recognised as one identity.string
Public https URL of a photo of the person (jpeg, png or webp, max 10MB). Fetched once for the generation and not stored; the generated still is what gets hosted.
string
required
The room. One of the slugs from
GET /avatars/environments: home-warm, home-bright, home-study, home-kitchen, home-evening, office-loft, desk-workspace, business-minimal, studio-editorial, hospital-clinic, hospital-ward, conference-room, conference-glass.string
default:"landscape"
landscape (1920×1080, fills the meeting stage with the participant in a corner) or portrait (810×1080, sits beside the participant’s camera). This is the one place orientation is accepted as input, because here the image is produced to order — the resulting row is still measured and recorded like any other.string
Optional, up to 300 characters. Describes the same person — age, wardrobe, hair — never the framing or the room, which are fixed. If it conflicts with the photo, the photo wins; it can’t be used to put someone else in the frame.
string
Defaults to the source avatar’s category, else
professional.string
male, female or neutral. Defaults to the source avatar’s.Generation is metered: 20 per account per rolling 24 hours by default. Past that the endpoint answers
429. A generating row counts, so a client that retries on timeout should poll the row it already has rather than start another.GET /avatars/environments returns the current room list and the accepted orientations, so a picker never has to hard-code either.
