Skip to main content
Every endpoint on this page requires either a Clerk-issued JWT (Authorization: Bearer <token>) or an organization API key (x-api-key: pk_…). Anonymous calls return 401 Unauthorized. See Authentication for the full setup.
Once a call ends, Agntix runs an analysis pass over the transcript. Configure what to extract on the agent’s Analytics tab — open any agent from Agents in the left nav, then switch to the Analytics tab on the right-hand panel. Four independent toggles are available. Enable only the ones you need.
ToggleWhat it returnsWhere it appears
Intent RecognitionBest-fit intent against your custom listanalysis.intent.*
Resolution AnalysisWhether the call achieved its objectiveanalysis.resolution.*
SentimentScore and label per callanalysis.sentiment.*
Data ExtractionStructured fields you definedanalysis.extractedData.<name>
All four surface in the analysis block of the session.ended webhook and in GET /api/v1/chat/sessions/{id}.

Intent Recognition

Classifies the purpose of the conversation against a list of intents you define under Custom Intent (comma-separated). Example for a delivery-confirmation use case:
Slot-Confirmed, Slot-Rescheduled, Customer-Unavailable, Wrong-Number, Refund-Request
The analysis returns:
analysis.intent.conversation.intent
string
Best-fit intent across the whole call.
analysis.intent.conversation.confidence
number
Confidence score, 01.
analysis.intent.conversation.explanation
string
Short LLM-generated rationale for the classification.
analysis.intent.message.intent
string
Best-fit on the trigger message (less useful for voice).
"intent": {
  "conversation": {
    "intent": "Slot-Confirmed",
    "confidence": 0.92,
    "explanation": "Customer agreed to Wednesday afternoon delivery."
  },
  "message": { "intent": null, "confidence": 0, "explanation": "…" }
}

Resolution Analysis

Classifies whether the call achieved its objective, against a resolution definition you provide. Click + Add Resolution Definition and describe in plain language what counts as resolved. Example resolution definition:
Call is resolved if the customer confirmed a delivery slot for the order. If a slot was discussed but not finalised, mark PARTIALLY_RESOLVED. If the customer refused or the call dropped, mark UNRESOLVED.
The payload then carries:
analysis.resolution.classification
enum
RESOLVED / PARTIALLY_RESOLVED / UNRESOLVED / NOT_APPLICABLE.
analysis.resolution.confidenceScore
number
01 confidence in the verdict.
analysis.resolution.satisfiedChecklistItems
string[]
The checklist points met during the call.
analysis.resolution.evidence
string[]
Quoted turns from the transcript supporting the verdict.
analysis.resolution.explanation
string
Short rationale.
"resolution": {
  "classification": "RESOLVED",
  "confidenceScore": 0.88,
  "satisfiedChecklistItems": ["delivery_slot_agreed"],
  "evidence": ["Customer: yes Wednesday afternoon works."],
  "explanation": "Customer agreed to a specific slot."
}

Sentiment

Returns a score and label per call:
analysis.sentiment.conversation.sentiment
enum
POSITIVE / NEUTRAL / NEGATIVE.
analysis.sentiment.conversation.score
number
-1.0+1.0.
analysis.sentiment.conversation.detectedLanguage
string
ISO-639-1 code; useful when callers may switch language mid-conversation.
"sentiment": {
  "conversation": {
    "sentiment": "POSITIVE",
    "score": 0.4,
    "detectedLanguage": "en",
    "explanation": "Customer was cooperative throughout."
  }
}

Data Extraction

Define a structured schema and Agntix will pull the values out of the transcript. Click + Add Data Extraction and define one schema entry at a time. Each entry asks for:
  • Name — the JSON key that will appear under analysis.extractedData.<name> in the webhook / session API.
  • Description — a one-line hint that tells the analysis model what to look for. Treat this like a mini-prompt: the more precise, the better the extraction.
  • TypeString, Number, Boolean, or Enum (for Enum you’ll also be asked for the allowed values).
Repeat for each field. There is no hard cap, but five tight fields beat fifteen fuzzy ones. Example schema for a delivery-confirmation call:
NameDescriptionType
slotConfirmedTrue if the customer agreed to a specific delivery slot.Boolean
preferredDayThe day the customer chose for delivery.String
preferredTimeWindowTime window the customer preferred.Enum (Morning, Afternoon, Evening)
callbackRequestedTrue if the customer asked to be called back later.Boolean
callOutcomeShort categorical outcome.Enum (Confirmed, Rescheduled, Unavailable, WrongNumber)
Extracted values surface under analysis.extractedData.<name> in the webhook and the session detail API:
"extractedData": {
  "slotConfirmed": true,
  "preferredDay": "Wednesday",
  "preferredTimeWindow": "Afternoon",
  "callbackRequested": false,
  "callOutcome": "Confirmed"
}
Keep field descriptions specific and unambiguous. A description like “True if the customer agreed to a specific delivery slot (e.g. ‘Wednesday afternoon’ counts, ‘sometime next week’ does not)” is much more reliable than “Did they confirm?”.

Combined analysis block

When all four toggles are on, the full analysis block looks like this:
"analysis": {
  "summary": "Customer confirmed delivery slot for Wednesday afternoon.",
  "intent": {
    "conversation": { "intent": "Slot-Confirmed", "confidence": 0.92, "explanation": "…" },
    "message":      { "intent": null, "confidence": 0, "explanation": "…" }
  },
  "resolution": {
    "classification": "RESOLVED",
    "confidenceScore": 0.88,
    "status": "Completed",
    "satisfiedChecklistItems": ["delivery_slot_agreed"],
    "evidence": ["Customer: yes Wednesday afternoon works."],
    "explanation": "Customer agreed to a specific slot."
  },
  "sentiment": {
    "conversation": { "sentiment": "POSITIVE", "score": 0.4, "detectedLanguage": "en", "explanation": "…" },
    "message":      { "sentiment": null, "score": 0, "detectedLanguage": "N/A", "explanation": "…" }
  },
  "extractedData": {
    "slotConfirmed": true,
    "preferredDay": "Wednesday",
    "preferredTimeWindow": "Afternoon",
    "callbackRequested": false,
    "callOutcome": "Confirmed"
  }
}

Next steps

Webhook events

See the full session.ended payload that carries the analysis block.

Get Session

Pull the same analysis block via REST when you need it on demand.