QualityOS Docs
Docs/Integrations/API Reference

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/zapier

Universal 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/analyse

Direct 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/ticket

Direct 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 key
400content and agent_name are required fields
403Monthly analysis limit reached — upgrade your plan
429Rate limit exceeded
502Analysis backend error — check that content is a readable transcript
500Internal server error