Post-Call Intelligence
Every completed call can automatically produce a summary, sentiment analysis, structured data extraction, evaluation scoring, and a recording — all powered by LLM analysis of the call transcript.
How It Works
Call ends → Transcript finalized → Post-Call Intelligence Pipeline
│
├─ Summary (AI-generated key takeaways)
├─ Sentiment (positive / neutral / negative)
├─ Structured Extraction (JSON from your schema)
├─ Evaluation (rubric-based scoring)
└─ Recording (LiveKit Egress artifact)Post-call intelligence runs asynchronously after a call reaches terminal state. The intelligence_status field on the call record tracks progress: not_started → pending → completed (or failed).
Configuration
Post-call intelligence is configured at two levels:
1. Agent Defaults
Set post_call on an agent to apply to all calls with that agent:
curl -X PUT https://api.rymi.live/v1/agents/YOUR_AGENT_ID \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"post_call": {
"recording": { "enabled": true },
"summary": { "enabled": true },
"structured_extraction": {
"json_schema": {
"type": "object",
"properties": {
"appointment_booked": { "type": "boolean" },
"customer_sentiment": { "type": "string" },
"follow_up_date": { "type": "string" },
"key_objections": { "type": "array", "items": { "type": "string" } }
}
}
},
"evaluation": {
"rubric": "Did the agent qualify the lead, handle objections professionally, and attempt to book a follow-up?"
}
}
}'2. Per-Call Overrides
Override the agent defaults for a specific call:
curl -X POST https://api.rymi.live/v1/calls \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "YOUR_AGENT_ID",
"participants": [
{ "transport": "pstn", "identity": "+15551234567", "from_number": "+15559876543" }
],
"post_call": {
"recording": { "enabled": true },
"summary": { "enabled": true },
"structured_extraction": {
"json_schema": {
"type": "object",
"properties": {
"order_confirmed": { "type": "boolean" }
}
}
}
}
}'The per-call config is merged with the agent defaults and snapped onto the call record at creation time.
Features
Summary
When summary.enabled is true, an AI model generates a concise summary of the call conversation.
{
"summary": {
"enabled": true,
"prompt": "Focus on action items and customer intent."
}
}The optional prompt field guides the summary generation.
Sentiment Analysis
Sentiment is always analyzed when summary is enabled. The result is one of positive, neutral, or negative.
Structured Data Extraction
Define a JSON schema and Rymi will extract structured data from every call transcript:
{
"structured_extraction": {
"json_schema": {
"type": "object",
"properties": {
"appointment_booked": { "type": "boolean" },
"customer_name": { "type": "string" },
"budget_range": { "type": "string" },
"next_steps": { "type": "array", "items": { "type": "string" } }
}
}
}
}Rymi auto-generates an extraction prompt from your schema. The result is stored on call_intelligence.structured_data.
TIP
Both json_schema and a prompt must be present for extraction to run. When you provide only a json_schema, Rymi generates the extraction prompt automatically.
Evaluation Scoring
Provide a rubric to evaluate whether the agent met its goals:
{
"evaluation": {
"rubric": "Did the agent: 1) Greet the customer warmly, 2) Identify the issue, 3) Provide a resolution or escalation?"
}
}The result includes:
| Field | Type | Description |
|---|---|---|
passed | boolean | Whether the agent met the rubric criteria |
score | number | Numeric score (0-1) |
reasoning | string | Explanation of the evaluation |
Recording
When recording.enabled is true, Rymi starts a LiveKit Egress recording at the call level. Recordings are stored and accessible via GET /v1/calls/:id/recording.
Retrieving Intelligence
Full Call Detail
curl https://api.rymi.live/v1/calls/CALL_ID \
-H "Authorization: Bearer YOUR_API_KEY"The response includes an intelligence block:
{
"intelligence": {
"status": "completed",
"summary": "The customer called about a billing issue. The agent resolved it by applying a credit.",
"sentiment": "positive",
"structured_data": {
"appointment_booked": false,
"customer_name": "Alice",
"issue_resolved": true
},
"evaluation": {
"passed": true,
"score": 0.9,
"reasoning": "The agent greeted warmly, identified the issue quickly, and resolved it."
},
"errors": []
}
}Summary Only
curl https://api.rymi.live/v1/calls/CALL_ID/summary \
-H "Authorization: Bearer YOUR_API_KEY"Recording Only
curl https://api.rymi.live/v1/calls/CALL_ID/recording \
-H "Authorization: Bearer YOUR_API_KEY"Returns signed URLs for the recording artifacts.
Reprocessing
If analysis failed or you want to retry with updated config:
curl -X POST https://api.rymi.live/v1/calls/CALL_ID/reprocess \
-H "Authorization: Bearer YOUR_API_KEY"This re-queues the post-call intelligence pipeline for the call.
Transcript Privacy
If features.transcription_enabled is false on the agent:
- No transcript is persisted
- No transcript data packets are sent to participants
- Post-call transcript analysis is skipped entirely
intelligence_statusstays atnot_started
Recording can still be enabled independently of transcription.

