Avatars
Faces: the library and your own.
/v1/avatarsList avatars (the library and your own)
The library's faces first, then your organisation's own, oldest first.
Query parameters
limitintegerPage size, 1-200 (default 50).
cursorstringThe
nextCursorof the previous page.kind"builtin" | "custom"builtin: the library only; custom: your own only.
gender"female" | "male"ageBand"20s" | "30s" | "40s" | "50s" | "60s"heritagestring (one of 10)
Returns
200 A page of avatars. A page: data is a list of Avatar, and nextCursor fetches the next page.
Fields of data
idstringrequiredAvatar id (
av_…).pattern `^av_.*`
namestringrequiredkind"builtin" | "custom"requiredbuiltin: Zentiq's library; custom: your organisation's own.
genderstring | nullrequiredA library face's gender (female, male); null for your own pictures.
ageBandstring | nullrequiredA library face's age band (20s, 30s, 40s, 50s, 60s); null for your own.
heritagestring | nullrequiredA library face's heritage (white, black, indian, chinese, korean, japanese, thai, hispanic, middleeastern, mixed); null for your own.
previewUrlstring | nullrequiredThe picture. A library face is public (usable in an <img>); your own needs your API key (or a console sign-in).
createdAtstring (date-time)requiredISO 8601 UTC timestamp.
aiGeneratedtruerequiredAlways true: this avatar's video and voice in every session are AI-generated, and so is its picture unless it is a photo you uploaded (EU AI Act Article 50(2)).
Errors
invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error
Request
curl "https://app.zentiqai.com/v1/avatars?limit=20" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const page = await zentiq.listAvatars({
limit: 20,
});import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
page = zentiq.list_avatars(limit=20)Example answer
{
"data": [
{
"id": "av_cmfq2b7x10000abcd1234",
"name": "Zoe",
"kind": "builtin",
"gender": "…",
"ageBand": "…",
"heritage": "…"
}
],
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d",
"nextCursor": null
}/v1/avatarsBring your own avatar picture
A close head-and-shoulders portrait, inline as a data:image URI or fetched from a public https address (6 MB at most); a plain green background gives the cleanest live cut-out. It counts against the plan's custom avatars (403 upgrade_required when there is no room). consent is required (400 consent_required before the picture is fetched): it is kept as a consent record the organisation's owners can export and withdraw, and withdrawing it stops the avatar starting new sessions.
Body
namestringDefault "Custom avatar".
imageBase64stringThe picture as a data:image/… URI (PNG, JPEG or WebP).
imageUrlstring (uri)Or a public https address to fetch it from (6 MB at most).
Consent to clone a real person's voice or to make an avatar from their picture. Recorded with who confirmed it (the API key), when, a hashed IP address, the exact wording and its version. The organisation's owners can export records and withdraw them; a withdrawn voice or face stops starting new sessions.
Returns
201 The new avatar. data is Avatar.
Fields of data
idstringrequiredAvatar id (
av_…).pattern `^av_.*`
namestringrequiredkind"builtin" | "custom"requiredbuiltin: Zentiq's library; custom: your organisation's own.
genderstring | nullrequiredA library face's gender (female, male); null for your own pictures.
ageBandstring | nullrequiredA library face's age band (20s, 30s, 40s, 50s, 60s); null for your own.
heritagestring | nullrequiredA library face's heritage (white, black, indian, chinese, korean, japanese, thai, hispanic, middleeastern, mixed); null for your own.
previewUrlstring | nullrequiredThe picture. A library face is public (usable in an <img>); your own needs your API key (or a console sign-in).
createdAtstring (date-time)requiredISO 8601 UTC timestamp.
aiGeneratedtruerequiredAlways true: this avatar's video and voice in every session are AI-generated, and so is its picture unless it is a photo you uploaded (EU AI Act Article 50(2)).
Errors
invalid_requestconsent_requiredconsent_invalidconsent_outdatedunauthorizedforbiddenupgrade_requiredidempotency_conflictidempotency_in_progresstoo_largerate_limitedserver_error
Request
curl -X POST "https://app.zentiqai.com/v1/avatars" \
-H "Authorization: Bearer $ZENTIQ_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"consent": {
"attested": true,
"subject": "myself"
}
}'import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.createAvatar({
consent: {
attested: true,
subject: "myself",
},
});import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.create_avatar({
"consent": {
"attested": True,
"subject": "myself",
},
})Example answer
{
"data": {
"id": "av_cmfq2b7x10000abcd1234",
"name": "Zoe",
"kind": "builtin",
"gender": "…",
"ageBand": "…",
"heritage": "…"
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}/v1/avatars/{id}Get an avatar
Path parameters
idstringrequiredAvatar id (
av_…); the id without its prefix is accepted too.
Returns
200 The avatar. data is Avatar.
Fields of data
idstringrequiredAvatar id (
av_…).pattern `^av_.*`
namestringrequiredkind"builtin" | "custom"requiredbuiltin: Zentiq's library; custom: your organisation's own.
genderstring | nullrequiredA library face's gender (female, male); null for your own pictures.
ageBandstring | nullrequiredA library face's age band (20s, 30s, 40s, 50s, 60s); null for your own.
heritagestring | nullrequiredA library face's heritage (white, black, indian, chinese, korean, japanese, thai, hispanic, middleeastern, mixed); null for your own.
previewUrlstring | nullrequiredThe picture. A library face is public (usable in an <img>); your own needs your API key (or a console sign-in).
createdAtstring (date-time)requiredISO 8601 UTC timestamp.
aiGeneratedtruerequiredAlways true: this avatar's video and voice in every session are AI-generated, and so is its picture unless it is a photo you uploaded (EU AI Act Article 50(2)).
Errors
invalid_requestunauthorizedforbiddenupgrade_requirednot_foundgonerate_limitedserver_error
Request
curl "https://app.zentiqai.com/v1/avatars/av_123" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.getAvatar("av_123");import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.get_avatar("av_123")Example answer
{
"data": {
"id": "av_cmfq2b7x10000abcd1234",
"name": "Zoe",
"kind": "builtin",
"gender": "…",
"ageBand": "…",
"heritage": "…"
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}/v1/avatars/{id}Delete one of your avatars
Refused (409) while a persona still wears it: give that persona another face, or delete it, first. Library faces can't be deleted.
Path parameters
idstringrequiredAvatar id (
av_…); the id without its prefix is accepted too.
Returns
200 Deleted. data is object.
Fields of data
deletedtruerequiredidstringrequiredAvatar id (
av_…).pattern `^av_.*`
Errors
invalid_requestunauthorizedforbiddenupgrade_requirednot_foundconflictrate_limitedserver_error
Request
curl -X DELETE "https://app.zentiqai.com/v1/avatars/av_123" \
-H "Authorization: Bearer $ZENTIQ_API_KEY"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const result = await zentiq.deleteAvatar("av_123");import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.delete_avatar("av_123")Example answer
{
"data": {
"deleted": true,
"id": "av_cmfq2b7x10000abcd1234"
},
"error": null,
"requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}/v1/avatars/{id}/previewAn avatar's picture
A library face is public: link it from an <img> with no header. Your organisation's own pictures (uploaded or generated) are shown only to your organisation: send an API key holding avatars:read in the Authorization header; anyone else gets 404, never a hint that the id exists.
Path parameters
idstringrequiredAvatar id (
av_…); the id without its prefix is accepted too.
Returns
200 The picture (PNG, JPEG or WebP). (image/*, not the JSON envelope)
Errors
invalid_requestnot_foundserver_error
Request
curl "https://app.zentiqai.com/v1/avatars/av_123/preview"import { Zentiq } from "@zentiq/node";
const zentiq = new Zentiq({ apiKey: process.env.ZENTIQ_API_KEY });
const bytes = await zentiq.avatarPreview("av_123");import os
from zentiq import Zentiq
zentiq = Zentiq(api_key=os.environ["ZENTIQ_API_KEY"])
result = zentiq.avatar_preview("av_123")