US Statutes

Get this section's change history

Changed on

Every change our refreshes have observed to one section: when it was added, each time its text was replaced, and whether it has since been removed.

Cost: 1 credit. Not-found and failed lookups are not charged. An empty history for a section that exists IS the answer and is charged.

A section lookup tells you what the law says today. This tells you whether that is the same thing it said when you last reviewed it. Unlike a board watch, which can only show changes that postdate the subscription, this reads the history already captured.

What this is, and is not. These are OBSERVED changes: a refresh compared the source against the copy we held and found it different. detectedAt is when we saw it, an upper bound on when it took effect, never the effective date itself. For the publisher's own effective and amendment dates, read amendmentHistory on GET /us/statutes/section/{act_id}. The two are complements: the publisher tells you what it says changed, this tells you what actually moved and when we could have told you.

Coverage is bounded by capture, not by the age of the law. Change capture began long after the corpus itself did, it is per-source, and events are swept at 5 years. An empty changes list therefore means no captured change, not never amended. The coverage field on every response says so; surface it rather than rendering an empty list as "unchanged".

This is not legislative history. It lists only changes Vaquill's own refreshes recorded. For the acts that amended a section over the years read GET /us/statutes/section/{act_id}/enactments (state session laws, where supported) and amendmentHistory on the section record. When the log is empty, note says so and points there.

A removed section still answers. When the newest change is a removed, the section is gone from the corpus and section comes back null. That is a successful, charged response, not a 404 -- learning that a provision was repealed is the point.

Paging. hasMore is true only when at least one more change sits behind this page (the route reads one row past limit to know). total is the size of this page, not a corpus-wide count. Walk backwards through history with beforeId (the smallest id you hold) and forward into new changes with sinceId (cursor from your last page). sinceId always pages oldest-first (it implies order=asc, whatever order says), so a cursor walk never skips the middle of a gap; cursor is the highest id on the page. captureBeganAt is when capture began for the section's whole source, and note says when the publisher's amendmentYears pre-date it.

Alerting on future changes is a different surface: subscribe to the corpusType on this response via POST /boards/watches, optionally scoped to this exact actId, and take before/after diff text from the watch's own diff endpoint.

get/api/v1/us/statutes/section/{act_id}/changes

Request

Path parameters

act_idstring required

Section identifier, e.g. USC_T42_C21_S1983 (42 U.S.C. § 1983). Take it from a /us/statutes/search, /resolve or /divisions result; do not assemble one. A citation such as 42 USC 1983 also works and adds the /resolve price (see GET /us/statutes/section/{actId}). State session laws (SSL_ ids) are read at /us/session-laws/{sessionLawId}.

Example:CFR_T21_P314_S314_50

Query parameters

limitinteger

Max changes to return on this page.

Example:50
sinceIdinteger nullable

Return only changes with an id greater than this: the cursor for polling forward into new changes. Implies order=asc: a forward cursor read newest-first would return the newest limit rows and skip the ones between. Ids are a monotonic sequence, so this is exact, immune to clock skew, and cannot drop two changes that share a timestamp. Carry cursor forward.

beforeIdinteger nullable

Return only changes with an id less than this: the cursor for walking BACK through history, which is what a newest-first reader needs. Pass the smallest id on your last page.

changeKindstring[] nullable

Filter to these kinds. Repeat the parameter to pass several (?changeKind=amended&changeKind=removed). Omit for all three.

order'asc' | 'desc'

desc (default) is newest first, the natural reading order for a history. Use asc to replay a section's life forward, or when catching up from a cursor.

Headers

Idempotency-Keystring nullable

Optional. 16 to 255 visible ASCII characters (a UUIDv4 works). Repeating the same request with the same key replays the original 2xx response for 24 hours without charging again. The same key on a different request is rejected. With the account's cacheQueryDerivedData retention setting off, no body is stored and a retry answers 409 idempotency_replay_unavailable, still without a second charge.

Example:3f9c2a1e-7b44-4d0a-9c1e-5a6b7c8d9e0f

Response

The section's captured change history, newest first.

actIdstring required

The act_id of the section served. Equal to your request unless resolvedFrom is set, in which case it is the id your citation or cleaned-up input resolved to.

totalinteger

Size of changes on this page, not a corpus-wide count: it is capped by limit.

hasMoreboolean

True only when at least one more change sits behind this page: the route reads one row past limit, so a section with exactly limit changes answers false. Page with beforeId (walking back) or sinceId (walking forward) rather than by raising limit.

cursorinteger nullable

Highest id on this page, or null when the page is empty. Carry it into sinceId to poll for what is new; keep the one you hold when a page comes back empty.

observedFromstring nullable

