Skip to the content
Menu: Requests and responses

Requests and responses

Every operation lives under https://app.zentiqai.com/v1, over HTTPS only. Requests with a body send JSON (Content-Type: application/json), except the few uploads the reference marks as multipart/form-data.

The envelope#

A success:

JSON
{ "data": { "id": "pa_cmfq2b7x10000abcd1234", "name": "Ava" }, "error": null, "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d" }

A list adds nextCursor (see paging):

JSON
{ "data": [{ "id": "pa_…" }, { "id": "pa_…" }], "nextCursor": "c_…", "error": null, "requestId": "req_…" }

An error, with its HTTP status (see Errors):

JSON
{ "error": { "code": "not_found", "message": "Persona not found." } }

A few operations answer with a file or a page instead (an avatar's preview image, for example); the reference says so. A 204 has no body.

Headers on every answer#

HeaderWhat it says
X-Request-IdThis request's id. Quote it when you contact support.
Zentiq-VersionThe contract the answer is written in (see Versions).
RateLimit-Limit, RateLimit-Remaining, RateLimit-ResetYour budget in the current window, and seconds until it resets (see Limits).
Retry-AfterOn a 429 (and a 409 idempotency_in_progress): seconds to wait before trying again.
Idempotency-Replayedtrue when the answer is a replay of an earlier request with the same Idempotency-Key.

Ids#

Ids are opaque strings with a prefix that says what they name: keep them exactly as you receive them. On input, an id without its prefix is accepted too; an id with another kind's prefix (a sess_… where a persona id belongs) is 404 not_found.

PrefixWhat it namesAlso accepted
org_Organisation
key_API key
wh_Webhook
whd_Webhook delivery
evt_Event
pa_Personaper_
av_Avataravt_
vo_Voicevoice_
duo_Duo
kb_Knowledge base
doc_Document
sdoc_Subject document
sess_Session
portal_Portaldash_
sub_Subject
exp_Export
dsg_Face design
unit_Unit
usr_Person
mbr_Membership
glk_Guardian link
cns_Consent record
asg_Assignment
res_Result
cert_Certificate
cand_Candidate
inv_Invite
ofr_Interview offer
slot_Interview slot
inb_Inbox item
gap_Knowledge gap
job_Job
req_Request
esc_Escalation
creq_Candidate request
clk_Case link
conn_Connection

Names and types#

  • Fields are camelCase. Enum values are lower case (waiting_consent), except a session's status, which is ACTIVE, COMPLETED or ABANDONED.
  • Times are ISO 8601 in UTC with milliseconds (2026-10-01T09:00:00.000Z) and their names end in At; calendar dates are YYYY-MM-DD; durations are whole seconds and their names end in Seconds; minutes are numbers named …Minutes.
  • Languages are codes from GET /v1/languages (es, pt-BR); on input the English name works too ("Spanish"), and answers always give the code.
  • Colours are #rrggbb, countries ISO 3166 alpha-2 codes (US, DE), time zones IANA names (America/New_York).
  • null means "not set". A null sent in a PATCH clears the field, where the reference allows it.

What can change without notice#

The API grows by adding: new operations, new fields in answers, new event types and new values in lists of values can appear on any day, in every contract. Ignore fields and values you don't know, and never fail on them. Anything else comes only in a new contract (see Versions).