Skip to content

Agents · Published 2026-09-04 · Updated 2026-09-28 · AgentiSend

How agents see this site

What a crawler or a model gets when it fetches these pages, and the exact curl that proves each claim.

Every claim on this page has a request under it. Run the request; if the output disagrees with the claim, the claim is wrong and this page is the bug.

One HTML for everyone

Every route is rendered to complete static HTML at build time. There is no user-agent branching anywhere in this site or its build — a browser, a crawler and a model fetching a URL receive the same bytes, and a JavaScript-disabled fetch is a whole page rather than a mount point.

A site that serves rendered HTML only to crawlers has two versions of itself, and eventually they disagree; the version nobody looks at is the one that rots. There is a test that greps the source for user-agent reads and requires zero.

curl -sS https://agentisend.com/docs | grep -c "Every endpoint"

A Markdown twin of every page

Append .md to any page URL. The twin is generated from the same source the HTML renders — a guide from its own Markdown, a reference page from the OpenAPI operation, the catalogues from the catalogues.

curl -sS https://agentisend.com/docs/errors.md | head -5

Content negotiation is live: Accept: text/markdown on the HTML URL returns the twin as text/markdown; charset=utf-8 with Vary: Accept, and the .md path is served with the same type rather than as a download. Both are one origin rule, kept in the repository and applied on 22 September 2026.

curl -sS -I https://agentisend.com/docs/errors.md | grep -i content-type
curl -sS -I -H 'Accept: text/markdown' https://agentisend.com/docs/errors | grep -iE 'content-type|vary'

Three indexes, all generated

/llms.txt is short enough to hold in a prompt: what this is, how to authenticate, the MCP endpoint, the figures, the plans, and every operation, error code and event as a URL. /llms-full.txt is every page except the API reference, concatenated under its own URL header. The API reference is /llms-api.txt, one section per operation page. It is split out because it is most of the bytes and none of the prose: a model that came for the guides should not have to read the whole reference to reach them.

Every figure in them is imported from the module that owns it — prices from the pricing module, ceilings and retention from the API's own constants, the SLA from the published SLA document. A test extracts every numeral from the output and fails if one of them has no source behind it.

curl -sS https://agentisend.com/llms.txt | head -30
curl -sS https://agentisend.com/llms-full.txt | grep -c '^# https://agentisend.com'
curl -sS https://agentisend.com/llms-api.txt | grep -c '^# https://agentisend.com/docs/api/'

Crawling is allowed, explicitly, per crawler

robots.txt names a group for each major AI and search crawler and allows all of them. The private block is repeated inside every group, because a crawler obeys only its own most-specific group (RFC 9309 §2.2.1) — a Disallow under User-agent: * alone applies to none of them.

Content-Signal: ai-train=yes, search=yes, ai-input=yes sits above the groups: training, search indexing and use as input to an answer are three separate permissions, and this is yes to all three.

curl -sS https://agentisend.com/robots.txt
curl -sS https://agentisend.com/sitemap.xml | grep -c '<loc>'

The sitemap's lastmod is the git commit time of the file each page is generated from, not the build date. A lastmod that says "today" on every URL at every build is a field a crawler learns to ignore.

One machine-readable document per question

QuestionFetch
What can I call?/openapi.json
Where do I start, as an agent?/agents
Where is everything?/.well-known/agent.json
Which APIs does this host have?/.well-known/api-catalog
What does it cost?/pricing.json
What are the ceilings?/limits.json
How long are logs kept?/retention.json
What is committed?/sla.json
Is it up, and was it?/status.json
How do I connect over MCP?/.well-known/mcp.json
Where do I report a vulnerability?/.well-known/security.txt
curl -sS https://agentisend.com/.well-known/agent.json

Every URL in that manifest is checked by a test against the files the build writes, so a dead link in it fails the build rather than costing you a retry loop.

Structured data: one type per page

Each page carries exactly one JSON-LD block: SoftwareApplication with an Offer per tier on the home page (plus a WebSite block naming the site, the one second block anywhere), FAQPage on /faq, HowTo on the quickstart, BreadcrumbList on /docs, TechArticle on reference pages. The Offer prices are asserted equal to the pricing module, so a rich result cannot quote a price this site does not charge.

curl -sS https://agentisend.com/faq | grep -o 'application/ld+json'

Private surfaces say so

The console and the API answer X-Robots-Tag: noindex, nofollow on every response. robots.txt is a crawl instruction, not an index instruction — a URL reached from a link elsewhere can be indexed without ever being fetched — so the header is the only thing that actually keeps a signed-in surface out of an index.

curl -sSI https://console.agentisend.com/ | grep -i x-robots-tag

Availability, measured

/status.json is static and carries no live state — a cached "operational" is the worst thing a status surface can serve. It names the two live endpoints instead: GET /status for the current per-component state, and GET /status/history for daily uptime over the last 90 days, counted from samples taken once a minute. A component that cannot be checked reports unknown, and unknown samples are excluded from the denominator, so a day nobody measured reports no samples rather than 100%.

curl -sS https://agentisend.com/status.json

Not built yet

Nothing on this page describes a surface that does not exist. When something is planned but unbuilt it is listed here, in the same words as everything else — a page that describes what is coming in the same voice as what exists is a page nobody can act on.

The rule this page exists to keep

Every path this site advertises resolves. A link to a document that does not exist costs a reader one dead end and costs an agent a retry loop, and the second one is worse.