Skip to the content
Menu: Personas

Personas

Personas: a face, a voice and what they know and say.

GET/v1/personas

List personas

listPersonaspersonas:readread: 600/min per key

The organisation's own personas, newest first. A portal's persona is not listed here: read and change it with GET and PUT /portals/{id}/persona.

Query parameters

  • limitinteger

    Page size, 1-200 (default 50).

  • cursorstring

    The nextCursor of the previous page.

  • kind"single" | "duo"

    single: one person; duo: two people in one conversation.

Returns

200 A page of personas. A page: data is a list of Persona, and nextCursor fetches the next page.

Fields of data
  • idstringrequired

    Persona id (pa_…).

    pattern `^pa_.*`

  • namestringrequired
  • systemPromptstringrequired
  • greetingstring | nullrequired
  • avatarIdstring | nullrequired
  • voiceIdstring | nullrequired
  • settingsPersonaSettingsrequired

    Behaviour settings.

  • knowledgePersonaKnowledge | nullrequired
  • castobjectrequired

    Who the avatar is: one person, or a duo (two people in one conversation).

    • kind"single" | "duo"required
    • peopleobject[]required

      One person, or a duo's two, by name.

      • namestringrequired
  • duoIdstring | nullrequired

    The duo (GET /duos/{id}) when it is one made from /duos; null otherwise.

  • avatarAvatar | nullrequired
  • voiceVoice | nullrequired
  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

  • updatedAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/personas?limit=20" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": [
    {
      "id": "pa_cmfq2b7x10000abcd1234",
      "name": "Zoe",
      "systemPrompt": "…",
      "greeting": "…",
      "avatarId": "av_cmfq2b7x10000abcd1234",
      "voiceId": "vo_cmfq2b7x10000abcd1234"
    }
  ],
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d",
  "nextCursor": null
}
POST/v1/personas

Create a persona

createPersonapersonas:writewrite: 120/min per keyIdempotency-Key

A persona made here is one person: an "&" in its name doesn't make a duo (the avatar hears "and"), and a duo's two-person picture can't be its face (409). Duos are made from /duos. What the plan decides (a cloned voice) answers 403 upgrade_required.

Body

  • namestringrequired

    at most 200 characters

  • systemPromptstringrequired

    The character: who they are, what they help with, how they behave.

    at most 16,000 characters

  • greetingstring | null

    The first thing they say.

    at most 2,000 characters

  • avatarIdstring

    Avatar id (av_…).

  • voiceIdstring

    Voice id (vo_…).

  • voiceProfileIdstringdeprecated

    Deprecated: use voiceId.

  • Behaviour settings to set (see PersonaSettings).

  • llmSettingsPersonaSettingsInputdeprecated

    Deprecated: use settings.

  • knowledgeobject | null
    • baseIdsstring[]required

      Knowledge base ids (kb_…), 1 to 20.

    • topKnumber
    • minScorenumber
    • maxCharsnumber

Returns

201 The new persona. data is Persona.

Fields of data
  • idstringrequired

    Persona id (pa_…).

    pattern `^pa_.*`

  • namestringrequired
  • systemPromptstringrequired
  • greetingstring | nullrequired
  • avatarIdstring | nullrequired
  • voiceIdstring | nullrequired
  • settingsPersonaSettingsrequired

    Behaviour settings.

  • knowledgePersonaKnowledge | nullrequired
  • castobjectrequired

    Who the avatar is: one person, or a duo (two people in one conversation).

    • kind"single" | "duo"required
    • peopleobject[]required

      One person, or a duo's two, by name.

      • namestringrequired
  • duoIdstring | nullrequired

    The duo (GET /duos/{id}) when it is one made from /duos; null otherwise.

  • avatarAvatar | nullrequired
  • voiceVoice | nullrequired
  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

  • updatedAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredconflictidempotency_conflictidempotency_in_progresstoo_largerate_limitedserver_error

Request

