> ## Documentation Index
> Fetch the complete documentation index at: https://docs.contactbutton.com/llms.txt
> Use this file to discover all available pages before exploring further.

# A2A agent framework

> Expose each Contact Button profile as an A2A 1.0 logical agent with an Agent Card, JSON-RPC methods, tenant routing, and authorization-required tasks.

Every opted-in published profile serves its Agent Card at:

```text theme={null}
https://button.contact/{slug}/.well-known/agent-card.json
```

The card declares an A2A 1.0 JSON-RPC interface, an opaque tenant UUID, public skills, supported media, and no streaming or push capabilities. It uses standard caching headers and an ETag.

Send `A2A-Version: 1.0` when the client uses version negotiation. Every method must include the opaque `tenant` value from the selected interface; it routes the shared platform endpoint to the correct profile without creating a separate server process.

## Methods

The initial interface implements `SendMessage`, `GetTask`, `ListTasks`, and `CancelTask`. Read-profile and knowledge-search tasks can complete immediately. A booking, callback, subscription, chat, or other material action returns `TASK_STATE_AUTH_REQUIRED` with the REST confirmation entry point.

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": "request-1",
  "method": "SendMessage",
  "params": {
    "tenant": "<page-uuid>",
    "message": {
      "messageId": "msg-01",
      "role": "ROLE_USER",
      "parts": [{"text": "How can I contact this business?"}]
    },
    "metadata": {"skill": "read-contact-profile"}
  }
}
```

Message IDs make sends idempotent per profile. Context IDs are opaque and contain no email address, URL, or free-form user text.


## Related topics

- [Contact Button for agents](/agents/overview.md)
- [Agent onboarding](/agents/onboarding.md)
- [Contact infrastructure for people and agents](/index.md)
- [Set up with a coding agent](/agents/coding-agents.md)
- [Pages and custom domains](/guides/pages-domains.md)
