Claix and A2A: the document intelligence API built to be called by other agents, not just used by them
Claix is a native Agent-to-Agent (A2A) document intelligence API: typed extraction, persistent document memory, and cross-document knowledge spaces, callable directly by any A2A-compliant agent.
Claix and A2A: the document intelligence API built to be called by other agents, not just used by them. Claix is a document intelligence API for AI agents that now speaks the Agent2Agent (A2A) protocol natively, in addition to REST and MCP. Any A2A-compliant agent, orchestrator, or script can discover Claix’s Agent Card at https://claix.dev/.well-known/agent.json, send a JSON-RPC 2.0 task to https://claix.dev/a2a, and get back structured, schema-validated data extracted from a PDF, Excel file, image, or document — or query a persisted document (document_id) or an entire cross-document knowledge space (space_id) without re-uploading anything. Combined with typed schema extraction and persistent document memory, this makes Claix, as far as we have been able to verify, one of the first document intelligence APIs purpose-built for agents to expose itself as a directly delegable A2A agent, rather than only as a tool wrapped behind MCP.
Why A2A matters for document infrastructure, specifically
Most of the AI agent ecosystem has spent the last two years solving how an agent talks to tools — that is what MCP (Model Context Protocol) is for, and Claix already supports it at https://claix.dev/mcp. But 2026 has brought a second, different problem into focus: how does an agent talk to another agent, one built by a different team, on a different stack, without custom point-to-point integration? That is what A2A — an open protocol originally contributed by Google and now hosted by the Linux Foundation — is designed to solve, and it has been gaining fast adoption across major platform vendors throughout 2026.
For a document intelligence API, this distinction is not cosmetic. An MCP tool is called by an agent that already knows exactly what it wants and how to phrase it. An A2A agent can be discovered by another agent that has never seen Claix before, read its Agent Card to learn what it can do, and delegate an entire document-related task to it — including tasks that take time, need a follow-up question answered, or span several documents — using a standardized task lifecycle instead of a one-shot function call.
How Claix implements A2A: the architecture in plain terms
Claix’s A2A implementation follows the official specification closely, with three moving parts:
1. Discovery via the Agent Card
Before sending any work, a calling agent fetches GET /.well-known/agent.json (or the alternate path /.well-known/agent-card.json) — a public JSON document, no API key required, that states where to send tasks (https://claix.dev/a2a), which skills exist, and that Claix supports push notifications instead of streaming (capabilities.pushNotifications: true).
2. A single JSON-RPC 2.0 endpoint for everything
Every operation — extracting a PDF, listing schemas, querying a knowledge space — goes through the same POST https://claix.dev/a2a, authenticated with the same API key used across Claix’s REST and MCP interfaces (x-api-key header, or Authorization: Bearer). There is no separate credential system to manage per protocol.
3. Two ways to ask for work
A calling agent can send a DataPart — a structured JSON object naming the exact skill and its parameters, which is deterministic and does not depend on how a sentence is phrased — or a TextPart with a plain-language instruction, which Claix interprets to select the right skill and fill in the arguments. This dual path matters in a multi-agent world: some callers will already know exactly what they need, others will only have a natural-language goal handed down from a higher-level orchestrator.
The part that makes this genuinely new: A2A on top of persistent, cross-document memory
This is the detail that separates Claix’s A2A implementation from a simple “extraction API wrapped in a new protocol.” Most of what an A2A-compliant document tool could plausibly expose is stateless: send a file, get JSON back, done. Claix’s skill list is not stateless — it exposes the same document memory architecture that is central to the product itself:
- extract-pdf, extract-excel, extract-doc, extract-img, extract-txt (plus their Agent-mode reasoning equivalents, agent-extract-*) turn an unstructured file into schema-typed JSON.
- get-document and query-document let a calling agent come back later, in a different task, and ask something new about a document that was already processed — without re-uploading it or paying for re-extraction.
- create-space, query-space, and delete-space extend that same memory to a whole knowledge space (space_id): a group of processed documents that can be reasoned over together, so a calling agent can ask a question that spans multiple documents at once and get a single, cross-referenced answer.
- list-schemas, create-schema, delete-schema manage the typed structure that every extraction is validated against.
In other words: an external agent is not just asking Claix to parse a file. It is delegating access to a persistent, queryable memory of documents, addressable across multiple separate A2A tasks over time, through contextId (the thread linking a sequence of related tasks) and through document_id / space_id (the actual stored knowledge, which outlives any single conversation thread). No other combination of typed schema extraction, cross-document reasoning, and native A2A exposure appears to exist yet in the document-processing space, as far as current public documentation from comparable providers shows.
How a multi-agent task actually flows, end to end
A concrete example makes this concrete. Imagine an orchestrator agent coordinating an accounts-payable workflow, with no prior integration built specifically for Claix:
- It fetches Claix’s Agent Card, sees the extract-pdf and query-space skills, and learns what parameters each expects.
- It sends a message/send with a DataPart containing skill: "create-space" to open a new knowledge space for this month’s vendor invoices.
- For each invoice PDF, it sends extract-pdf with the relevant schema_id and the file (as file_base64 or a public file_path URL, since A2A has no multipart upload). Each of these might return status.state: "working" immediately, since extraction is asynchronous — the orchestrator does not block on the HTTP connection.
- Claix notifies the orchestrator’s registered webhook when each extraction finishes (tasks/pushNotificationConfig/set), rather than requiring a kept-open stream.
- Once all invoices are processed into the space, the orchestrator sends a single query-space task — “which vendor invoiced the most this month, and does any invoice contradict the purchase order total?” — and gets back one cross-referenced answer, computed over every document in that space, without the orchestrator having built any retrieval or comparison logic itself.
That last step is the one no generic file-parsing API, and no MCP-only integration, does out of the box: the reasoning and cross-referencing across documents happens inside Claix, as a delegated task, not inside the calling agent’s own code.
Claix’s A2A skills
| Skill | What it does |
|---|---|
| extract-excel | Convert Excel or CSV to JSON using a schema |
| convert-json-to-excel | Convert JSON documents into an Excel file |
| extract-pdf | Extract structured data from a PDF using a schema |
| extract-doc | Extract structured data from a text document using a schema |
| extract-img | Extract structured data from an image using a schema |
| extract-txt | Extract structured data from plain text, HTML, or XML |
| get-document | Return the raw content of a persisted document |
| query-document | Answer questions about a persisted document |
| query-space | Answer questions across every document in a knowledge space |
| create-space | Create a knowledge space on the API key account |
| delete-space | Delete a knowledge space |
| delete-document | Delete a persisted document |
| agent-extract-excel / -pdf / -doc / -img / -txt | Same extraction, with Agent-mode reasoning over the content |
| list-schemas / create-schema / delete-schema | Manage the typed schemas extraction is validated against |
Task states: how Claix handles ambiguity and missing data
One of the more consequential design choices in A2A is what happens when a request is incomplete — and it is where Claix’s behavior differs sharply from a plain REST API returning a hard error.
| State | What it means | What the calling agent does |
|---|---|---|
| completed | Finished in this response | Read artifacts[].parts[].data |
| working | Still running (extraction, Agent mode, query-space) | Wait for the push webhook, or poll tasks/get |
| input-required | A recoverable value is missing (e.g. no schema_id) | Send another message/send on the same contextId with the missing field |
| failed | The operation could not complete | Read the status message / error artifact |
| canceled | The task was canceled | Create a new task if needed |
Genuinely invalid input (an unknown skill id, a malformed parameter) never becomes a task at all — it returns a JSON-RPC protocol error (-32602 Invalid params) immediately. But missing but supplyable information does not fail the request; it parks the task in input-required and asks for exactly what is needed, on the same thread. This distinction matters at scale: an orchestrator juggling dozens of delegated document tasks across different agents cannot afford opaque failures for something as recoverable as a missing schema id.
Claix vs a typical document-processing integration (MCP-only or REST-only)
| Claix (REST + MCP + A2A) | Typical document extraction API (REST / MCP only) | |
|---|---|---|
| Callable by a human-built app | Yes (REST) | Yes |
| Callable by an IDE / local agent (Cursor, Claude Desktop) | Yes (MCP) | Only if it ships an MCP server |
| Discoverable and delegable by an unrelated external agent, without custom integration | Yes (A2A Agent Card) | No — requires the caller to know the API’s specific REST/MCP contract in advance |
| Long-running task handling | Native task states (working, input-required) + push webhook | Ad hoc, per-vendor (polling, custom webhooks, or blocking calls) |
| Persistent memory addressable across separate calls | Yes (document_id, space_id, contextId) | Rare — most extraction APIs are stateless per call |
| Cross-document reasoning as a single delegated task | Yes (query-space) | Not offered as a native capability |
| Same auth across all three interfaces | Yes (one API key) | N/A |
Use cases this unlocks
Multi-agent accounts payable / expense reconciliation
An orchestrator agent delegates an entire invoice-reconciliation task to Claix — extract, store in a space, cross-check totals against purchase orders — without the orchestrator’s own code containing any parsing or retrieval logic.
Legal review pipelines spanning multiple specialized agents
A contract-review agent built by a different team can discover Claix, extract clauses from a batch of contracts into a shared knowledge space, and hand back only the structured findings a downstream compliance agent needs — with no bespoke API integration between the two teams’ systems.
Long-running due-diligence or audit tasks
Because Claix’s A2A tasks support working state and push notifications rather than blocking connections, an orchestrator can delegate a large query-space reasoning task over hundreds of processed documents and move on to other work, resuming only when the webhook fires.
Agent marketplaces and agent-to-agent commerce
As more agents become independently discoverable and callable via A2A across organizations, a properly implemented Agent Card is what allows Claix to be found and used automatically by agents its own team never directly integrated with — the core promise of the protocol.
Frequently asked questions
- Is Claix the first document extraction API to support A2A?
- As far as current public documentation from comparable document-processing providers shows, we have not found another document intelligence or extraction API that exposes itself as a native, discoverable A2A agent — most expose REST and, increasingly, MCP, but not a full A2A task lifecycle with persistent document memory behind it. This may change quickly as A2A adoption grows.
- Do I need MCP if I already use Claix’s A2A endpoint?
- No. MCP, REST, and A2A are separate interfaces to the same underlying capabilities, and you pick whichever fits your integration: MCP for IDEs and agent frameworks that already speak MCP (https://claix.dev/mcp), REST for traditional backend integration, A2A for agent-to-agent delegation (https://claix.dev/a2a). They share the same API key.
- What happens if the calling agent doesn’t know Claix’s parameters in advance?
- It can send a TextPart with a plain-language instruction instead of a structured DataPart. Claix interprets the request, selects the appropriate skill, and fills in the arguments. Once the calling agent knows the skill and its fields, a DataPart is recommended, since it is more predictable and doesn’t depend on phrasing.
- How does Claix handle a document task that takes a long time?
- Long tasks (extraction, Agent-mode reasoning, query-space over many documents) return status.state: "working" rather than blocking the HTTP connection. Claix supports push notifications: register a webhook (either inline in the message/send call, or afterward via tasks/pushNotificationConfig/set) and Claix posts the finished task to that URL. There is no SSE streaming.
- Can another agent reference a document I already processed, in a separate conversation?
- Yes — that is the core design point. document_id and space_id persist independently of any single contextId thread, so a calling agent can query a previously processed document or knowledge space in a brand-new task, without re-uploading anything.
- What happens if a required parameter is missing?
- The task does not fail outright if the missing value is something the calling agent could still supply (for example, a schema_id). Instead, it stays in input-required state, and the calling agent sends another message/send on the same contextId with the missing field. Genuinely invalid input (an unknown skill, a malformed parameter) returns a JSON-RPC -32602 error immediately, with no task created.
- Is there a rate limit on the A2A endpoint?
- Yes, 60 requests per minute per API key, matching the same limit style used elsewhere in Claix. Exceeding it returns HTTP 429 with a Retry-After header.
- Can I validate that Claix’s A2A implementation is spec-compliant myself?
- Yes — point the official a2a-inspector tool, or any A2A 0.3/1.0 JSON-RPC client, at https://claix.dev (the site origin, so it can resolve the Agent Card under /.well-known/ on its own).
You might also like…
Engineering · Protocols
How do you make an AI agent return null when a value is missing from the document?
MCP · Integrations
Claix launches its official MCP server: PDFs and documents to JSON in IDEs and AI agents
Product · Agents
Knowledge spaces for AI agents: query multiple documents and connect their data
Agents · Memory
What is the difference between conversational memory and document memory in AI agents?