ATF eRegulations API

A read-only JSON API over the ATF regulations in Title 27 of the Code of Federal Regulations — Parts 447, 478, 479, 555, 646 and 771 — served by ATF's eRegulations deployment. It exposes the full nested regulation text tree at any effective version, the Federal Register notices that amended it with their verbatim amendment instructions, version-to-version diffs, and full-text search. Every state of a regulation is identified by the Federal Register document number that produced it, so regulation text and rulemaking history join on a single key. Anonymous, free and unmetered; ATF publishes no OpenAPI for it, and the description in this repository was modeled by API Evangelist from live probes.

Operations 7

GET /regulation List every regulation part and effective version eRegulations holds #
GET /regulation/{part} List the effective versions of one CFR part #
GET /regulation/{part}/{version} Retrieve the full node tree for one version of a CFR part #
GET /notice List Federal Register notices affecting the ATF parts #
GET /notice/{documentNumber} Retrieve one Federal Register notice with its amendment instructions #
GET /diff/{part}/{older}/{newer} Difference between two versions of a CFR part #
GET /search Full-text search across regulation text #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/atf-eregulations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bureau-of-alcohol-tobacco-firearms-and-explosives-atf--eregulations-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: ATF eRegulations API
  version: '2026-09-05'
  summary: Read-only JSON API over ATF's eRegulations platform (27 CFR Parts 447, 478, 479, 555, 646, 771).
  description: >-
    Machine-readable description of the public JSON API served at
    https://regulations.atf.gov/api/. ATF runs the 18F/eRegulations stack
    (`regulations-core` + `regulations-site`, forked into the atfweb GitHub
    organization), which exposes its regulation tree, Federal Register notices,
    version diffs and full-text search over anonymous HTTP.

    PROVENANCE: ATF does not publish an OpenAPI document. This description was
    MODELED BY API EVANGELIST from live, unauthenticated probes of the endpoints
    listed below on 2026-09-05 — every path, parameter and response property here
    was observed in a real 200 response from regulations.atf.gov. Nothing was
    inferred from another agency's deployment and nothing was copied from a
    different host. It is a faithful description of an API ATF operates, not a
    contract ATF authored. Treat it as `generated`, never as `searched`.
  contact:
    name: Bureau of Alcohol, Tobacco, Firearms and Explosives
    url: https://www.atf.gov/contact
  license:
    name: U.S. Government Work (17 U.S.C. 105)
    url: https://www.usa.gov/government-works
x-generated-from: live probe of https://regulations.atf.gov/api/* on 2026-09-05
x-api-evangelist-modeled: true
x-upstream-project: https://github.com/atfweb/regulations-core
servers:
  - url: https://regulations.atf.gov/api
    description: ATF eRegulations production API (anonymous, no key)
tags:
  - name: Regulations
    description: The CFR part tree and its effective versions.
  - name: Notices
    description: Federal Register notices that amend the ATF parts.
  - name: Search
    description: Full-text search across regulation text.
  - name: Diffs
    description: Structural differences between two versions of a part.
paths:
  /regulation:
    get:
      operationId: listRegulationVersions
      tags: [Regulations]
      summary: List every regulation part and effective version eRegulations holds
      description: >-
        Returns every (regulation, version) pair loaded into the platform. `version`
        is the Federal Register document number that produced the text; `by_date`
        is the date that version took effect.
      responses:
        '200':
          description: Version list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionList'
  /regulation/{part}:
    get:
      operationId: listPartVersions
      tags: [Regulations]
      summary: List the effective versions of one CFR part
      parameters:
        - $ref: '#/components/parameters/Part'
      responses:
        '200':
          description: Version list scoped to one part
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionList'
  /regulation/{part}/{version}:
    get:
      operationId: getRegulationTree
      tags: [Regulations]
      summary: Retrieve the full node tree for one version of a CFR part
      description: >-
        Returns the whole regulation as a recursive node tree. Each node carries a
        `label` array (the hierarchical citation, e.g. ["478","11"]), the node
        `text`, a `node_type` (`regtext`, `subpart`, `section`, `paragraph`,
        `appendix`, …), an `lft` ordering key and its `children`.
      parameters:
        - $ref: '#/components/parameters/Part'
        - $ref: '#/components/parameters/Version'
      responses:
        '200':
          description: Regulation node tree
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegulationNode'
  /notice:
    get:
      operationId: listNotices
      tags: [Notices]
      summary: List Federal Register notices affecting the ATF parts
      parameters:
        - name: part
          in: query
          required: false
          description: Restrict to notices touching one CFR part (e.g. 478).
          schema:
            type: string
            examples: ['478']
      responses:
        '200':
          description: Notice list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoticeList'
  /notice/{documentNumber}:
    get:
      operationId: getNotice
      tags: [Notices]
      summary: Retrieve one Federal Register notice with its amendment instructions
      parameters:
        - name: documentNumber
          in: path
          required: true
          description: Federal Register document number, e.g. 2026-01141.
          schema:
            type: string
            examples: ['2026-01141']
      responses:
        '200':
          description: Notice detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Notice'
  /diff/{part}/{older}/{newer}:
    get:
      operationId: getVersionDiff
      tags: [Diffs]
      summary: Difference between two versions of a CFR part
      description: >-
        Returns a node-keyed map of changes. An empty object means the platform
        holds no computed diff between the two versions requested.
      parameters:
        - $ref: '#/components/parameters/Part'
        - name: older
          in: path
          required: true
          schema: { type: string, examples: ['2025-04872'] }
        - name: newer
          in: path
          required: true
          schema: { type: string, examples: ['2026-01141'] }
      responses:
        '200':
          description: Diff map, keyed by node label string
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
  /search:
    get:
      operationId: searchRegulationText
      tags: [Search]
      summary: Full-text search across regulation text
      parameters:
        - name: q
          in: query
          required: true
          description: Search terms. Required — omitting it returns HTTP 400.
          schema: { type: string, examples: ['firearm'] }
        - name: regulation
          in: query
          required: false
          description: Restrict results to one CFR part.
          schema: { type: string, examples: ['478'] }
        - name: version
          in: query
          required: false
          description: Restrict results to one effective version.
          schema: { type: string, examples: ['2026-01141'] }
        - name: page
          in: query
          required: false
          description: Zero-based page of results.
          schema: { type: integer, minimum: 0, examples: [1] }
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResults'
        '400':
          description: Missing or invalid query parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
