A2A (Agent-to-Agent) protocol
Production base URL: https://api.codefundi.app · Spec: A2A documentation
Code Fundi exposes an A2A v0.3.0 surface so external agents can discover capabilities and invoke documented REST operations without a separate tool catalog.
Discovery
| Resource | URL |
|---|---|
| Agent Card | GET /.well-known/agent-card.json |
| API contract | GET /openapi.json |
| Interactive docs | GET /docs |
Transports
| Binding | Endpoint |
|---|---|
| JSON-RPC 2.0 (primary) | POST /a2a/jsonrpc |
| HTTP+JSON / REST | POST /a2a/rest |
| Native REST | Documented /v2/... paths |
Invoking operations (message/send)
Send a JSON-RPC message/send request whose message includes a data part:
{
"operationKey": "POST /v2/search",
"pathParams": {},
"query": {},
"headers": {},
"body": {
"query": "authentication middleware",
"scan_mode": "semantic"
}
}- operationKey:
METHOD+ API path, e.g.GET /v2/models,POST /v2/repos/index/new. - pathParams: Substitutes path segments such as repository or file ids.
- headers: Forwarded to the REST handler (for example
X-API-Key). - body: JSON body for POST operations.
You may also pass X-API-Key on the JSON-RPC HTTP request or in message.metadata.apiKey.
Example (curl)
curl -sS -X POST "https://api.codefundi.app/a2a/jsonrpc" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "message/send",
"params": {
"message": {
"kind": "message",
"messageId": "00000000-0000-4000-8000-000000000001",
"role": "user",
"parts": [{
"kind": "data",
"data": {
"operationKey": "POST /v2/search",
"pathParams": {},
"query": {},
"headers": {},
"body": { "query": "rate limit middleware", "chat": false }
}
}]
},
"configuration": { "blocking": true }
}
}'Authentication
Use header X-API-Key for protected operations. Auth kickoff routes under /v2/auth/* do not require an API key; password auth must use X-CodeFundi-Auth-Password per Authentication.
Streaming
Operations that return application/x-ndjson (for example POST /v2/search with chat: true) are advertised with streaming capabilities. Streamed HTTP output is forwarded as A2A message chunks on the same task.