{"service":"triage-engine","summary":"Ingests support tickets, classifies them with an LLM, and notifies a downstream system. Built so that nothing is ever silently lost.","source":"https://github.com/younesKAOUANI/triage-engine","endpoints":{"POST /events":"Submit a ticket. 202 accepted|processing|replayed, 409 on key reuse with a different body, 400 on an unusable key. Send an Idempotency-Key header.","GET /tickets/:id":"Ticket with its classification and status.","GET /dlq":"Jobs that failed permanently. ?status=PENDING to filter.","POST /dlq/:id/replay":"Replay one through its original idempotency key. Cannot duplicate a ticket.","GET /metrics":"Prometheus exposition.","GET /health":"Liveness. Checks nothing on purpose.","GET /ready":"Readiness. Checks Postgres and Redis."},"demo":"Open this URL in a browser for an interactive walkthrough.","tryIt":"curl -XPOST $BASE/events -H 'content-type: application/json' -H 'Idempotency-Key: demo-1' -d '{\"subject\":\"Double charged\",\"body\":\"Billed twice for the Pro plan, please refund\"}'","note":"A classification of DEGRADED with source FALLBACK is not an error. It means the model was unavailable, so a rule-based classifier ran instead and an AI upgrade was queued. The ticket is never dropped because the model is down."}