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

# Reach Level 5 on agent readiness

> What your website must serve so AI agents can find, read, play and use your videos, and how to pass Cloudflare's Agent Ready scan too.

Two checks look at your website. They are separate, and they are never added together.

| Check | What it asks | Where you see it |
| - | - | - |
| **AgentTV Readiness** | Can AI agents open your pages, find your videos, read them, play them and use them on your terms? Nine checks, R1 to R9. | **Visibility** in the console, and `GET /v1/visibility`. |
| **Cloudflare Agent Ready** | Does your site support the general agent standards: robots.txt, Link headers, Markdown, API catalog, MCP and A2A cards? Levels 1 to 5. | The same page, as information. Or run it yourself at [isitagentready.com](https://isitagentready.com). |

The Cloudflare scan never changes your AgentTV level. It reads your site root (a locale redirect such as `/en` is followed), not one video page. Most of what it wants is also what an AI app needs to reach your videos, so one piece of work passes both.

## The AgentTV levels

A level counts only when every check in it and in the levels below it passes. A check we could not test holds the level.

| Level | Name | Checks |
| - | - | - |
| 1 | Reachable | **R1.** AI crawlers can open your video pages. |
| 2 | Findable | **R2.** One list of all your videos: a video sitemap, a media feed, or `/.well-known/arv.json`. |
| 3 | Readable | **R3** transcript as text or a captions track, **R4** chapters (`Clip` or `SeekToAction`), **R5** `VideoObject` with name, description, thumbnail, upload date and duration. |
| 4 | Playable | **R6.** `contentUrl` or `embedUrl` points to a file or a player that answers. |
| 5 | Agent-Ready | **R7** your AI use terms in a machine-readable form, **R8** an oEmbed link or an agent endpoint (ARV, MCP server card or A2A agent card), **R9** credit in the `VideoObject` and a way to report use. |

## Step 1: let AI crawlers in (R1)

* Do not block AI user agents in robots.txt. Name the main ones (`GPTBot`, `ChatGPT-User`, `OAI-SearchBot`, `ClaudeBot`, `Claude-User`, `PerplexityBot`, `Google-Extended`) in their own groups, so both checks see the rules.
* Check your bot protection or CDN. Many bot managers answer `403` to a cloud server that sends an AI user agent, because it cannot prove who it is. Allow the verified AI crawlers by their published IP lists or signatures, and allow the check's requests to robots.txt, your sitemaps and your video pages. If a page answers `403` to a plain `curl`, a crawler is probably blocked too.

## Step 2: list your videos (R2)

Publish a video sitemap (`<video:video>` entries) and name it in robots.txt with a `Sitemap:` line. A sitemap index is fine. The ARV manifest at `/.well-known/arv.json` also passes.

## Step 3: describe each video page (R3 to R6)

Put the [page block](https://docs.agenttv.com/guides/page-metadata.md) in the HTML your server sends: the `VideoObject` with its `hasPart` chapters, the transcript as text, and a player address in `embedUrl` or `contentUrl`. If your page already has a `VideoObject`, merge the block into it. Do not add a second one. Tags that a script adds in the browser do not count.

## Step 4: add the agent readiness kit (R7 to R9, and most of the Cloudflare checks)

The kit is a set of files AgentTV hosts for your account. Your site serves them at the standard paths. Read it from your install file:

```text theme={null}
GET https://api.agenttv.com/public/creators/{slug}/install.json
```

Look at `agent_readiness`:

| Field | What you do with it |
| - | - |
| `documents` | Each entry has a `site_path` and a `url`. Serve the `url` at the `site_path` on your own host, without a redirect. The paths are `/.well-known/api-catalog`, `/.well-known/mcp/server-card.json`, `/.well-known/agent-card.json`, `/.well-known/agent-skills/index.json`, `/.well-known/ai-catalog.json`, `/.well-known/arv`, `/.well-known/arv.json` and `/auth.md`. |
| `robots_txt` | Add the lines to your robots.txt. The `Content-Signal` line says how AI may use your pages: search, AI input and AI training. It comes from the rights you set in the console. |
| `link_header` | Send this as one `Link` header on your home page (and every locale home page). It points agents at the documents above. |
| `vercel` | Ready rewrites and the header, for a site on Vercel. |

See [Serve the kit from any CDN](#serve-the-kit-from-any-cdn) if your site is not on Vercel.

> [!WARNING]
>
> A site that answers every unknown path with your HTML app shell fails the scan, even when the path is covered by the rule: the scan reads `HTML instead of JSON`. Test each path with `curl -i` and check the `Content-Type`.

With the kit in place, R8 (agent endpoint) and R9 (usage route) pass through the MCP server card and the ARV manifest. R7 passes through the ARV manifest with rights. Put the license URL and a `creditText` or `author` in your `VideoObject` too, so the page itself carries them.

## Serve the kit from any CDN

The `vercel` block of the kit is one way to say it. Any CDN or web server can do the same with these rules.

**1. Serve each document at its path.** For every entry in `agent_readiness.documents`, a `GET` or `HEAD` to `site_path` on your host returns the body of the entry's `url`, with these rules:

| Rule | Value |
| - | - |
| Status | `200`. No redirect. |
| `Content-Type` | The one the origin sends, for example `application/json`, `application/linkset+json; profile="https://www.rfc-editor.org/info/rfc9727"` for the API catalog, and `text/markdown` for `/auth.md`. |
| Upstream host | `api.agenttv.com`, HTTPS, port 443, SNI and `Host` set to `api.agenttv.com`. |
| Path | The upstream path is the entry's `url` path. Rewrite the path, not only the host. |
| `Access-Control-Allow-Origin` | Pass the origin's `*` through. |
| Caching | Keep the origin's `Cache-Control` and `ETag`. Never cache a `404`. |
| Other paths under `/.well-known/` | Keep answering `404`. Do not fall back to your HTML page. |

**2. Add the robots.txt line.** Under `User-agent: *`, add the line from `robots_txt.lines`:

```text theme={null}
User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
```

Your own value comes from your rights, so copy the line from your install file, not from this page. Keep your other groups, and keep the named AI crawler groups.

**3. Add the Link header to the home page.** On `GET /` and on the home page of every locale, add a `Link` response header with the value of `agent_readiness.link_header`. It is one header with several comma-separated links:

```text theme={null}
Link: </.well-known/api-catalog>; rel="api-catalog"; type="application/linkset+json", </.well-known/mcp/server-card.json>; rel="service-desc"; type="application/json", ...
```

Cloudflare reads the header on the page it lands on after redirects, so a home page that redirects to `/en` needs the header on `/en`.

**4. Answer Markdown.** When the request has `Accept: text/markdown`, answer `200` with `Content-Type: text/markdown; charset=utf-8` and a Markdown copy of the page. Add `Vary: Accept` on the HTML response so a cache keeps both. Serve `<page>.md` too, and add `Link: </index.md>; rel="alternate"; type="text/markdown"` on the home page. The copy must be the page content, not an error page.

**5. Check.** `curl -i -H "Accept: application/json" https://www.example.com/.well-known/api-catalog`, then the same for each path, `curl -I https://www.example.com/` for the header, and `curl -H "Accept: text/markdown" -i https://www.example.com/`.

### Notes by CDN

These notes name the feature each vendor uses. Follow the vendor's page for the exact settings of your plan.

* **Akamai.** In Property Manager, add a rule that matches the path (`/.well-known/*` and `/auth.md`), set the [Origin Server](https://techdocs.akamai.com/property-mgr/docs/origin-server) behavior to `api.agenttv.com` with the forward host header set to the origin hostname, and rewrite the path with the Rewrite URL behavior. Add the `Link` header on the home page rule with [Modify Outgoing Response Header](https://techdocs.akamai.com/property-mgr/docs/modify-outgoing-response-header). Markdown needs a response from your origin or an edge function, since a behavior alone cannot convert HTML.
* **Cloudflare.** The simplest way is a Worker on your routes, as in [Serve agents from your domain](https://docs.agenttv.com/guides/branded-agent-host.md#cloudflare-on-any-plan) ([Workers](https://developers.cloudflare.com/workers/)). Add the `Link` header with a [response header transform rule](https://developers.cloudflare.com/rules/transform/response-header-modification/). Turn on [Markdown for Agents](https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/) if your plan has it. [Origin Rules](https://developers.cloudflare.com/rules/origin-rules/) can also route a path to another host.
* **Fastly.** Add a backend for `api.agenttv.com` with TLS and the SNI hostname set, route the paths to it in VCL (set `req.backend`, `req.url` and `Host`), and set the `Link` header in the response (`beresp` or `resp`). See the [VCL reference](https://www.fastly.com/documentation/reference/vcl/) and [domains and origins](https://www.fastly.com/documentation/guides/full-site-delivery/domains-and-origins/). A [Compute](https://www.fastly.com/documentation/guides/compute/) service can also do the Markdown conversion.

## Step 5: Markdown for agents (Cloudflare)

When a request sends `Accept: text/markdown`, answer a Markdown copy of the page with `Content-Type: text/markdown`. Also serve `<page>.md` and advertise it with `Link: </index.md>; rel="alternate"; type="text/markdown"`. Cloudflare sites can turn on Markdown for Agents. Other stacks add a middleware that converts the page, or serve a pre-built copy. Test the home page and a video page.

## Step 6: optional records

* **DNS-AID.** Add `HTTPS` (SVCB) records at `_index._agents.example.com` and `_mcp._agents.example.com` (and `_a2a._agents.example.com`) with priority 1, `alpn=h2` and `port=443`. The target of `_mcp` is your MCP host. This is a change at your DNS provider.
* **WebMCP.** Your page registers site tools in the browser with `navigator.modelContext`. The page block carries the tags when WebMCP is on. See [Page metadata](https://docs.agenttv.com/guides/page-metadata.md#webmcp-tags-when-you-merge).
* **Personal Agent Protocol.** The kit adds `/.well-known/poppy.json` once your website is registered and verified. Cloudflare lists it as information.

## What Cloudflare checks you do not need

A public video catalog needs no sign-in, so these can fail by design and still leave you at Level 5: OAuth discovery, OAuth protected resource, and `auth.md` agent registration. The `auth.md` file the kit serves says that no registration is needed. The commerce checks (x402, MPP, UCP, ACP, AP2) do not count in the level and apply only if you sell to agents. Web Bot Auth is information only.

## Check your work

1. Open **Visibility** in the console and choose **Refresh**, or call the `check_visibility_website` tool. Between full refreshes it checks your website alone, at most once every 15 minutes and 6 times a day.
2. Scan with Cloudflare: `POST https://isitagentready.com/api/scan` with `{"url": "https://www.example.com"}`. Each failing check names what is missing.
3. Fetch each document with `curl -i` from outside your network.

## Related

* [Put metadata on your pages](https://docs.agenttv.com/guides/page-metadata.md)
* [Serve agents from your domain](https://docs.agenttv.com/guides/branded-agent-host.md)
* [Track AI visibility](https://docs.agenttv.com/guides/visibility.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.