> ## Documentation Index
> Fetch the complete documentation index at: https://vaquill.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get amendment history

> Get the amendment history (footnotes) for an act.

**Authentication**: API key via `Authorization: Bearer vq_key_...`

**Cost**: 5 credits

Returns footnotes including substitutions, insertions, omissions, and notes.
Paginated — max 200 per request.



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/{act_id}/amendments
openapi: 3.1.0
info:
  title: Vaquill India API
  description: >-
    Public API for Indian primary law: Central and State Acts, the instruments
    of the principal regulators, and their individual sections.


    **Authentication**: Pass your API key via the `Authorization: Bearer
    vq_key_...` header. The same key works against the US API; the two share one
    credit balance.


    **Credits**: Each call costs API credits. See `GET
    /api/v1/api-credits/pricing` for the full pricing matrix.


    ## Coverage


    | Layer | Volume |

    |---|---|

    | Enactments (Central, State and UT) | 22,265 |

    | Individually addressable provisions | 1,098,577 |

    | Regulator instruments | roughly half the corpus |


    Regulators covered include SEBI, RBI, MCA, IRDAI, TRAI, DGFT, MOEFCC and
    CPCB.


    `sourceUrl` points at the publisher's own document where we hold a live one,
    and is `null` otherwise. India Code migrated hosts in August 2026 and
    re-minted its identifiers, so links into the old site no longer resolve; we
    return nothing rather than a link that 404s. `pdfUrl` and `textUrl` are
    served from our own mirror and are unaffected.


    ## Scope


    This document describes the **India** surface only. US statutes are a
    separate document at `/external/openapi.json`, so an MCP client configured
    here sees Indian tools and nothing else.
  version: 1.0.0
  contact:
    name: Vaquill API Support
    url: https://www.vaquill.ai
    email: support@vaquill.ai
  license:
    name: Proprietary
    url: https://www.vaquill.ai/terms
  termsOfService: https://www.vaquill.ai/terms
servers:
  - url: https://api.vaquill.ai
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/v1/in/acts/{act_id}/amendments:
    get:
      tags:
        - Indian Acts and Legislation
      summary: Get amendment history
      description: >-
        Get the amendment history (footnotes) for an act.


        **Authentication**: API key via `Authorization: Bearer vq_key_...`


        **Cost**: 5 credits


        Returns footnotes including substitutions, insertions, omissions, and
        notes.

        Paginated — max 200 per request.
      operationId: get_act_amendments_api_v1_in_acts__act_id__amendments_get
      parameters:
        - name: act_id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 200
            pattern: ^[a-zA-Z0-9_-]+$
            description: Act identifier, as returned by search, /list or /resolve.
            examples:
              - IND_state_20326
            title: Act Id
          description: Act identifier, as returned by search, /list or /resolve.
        - name: section
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                maxLength: 40
                pattern: ^[A-Za-z0-9().\- ]{1,40}$
              - type: 'null'
            description: >-
              Keep only footnotes attached to this section, written exactly as
              the publisher does. Alphanumeric suffixes are part of the number,
              not a sub-provision: `498A` is one section, not section 498 clause
              A.
            examples:
              - '23'
            title: Section
          description: >-
            Keep only footnotes attached to this section, written exactly as the
            publisher does. Alphanumeric suffixes are part of the number, not a
            sub-provision: `498A` is one section, not section 498 clause A.
        - name: type
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Amendment action class. Served in the NOMINAL spelling; the corpus
              stores the verbal form (`substituted`) and either is accepted.
              Values: `substitution`, `insertion`, `omission`, `renumbering`,
              `addition`, `repeal`, `deletion`, `adaptation`, `amendment`,
              `note`.
            examples:
              - substitution
            enum:
              - substitution
              - insertion
              - omission
              - renumbering
              - addition
              - repeal
              - deletion
              - adaptation
              - amendment
              - note
            title: Type
          description: >-
            Amendment action class. Served in the NOMINAL spelling; the corpus
            stores the verbal form (`substituted`) and either is accepted.
            Values: `substitution`, `insertion`, `omission`, `renumbering`,
            `addition`, `repeal`, `deletion`, `adaptation`, `amendment`, `note`.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            description: 1-based page number.
            examples:
              - 1
            default: 1
            title: Page
          description: 1-based page number.
        - name: pageSize
          in: query
          required: false
          schema:
            type: integer
            maximum: 200
            minimum: 1
            description: Results per page (1-200).
            examples:
              - 100
            default: 100
            title: Pagesize
          description: Results per page (1-200).
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActAmendmentsResponse'
              example:
                actId: IND_state_20326
                title: The Maharashtra Value Added Tax Act, 2002.
                totalFootnotes: 3
                footnotes:
                  - sectionNumber: '1'
                    sectionTitle: Short title, extent and commencement
                    footnoteId: 1
                    footnoteText: This sub-section was substituted by Mah. 14 of 2005, s. 2.
                    footnoteType: substitution
                    byAct: Mah. 14 of 2005
                  - sectionNumber: '10'
                    sectionTitle: Sales Tax Authorities
                    footnoteId: 1
                    footnoteText: >-
                      These words were substituted for the words "State
                      Government may appoint" by Mah. 8 of 2021, s. 22(1).
                    footnoteType: substitution
                    byAct: Mah. 8 of 2021
                    originalText: State Government may appoint
                typeCounts:
                  substitution: 3
                page: 1
                pageSize: 3
                hasMore: true
                meta:
                  processingTimeMs: 448.9
                  creditsConsumed: 5
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '402':
          description: Insufficient credits
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '403':
          description: Key lacks the research:read scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '404':
          description: No such act or provision
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '422':
          description: Malformed or unknown request field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
