> ## 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.

# A provision's full text

> The publisher's own text for one provision.

**Cost: 3 credits.** Refunded when we hold the provision and cannot reproduce
its text, because you asked for text and did not get it.

The text is sliced out of the act document by the character offsets stored with
each passage. It is never assembled by concatenating search passages: those
carry a retrieval header that we synthesized (`Act: ... | India | State | In
Force`), and serving that as statute would put our words inside a quotation of
the law.

**This text is as the publisher published it.** We do not apply amendments to
it. `GET /acts/{actId}/sections/{n}/history` lists every amendment we hold for
the provision, each with an `appliedStatus` saying whether it is reflected here.
It is not.



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/{act_id}/sections/{section_number}/body
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}/sections/{section_number}/body:
    get:
      tags:
        - Indian Acts & Legislation
      summary: A provision's full text
      description: >-
        The publisher's own text for one provision.


        **Cost: 3 credits.** Refunded when we hold the provision and cannot
        reproduce

        its text, because you asked for text and did not get it.


        The text is sliced out of the act document by the character offsets
        stored with

        each passage. It is never assembled by concatenating search passages:
        those

        carry a retrieval header that we synthesized (`Act: ... | India | State
        | In

        Force`), and serving that as statute would put our words inside a
        quotation of

        the law.


        **This text is as the publisher published it.** We do not apply
        amendments to

        it. `GET /acts/{actId}/sections/{n}/history` lists every amendment we
        hold for

        the provision, each with an `appliedStatus` saying whether it is
        reflected here.

        It is not.
      operationId: >-
        get_act_section_body_api_v1_in_acts__act_id__sections__section_number__body_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_number
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 40
            pattern: ^[A-Za-z0-9().\- ]{1,40}$
            description: >-
              Section number exactly as the publisher writes it. Alphanumeric
              suffixes are part of the number, not a sub-provision: `498A` is
              one section, not section 498 clause A.
            examples:
              - '23'
            title: Section Number
          description: >-
            Section number exactly as the publisher writes it. Alphanumeric
            suffixes are part of the number, not a sub-provision: `498A` is one
            section, not section 498 clause A.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActSectionBodyResponse'
              example:
                actId: IND_state_20326
                sectionNumber: '23'
                citation:
                  citation: The Maharashtra Value Added Tax Act, 2002., s. 23
                  citationShort: Maharashtra Value Added Tax Act, 2002., s. 23
                  displayPath: >-
                    The Maharashtra Value Added Tax Act, 2002. / Chapter V.
                    RETURNS AND ASSESSMENT, ETC. / s. 23
                  breadcrumb:
                    - type: chapter
                      num: V
                      label: Chapter V
                      name: RETURNS AND ASSESSMENT, ETC.
                text: >-
                  23. Assessment.—[6] [( _1_ ) Where a registered dealer fails
                  to file a return in respect of any period by the prescribed
                  date, the Commissioner may assess the dealer in respect of the
                  said period to the best of his judgment without serving a
                  notice for assess…
                available: true
                wordCount: 4449
                currency:
                  textIs: as_published
                  amendmentsApplied: false
                  amendmentEventsHeld: 44
                  note: >-
                    This is the publisher's published text. We do not apply
                    amendments to it, so it may not reflect changes recorded
                    against this provision. See GET
                    /acts/{actId}/sections/{n}/history.
                bodyProvenance:
                  chunksHeld: 16
                  contiguous: true
                  source: act_document
                  chunkIndexRange:
                    - 120
                    - 135
                  actTextUrl: >-
                    https://acts-india.vaquill.ai/IND_state_20326/act.normalized.txt
                  charStart: 128276
                  charEnd: 149776
                provenance:
                  sourceUrl: https://indiacode.gov.in/handle/123456789/568111
                  textUrl: >-
                    https://acts-india.vaquill.ai/IND_state_20326/act.normalized.txt
                  pdfUrl: https://acts-india.vaquill.ai/IND_state_20326/act.pdf
                meta:
                  processingTimeMs: 606
                  creditsConsumed: 3
        '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: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
components:
  schemas:
    ActSectionBodyResponse:
      properties:
        actId:
          type: string
          title: Actid
        sectionNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Sectionnumber
        citation:
          $ref: '#/components/schemas/Citation'
        text:
          anyOf:
            - type: string
            - type: 'null'
          title: Text
          description: >-
            The publisher's text for this provision, sliced from the act
            document by the stored character offsets. Never a concatenation of
            retrieval passages: those carry a synthesized header that is ours,
            not the publisher's.
        available:
          type: boolean
          title: Available
          description: >-
            Whether the provision's text could be reproduced. False with a
            `note` when we hold the provision and cannot serve its text; a null
            `text` alone cannot be told apart from an empty provision. A false
            answer here is refunded.
          examples:
            - true
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
          description: Why `available` is false, when it is.
        wordCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Wordcount
        currency:
          additionalProperties: true
          type: object
          title: Currency
          description: >-
            What this text is and is not. It is the publisher's published text;
            we do NOT apply amendments to it. See GET
            /acts/{actId}/sections/{n}/history.
        bodyProvenance:
          additionalProperties: true
          type: object
          title: Bodyprovenance
        provenance:
          $ref: '#/components/schemas/Provenance'
        meta:
          $ref: '#/components/schemas/Meta'
      type: object
      required:
        - actId
        - citation
        - available
        - currency
        - bodyProvenance
        - provenance
        - meta
      title: ActSectionBodyResponse
    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.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Citation:
      properties:
        citation:
          anyOf:
            - type: string
            - type: 'null'
          title: Citation
        citationShort:
          anyOf:
            - type: string
            - type: 'null'
          title: Citationshort
        displayPath:
          anyOf:
            - type: string
            - type: 'null'
          title: Displaypath
        breadcrumb:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Breadcrumb
      type: object
      title: Citation
      description: >-
        How to cite the thing this response is about.


        Present on 99.90% of served acts. Where the publisher's own title
        carries a

        defect, so does the citation: 10.4% of titles end in a period, which
        reads

        as `... Act., s. 3`, and 4.7% carry no year at all. Both are recorded

        defects rather than reasons to withhold the field.
    Provenance:
      properties:
        sourceUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourceurl
          description: The publisher's own page for this document, when it resolves.
        sourceUrlNote:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourceurlnote
          description: >-
            Why `sourceUrl` is absent, when it is. A named reason, because a
            bare null cannot be told apart from 'not applicable'.
        textUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Texturl
        pdfUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Pdfurl
      type: object
      title: Provenance
    Meta:
      properties:
        processingTimeMs:
          type: number
          title: Processingtimems
          description: >-
            Server-side time for this request in milliseconds, excluding network
            transit. Not billed on.
          default: 0
          examples:
            - 142.7
        creditsConsumed:
          type: number
          title: Creditsconsumed
          description: >-
            Credits actually charged. Read this rather than assuming the list
            price: refunded work bills 0.
          default: 0
          examples:
            - 2
      type: object
      title: Meta
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: vq_key_*
      description: >-
        API key issued from the developer dashboard. Pass as `Authorization:
        Bearer vq_key_...`

````