API Reference
REST API for programmatic access to QualityOS analysis. All endpoints require a Bearer token.
Base URL: https://www.getqualityos.com (proxied to Railway)
Auth: Authorization: Bearer qos_live_YOUR_KEY — generate keys in Settings → API Keys.
POST
/api/webhook/zapierUniversal endpoint for both call QA and ticket QA. Accepts a type field to route the analysis.
Request — Call
curl -X POST https://www.getqualityos.com/api/webhook/zapier \
-H "Authorization: Bearer qos_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "call",
"agent_name": "Sarah Johnson",
"content": "AGENT: Thank you for calling...\nCUSTOMER: Hi I need help...",
"date": "2026-04-26"
}'Request — Ticket
curl -X POST https://www.getqualityos.com/api/webhook/zapier \
-H "Authorization: Bearer qos_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "ticket",
"agent_name": "Sarah Johnson",
"content": "Customer reported billing error...",
"ticket_id": "ZD-10042",
"ticket_subject": "Double charge on invoice",
"date": "2026-04-26",
"csat_score": 4
}'Response (200)
{
"success": true,
"scorecard_id": "CALL-20260426-001",
"verdict": "PASS",
"score": 88.2
}POST
/api/analyseDirect call analysis endpoint. Accepts a pre-processed transcript.
Request body
{
"transcript": "AGENT: Hello, thank you for calling...",
"agent_name": "Sarah Johnson",
"interaction_type": "inbound",
"preset_name": "standard_support",
"interaction_date": "2026-04-26",
"weights": {
"greeting": 8,
"empathy": 15,
"active_listening": 10,
"tone": 12,
"resolution_accuracy": 20,
"policy_compliance": 15,
"sentiment_arc": 10,
"closing": 10
}
}Response (200)
{
"agent_name": "Sarah Johnson",
"verdict": "COACH",
"weighted_score": 74.5,
"parameters": {
"greeting": { "score": 8, "evidence": "..." },
"empathy": { "score": 7, "evidence": "..." },
"resolution_accuracy": { "score": 6, "evidence": "..." }
// ...
},
"coaching_brief": {
"positive": "Agent showed strong empathy...",
"top_miss": "Resolution accuracy fell short...",
"coaching": "In your next 1:1, walk through..."
}
}POST
/api/analyse/ticketDirect ticket analysis endpoint.
Request body
{
"ticket_content": "Customer reports a double charge...",
"ticket_subject": "Double charge on invoice #4821",
"agent_name": "Sarah Johnson",
"ticket_id": "ZD-10042",
"team_queue": "Billing",
"interaction_date": "2026-04-26",
"csat_score": 4,
"resolution_time_hours": 2.5
}Error codes
401Invalid or missing API key400content and agent_name are required fields403Monthly analysis limit reached — upgrade your plan429Rate limit exceeded502Analysis backend error — check that content is a readable transcript500Internal server error