A2A Protocol

JSON-RPC 2.0

Protocol specification and method reference for agent-native A2A integrations.

The JSON-RPC 2.0 interface provides a single endpoint that routes to any interview management method. This style is preferred for agent-to-agent (A2A) integrations where the caller is itself an AI agent or automated system.

Protocol

PropertyValue
EndpointPOST /api/v1/a2a/task
Content-Typeapplication/json
AuthX-API-Key or Bearer JWT
SpecJSON-RPC 2.0 (https://www.jsonrpc.org/specification)

Every request must include jsonrpc: "2.0", a method, params, and an id.

Request envelope
{
  "jsonrpc": "2.0",
  "method": "<method-name>",
  "params": { ... },
  "id": 1
}
Success response envelope
{
  "jsonrpc": "2.0",
  "result": { ... },
  "id": 1
}
Error response envelope
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params",
    "data": { "field": "candidateEmail", "issue": "Invalid email format" }
  },
  "id": 1
}

Error Codes

CodeMeaning
-32700Parse error — invalid JSON
-32600Invalid Request — not a valid JSON-RPC object
-32601Method not found
-32602Invalid params
-32603Internal error
-32001Authentication failed
-32002Insufficient permissions
-32003Interview not found
-32004Invalid state transition

Methods

MethodPermissionDescription
interview.createinterview:createCreate a new interview request
interview.getStatusinterview:readGet current workflow status
interview.approveinterview:approveApprove or reject a plan
interview.completeInfointerview:updateProvide missing HITL data
interview.requestModificationinterview:approveRequest plan changes

interview.create

Request

bash
curl -X POST http://localhost:3009/api/v1/a2a/task \
  -H "X-API-Key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "interview.create",
    "params": {
      "candidateName": "Jane Smith",
      "candidateEmail": "jane@example.com",
      "position": "Senior Engineer",
      "level": "SENIOR",
      "skills": ["TypeScript", "React", "Node.js"],
      "jobDescription": "Build scalable platform services.",
      "callbackUrl": "https://ats.example.com/webhook"
    },
    "id": 1
  }'

Response

json
{
  "jsonrpc": "2.0",
  "result": {
    "runId": "agno-run-uuid",
    "interviewId": "interview-uuid",
    "state": "VALIDATING_SKILLS",
    "message": "Interview request accepted.",
    "dataQuality": "EXCELLENT"
  },
  "id": 1
}

interview.getStatus

json
{
  "jsonrpc": "2.0",
  "method": "interview.getStatus",
  "params": { "runId": "agno-run-uuid" },
  "id": 2
}

interview.approve

json
{
  "jsonrpc": "2.0",
  "method": "interview.approve",
  "params": {
    "runId": "agno-run-uuid",
    "approved": true,
    "userId": "recruiter-uuid"
  },
  "id": 3
}
For simpler human-readable integrations (ATS webhooks, admin tools), use the REST endpoints instead of JSON-RPC 2.0.
Was this page helpful?