Zentiq API
Zentiq's avatars are people your users talk to live, face to face, by voice or by text. The REST API lets your own systems build and run everything the Zentiq console does: the avatars, the portals around them, the people who use them, their results, and the leads and requests your website visitors leave.
- Base address:
https://app.zentiqai.com/v1 - Authentication: an organisation API key,
Authorization: Bearer zq_live_…, sent from your server only. - Format: JSON in and out. A success is
{ "data": …, "error": null, "requestId": … }; an error is{ "error": { "code", "message" } }. - Contract:
2026-10-01. Every key is pinned to a dated contract; see Versions.
Shell
curl https://app.zentiqai.com/v1/me -H "Authorization: Bearer $ZENTIQ_API_KEY"What you can build#
| You want to | Start here |
|---|---|
| Put a support avatar on your website, with requests going to your team | An avatar on your website |
| Add the widget to Shopify, Wix, Squarespace, WordPress, Webflow or any other website | Install the widget |
| Train a sales team and send their results to your HR or learning system | Sales training and results |
| Screen job applicants from your applicant tracking system | Screening from your ATS |
| Give the students signed in to your app a tutor, with guardian consent | A tutor in your app |
| Let people practise with two avatars at once | A duo role-play |
| Send website leads, booking requests and hand-offs to your CRM | Website leads to your CRM |
| Answer customers in their own language | A multilingual assistant |
| Show an avatar inside your own app, and decide what it says | Live sessions, Bring your own brain |
How it fits together#
- Your server holds the key. It calls the API: it builds personas and portals, adds people, starts live sessions, and reads results. A key never goes to a browser or into an app people download.
- The browser gets a token, never the key. To show a live avatar in your page, your server starts a session and hands the browser its short-lived token; the browser joins with the browser SDK.
- Zentiq tells you what happened. Webhooks announce leads, results, screened candidates and more. They are signals: your server fetches the details with the API, where the privacy rules apply to every request.
Quickstart#
A live avatar in your page in three steps. The full quickstart has every detail.
- Make a key. In the Zentiq console open More → API Keys and choose Create a key. It is shown once: keep it on your server.
Start a session on your server with a persona you made in the console (or with the API):
server.tsasync function startSession(userId: string) { const token = await zentiq.createSessionToken( { personaId: process.env.ZENTIQ_PERSONA_ID ?? "", identity: userId }, { idempotencyKey: `start-${userId}-${Date.now()}` }, ); // { sessionId, sessionToken, url, room, persona, disclosure, cc }: hand all of it to the browser. return token; }Join it in the browser, show the AI disclosure, and end the session when the person leaves:
browser.tsimport { joinSession, type SessionToken } from "@zentiq/client"; const token = (await fetch("/zentiq/session", { method: "POST" }).then((r) => r.json())) as SessionToken; // People must know they are talking to an AI: show the persona's words for the whole session. const disclosure = document.querySelector<HTMLElement>("#disclosure"); if (disclosure && token.disclosure?.required) disclosure.textContent = token.disclosure.text; const session = await joinSession(token, { video: document.querySelector<HTMLVideoElement>("#avatar")!, onTranscript: (t) => { if (t.final) console.log(t.role === "user" ? "You" : t.speaker ?? token.persona.name, t.text); }, onSpeaking: (who) => document.body.setAttribute("data-speaking", who), });
Where next#
- Keys and scopes: give each integration only what it needs.
- Errors, Limits and paging and Idempotency: how every request behaves.
- The API reference: every operation, generated from the OpenAPI document.
- SDKs for Node, Python, the browser and React, and an MCP server for AI assistants.