Skip to main content

Conversation intelligence

Sellable product

This capability is granted by an API key scoped to the `` product (product face). See the product reference below.

Conversation intelligence as a shared capability. POST /v1/analyze scores one transcript synchronously (sentiment/intent/summary/topics/entities/outcome via an LLM over provider-gateway, with a deterministic lexicon/keyword fallback for sentiment+intent). /v1/analyze/batch analyses many transcripts asynchronously (poll a job). /v1/analyses retrieves stored analyses (org-scoped). The store is OPTIONAL — with the DSN unset /v1/analyze still serves fully; the persisted-retrieval + batch paths return 503.

  • Group: Voice & AI
  • Contract: contracts/conversation-intelligence/v1/openapi.yaml
  • Public base: https://api.vagarylabs.com (the consolidated API gateway — one host, per-brand sibling api.<zone>)
  • Auth: a product API key (vgk_…) issued from the console — Authorization: Bearer vgk_…
  • Product face (customer-keyed):
    • https://api.vagarylabs.com/product/v1/conversation-intelligence/analyze

Endpoints

MethodPathSummary
POST/v1/analyzeAnalyse one transcript (sentiment/intent/summary/topics/entities/outcome), synchronous
GET/v1/analysesRetrieve stored analyses (org-scoped; optional session_ref filter)
POST/v1/analyses/erase-subjectGDPR Art-17 erasure of a data subject's stored analyses (first-party admin only)
POST/v1/analyze/batchStart an asynchronous batch analysis of many transcripts
GET/v1/jobs/&#123;job_id&#125;Fetch a batch job's status + per-item results (org-scoped)
GET/healthliveness + store/analyzer readiness
GET/metricsPrometheus exposition (fleet observability SDK — fail-open)

Schemas

EraseSubjectResult

matched is reported separately from deleted so a zero-match is visible to the compliance fan-out rather than reading as a successful erasure. jobs_swept is always false — see the endpoint's KNOWN RESIDUE note.

FieldTypeDescription
successboolean
capabilitystring
organization_idstring
dispositionstring
selectorstring
matchedintegerstored analyses belonging to those session refs
deletedinteger
session_refsarraythe refs actually applied (blank entries dropped)
dry_runboolean
jobs_sweptbooleanalways false — conversation_jobs has no session_ref column
jobs_swept_reasonstring

Turn

one transcript turn.

FieldTypeDescription
rolestringspeaker role (user
contentstring

AnalyzeRequest

FieldTypeDescription
organization_idstringproduct-tier end-customer tenant (I6); optional in v1 (persistence needs it; the analysis itself does not).
transcriptarraythe conversation under analysis (≥1 turn).
analysesarraywhich analyses to run (default = all six). Unknown values are ignored.
session_refstringthe product's own call/session id — lets GET /v1/analyses fetch every analysis for one conversation.

Sentiment

5-band sentiment + signed score + confidence + an optional dominant emotion. source marks whether it came from the LLM or the deterministic fallback.

FieldTypeDescription
labelstring
scorenumbersigned sentiment in [-1, 1]
confidencenumber
emotionobject
sourcestring

Intent

FieldTypeDescription
labelstring
confidencenumber
sourcestring

Entity

FieldTypeDescription
textstring
typestringperson

Outcome

FieldTypeDescription
labelstring
reasonstring
sourcestring

Unavailable

an LLM-only analysis that could not run (LLM unreachable) — surfaced explicitly, never fabricated.

FieldTypeDescription
availableboolean
reasonstring

Generated by scripts/gen-capability-docs.py from contracts/conversation-intelligence/v1/openapi.yaml — the contract IS the source of truth; edit the contract, not this page.