Simpli Summary
AI-powered conversation summarization and entity extraction for customer support.
Summary condenses multi-turn conversations into concise summaries with key points, action items, and structured handoff briefs. Agents get instant context without reading entire threads.
Simpli Summary generates summaries, handoff briefs, and entity extractions from support conversations using LLM-powered analysis.
Configuration
| Variable | Default | Description |
|---|---|---|
APP_PORT | 8008 | Server port |
LITELLM_MODEL | openai/gpt-5-mini | LLM model for summarization |
MAX_SUMMARY_LENGTH | 500 | Maximum summary length in characters |
INCLUDE_ACTION_ITEMS | true | Include action items in summaries |
CORS_ORIGINS | * | Allowed CORS origins (comma-separated) |
Start the server
simpli-summary serveAPI endpoints
All endpoints are under the /api/v1 prefix.
POST /api/v1/summarize
Generate a summary from a conversation.
Request:
{
"ticket_id": "T-789",
"conversation": [
{"role": "customer", "content": "I can't access the billing portal"},
{"role": "agent", "content": "Let me check your account permissions"},
{"role": "customer", "content": "I've tried resetting my password 3 times"},
{"role": "agent", "content": "I see the issue — your account permissions were reset during our migration"}
],
"max_length": 300
}The role field accepts values from the AuthorType enum: customer, agent, or system.
Response:
{
"summary_id": "s-abc123",
"summary": "Customer unable to access billing portal after multiple password reset attempts. Agent identified root cause as account permissions being reset during a system migration.",
"key_points": [
"Billing portal access blocked",
"Customer attempted 3 password resets",
"Root cause: permissions reset during migration"
],
"action_items": [
"Restore account permissions",
"Confirm billing portal access"
]
}POST /api/v1/handoff
Generate a structured handoff brief for agent transfers.
Request:
{
"ticket_id": "T-789",
"conversation": [
{"role": "customer", "content": "I can't access billing"},
{"role": "agent", "content": "I've tried a few things but need to escalate"}
],
"from_agent": "agent-1",
"to_agent": "agent-2"
}Response:
{
"brief_id": "b-def456",
"brief": "Customer has been unable to access the billing portal. Initial troubleshooting included password reset and cache clearing, but the issue persists.",
"customer_sentiment": "frustrated",
"open_issues": ["billing portal access"],
"attempted_solutions": ["password reset", "cache clearing"]
}POST /api/v1/extract
Extract entities, issues, and action items from a conversation.
{
"ticket_id": "T-789",
"conversation": [
{"role": "customer", "content": "The export feature in the analytics dashboard is broken"}
]
}GET /health
Health check.
Integration example
import httpx
client = httpx.Client(base_url="http://localhost:8008")
# Summarize a conversation
summary = client.post("/api/v1/summarize", json={
"ticket_id": "T-456",
"conversation": [
{"role": "customer", "content": "How do I export my data?"},
{"role": "agent", "content": "Go to Settings > Export"},
{"role": "customer", "content": "I don't see that option"},
],
}).json()
print(summary["summary"])
print(summary["action_items"])
# Generate a handoff brief
handoff = client.post("/api/v1/handoff", json={
"ticket_id": "T-456",
"conversation": [
{"role": "customer", "content": "How do I export my data?"},
],
"from_agent": "agent-1",
"to_agent": "agent-2",
}).json()
print(handoff["brief"])Next steps
- The Ticket Lifecycle — See how Summary fits into agent handoffs
- Integration Overview — Connect Summary to your helpdesk
- Model Selection — Choose the right model for summarization