curl -X POST "https://app.zentiqai.com/v1/personas" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Zoe",
  "systemPrompt": "…"
}'
Example answer
Response
{
  "data": {
    "id": "pa_cmfq2b7x10000abcd1234",
    "name": "Zoe",
    "systemPrompt": "…",
    "greeting": "…",
    "avatarId": "av_cmfq2b7x10000abcd1234",
    "voiceId": "vo_cmfq2b7x10000abcd1234"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
GET/v1/personas/{id}

Get a persona

getPersonapersonas:readread: 600/min per key

One of the organisation's own personas. A portal's persona is 404 here (as for PATCH and DELETE): use /portals/{id}/persona.

Path parameters

  • idstringrequired

    Persona id (pa_…); the id without its prefix is accepted too.

Returns

200 The persona. data is Persona.

Fields of data
  • idstringrequired

    Persona id (pa_…).

    pattern `^pa_.*`

  • namestringrequired
  • systemPromptstringrequired
  • greetingstring | nullrequired
  • avatarIdstring | nullrequired
  • voiceIdstring | nullrequired
  • settingsPersonaSettingsrequired

    Behaviour settings.

  • knowledgePersonaKnowledge | nullrequired
  • castobjectrequired

    Who the avatar is: one person, or a duo (two people in one conversation).

    • kind"single" | "duo"required
    • peopleobject[]required

      One person, or a duo's two, by name.

      • namestringrequired
  • duoIdstring | nullrequired

    The duo (GET /duos/{id}) when it is one made from /duos; null otherwise.

  • avatarAvatar | nullrequired
  • voiceVoice | nullrequired
  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

  • updatedAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundgonerate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/personas/pa_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "id": "pa_cmfq2b7x10000abcd1234",
    "name": "Zoe",
    "systemPrompt": "…",
    "greeting": "…",
    "avatarId": "av_cmfq2b7x10000abcd1234",
    "voiceId": "vo_cmfq2b7x10000abcd1234"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
PATCH/v1/personas/{id}

Update a persona

updatePersonapersonas:writewrite: 120/min per key

Only what is sent changes. A duo made from /duos changes only there (409); a duo's picture and voices only change together; a single persona never takes a duo's picture. What the plan decides answers 403 upgrade_required.

Path parameters

  • idstringrequired

    Persona id (pa_…); the id without its prefix is accepted too.

Body (optional)

  • namestring

    at most 200 characters

  • systemPromptstring

    The character: who they are, what they help with, how they behave.

    at most 16,000 characters

  • greetingstring | null

    The first thing they say.

    at most 2,000 characters

  • avatarIdstring

    Avatar id (av_…).

  • voiceIdstring

    Voice id (vo_…).

  • voiceProfileIdstringdeprecated

    Deprecated: use voiceId.

  • Behaviour settings to set (see PersonaSettings).

  • llmSettingsPersonaSettingsInputdeprecated

    Deprecated: use settings.

  • knowledgeobject | null
    • baseIdsstring[]required

      Knowledge base ids (kb_…), 1 to 20.

    • topKnumber
    • minScorenumber
    • maxCharsnumber

Returns

200 The persona. data is Persona.

Fields of data
  • idstringrequired

    Persona id (pa_…).

    pattern `^pa_.*`

  • namestringrequired
  • systemPromptstringrequired
  • greetingstring | nullrequired
  • avatarIdstring | nullrequired
  • voiceIdstring | nullrequired
  • settingsPersonaSettingsrequired

    Behaviour settings.

  • knowledgePersonaKnowledge | nullrequired
  • castobjectrequired

    Who the avatar is: one person, or a duo (two people in one conversation).

    • kind"single" | "duo"required
    • peopleobject[]required

      One person, or a duo's two, by name.

      • namestringrequired
  • duoIdstring | nullrequired

    The duo (GET /duos/{id}) when it is one made from /duos; null otherwise.

  • avatarAvatar | nullrequired
  • voiceVoice | nullrequired
  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

  • updatedAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundconflictgonetoo_largerate_limitedserver_error

Request

curl -X PATCH "https://app.zentiqai.com/v1/personas/pa_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "id": "pa_cmfq2b7x10000abcd1234",
    "name": "Zoe",
    "systemPrompt": "…",
    "greeting": "…",
    "avatarId": "av_cmfq2b7x10000abcd1234",
    "voiceId": "vo_cmfq2b7x10000abcd1234"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
DELETE/v1/personas/{id}

Delete a persona

deletePersonapersonas:writewrite: 120/min per key

Its own picture goes too when no other persona wears it. A duo is refused (409) while a portal uses it.

Path parameters

  • idstringrequired

    Persona id (pa_…); the id without its prefix is accepted too.

Returns

200 Deleted. data is object.

Fields of data
  • deletedtruerequired
  • idstringrequired

    Persona id (pa_…).

    pattern `^pa_.*`

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundconflictrate_limitedserver_error

Request

curl -X DELETE "https://app.zentiqai.com/v1/personas/pa_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "deleted": true,
    "id": "pa_cmfq2b7x10000abcd1234"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}