The earliest change we ever captured for this section: the OBSERVATION HORIZON this history sits on. Read it before treating an empty or short list as the section's full history.

Null means we have never captured a change for this section, so an empty changes list is not evidence that it is stable. A non-null value with an empty list means your filters or cursor excluded everything we hold, which is a different answer.

coverage states the same caveat in prose. This is the fact behind it, and it is the same field, meaning the same thing, as asOf.observedFrom on GET /section/{actId}/body.

captureBeganAtstring nullable

When change capture began for this section's whole CORPUS: the earliest change event we hold for any section of the same source. observedFrom is the horizon for this one section; this is the horizon for its source, and it is what tells an empty changes list ('capture had begun and nothing moved') from 'capture began after the amendments you care about'. Null when it could not be determined (for example no event has ever been captured for the source).

coveragestring required

What this history can and cannot tell you, in one sentence. Change capture began well after the corpus itself did and is swept on a retention window, so this endpoint reports the changes we OBSERVED in that window, never the section's full legislative history. Read it before treating an empty list as 'unchanged'.

notestring nullable

Present when the first (unfiltered) page of the log is empty: says that the log covers only changes Vaquill's own refreshes recorded, not legislative history, and points to the section record's amendmentHistory and, for a state section, GET /us/statutes/section/{actId}/enactments (state session laws only). Also present, even on a non-empty first page, when the publisher's amendmentYears include years that pre-date captureBeganAt: those amendments are real but are not in this log. Null when you are paging with a cursor or a filter.

processingTimeMsnumber

Server-side time for this request in milliseconds, excluding network transit. Useful for spotting a slow query; not billed on.

creditsConsumednumber

Credits actually charged for this call. Read it rather than assuming the list price: failed and refunded work bills 0.

Example response

