Post-Call Intelligence
Every finished call can hand back a summary, a sentiment read, structured data extracted to your schema, and a rubric score, plus the recorded audio. The first four come from an LLM reading the transcript; the recording is the stored call audio.
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 (stored call audio)Post-call intelligence runs asynchronously after a call reaches terminal state. The intelligence_status field on the call record tracks progress: not_started → pending → processing → completed. A call can also land on skipped (no caller content, or transcription disabled — nothing to analyze), partial (analysis ran but some steps failed), failed, or dead_letter (all retries exhausted and the job was moved to the dead-letter queue).
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 '{
"features": { "recording_enabled": true },
"post_call": {
"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": {
"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. post_call covers summary, structured_extraction, and evaluation. Recording is an agent-level toggle (features.recording_enabled) and can't be overridden per call.
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 analyzed on every call that gets post-call analysis — any call with caller content — regardless of which features you enable. The model that reads the transcript always returns a sentiment alongside the summary, extraction, and evaluation. (Only the non-LLM heuristic fallback, used if the model call fails, is tied to the summary toggle.) 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
Extraction runs whenever a json_schema is present. If you don't supply your own prompt, Rymi generates one automatically from the schema.
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 the agent's features.recording_enabled is true, Rymi records the call audio. 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",
"skip_reason": null,
"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_statusis set toskipped, withskip_reason: "transcription_disabled"on the intelligence record
The same skipped status (with skip_reason: "no_user_content") is used when transcription is on but the caller never produced any transcribed speech — there is nothing for the model to analyze either way.
Recording can still be enabled independently of transcription.

