Skip to the content
MenuAnalytics

API reference

Analytics

The organization's conversations in numbers, and searching what was said.

GET/v1/analytics

The organization's analytics

getAnalyticssessions:readread: 600/min per keySince 2026-10-01

The console's Analytics page in numbers, for the last days (default 30): conversations, minutes, average length, the completion rate, conversations left inside 20 seconds, answers marked wrong, conversations per day and per persona, and, on a plan with Advanced analytics, how the conversations went (sentiment and satisfaction). Never a builder's preview or a job interview. The topics read from what was said stay in the console.

Query parameters

  • daysinteger

    The period: the last 1-365 days (default 30).

Returns

200 The numbers. data is AnalyticsSummary.

Fields of data
  • daysintegerrequired
  • fromstring (date-time)required

    The start of the period.

  • advancedbooleanrequired

    The plan includes Advanced analytics: sentiment and satisfaction are read from the conversations. Without it they are zero and null.

  • totalsobjectrequired
    • sessionsintegerrequired

      Conversations started in the period (never a builder's preview or a job interview).

    • minutesintegerrequired

      Time talked, in whole minutes.

    • avgDurationSecondsintegerrequired

      The average length of a conversation that has one.

    • completionRateintegerrequired

      Percent of finished conversations that completed rather than were abandoned.

    • leftEarlyintegerrequired

      Conversations left inside 20 seconds.

    • markedWrongintegerrequired

      Answers marked wrong in the period's transcripts.

    • analyzedintegerrequired

      Conversations read for sentiment (Advanced analytics).

    • unanalyzedintegerrequired

      Conversations not read yet (Advanced analytics).

    • csatinteger | nullrequired

      Satisfaction, 0-100, from the sentiment of the conversations read; null when none were.

  • byDayobject[]required

    Conversations started per day (UTC), oldest first, every day of the period.

    • datestring (date)required

      A calendar date (YYYY-MM-DD).

    • sessionsintegerrequired
  • byPersonaobject[]required

    Per persona, the busiest first.

    • personaIdstringrequired

      Persona id (pa_…).

      pattern `^pa_.*`

    • namestringrequired
    • sessionsintegerrequired
    • avgDurationSecondsintegerrequired
  • sentimentobjectrequired

    How the conversations went, counted (Advanced analytics).

    • positiveintegerrequired
    • neutralintegerrequired
    • negativeintegerrequired
    • mixedintegerrequired
    • unanalyzedintegerrequired

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/analytics" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"

Response

200 · JSON
{
  "data": {
    "days": 1,
    "from": "2026-09-25T12:00:00.000Z",
    "advanced": true,
    "totals": {
      "sessions": 1,
      "minutes": 1,
      "avgDurationSeconds": 1,
      "completionRate": 1,
      "leftEarly": 1,
      "markedWrong": 1
    },
    "byDay": [
      {
        "date": "2026-09-25",
        "sessions": 1
      }
    ],
    "byPersona": [
      {
        "personaId": "pa_cmfq2b7x10000abcd1234",
        "name": "Zoe",
        "sessions": 1,
        "avgDurationSeconds": 1
      }
    ]
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
GET/v1/analytics/conversations

Search what was said

searchConversationssessions:readtranscripts:readsearch: 120/min per keySince 2026-10-01Beta

The console's conversation search: the most recent conversations (the last 300 in the period at most), or those where q was said, with up to three matching lines each. Only conversations whose words may leave Zentiq are looked at: never a young learner's, a website visitor's who said they are under 18, a job interview, a builder's preview, a conversation with a safety flag, a subject that keeps nothing, or any conversation while zero data retention is on. They are left out before the search, so it never says whether they matched.

Query parameters

  • qstring

    Words to find in what was said (case doesn't matter). Without it, the most recent conversations.

  • daysinteger

    The period: the last 1-365 days (default 30).

  • personaIdstring

    Persona id (pa_…).

  • markedWrong"true" | "false"

    Only conversations with an answer marked wrong.

  • limitinteger

    At most this many conversations, 1-100 (default 60).

Returns

200 The conversations found. data is ConversationSearchResult.

Fields of data
  • conversationsConversationMatch[]required

    Newest first.

  • daysintegerrequired
  • scannedintegerrequired

    Conversations looked at (only those whose words may leave Zentiq).

  • withTranscriptintegerrequired

    Of those, how many had a transcript.

  • limitedbooleanrequired

    There were more matches than limit.

  • cappedbooleanrequired

    The search reached its ceiling of the 300 most recent conversations: older ones weren't looked at. Narrow days or personaId.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/analytics/conversations" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"

Response

200 · JSON
{
  "data": {
    "conversations": [
      {
        "sessionId": "sess_cmfq2b7x10000abcd1234",
        "personaId": "pa_cmfq2b7x10000abcd1234",
        "personaName": "…",
        "status": "ACTIVE",
        "source": "api",
        "durationSeconds": 1
      }
    ],
    "days": 1,
    "scanned": 1,
    "withTranscript": 1,
    "limited": true,
    "capped": true
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}