{
  "actId": "CFR_T21_P314_S314_50",
  "section": {
    "source": "sct",
    "body": "(a) If within a reasonable time after written or oral notice...",
    "bodyUnavailable": true,
    "bodyUnavailableReason": "image_only_source",
    "bodyNote": "fetch_failed",
    "matchContexts": [
      {
        "text": "(a) An employer shall not retaliate against an employee who files a complaint",
        "highlights": [
          [
            7,
            15
          ],
          [
            26,
            35
          ]
        ]
      }
    ],
    "renumberedTo": "self:4651",
    "renumberedToLabel": "section 10105 of Title 34",
    "transferredTo": "34:10105",
    "transferredToLabel": "section 10105 of Title 34",
    "issueDate": "1999-05-25",
    "statutoryAuthority": [
      {
        "display": "15 U.S.C. 78o",
        "section": "78o",
        "title": 15,
        "type": "usc"
      }
    ],
    "implementingRegulations": [
      {
        "cfrTitle": 17,
        "display": "17 CFR Part 240",
        "part": "240",
        "partName": "General Rules"
      }
    ],
    "rescindedOn": "2016-07-01",
    "pendingAdoptions": [
      {
        "agency": "Department of Financial Services",
        "effectiveDate": "2026-09-23",
        "idNo": "DFS-23-26-00013-A",
        "issueDate": "2026-09-23",
        "scope": "part"
      }
    ],
    "adoptedAfterCurrentThrough": true,
    "responseBounds": {
      "truncated": true,
      "fields": [
        {
          "field": "publicLaws",
          "unit": "items",
          "total": 190,
          "returned": 50,
          "nextOffset": 50
        }
      ]
    },
    "effectiveDate": "2002-11-25",
    "effectiveDateRaw": "September 8, 1916",
    "historyEffectiveDate": "2009-06-19",
    "priorEffectiveDates": [
      "2004-12-17",
      "2012-11-01"
    ],
    "pendingAmendments": [
      {
        "id": "FRULES_FRCP_R26_P2027",
        "status": "approved_by_standing_committee",
        "cycle": 2027,
        "effectiveDate": "2027-12-01",
        "commentPeriodEnd": "2026-02-16",
        "sourceUrl": "https://www.uscourts.gov/rules-policies/pending-rules-and-forms-amendments",
        "textComplete": true,
        "commentDocketIds": [
          "USC-RULES-CV-2025-0004"
        ]
      }
    ],
    "abstract": "This regulation extends time-limited tolerances for pesticides.",
    "agencies": [
      "Environmental Protection Agency"
    ],
    "agencySlugs": [
      "environmental-protection-agency"
    ],
    "topics": [
      "Environmental protection",
      "Pesticides and pests"
    ],
    "documentTypeLabel": "Rule",
    "documentSubtype": "Proclamation",
    "action": "Final rule.",
    "president": "George W. Bush",
    "signingDate": "2026-04-02",
    "executiveOrderNumber": "14179",
    "proclamationNumber": "10886",
    "instrumentNumberSource": "derived_from_text",
    "datesText": "This regulation is effective December 14, 2001.",
    "frVolume": 66,
    "frStartPage": 64768,
    "frEndPage": 64775,
    "wordCount": 6271,
    "issuingAgency": "Pollution Control Board",
    "adoptingCitations": [
      "37 Ill. Reg. 16539"
    ],
    "lawImplemented": "Section 4656.1, Public Resources Code",
    "lastAmendedDate": "2013-10-04",
    "amendmentNote": "Amended at 37 Ill. Reg. 16539, effective October 4, 2013",
    "currencyYear": 2025,
    "reviewDate": "11/1/2028",
    "originalEnactmentDate": "1934-06-27",
    "originalEnactmentDateRaw": "June 27, 1934",
    "releaseDate": "2018-06-14",
    "documentNumber": "21-CA-211066",
    "caseName": "Dunn-Edwards Corp.",
    "forum": "Administrative Proceeding",
    "court": "U.S. District Court for the District of Massachusetts",
    "relatedDocuments": [
      "Consent Order",
      "Stipulation"
    ],
    "settlementAmount": "$16,500",
    "requesters": [
      "Preece, Inc."
    ],
    "program": "Old-Age and Survivors Insurance",
    "languageCode": "es",
    "volume": 1,
    "articleNumber": "1",
    "articleName": "Declaration of Rights",
    "ruleSetCode": "NDSUPCTADMINR",
    "edition": "2025",
    "relatedCitations": [
      "RCW 28A.150.290"
    ],
    "supersessionActions": {
      "modifies": [
        "Rev. Proc. 2011-47"
      ]
    },
    "subtitle": "11",
    "subtitleName": "AIR QUALITY",
    "publisherKey": "430000000310400000000000000000000",
    "versionId": "11948",
    "referencedShortTitles": [
      "Driftnet Modernization and Bycatch Reduction Act"
    ],
    "subjectNumber": "47",
    "audience": "All Persons Engaged in Marketing",
    "sourceCharStart": 263194,
    "sourceCharEnd": 264198,
    "matchSegment": "note",
    "matchNoteYear": 1993,
    "alternateCitations": [
      "4 L.P.R.A. § 2077"
    ],
    "expirationDate": "2029-03-01",
    "expirationDateRaw": "03-01-2029",
    "sourcePageStart": 114,
    "sourcePageEnd": 114,
    "displayLabel": "MPEP § 2165.03",
    "publicationDate": "2001-12-14",
    "topLevelTitle": "Title 9: Criminal",
    "externalUrl": "https://www.mass.gov/regulations/240-CMR-200-licensure-of-cosmetologists",
    "sourceUrl": "https://www.mass.gov/regulations/240-CMR-200-licensure-of-cosmetologists"
  },
  "changes": [
    {
      "id": 91,
      "changeKind": "amended",
      "detectedAt": "2026-08-07T04:10:00Z",
      "citation": "21 CFR 314.50",
      "displayCitation": "21 C.F.R. § 314.50",
      "title": "Content and format of an NDA",
      "corpusType": "cfr",
      "state": "wa"
    }
  ],
  "total": 3,
  "cursor": 91,
  "observedFrom": "2026-08-14T04:10:00Z",
  "captureBeganAt": "2026-06-18T04:10:00Z",
  "coverage": "Observed changes only, from when capture began for this source through today, retained 5 years. Not a full legislative history.",
  "note": "No change to this section has been captured. This log only covers changes Vaquill's own refreshes observed.",
  "resolvedFrom": {
    "input": "26 U.S.C. § 1",
    "actId": "USC_T26_C1_S1",
    "via": "citation",
    "subsection": "(h)(11)",
    "matchLevel": "container",
    "container": {
      "kind": "chapter",
      "label": "U.S. Const. art. III",
      "childCount": 12,
      "children": [
        {
          "actId": "CONST_US_A3_S1",
          "citation": "U.S. Const. art. III, § 1",
          "status": "in_force"
        }
      ]
    },
    "repair": {
      "kind": "code_name",
      "cited": "Jud. Ct. Acts Law",
      "interpretedAs": "N.Y. Judiciary Law § 475",
      "alternatives": [
        {
          "actId": "STATE_NY_FCT_S475",
          "citation": "N.Y. Fam. Ct. Act § 475"
        }
      ]
    },
    "registerReference": {
      "citation": "36 Pa. Bull. 510",
      "state": "il",
      "kind": "page",
      "ruleCount": 2
    }
  },
  "processingTimeMs": 18.4,
  "creditsConsumed": 1
}

Changes

    • warning

      added the new response_size_cap enum value to the /// response property for the response status

    • info

      added the non-success response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status

    • info

      the response property // became required for the status