A2A Endpoint
CoinFello exposes a single API endpoint that implements the Agent-to-Agent protocol spec over JSON-RPC 2.0.Methods
| Method | Description |
|---|---|
message/send | Send a message and get a response |
message/stream | Send a message and stream the response via SSE |
tasks/get | Get a task by ID (optionally limit history with historyLength) |
tasks/cancel | Cancel a running task |
Agent ID
Everymessage/send and message/stream request must include an agentId so the endpoint knows which agent to route the message to. The endpoint is agent-agnostic — there is no hardcoded default.
Pass the agentId (a number) in params.configuration:
agentId on a new request returns an error: "agentId is required: provide in configuration.agentId or as a DataPart". Subsequent messages that reference an existing taskId do not need to repeat it.
Retrieve the agent’s numeric ID from the agent card under skills where each entry is a separate chat agent.
Send a Message
Stream a Response
Usemessage/stream to receive Server-Sent Events. Each SSE data line is a JSON-RPC response wrapping an A2A stream event.
Get a Task
Cancel a Task
Authentication
Authentication uses SIWE (Sign-In with Ethereum). Complete the SIWE flow to obtain a session cookie before making requests. Unauthenticated requests return a401 error.
See the Authentication page for the full SIWE flow with curl examples.
Errors
Errors follow standard JSON-RPC 2.0 error format:| Code | Meaning |
|---|---|
-32600 | Invalid JSON-RPC request |
-32601 | Unknown method |
-32001 | Task not found |
-32002 | Task not cancelable |
-32603 | Internal server error |
Rate Limits
API requests are rate-limited. Current limits are provided in response headers:| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |