> ## Documentation Index
> Fetch the complete documentation index at: https://docs.praison.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy API: A2A Server

> A2A protocol endpoints for agent-to-agent communication

# A2A API

A2A (Agent-to-Agent) protocol endpoints for agents deployed via `A2A(agent).get_router()`.

## Base URL + Playground

```bash theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
# Start A2A server
from praisonaiagents import Agent
from praisonaiagents.a2a import A2A
import uvicorn

agent = Agent(instructions="You are a helpful assistant")
app = A2A(agent).get_router()
uvicorn.run(app, host="0.0.0.0", port=8000)
```

**Base URL:** `http://localhost:8000`

## Endpoints

### GET /.well-known/agent.json

Retrieve the Agent Card for discovery.

<ParamField query="none" type="none">
  No parameters required.
</ParamField>

<CodeGroup>
  ```bash curl theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl http://localhost:8000/.well-known/agent.json
  ```

  ```python Python theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  import requests

  response = requests.get("http://localhost:8000/.well-known/agent.json")
  agent_card = response.json()
  print(f"Agent: {agent_card['name']}")
  print(f"URL: {agent_card['url']}")
  print(f"Skills: {[s['name'] for s in agent_card['skills']]}")
  ```

  ```javascript JavaScript theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  const response = await fetch("http://localhost:8000/.well-known/agent.json");
  const agentCard = await response.json();
  console.log(`Agent: ${agentCard.name}`);
  console.log(`URL: ${agentCard.url}`);
  ```
</CodeGroup>

**Response:**

```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "name": "Assistant",
  "description": "Helpful AI Assistant",
  "url": "http://localhost:8000/a2a",
  "version": "1.0.0",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "skills": [
    {
      "id": "chat",
      "name": "Chat",
      "description": "General conversation"
    }
  ]
}
```

### GET /status

Check server status.

<ParamField query="none" type="none">
  No parameters required.
</ParamField>

<CodeGroup>
  ```bash curl theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl http://localhost:8000/status
  ```

  ```python Python theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  import requests

  response = requests.get("http://localhost:8000/status")
  status = response.json()
  print(f"Status: {status['status']}")
  print(f"Agent: {status['name']}")
  ```
</CodeGroup>

**Response:**

```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "status": "ok",
  "name": "Assistant",
  "version": "1.0.0"
}
```

### POST /a2a

Send JSON-RPC messages to the agent.

<ParamField body="jsonrpc" type="string" required>
  JSON-RPC version (must be "2.0")
</ParamField>

<ParamField body="method" type="string" required>
  A2A method name (message/send)
</ParamField>

<ParamField body="id" type="string" required>
  Request ID
</ParamField>

<ParamField body="params.message.role" type="string" required>
  Message role ("user")
</ParamField>

<ParamField body="params.message.parts" type="array" required>
  Message parts array
</ParamField>

<CodeGroup>
  ```bash curl theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  curl -X POST http://localhost:8000/a2a \
    -H "Content-Type: application/json" \
    -d '{
      "jsonrpc": "2.0",
      "method": "message/send",
      "id": "request-123",
      "params": {
        "message": {
          "role": "user",
          "parts": [
            {"type": "text", "text": "Hello, agent!"}
          ]
        }
      }
    }'
  ```

  ```python Python theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  import requests

  message = {
      "jsonrpc": "2.0",
      "method": "message/send",
      "id": "request-123",
      "params": {
          "message": {
              "role": "user",
              "parts": [{"type": "text", "text": "Hello, agent!"}]
          }
      }
  }
  response = requests.post("http://localhost:8000/a2a", json=message)
  result = response.json()["result"]
  print(f"Agent: {result['message']['parts'][0]['text']}")
  ```

  ```javascript JavaScript theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
  const message = {
    jsonrpc: "2.0",
    method: "message/send",
    id: "request-123",
    params: {
      message: {
        role: "user",
        parts: [{ type: "text", text: "Hello, agent!" }]
      }
    }
  };

  const response = await fetch("http://localhost:8000/a2a", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(message)
  });

  const { result } = await response.json();
  console.log(`Agent: ${result.message.parts[0].text}`);
  ```
</CodeGroup>

**Response:**

```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "jsonrpc": "2.0",
  "id": "request-123",
  "result": {
    "message": {
      "role": "agent",
      "parts": [
        {"type": "text", "text": "Hello! How can I help you today?"}
      ]
    }
  }
}
```

## Message Part Types

| Type   | Fields            | Description        |
| ------ | ----------------- | ------------------ |
| `text` | `text`            | Plain text content |
| `file` | `uri`, `mimeType` | File attachment    |

## Errors

A2A errors follow JSON-RPC 2.0 format:

```json theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "jsonrpc": "2.0",
  "id": "request-123",
  "error": {
    "code": -32600,
    "message": "Invalid request"
  }
}
```

| Code     | Message          |
| -------- | ---------------- |
| `-32700` | Parse error      |
| `-32600` | Invalid request  |
| `-32601` | Method not found |
| `-32602` | Invalid params   |
| `-32603` | Internal error   |

## Related

* [A2A Server](../a2a-server) - Deploy agents as A2A server
* [AGUI API](./agui-api) - AG-UI protocol endpoints
* [Agents API](./agents-api) - HTTP REST endpoints
