A2A
Talk to the Ready4Bots agent
Searching agents can ask this agent for bot-ready companies. It speaks the Agent2Agent protocol, version 1.0. There is no API key. It is read-only and rate-limited, and it reads the same public index as the website and /mcp.
Discovery
- Agent Card, current path: https://ready4bots.com/.well-known/agent-card.json
- Same card, older path: https://ready4bots.com/.well-known/agent.json
- JSON-RPC: POST https://ready4bots.com/a2a
The card lists one interface, JSONRPC at protocol version 1.0. Its url is the endpoint above, which is also the first supportedInterfaces entry. SendMessage and message/send are the same call. GetTask and tasks/get are the same call.
Skills
- search_businesses — Search the public Ready4Bots index for bot-ready companies. Matches name, category, country, domain, and a few synonyms. Optional filters: category, country, minLevel (R0–R4), and certifiedOnly. Each result includes level, status, sourceUrl, and ready4botsUrl. status certified is the seal. No business has R4 yet.
- filter_businesses — Filter the same public index by category, country, minimum seal level, or the certified seal. A level is present only when a published test recorded one. Unscored listings are omitted when minLevel is set.
- get_business — Fetch one public listing by id, slug, name, domain, or website URL. The result includes level, status, sourceUrl, ready4botsUrl, and, when a test recorded them, testedAt and a short capability line. Mystery rows and internal notes are not returned.
- list_levels — Explain Ready4Bots levels R0 through R4. The certified seal is R4, awarded only after Ready4Bots verification. The free check never awards R4. A public product search that only shows prices is R2.
A text question is enough: “Find SaaS companies in the US at R2 or higher”, then “Tell me about the first one”, then “What seal levels do you publish?”. A JSON part is the stable form: { "skill": "search_businesses", "query": "stripe", "category": "SaaS", "country": "US", "minLevel": "R2" }. min_level is accepted too. Parts may use the 1.0 fields or a 0.3 kind of text or data. Role may be ROLE_USER or user.
Seal
R0
Closed
An agent cannot get started, so customers who buy through an agent will not reach you.
R1
Discoverable
An agent can find your business and tell the customer you exist.
R2
Understandable
An agent can read what you offer well enough to explain it.
R3
Actionable
An agent reaches the guest-checkout address form without logging in. For SaaS, that is a signup or trial without partner approval.
R4
Verified
Ready4Bots has completed a real test transaction, so the listing can carry the seal.
The certified seal is R4. No business has R4 yet. A tested listing is not the seal.
Calls
message/send
POST the endpoint with Content-Type application/json. The result is a task. SendMessage uses the same params and the same result.
{
"jsonrpc": "2.0",
"id": 1,
"method": "message/send",
"params": {
"message": {
"messageId": "8f14e45f-ea9a-4e1e-9b5a-6c2e1d0a7b33",
"role": "ROLE_USER",
"parts": [
{
"text": "Find SaaS companies in the US at R2 or higher",
"mediaType": "text/plain"
}
]
}
}
}tasks/get
The task id comes back on the message/send result. GetTask takes the same params and returns the task itself.
{
"jsonrpc": "2.0",
"id": 2,
"method": "tasks/get",
"params": {
"id": "<task id from message/send>"
}
}Limits
- 30 JSON-RPC requests per 10 minutes per IP. When DATABASE_URL is set the counter is a fixed window in Postgres, shared by every instance. Otherwise it is in memory on that process.
- Search finishes inside message/send. The response task is already completed. tasks/get returns that task from memory for 30 minutes.
- On Vercel, another isolate does not see the task. Clients that need the answer should read the message/send result. Do not depend on a later tasks/get reaching the same process.
- Streaming, task subscription, push notifications, gRPC, and HTTP+JSON are not offered. Those methods return an A2A error. capabilities.streaming and capabilities.pushNotifications are false.
- There is no extended card and the card is not signed.
- JSON-RPC batches and notifications (a request with no id) are rejected.
- This agent does not run the Bot-Ready check. That stays on MCP as check_website.
- A2A-Version 1.0 and 0.3 are accepted. The response shape is 1.0: task states are TASK_STATE_COMPLETED, roles are ROLE_USER and ROLE_AGENT, and message/send returns { "task": { ... } }.
- The text parser covers search, filter, company details, follow-ups such as “the first one”, and seal levels. Anything outside that is treated as a search query. Send a JSON skill when the wording matters.
- Repeating a messageId returns the original task. Use a new id for each new question. The sample id above is only an example.