27 Alpaca skill groups — trading, order management, portfolio, and market data — all accessible via A2A JSON-RPC. Your agent passes Alpaca credentials per-request. No credentials stored on our side.
import httpx
CF_CLIENT_ID = "your-cf-client-id" # from Developer Portal
CF_CLIENT_SECRET = "your-cf-client-secret"
ALPACA_API_KEY = "your-alpaca-paper-key"
ALPACA_SECRET = "your-alpaca-paper-secret"
ALPACA_ENDPOINT = "https://paper-api.alpaca.markets/v2"
A2A_URL = "https://alpaca-a2a.tradevoicelab.com"
headers = {
"CF-Access-Client-Id": CF_CLIENT_ID,
"CF-Access-Client-Secret": CF_CLIENT_SECRET,
"Content-Type": "application/json",
}
# Alpaca credentials passed per-request in metadata
def alpaca_meta():
return {
"alpaca_api_key": ALPACA_API_KEY,
"alpaca_api_secret": ALPACA_SECRET,
"alpaca_endpoint": ALPACA_ENDPOINT,
}
# 1. Get account info
r = httpx.post(f"{A2A_URL}/a2a/alpaca", headers=headers, json={
"jsonrpc": "2.0", "id": "1", "method": "tasks/send",
"params": {
"id": "t1",
"message": {"role": "user", "parts": [{"type": "text",
"text": "Show my account balance and buying power"}]},
"metadata": alpaca_meta()
}
}, timeout=30)
print(r.json()["result"]["status"]["message"]["parts"][0]["text"])
# 2. Place a paper market order
r = httpx.post(f"{A2A_URL}/a2a/alpaca", headers=headers, json={
"jsonrpc": "2.0", "id": "2", "method": "tasks/send",
"params": {
"id": "t2",
"message": {"role": "user", "parts": [{"type": "text",
"text": "Buy 1 share of AAPL at market price"}]},
"metadata": alpaca_meta()
}
}, timeout=30)
print(r.json()["result"]["status"]["message"]["parts"][0]["text"])
Base URL: https://alpaca-a2a.tradevoicelab.com
|
Direct nodes: alpaca-a2a1, alpaca-a2a2, alpaca-a2a3
Free developer account — generate your CF Access token instantly. Bring your own Alpaca paper key to test safely.