Connect an agent, send transcripts and read the A–F report, via SDK or REST.
Overview
Axon is the quality layer for AI agents. You send conversation transcripts; Axon evaluates each one with an LLM judge against a configurable rubric and returns an A–F report per dimension, with quoted evidence, root cause and a concrete fix.
The flow: connect an agent → ingest transcripts → the judge evaluates (asynchronously, on a durable and idempotent queue) → read the report → fix → lock it in a regression suite → monitor and get alerts when it degrades.
Quickstart
From zero to your first report in three steps.
- Generate an API key under Settings → Integration. Store it as AXON_API_KEY.
- Connect your AI provider key (BYOK) under Settings → Integration → AI provider. Evaluations run on that key.
- Install the SDK (pnpm add @gabrielonrails/axon-sdk) or use plain cURL.
- Send a transcript and read the report. The agent is created on the first ingestion.
Base URL & errors
Three endpoints, all authenticated with an API key. Ingestion returns 202 and evaluates asynchronously; poll the status or read the report.
Base URL: https://axon-dev.com
Errors return a JSON body '{ error, message }' with the appropriate HTTP status.
Authentication
Every request authenticates with an API key (per org) in the Authorization header: Authorization: Bearer axon_sk_….
Keys are generated and revoked under Settings → Integration. We only store a SHA-256 hash: the full key is shown once. Revocation is immediate.
Authorization header (or x-api-key):Authorization: Bearer axon_sk_xxxxxxxxxxxxxxxxxxxxxxxxBYOK: your AI key
The evaluation runs on the AI provider key you connect: Anthropic, OpenAI or any compatible endpoint. It is required: without it the judge doesn't run and the report stays empty.
Where to connect it: in the app, Settings → Integration → AI provider. Paste the key, pick the provider and (optionally) the model. The key is encrypted at rest (AES-256-GCM).
Agents & transcripts
The core loop: send conversation transcripts, check the evaluation status and read the agent's A–F report. Agents are created on demand on the first ingestion.
/api/v1/agents/{agent}/transcriptsIngest transcripts
Send one or more conversation transcripts for an agent. Returns 202 immediately; each conversation is evaluated asynchronously on a durable, idempotent queue. Re-sending a transcript with the same id updates it instead of duplicating.
Path parameters
agentstringrequiredBody parameters
transcriptsTranscript[]requiredtranscripts[].idstringoptionaltranscripts[].channel"chat" | "whatsapp"optionaltranscripts[].turnsTurn[]required{
"transcripts": [
{
"id": "conv-001",
"channel": "chat",
"turns": [
{ "role": "client", "text": "I want a discount." },
{ "role": "agent", "text": "I can apply 20% now." }
]
}
]
}Responses
202 Accepted
{
"accepted": 1,
"queued": 1,
"agent": { "id": "ag_...", "name": "cobranca" },
"conversation_ids": ["cv_..."],
"status": "evaluating"
}curl -X POST https://axon-dev.com/api/v1/agents/cobranca/transcripts \
-H "Authorization: Bearer $AXON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transcripts": [
{
"id": "conv-001",
"channel": "chat",
"turns": [
{ "role": "client", "text": "I want a discount." },
{ "role": "agent", "text": "I can apply 20% now." }
]
}
]
}'/api/v1/agents/{agent}/transcripts/{externalId}Get conversation status
Check the evaluation status of an ingested conversation by its external id. Use it after ingestion to know when the A–F evaluation is ready.
Path parameters
agentstringrequiredexternalIdstringrequiredResponses
200 OK
{
"external_id": "conv-001",
"conversation_id": "cv_...",
"status": "done",
"reason": null,
"evaluation": {
"overall": "C+",
"confidencePct": 92,
"dimensions": [ { "key": "...", "name": "...", "grade": "B", "score": 80 } ]
}
}curl https://axon-dev.com/api/v1/agents/cobranca/transcripts/conv-001 \
-H "Authorization: Bearer $AXON_API_KEY"/api/v1/agents/{agent}/reportGet agent report
The agent's current report: overall score, scores per dimension, the top problems with quoted evidence and the recommended fix (root cause + concrete PROMPT / GUARDRAIL / EVAL patches). correction is null until one is generated.
Path parameters
agentstringrequiredResponses
200 OK
{
"agent": { "id": "ag_...", "name": "cobranca", "channel": "chat" },
"overall": "C+",
"degrading": true,
"sample": 2430,
"dimensions": [ { "key": "...", "name": "...", "grade": "B", "score": 80 } ],
"problems": [
{ "severity": "alto", "title": "...", "dimension": "...",
"impact": "...", "rootCause": "...",
"evidence": { "turnIndex": 4, "quote": "...", "verified": true } }
],
"correction": {
"tags": ["discount policy"],
"impactFrom": "C+", "impactTo": "A-",
"fixes": [ { "type": "PROMPT", "title": "...", "description": "...", "code": "..." } ]
}
}curl https://axon-dev.com/api/v1/agents/cobranca/report \
-H "Authorization: Bearer $AXON_API_KEY"