{
 "passport": "agent-door/v0",
 "door": "https://mtdfacts.co.uk",
 "topic": "UK Making Tax Digital for Income Tax",
 "provider": {
  "name": "Axion Labs",
  "operator": "Axion Labs — hello@getaxionlabs.com (a person answers)",
  "jurisdiction": "United Kingdom (operator). Each dataset's own jurisdiction is stated in its topic and source.",
  "contact": "hello@getaxionlabs.com"
 },
 "protocols": [
  "HTTPS/JSON",
  "MCP (Streamable HTTP)"
 ],
 "capabilities": {
  "free_endpoints": [
   {
    "url": "https://mtdfacts.co.uk/llms.txt",
    "kind": "corpus",
    "what": "Sourced plain-English MTD answers, every fact traced to GOV.UK"
   },
   {
    "url": "https://mtdfacts.co.uk/api/answers",
    "kind": "dataset",
    "what": "The full answer corpus as JSON — every answer with its GOV.UK sources (GET, open CORS)"
   },
   {
    "url": "https://mtdfacts.co.uk/openapi.json",
    "kind": "openapi",
    "what": "OpenAPI 3.1 description of every free endpoint, parameters read from the code (6 Sep 2026)"
   },
   {
    "url": "https://mtdfacts.co.uk/changes.json",
    "kind": "changes",
    "what": "What changed, when, from where — includes the SI 2026/336 items (axion-changes/1); Atom twin at /changes.atom"
   },
   {
    "url": "https://mtdfacts.co.uk/changes.atom",
    "kind": "feed",
    "what": "Atom 1.0 feed of the same changes"
   }
  ],
  "mcp": {
   "endpoint": "https://mcp.mtdfacts.co.uk/mcp",
   "tools": [
    "search_mtd_answers",
    "get_mtd_answer"
   ]
  },
  "note": "Free endpoints are open CORS, no key, no account. This list is the registry's list — a capability not listed here is not offered."
 },
 "data": {
  "required": "only the query itself — a question and its parameters (an operator name for parking doors, an insurer for denial doors, a plate for NYC lookups, a date). Never an identity, an account, or a login.",
  "retained": "none — queries are answered and discarded; plate lookups pass through to the city's API inside one request and are never stored",
  "exceptions": [
   "page-view/agent-traffic metering: request PATHS are counted per zone (no bodies, no queries, no identities)"
  ],
  "risk": "low — every door on this estate is read-only over published data",
  "reversibility": "fully reversible; no door changes external state"
 },
 "pricing": {
  "free": "Free doors: free with attribution and a link to the source site. Priced doors on this zone are live: paid_doors states the price, the free allowance and the fields returned before the call.",
  "manifest": "axion-priced-manifest/v1",
  "rail": {
   "state": "live",
   "present_key_as": "Authorization: Bearer ax_live_...",
   "checkout": "https://mtdfacts.co.uk/api/key/checkout",
   "buy_credit": "https://buy.stripe.com/bJe4gz74hee4dfjd154ko0q",
   "free_key": "https://mtdfacts.co.uk/api/key/free?agent=<name>&contact=<email or https url>",
   "usage": "https://mtdfacts.co.uk/api/key/usage"
  },
  "paid_doors": [
   {
    "url": "https://mtdfacts.co.uk/api/bulk",
    "price_usd": 9,
    "unit": "per full-dataset pull",
    "state": "live — answers with the record when a key holding credit (or a named free key inside its daily allowance) is presented as Authorization: Bearer <key>; otherwise HTTP 402 with an x402 v2 envelope whose accepts[] names the prepaid-credit rail. A call that fails our own validity check is never charged.",
    "free_per_day": 1,
    "free_note": "a named free key from https://mtdfacts.co.uk/api/key/free?agent=<name>&contact=<email or https url> passes this door 1 time(s) a UTC day at no charge",
    "returns": [
     "site",
     "checked",
     "dataset_version",
     "count",
     "answers"
    ]
   },
   {
    "url": "https://mtdfacts.co.uk/api/changes",
    "price_usd": 0.02,
    "unit": "per call",
    "state": "live — answers with the record when a key holding credit (or a named free key inside its daily allowance) is presented as Authorization: Bearer <key>; otherwise HTTP 402 with an x402 v2 envelope whose accepts[] names the prepaid-credit rail. A call that fails our own validity check is never charged.",
    "free_per_day": 20,
    "free_note": "a named free key from https://mtdfacts.co.uk/api/key/free?agent=<name>&contact=<email or https url> passes this door 20 time(s) a UTC day at no charge",
    "returns": [
     "dataset",
     "version",
     "generated",
     "record_count",
     "since",
     "changes",
     "note"
    ]
   }
  ],
  "dormant_paid_doors": [
   {
    "url": "https://mtdfacts.co.uk/api/bulk",
    "price_usd": 9,
    "unit": "per full-dataset pull",
    "state": "live — answers with the record when a key holding credit (or a named free key inside its daily allowance) is presented as Authorization: Bearer <key>; otherwise HTTP 402 with an x402 v2 envelope whose accepts[] names the prepaid-credit rail. A call that fails our own validity check is never charged.",
    "free_per_day": 1,
    "free_note": "a named free key from https://mtdfacts.co.uk/api/key/free?agent=<name>&contact=<email or https url> passes this door 1 time(s) a UTC day at no charge",
    "returns": [
     "site",
     "checked",
     "dataset_version",
     "count",
     "answers"
    ]
   },
   {
    "url": "https://mtdfacts.co.uk/api/changes",
    "price_usd": 0.02,
    "unit": "per call",
    "state": "live — answers with the record when a key holding credit (or a named free key inside its daily allowance) is presented as Authorization: Bearer <key>; otherwise HTTP 402 with an x402 v2 envelope whose accepts[] names the prepaid-credit rail. A call that fails our own validity check is never charged.",
    "free_per_day": 20,
    "free_note": "a named free key from https://mtdfacts.co.uk/api/key/free?agent=<name>&contact=<email or https url> passes this door 20 time(s) a UTC day at no charge",
    "returns": [
     "dataset",
     "version",
     "generated",
     "record_count",
     "since",
     "changes",
     "note"
    ]
   }
  ]
 },
 "reliability": "no claim — we publish measured numbers only, and per-door uptime/latency has not been measured over a meaningful window. This field will carry numbers when it can carry measured ones.",
 "trust": {
  "source": "GOV.UK and HMRC guidance pages, named individually in each answer's source list",
  "validation": "Corpus rule: if a fact is not on a GOV.UK page we read, it does not go in. Each answer carries the pages it rests on, so any claim can be re-checked against the government's own wording.",
  "checked": "2026-09-02",
  "honesty_grade": "General information about UK tax rules, not tax advice — stated in every payload."
 },
 "attribution": {
  "required": true,
  "terms": "Free to use with attribution and a link to https://mtdfacts.co.uk"
 },
 "fair_use": "No hard per-IP limit is currently enforced on the free doors. Be a polite agent: cache what you fetch (responses declare cache-control), use /api/bulk for full-dataset pulls (a named free key from /api/key/free passes it once a day at no charge; keyed calls carry a fair-use limit of 120 requests a minute), and do not retry errors in a tight loop. Abusive traffic patterns may be rate-limited by the platform.",
 "dispute": {
  "contact": "hello@getaxionlabs.com",
  "what": "Corrections, disputes about any published number, takedown or licensing questions. A person answers, usually same day. Every statistical parse is validated against its source's own printed totals before publication; if you can show a number is wrong, it gets fixed or withdrawn — the estate has withheld its own data before (2023 POPLA not-contested table) rather than publish a figure that failed validation."
 },
 "registry": "https://open.getaxionlabs.com/doors.json",
 "last_verified": {
  "passport": "2026-09-04",
  "dataset": "2026-09-02",
  "fixity": "sha256-cf84d4e184c9f8e1ee126f38322f55acaf400341db616946c1b981ec09c9eec5",
  "basis": "passport date = the date this passport's fields were last checked against the live door; dataset date = the trust block's own source check date"
 }
}