{
  "name": "EMFBase access and licensing",
  "url": "https://emfbase.com/access",
  "dataVersion": "2026.08.1",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/"
  },
  "contact": "data@emfbase.com",
  "summary": "Open, unauthenticated access to every record. Bulk and integration licences by agreement. API keys and pay-per-crawl are designed but not implemented — no request is authenticated, metered or refused today.",
  "live": {
    "authentication": "None. Every endpoint is public and anonymous, and no endpoint reads an Authorization header.",
    "rate-limits": "None enforced. Treat 5 requests per second as the fair-use ceiling, prefer the bulk export to walking every record, and honour the hour-long cache-control on responses.",
    "cors": "Access-Control-Allow-Origin: * on every JSON, Markdown and CSV response, so the API can be called from a browser.",
    "versioning": "Responses carry x-data-version (currently 2026.08.1) and x-data-license headers. Record ids are stable; a value can change when the underlying regulation does.",
    "attribution": "CC BY 4.0: attribute as \"EMFBase (https://emfbase.com), dataset version 2026.08.1\" and keep each value's citations with it. Values are transcribed from cited primary documents — reference data, not legal or medical advice.",
    "corrections": "Email data@emfbase.com with the record id and the primary document. Each record names its sources so a correction can be checked rather than argued."
  },
  "tiers": [
    {
      "id": "open",
      "name": "Open access",
      "status": "available",
      "audience": "Humans, assistants, and anyone building on the data at ordinary volumes.",
      "includes": [
        "Every HTML page, Markdown twin, JSON record and collection endpoint",
        "Search, unit conversion and free-space exposure estimates",
        "Per-collection CSV and whole-dataset JSON exports",
        "OpenAPI description, MCP endpoint, llms.txt and JSON Feed"
      ],
      "terms": "No key, no account, no registration. Licensed CC BY 4.0: use it commercially, but attribute EMFBase with the record id and the canonical URL, and keep the citations attached to the values. Responses are cached for an hour; read from the cache rather than re-requesting."
    },
    {
      "id": "snapshot",
      "name": "Versioned snapshots",
      "status": "available",
      "audience": "Teams that need a fixed dataset a result can be reproduced against.",
      "includes": [
        "Whole-dataset export tagged with a dataset version (currently 2026.08.1)",
        "Per-record lastVerified date and the source register in the same file",
        "Change feed to detect which records moved between versions"
      ],
      "terms": "Pin the version you evaluated against and re-read the feed before treating a cached value as current. Record ids are stable across versions; values, notes and citations can change when a regulation changes."
    },
    {
      "id": "bulk",
      "name": "Bulk and integration licence",
      "status": "on-request",
      "audience": "Products embedding the dataset at scale: exposure calculators, compliance tooling, retrieval corpora, or a private copy behind a firewall.",
      "includes": [
        "Scheduled deliveries of the full dataset in JSON, CSV or Parquet",
        "Change-only deltas keyed by record id and version",
        "Named-contact corrections channel with an agreed response time",
        "Written provenance statement covering how each value is sourced and verified"
      ],
      "terms": "Priced per case and agreed in writing — email data@emfbase.com with the volume, the delivery format and the cadence you need. Nothing is metered or enforced in code today."
    },
    {
      "id": "api-keys",
      "name": "API keys and quotas",
      "status": "planned",
      "audience": "High-volume automated consumers, once volume makes a quota necessary.",
      "includes": [
        "Optional key sent as an Authorization: Bearer header, never in a query string",
        "Per-key quota and burst allowance returned in RateLimit response headers",
        "429 with Retry-After when a quota is exhausted, and per-key usage reporting"
      ],
      "terms": "Not implemented. No endpoint accepts, requires or validates a key today, and no request is rate-limited or refused. When keys ship, open access to records stays free and unauthenticated — a key will raise a quota, not unlock the data."
    },
    {
      "id": "pay-per-crawl",
      "name": "Pay-per-crawl",
      "status": "planned",
      "audience": "Crawlers taking the whole corpus for model training or a commercial index.",
      "includes": [
        "HTTP 402 Payment Required at the edge for identified commercial crawlers",
        "A price per crawl declared at the edge rather than negotiated per company",
        "Crawlers serving end-user answers with attribution stay on the free path"
      ],
      "terms": "Not implemented, and it is an edge-network configuration rather than application code — robots.txt currently allows every crawler because being read by assistants is the point of the project. The bulk export exists so that a crawler never needs to walk 300 pages to get the dataset."
    }
  ]
}