Skip to navigation

List evaluation criteria results across voice and text

View as Markdown

Success-evaluation verdicts per criterion over calls AND text conversations created in the window, with a bySource split (voice = calls, text = conversations). The analysis evaluates a WhatsApp thread with the same criteria as a call, so the totals here cover the whole operation. Only records that carry evaluation results count. Criteria are sorted by id.

Each verdict is counted once per record: total = success + failure + unknown, and bySource.voice + bySource.text add up to the totals. A verdict other than success / failure / unknown is counted as unknown rather than dropped. Deleted calls are excluded. With agentId, calls are attributed to the agent that handled them (manual calls included) and conversations to their agent. For text-only numbers with a success rate, use GET /api/analytics/conversations/criteria.

Verdicts on calls that never became a conversation are suppressed (2026-09-16). A call with rounded duration below 30 seconds, fewer than 8 transcript turns, or fewer than 3 speech turns on either side when counted, cannot have resolved a query or closed a sale, and a judge marking those failure fills the table with failures nobody could have avoided. Those verdicts are reported in suppressed and left out of success, failure, unknown, total and bySource, so suppressed is NOT part of total. Safety criteria are the exception and keep counting whatever the call’s length: whether the agent stated something untrue, and whether it named the technology behind it. The rule is applied when the rows are read, not stored, so it covers the whole history with the legacy duration/turn fallback until speech counts are backfilled. Text conversations have no duration and are never suppressed.

No data. criteria is an empty array when nothing in range was evaluated; counts are integers, never null.

Idempotency. Read-only; safe to retry.

Access

  • Required scope: read. Signed-in users need the owner, admin, member or viewer role.
  • Rate limit: Analytics — 30 requests/min per workspace, shared with the rest of /api/analytics/*, in addition to the general API budget of your plan. See Rate limits.
  • Plan: Available on every plan. Requires an active subscription (active, trialing or past_due); without one the request is refused with 403 BILLING_ERROR (metadata.kind: subscription_required).

Authentication

AuthorizationBearer

Workspace API key: jl_ followed by 64 lowercase hex characters, created by the workspace owner in the dashboard (Settings → API Keys) and sent as Authorization: Bearer jl_.... The plaintext is shown once, at creation; Jelliu stores only a SHA-256 hash. A workspace can hold up to 25 active keys.

ScopeGET / HEADPOST / PUT / PATCH / DELETEAdmin-only routes
readYesNoNo
writeYesYesNo
fullYesYesYes

Operations restricted to admins or owners reject keys without the full scope with 403, and say so in their description. No key, whatever its scope, can mint or revoke API keys or rotate a webhook secret — that requires a signed-in owner session. A revoked key stops authenticating within about 10 seconds. See Authentication.

Query parameters

daysintegerOptional1-365Defaults to 30

Window in days ending now. Never rejected: a value outside 1-365, 0 or a non-numeric value falls back to 30, and decimals are floored.

agentIdstringOptionalformat: "uuid"

Restrict to one agent (see GET /api/agents). A malformed id is a 400 — it is never silently ignored, because ignoring it would return the whole workspace’s numbers. An empty value means no filter.

Response

Criteria roll-up.

dataobjectOptional

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
429
Too Many Requests Error