components:
  schemas:
    ActAmendmentsResponse:
      properties:
        actId:
          type: string
          title: Actid
        title:
          type: string
          title: Title
        totalFootnotes:
          type: integer
          title: Totalfootnotes
          description: >-
            Footnotes on THIS page, not in the act. Paging is by
            `page`/`pageSize`, so this equals `pageSize` on a full page.
        footnotes:
          items:
            $ref: '#/components/schemas/FootnoteItem'
          type: array
          title: Footnotes
        typeCounts:
          additionalProperties:
            type: integer
          type: object
          title: Typecounts
        page:
          type: integer
          title: Page
          default: 1
        pageSize:
          type: integer
          title: Pagesize
          default: 100
        hasMore:
          type: boolean
          title: Hasmore
          description: True when a further page of footnotes exists.
          default: false
        meta:
          $ref: '#/components/schemas/ActMeta'
      type: object
      required:
        - actId
        - title
        - totalFootnotes
        - footnotes
        - typeCounts
      title: ActAmendmentsResponse
    ApiDetailError:
      properties:
        detail:
          type: string
          title: Detail
          description: >-
            Human-readable reason, safe to surface to an end user. Branch on the
            HTTP status rather than on this string: the wording is not part of
            the contract and may be reworded, but 401 (bad key), 402 (out of
            credits), 403 (missing scope), 404 (no such resource) and 429 (rate
            limited) are stable.
          examples:
            - Insufficient API credits.
      type: object
      required:
        - detail
      title: ApiDetailError
      description: |-
        Error envelope the API actually returns.

        All errors (401/402/403/404/422/429/5xx) come back as a single
        `detail` string (FastAPI default), e.g. `{"detail": "Insufficient API
        credits."}`. Documenting the real shape so client code can rely on it.
    FootnoteItem:
      properties:
        sectionNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Sectionnumber
        sectionTitle:
          anyOf:
            - type: string
            - type: 'null'
          title: Sectiontitle
        footnoteId:
          anyOf:
            - type: integer
            - type: 'null'
          title: Footnoteid
        footnoteText:
          type: string
          title: Footnotetext
        footnoteType:
          type: string
          title: Footnotetype
          description: substitution, insertion, omission, note, renumbering
        byAct:
          anyOf:
            - type: string
            - type: 'null'
          title: Byact
        originalText:
          anyOf:
            - type: string
            - type: 'null'
          title: Originaltext
        effectiveDate:
          anyOf:
            - type: string
            - type: 'null'
          title: Effectivedate
          description: >-
            Date the amendment took effect, as `YYYY-MM-DD`, or null when the
            publisher's footnote does not state one we can read without
            guessing. See `effectiveDateRaw`.
        effectiveDateRaw:
          anyOf:
            - type: string
            - type: 'null'
          title: Effectivedateraw
          description: >-
            The date exactly as the footnote gives it, present when it differs
            from `effectiveDate`. Footnotes carry prose ('1st April 2017') and
            day-first numerals ('24-10-2019').
      type: object
      required:
        - footnoteText
        - footnoteType
      title: FootnoteItem
    ActMeta:
      properties:
        processingTimeMs:
          type: number
          title: Processingtimems
          description: >-
            Server-side time in milliseconds, excluding network transit. Not
            billed on.
          default: 0
          examples:
            - 315
        creditsConsumed:
          type: number
          title: Creditsconsumed
          description: >-
            Credits ACTUALLY charged for this call. Read this rather than
            assuming the list price: refunded work bills 0.
          default: 0
          examples:
            - 3
      type: object
      title: ActMeta
      description: >-
        What this call cost and how long it took.


        🔴 Added 2026-09-06. Five of the six original routes returned NO
        statement

        of what they billed: `/text` (3 credits), `/amendments` (5), `/list`
        (1),

        `/filters` (0) and `/corresponding-provisions` (1). The house rule on
        the

        US surface is that `creditsConsumed` is the CONTRACT and the list price
        is

        not, and it matters most exactly where refunds happen -- `/text` refunds
        on

        a missing act, `/corresponding-provisions` refunds when a mapping does
        not

        exist yet. Without this field a caller cannot tell a refunded call from
        a

        charged one, and has to reconcile against the ledger to find out.
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: vq_key_*
      description: >-
        API key issued from the developer dashboard. Pass as `Authorization:
        Bearer vq_key_...`

````