Give your agent access to Agents Allowed
Whether you use an assistant like Claude, ChatGPT, Grok or Perplexity, a coding tool like Cursor or VS Code, or build your own agent, it can check this database itself before it shops, books or logs in somewhere. One free request returns whether the site allows agents, which actions work, what to do instead, the official way in, and our sources.
Free · read-only · JSON · no account or key · CORS open · schema_version 1.2.0
Connect it to your agent
| You use… | How |
|---|---|
| Claude, ChatGPT, Grok, Perplexity, Cursor, VS Code (GitHub Copilot), Gemini CLI, LM Studio, Microsoft Copilot Studio or any other app that supports custom MCP connectors | Add a custom connector (remote MCP server) with the URL https://agentsallowed.io/mcp. No sign-in needed. Your agent gets the tools check_domain, check_domains and submit_update. Where to add it depends on the app and your plan (for example, Connectors in Claude or Grok, Plugins in ChatGPT or Perplexity, or MCP settings in Cursor and VS Code). |
| An agent that speaks A2A | Point it at the agent card https://agentsallowed.io/.well-known/agent-card.json. |
| Your own build | Call GET https://agentsallowed.io/api/v1/check?domain=… before acting. recommended_action (below) is a suggestion, not permission. |
Data and discovery files
These files let agents and tools find, download and keep the data in sync automatically. People browsing the site don't need them.
| Dataset (JSON) · CSV | Every published record in one download. |
| Changes (Atom) · RSS · JSON | What changed and when, newest first, so tools only fetch updates. |
| Agent card | How A2A agents discover and talk to our lookup agent. |
| MCP manifest | How MCP clients discover our server. |
| llms.txt · llms-full.txt | A plain-text guide to the site for AI assistants. |
| OpenAPI · API catalog | Machine-readable API descriptions. |
Using the API means you accept the Terms. That includes the MCP server and A2A agent (free, fair use, licence with attribution, no warranty); every API, MCP and A2A response also carries a Link: </terms/>; rel="terms-of-service" header. Results are informational; see the disclaimer.
Quick start
curl "https://agentsallowed.io/api/v1/check?domain=https://www.delta.com/flights"
Then read recommended_action. It's a suggestion based on public sources, not permission; the website's own terms always take priority.
use_official_route | Use the listed live official route instead of driving the website. |
proceed_with_caution | Some tasks may work; expect verification checks and hand back to the user if one appears. |
do_not_proceed | Don't attempt these tasks through the website right now; tell the user, or use a listed route that covers the task. |
ask_user | No record; follow the site's terms and robots.txt and confirm with the user before acting. |
Endpoints
| Request | What it does |
|---|---|
GET /api/v1/check?domain=delta.com | One lookup. Accepts URLs; subdomains fall back to the parent (www.delta.com → delta.com); aliases resolve (gmail.com → google.com). Untracked → 404 with found:false, status:"unknown", recommended_action:"ask_user" (same shape). Invalid → 400. worker |
GET /api/v1/check?domains=a.com,b.comPOST /api/v1/check {"domains":[…]} | Batch, up to 50, results in input order (each is a record or {query, error}). worker |
GET /api/v1/domains/{domain}.json | Static record for an exact tracked domain. Works on any static host. |
GET /api/v1/index.json | Every domain + alias (domain_map), statuses, enums, dataset_version, links. Resolve subdomains client-side by stripping labels. |
GET /api/v1/all.json · /api/v1/all.csv | Full dataset download. |
GET /api/v1/changes.json · /changes.atom · /changes.rss | Changes feed, newest first. GET /api/v1/changes?since=YYYY-MM-DD&status=open filters (worker). |
POST /api/v1/submissions | Submit an update: add_brand, correct_listing, report_block or report_works (schema). Goes to human review; nothing is published automatically. Not open yet: submissions are validated, then the endpoint returns 501 until intake is switched on, then 202 with review_status:"pending_review", published:false. POST /api/v1/reports is a deprecated alias that accepts the old report body. worker |
GET /brands/{slug}/ with Accept: application/json or text/markdown | Content negotiation: same URL returns the JSON record or Markdown (Vary: Accept). worker. Static equivalents: /api/v1/brands/{slug}.json, /brands/{slug}/index.md. |
worker = answered dynamically. Everything else is plain static files.
The record
Every endpoint (REST, batch, bulk, MCP, A2A) returns the same record shape, defined by record.schema.json (JSON Schema 2020-12).
{
"$schema": "https://agentsallowed.io/api/v1/schema/record.schema.json",
"query": "www.delta.com",
"matched": "delta.com",
"schema_version": "1.2.0",
"found": true,
"domain": "delta.com",
"aliases": [],
"brand": "Delta Air Lines",
"slug": "delta",
"category": "travel",
"status": "none",
"status_label": "No current access",
"evidence": "brand_statement",
"recommended_action": "do_not_proceed",
"advice": "Agents can't currently use this site for the listed tasks (per its terms or technical measures, as sourced). Don't attempt them through the website on the user's behalf. If a listed official route covers the task, use it; otherwise let the user know they'll need to do it themselves.",
"allowed_actions": {
"browse": "unknown",
"shop": "no",
"book": "no",
"login": "no"
},
"official_routes": [],
"agents_affected": [
"Meta Muse",
"Personal booking agents generally"
],
"summary": "Third-party AI agents can't currently shop for or book Delta flights on Delta's website or app. Delta says it is protecting customers from unauthorized automated activity and is still evaluating agents.",
"observed": [
"Delta told TechCrunch it has no partnership or integration letting a third-party AI agent shop for or book Delta flights on a customer's behalf."
],
"last_checked": "2026-11-03",
"sources": [
{
"title": "Websites are closing their doors to AI agents",
"publisher": "The Verge",
"date": "2026-10-17",
"url": "https://www.theverge.com/ai-artificial-intelligence/1013195/ai-agents-blocked-web"
},
{
"title": "Terms of Use",
"publisher": "Delta Air Lines",
"date": "2026-11-03",
"url": "https://www.delta.com/us/en/legal/terms-of-use"
},
{
"title": "The next hurdle for AI agents: getting websites to let them in",
"publisher": "TechCrunch",
"date": "2026-10-06",
"url": "https://techcrunch.com/2026/10/06/the-next-hurdle-for-ai-agents-getting-websites-to-let-them-in/"
}
],
"history": [
{
"date": "2026-10-22",
"change": "added",
"status": "none",
"note": "Initial record."
},
{
"date": "2026-11-03",
"change": "updated",
"status": "none",
"note": "Added Delta's Terms of Use as a source."
}
],
"page_url": "https://agentsallowed.io/brands/delta/",
"api_url": "https://agentsallowed.io/api/v1/domains/delta.com.json",
"disclaimer": "Informational only, not guaranteed and not legal advice. Not affiliated with Delta Air Lines. Always follow the site's own terms. See https://agentsallowed.io/disclaimer/"
}
Enums
status | open · partial · announced · none · unknown |
evidence | brand_statement · official_docs · credible_reporting · own_test |
recommended_action | use_official_route · proceed_with_caution · do_not_proceed · ask_user |
allowed_actions.{browse,shop,book,login} | yes · limited · no · unknown · not_applicable |
official_routes[].type | ucp · acp · mcp · a2a · visa_tap · partner_connector · partner_app · open_banking · paid_api · official_api |
official_routes[].status | live · announced · planned |
submission.type | add_brand · correct_listing · report_block · report_works |
Only verified records are published: evidence is always one of the values above. Domains without a verified record return status:"unknown".
Versioning
schema_version follows semver. Minor versions only add optional fields or enum values (clients should ignore unknown fields and treat unknown enum values as unknown). Breaking changes move to /api/v2/.
Syncing and caching
- Bulk-load
/api/v1/all.jsononce, then poll/api/v1/index.json: ifdataset_versionis unchanged, nothing changed. - Otherwise read
/api/v1/changes.json(or?since=) and refetch the listedapi_urls. Changeids are stable. - Send
If-None-Match/If-Modified-Since; you'll get304when nothing changed. Responses are cacheable for 5 minutes; cache records for up to 24 hours.
MCP
Endpoint POST https://agentsallowed.io/mcp (streamable HTTP). Supports MCP 2026-07-28 (stateless; server/discover, per-request _meta, MCP-Protocol-Version / Mcp-Method / Mcp-Name headers) and legacy 2025-11-25 / 2025-06-18 / 2025-03-26 clients via initialize. Tools: check_domain, check_domains, submit_update, report_block. Manifest: /.well-known/mcp/server.json (MCP registry format).
POST https://agentsallowed.io/mcp
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: check_domains
Content-Type: application/json
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_domains","arguments":{"domains":["amazon.com","target.com"]},
"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}
A2A
Agent card: /.well-known/agent-card.json (A2A 1.0 with 0.3 compatibility fields; also at /.well-known/agent.json). JSON-RPC endpoint POST https://agentsallowed.io/a2a: SendMessage (1.0) or message/send (0.3). Put domains in text or a data part; the reply is a direct message with a text summary and a data part {results:[record]}. No tasks, streaming or push.
{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{"messageId":"m1","role":"ROLE_USER",
"parts":[{"text":"Can I book on delta.com or should I use expedia.com?"}]}}}
Fair use and rate limits
Free to use under the terms. Limits are enforced per IP address: 60 requests per minute per IP (per /64 network for IPv6) across every /api/ path (static JSON and CSV included), /mcp and /a2a, and 10 submissions per hour per IP (REST or the MCP submit tools). A batch check counts as one request. Pages, llms.txt, robots.txt and /.well-known/ files aren't limited.
Over a limit you get 429 with a Retry-After header (seconds), RateLimit and RateLimit-Policy headers, and a JSON body: {"error": "rate_limited", "scope": "default", "limit": 60, "window_seconds": 60, "retry_after_seconds": 60, "message": "…"}. Wait Retry-After seconds, then retry. Successful responses carry RateLimit-Policy. Limits are counted per Cloudflare location, so they're approximate. For bulk needs, download all.json once and poll the changes feed instead of looping over check.
How agents find us
- Every page's
<head>links the changes feed,llms.txt, the agent card, the OpenAPI description, the API catalog and the terms;robots.txtand the sitemap point to the same files. See Data and discovery files. - Legal: Terms of Use · Privacy · Disclaimer (also linked from the OpenAPI
termsOfService, the API catalog and the agent card description). - Every brand page links its JSON with
<link rel="alternate" type="application/json">and an HTTPLinkheader, and carries schema.org JSON-LD.