A2A Protocol

A2A Protocol

Agent-to-agent integration for external systems via JSON-RPC 2.0 and REST.

The A2A (Agent-to-Agent) protocol enables external systems — ATS platforms, HR tools, scheduling services — to programmatically create and manage interviews. It supports two interface styles: JSON-RPC 2.0 for agent-native integrations and REST for human-readable ones.

StyleEndpointUse Case
JSON-RPC 2.0POST /api/v1/a2a/taskAgent-to-agent programmatic calls
RESTPOST /api/v1/a2a/interviewATS integrations, human-readable APIs

Guides

Complete Workflow

A typical integration flows from interview creation to candidate link generation:

text
External System                    AI Interview System
      |                                    |
      |-- POST /a2a/interview ----------->|
      |                                    |-- Validate data
      |                                    |
      |   IF data complete:                |
      |<-- 201 { state: VALIDATING } ------|
      |<-- webhook: plan_generated --------|  (when plan ready)
      |                                    |
      |   IF data incomplete:              |
      |<-- 201 { state: INFO_NEEDED } -----|
      |<-- webhook: info_needed ----------|
      |                                    |
      |   [HITL completes missing info]    |
      |-- PATCH /a2a/:id/complete-info -->|
      |<-- webhook: info_completed --------|
      |<-- webhook: plan_generated --------|
      |                                    |
      |   [Recruiter reviews plan]         |
      |-- POST /a2a/:runId/approve ------->|
      |<-- 200 { interviewLink: ... } -----|
      |<-- webhook: approved --------------|

Endpoints

MethodEndpointDescription
POST/a2a/taskJSON-RPC 2.0 dispatch — routes to any method
POST/a2a/interviewCreate interview request
GET/a2a/interview/:runId/statusPoll interview status
PATCH/a2a/interview/:id/complete-infoHITL: provide missing fields
POST/a2a/interview/:runId/approveHITL: approve or reject plan
PATCH/a2a/interview/:runId/request-modificationHITL: request plan changes
POST/a2a/interview/:id/approve-assessmentHITL: approve/reject assessment

Quick Start

bash
# Create an interview with all required fields
curl -X POST http://localhost:3009/api/v1/a2a/interview \
  -H "X-API-Key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "candidateName": "Jane Smith",
    "candidateEmail": "jane@example.com",
    "position": "Senior Engineer",
    "level": "SENIOR",
    "skills": ["TypeScript", "React", "Node.js"],
    "jobDescription": "Join our platform team to build scalable web applications with modern tech stack.",
    "callbackUrl": "https://ats.example.com/webhook"
  }'
Response 201
{
  "runId": "agno-run-uuid",
  "interviewId": "interview-uuid",
  "state": "VALIDATING_SKILLS",
  "message": "Interview request accepted. Skill validation in progress.",
  "dataQuality": "EXCELLENT"
}

Workflow States

StateDescription
RECEIVEDRequest received, data validation running
INFO_NEEDEDMissing critical data — HITL required to complete
VALIDATING_SKILLSMCP validating skills, Agno generating plan
GENERATING_PLANPlan generation in progress (modification requested)
PENDINGPlan ready — awaiting recruiter approval
APPROVEDPlan approved, candidate interview link generated
REJECTEDPlan rejected by recruiter
SCHEDULEDInterview scheduled
IN_PROGRESSInterview currently running
COMPLETEDInterview completed, assessment available
ASSESSMENT_PENDINGAwaiting recruiter assessment verdict
ASSESSMENT_APPROVEDAssessment approved by recruiter
CANCELLEDInterview cancelled
Always provide a callbackUrl to receive webhook notifications instead of polling. See the Webhooks guide for event schemas and HMAC signature verification.
Was this page helpful?