{
 "passport": "agent-door/v0",
 "door": "https://appealsdesk.co.uk",
 "topic": "UK private parking + SEND + CHC appeals",
 "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://appealsdesk.co.uk/api/answer",
    "kind": "composed-answer",
    "what": "operator + dates → route, deadlines, POPLA record, next steps (GET, params: operator, notice, rejected)"
   },
   {
    "url": "https://appealsdesk.co.uk/api/operators",
    "kind": "dataset",
    "what": "Every UK private parking operator mapped to its appeals body (POPLA or IAS) with the appeal windows"
   },
   {
    "url": "https://appealsdesk.co.uk/api/popla-outcomes",
    "kind": "dataset",
    "what": "POPLA per-operator outcomes 2023-2025, validated parses"
   },
   {
    "url": "https://appealsdesk.co.uk/api/councils",
    "kind": "dataset",
    "what": "EHC needs-assessment refusal rates, 153 English councils"
   },
   {
    "url": "https://appealsdesk.co.uk/popla-appeal-success-rates.csv",
    "kind": "download",
    "what": "League table as CSV"
   },
   {
    "url": "https://appealsdesk.co.uk/parking-deadlines.ics",
    "kind": "file-door",
    "what": "Deadlines as calendar file with reminders (params: notice, operator, rejected)"
   },
   {
    "url": "https://appealsdesk.co.uk/openapi.json",
    "kind": "openapi",
    "what": "OpenAPI 3.1 description — importable as a GPT/agent Action"
   },
   {
    "url": "https://appealsdesk.co.uk/changes.json",
    "kind": "changes",
    "what": "What changed, when, from where (axion-changes/1, newest first); Atom twin at /changes.atom"
   },
   {
    "url": "https://appealsdesk.co.uk/changes.atom",
    "kind": "feed",
    "what": "Atom 1.0 feed of the same changes"
   }
  ],
  "mcp": {
   "endpoint": "https://mcp.appealsdesk.co.uk/mcp",
   "tools": [
    "operator_route_lookup",
    "deadline_calculator",
    "popla_outcomes"
   ]
  },
  "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": [
   "appealsdesk.co.uk/reminders (POST): deliberately STORES the email address and deadline dates the visitor submits, for the reminder service — that is its whole purpose, stated on the form",
   "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: dormant (accepts:[]), prices shown are the prices that will apply.",
  "manifest": "axion-priced-manifest/v1",
  "rail": {
   "state": "dormant",
   "checkout": null,
   "buy_credit": null,
   "free_key": null,
   "usage": null
  },
  "paid_doors": [
   {
    "url": "https://appealsdesk.co.uk/api/bulk",
    "unit": "per full-dataset pull",
    "state": "dormant — answers HTTP 402 with an x402 v2 envelope and an empty accepts[] list; no payment rail is live and no payment is accepted today. The price shown is the price that will apply."
   },
   {
    "url": "https://appealsdesk.co.uk/api/changes",
    "unit": "per call",
    "state": "dormant — answers HTTP 402 with an x402 v2 envelope and an empty accepts[] list; no payment rail is live and no payment is accepted today. The price shown is the price that will apply."
   }
  ],
  "dormant_paid_doors": [
   {
    "url": "https://appealsdesk.co.uk/api/bulk",
    "unit": "per full-dataset pull",
    "state": "dormant — answers HTTP 402 with an x402 v2 envelope and an empty accepts[] list; no payment rail is live and no payment is accepted today. The price shown is the price that will apply."
   },
   {
    "url": "https://appealsdesk.co.uk/api/changes",
    "unit": "per call",
    "state": "dormant — answers HTTP 402 with an x402 v2 envelope and an empty accepts[] list; no payment rail is live and no payment is accepted today. The price shown is the price that will apply."
   }
  ]
 },
 "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": "POPLA Annual Report Appendices 2023, 2024 and 2025 ('Appeals decided by operator' and 'Appeals not contested'); the published British Parking Association and International Parking Community member lists",
  "source_urls": [
   {
    "name": "POPLA annual reports",
    "url": "https://www.popla.co.uk/reports"
   },
   {
    "name": "POPLA",
    "url": "https://www.popla.co.uk/"
   },
   {
    "name": "Independent Appeals Service (IAS)",
    "url": "https://www.theias.org/"
   },
   {
    "name": "British Parking Association",
    "url": "https://www.britishparking.co.uk/"
   },
   {
    "name": "International Parking Community",
    "url": "https://theipc.info/"
   }
  ],
  "validation": "Every year's parse is reconciled against that report's own printed grand total before publication. A table that fails is withheld, not shipped: the 2023 not-contested table parsed to 25,730 against POPLA's printed 26,131 — a missing Britannia row in POPLA's own appendix — so it is not published anywhere on this estate.",
  "checked": "2026-08-20",
  "honesty_grade": "POPLA outcomes are per-record dated (checked + source_report + per-year validated). The operator route list is dataset-level dated and says so in checked_basis — we do not hold per-operator verification timestamps and refuse to imply we do."
 },
 "attribution": {
  "required": true,
  "terms": "Free to use with attribution and a link to https://appealsdesk.co.uk"
 },
 "fair_use": "No hard per-IP limit is currently enforced on this door. Be a polite agent: cache what you fetch (responses declare cache-control), prefer /api/bulk when it opens for full-dataset pulls, 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-08-20",
  "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",
  "fixity": "sha256-4f67c40fe76468063834465bdf2066bc77a59a41e36573172980c7338f1e1682"
 },
 "receipts": {
  "envelope": "answer-receipt/v0",
  "what": "Answer API responses carry a detached Ed25519 signature (receipt field): what this door said, when, and from which dataset version. Provenance and integrity — the trust block carries how the data was checked.",
  "applies_to": [
   "/api/answer",
   "/api/popla-outcomes"
  ],
  "public_key": "https://appealsdesk.co.uk/.well-known/answer-key",
  "verify": "https://appealsdesk.co.uk/api/verify-receipt"
 }
}