Reference
Limits
Every cap this service enforces, with the reason for it. The numbers on this page are imported from the code that enforces them, so a page that is wrong is a build that is wrong.
Document size
Three different numbers, because three different things are being protected. They are not a tier system.
- Public tools
- 2 MB per document, and the same per schema. The tools are unauthenticated, so the cap is what keeps one visitor from spending everyone's capacity.
- API request
- 4 MB per document. Keep the whole request under that too — JSON escaping and an inline schema count toward it.
- Schemas
- 2 MB, everywhere. An XSD, a RELAX NG grammar, a DTD or a Schematron schema all share this.
- Workspace ingestion
- 5 MB when the server fetches a URL for you, 4 MB when you upload or paste.
- XPath expressions
- 500 characters, and at most 20 per API request. Past that an expression is a payload rather than a query.
Why the API cap is lower than ingestion
A validation request is processed in one function invocation and held in memory; an ingested document is streamed and stored. The limits follow what each path actually does, which is why the smaller number is on the path that sounds bigger.Rate limits
- Public tools
- 60 runs per hour, counted against a one-way hash of the network address. No account, no cookie, nothing that identifies a person.
- API
- 1,000 requests per hour, per account — not per key. Issuing a second key splits the same allowance rather than doubling it.
- Agents
- The MCP endpoint shares the API's allowance, because it is the API. Discovery calls are free; a tool call costs one request.
Every API response carries x-ratelimit-limit and x-ratelimit-remaining, and a 429 carries retry-after. Read them and pace yourself rather than retrying into the wall.
Monitoring and retention
- Cadences
- hourly, every six hours, daily, weekly
- Guest workspaces
- Up to three watches, each expiring after seven days, and no outbound webhooks. Enforced in the database rather than in the interface, so it holds however the request arrives.
- Webhook delivery
- Three attempts per event, with the delivery history kept so a failure is visible rather than silent.
- Version retention
- Configured per source. A watch with retention off keeps the latest snapshot and the change record, not the documents.
What the tools and the API never do
Neither the public tools nor the API stores a document. Both process in memory and return a result; the only trace a run leaves is a row of counts, so usage can be metered. The workspace is the part that keeps things, and it keeps them because that is what it is for.
A stylesheet run through the XSLT tool cannot reach the network, and neither can a schema: nothing here fetches a URL on your behalf except the workspace’s own ingestion, which you point at a URL deliberately. The security page covers why.
Get started
Need more than this?
An account raises the document cap and gives you the API allowance above. If you are running into a limit that is genuinely in the way, say what shape the problem takes — some of the reasons behind these numbers move more easily than others.