{
 "openapi": "3.1.0",
 "info": {
  "title": "mtdfacts.co.uk free machine endpoints",
  "version": "2026-09-02",
  "x-dataset-fixity": "sha256-cf84d4e184c9f8e1ee126f38322f55acaf400341db616946c1b981ec09c9eec5",
  "description": "Plain-English answers on UK Making Tax Digital for Income Tax, every fact traced to GOV.UK/HMRC. Free with attribution; every response carries an axion-cite/v1 citation object and ETag/Last-Modified validators (Last-Modified = the newer of the dataset stamp, info.version, and the newest /changes.json item date). /api/answers is signed: a trailing `receipt` (answer-receipt/v1, Ed25519, with a `policy` line) whose payload hash prefix is the ETag; verify at /api/verify-receipt, key at /.well-known/answer-key. Every answer carries applies_from / applies_to tax-year bounds.",
  "contact": {
   "name": "Axion Labs",
   "email": "hello@getaxionlabs.com"
  }
 },
 "servers": [
  {
   "url": "https://mtdfacts.co.uk"
  }
 ],
 "x-axion-passport": "https://mtdfacts.co.uk/.well-known/agent-door.json",
 "paths": {
  "/api/answers": {
   "get": {
    "summary": "Every answer, its short answer, summary, FAQ pairs and GOV.UK sources, as JSON",
    "parameters": [],
    "responses": {
     "200": {
      "description": "The full answer corpus, each answer with applies_from / applies_to; the body ends in a `receipt` (answer-receipt/v1) when signed, and its ETag is that receipt's payload_sha256 prefix",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not modified — the If-None-Match or If-Modified-Since validator still holds; empty body"
     }
    },
    "x-axion-cite": true,
    "x-axion-receipt": true
   }
  },
  "/changes.json": {
   "get": {
    "summary": "What moved, when, from where (schema axion-changes/1), newest first",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Change feed",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "304": {
      "description": "Not modified — the If-None-Match or If-Modified-Since validator still holds; empty body"
     }
    }
   }
  },
  "/changes.atom": {
   "get": {
    "summary": "The same change feed as Atom 1.0",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Atom feed",
      "content": {
       "application/atom+xml": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     }
    }
   }
  },
  "/api/bulk": {
   "get": {
    "summary": "Priced door: every answer with its sources in one pull (USD 9 per pull; a named free key passes once a day)",
    "parameters": [],
    "responses": {
     "200": {
      "description": "The record, when Authorization: Bearer <key> holds credit or a free allowance",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "402": {
      "description": "x402 v2 PaymentRequired envelope; accepts[0].payTo is a Stripe Payment Link; the body carries a real preview"
     }
    },
    "x-axion-priced": true,
    "x-payment-info": {
     "intent": "charge",
     "method": "stripe",
     "amount": 9,
     "currency": "USD",
     "description": "Every answer with its short answer, summary, FAQ pairs and GOV.UK sources in one response; USD 9 per pull, paid through a Stripe Payment Link named in the 402 envelope; credit rides on a key from https://mtdfacts.co.uk/api/key/checkout"
    },
    "security": [
     {
      "axionKey": []
     },
     {
      "axionOAuth": [
       "read",
       "bulk",
       "changes"
      ]
     }
    ]
   }
  },
  "/api/changes": {
   "get": {
    "summary": "Priced door: what moved since a date (USD 0.02 per call; a named free key passes 20 times a day)",
    "parameters": [
     {
      "name": "since",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "date"
      },
      "description": "YYYY-MM-DD; records that changed on or after this date"
     }
    ],
    "responses": {
     "200": {
      "description": "The change list since the date, with the key's balance",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "402": {
      "description": "x402 v2 PaymentRequired envelope; accepts[0].payTo is a Stripe Payment Link"
     }
    },
    "x-axion-priced": true,
    "x-payment-info": {
     "intent": "charge",
     "method": "stripe",
     "amount": 0.02,
     "currency": "USD",
     "description": "What moved since a date; USD 0.02 per call, paid through a Stripe Payment Link named in the 402 envelope; credit rides on a key from https://mtdfacts.co.uk/api/key/checkout"
    },
    "security": [
     {
      "axionKey": []
     },
     {
      "axionOAuth": [
       "read",
       "bulk",
       "changes"
      ]
     }
    ]
   }
  },
  "/llms.txt": {
   "get": {
    "summary": "The corpus written for models: core facts, every page, every endpoint, dated",
    "parameters": [],
    "responses": {
     "200": {
      "description": "Plain text",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     }
    }
   }
  }
 },
 "x-service-info": {
  "name": "MTD Facts",
  "provider": "Axion Labs",
  "categories": [
   "data",
   "uk-tax",
   "making-tax-digital",
   "gov-uk"
  ],
  "contact": "hello@getaxionlabs.com",
  "auth": "https://mtdfacts.co.uk/auth.md",
  "a2a": "https://mtdfacts.co.uk/.well-known/agent-card.json"
 },
 "components": {
  "securitySchemes": {
   "axionKey": {
    "type": "http",
    "scheme": "bearer",
    "description": "An API key from https://mtdfacts.co.uk/agent/identity or https://mtdfacts.co.uk/api/key/free. Every free operation answers without one."
   },
   "axionOAuth": {
    "type": "oauth2",
    "flows": {
     "clientCredentials": {
      "tokenUrl": "https://mtdfacts.co.uk/oauth/token",
      "scopes": {
       "read": "every free endpoint (they answer without a token too)",
       "bulk": "/api/bulk, every answer with its sources in one pull",
       "changes": "/api/changes, what moved since a date"
      }
     }
    }
   }
  }
 }
}