Call any of 23 specialized AI domain experts via A2A JSON-RPC 2.0 from your own agent or pipeline. Each expert is independently deployed with its own tools, knowledge, and reasoning style. Authenticated via Cloudflare Access — no API keys to manage.
client_id (visible anytime) and client_secret (shown once only — save it)pip install httpx
import httpx, json
CF_CLIENT_ID = "your-client-id" # from Developer Portal
CF_CLIENT_SECRET = "your-client-secret"
A2A_URL = "https://a2a.tradevoicelab.com"
headers = {
"CF-Access-Client-Id": CF_CLIENT_ID,
"CF-Access-Client-Secret": CF_CLIENT_SECRET,
"Content-Type": "application/json",
}
# Ask the Risk Analyst about NVDA
payload = {
"jsonrpc": "2.0",
"id": "req-1",
"method": "tasks/send",
"params": {
"id": "task-1",
"message": {
"role": "user",
"parts": [{"type": "text", "text": "What is the current risk profile of NVDA?"}]
},
"metadata": {"expert": "risk_analyst"}
}
}
r = httpx.post(f"{A2A_URL}/a2a/risk_analyst", headers=headers, json=payload, timeout=60)
result = r.json()
print(result["result"]["status"]["message"]["parts"][0]["text"])
# POST to /a2a without specifying expert — gateway routes automatically
payload = {
"jsonrpc": "2.0",
"id": "req-2",
"method": "tasks/send",
"params": {
"id": "task-2",
"message": {
"role": "user",
"parts": [{"type": "text", "text": "Is TSLA overvalued based on its current fundamentals?"}]
}
# No metadata.expert — gateway selects the best expert
}
}
r = httpx.post(f"{A2A_URL}/a2a", headers=headers, json=payload, timeout=60)
Base URL: https://a2a.tradevoicelab.com
Free developer account — generate your CF Access token instantly in the portal.