components:
  parameters:
    Part:
      name: part
      in: path
      required: true
      description: >-
        CFR part number. eRegulations carries 447, 478, 479, 555, 646 and 771.
      schema:
        type: string
        enum: ['447', '478', '479', '555', '646', '771']
    Version:
      name: version
      in: path
      required: true
      description: Federal Register document number identifying the effective version.
      schema:
        type: string
        examples: ['2026-01141']
  schemas:
    VersionList:
      type: object
      required: [versions]
      properties:
        versions:
          type: array
          items:
            $ref: '#/components/schemas/RegulationVersion'
    RegulationVersion:
      type: object
      required: [version, by_date, regulation]
      properties:
        version:
          type: string
          description: Federal Register document number that produced this text.
          examples: ['2026-01141']
        by_date:
          type: string
          format: date
          description: Date the version became effective.
          examples: ['2026-01-22']
        regulation:
          type: string
          description: CFR part number.
          examples: ['478']
    RegulationNode:
      type: object
      required: [label, text, node_type, children]
      properties:
        label:
          type: array
          items: { type: string }
          description: Hierarchical citation, most significant element first.
          examples: [['478', '11']]
        text:
          type: string
        node_type:
          type: string
          description: Structural role of the node.
          examples: ['regtext', 'subpart']
        title:
          type: string
        lft:
          type: integer
          description: Left-edge ordering key for the nested-set tree.
        children:
          type: array
          items:
            $ref: '#/components/schemas/RegulationNode'
    NoticeList:
      type: object
      required: [results]
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/NoticeSummary'
    NoticeSummary:
      type: object
      required: [document_number, fr_url, publication_date]
      properties:
        document_number: { type: string, examples: ['2019-06266'] }
        effective_on: { type: string, format: date }
        publication_date: { type: string, format: date }
        fr_url:
          type: string
          format: uri
          description: Canonical federalregister.gov URL for the notice.
    Notice:
      type: object
      required: [document_number, cfr_parts, fr_url]
      properties:
        document_number: { type: string }
        title: { type: string }
        cfr_title: { type: integer }
        cfr_parts:
          type: array
          items: { type: string }
        fr_citation: { type: string }
        fr_volume: { type: integer }
        fr_url: { type: string, format: uri }
        publication_date: { type: string, format: date }
        effective_on: { type: string, format: date }
        comments_close: { type: string, format: date }
        primary_agency: { type: string }
        primary_docket: { type: string }
        dockets:
          type: array
          items: { type: string }
        regulation_id_numbers:
          type: array
          items: { type: string }
        versions:
          type: object
          additionalProperties: true
        amendments:
          type: array
          items:
            $ref: '#/components/schemas/Amendment'
        section_by_section:
          type: array
          items:
            type: object
            additionalProperties: true
        supporting_documents:
          type: array
          items:
            type: object
            additionalProperties: true
        footnotes:
          type: object
          additionalProperties: true
        meta:
          type: object
          additionalProperties: true
    Amendment:
      type: object
      properties:
        instruction:
          type: string
          description: The verbatim Federal Register amendment instruction.
        cfr_part: { type: string }
        authority: { type: string }
    SearchResults:
      type: object
      required: [total_hits, results]
      properties:
        total_hits: { type: integer, examples: [1596] }
        results:
          type: array
          items:
            $ref: '#/components/schemas/SearchHit'
    SearchHit:
      type: object
      properties:
        text: { type: string }
        label:
          type: array
          items: { type: string }
        label_string: { type: string, examples: ['478-113a'] }
        version: { type: string }
        regulation: { type: string }
        match_title: { type: string }
        paragraph_title: { type: string }
        section_title: { type: string }
        title: { type: string }
    ValidationError:
      type: object
      required: [reason]
      properties:
        reason:
          type: object
          description: Field name -> list of validation messages.
          additionalProperties:
            type: array
            items: { type: string }
      examples:
        - reason:
            q: ['Missing data for required field.']