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

# What this provision points at

> Outbound citations: the other enactments this provision names, and the sections
of its own act it cross-refers to.

**Cost: 2 credits.** An empty result for a provision we hold IS the answer and
is charged; a provision we do not hold is refunded.

Act references are resolved to an `actId` where the title names something we
serve, and returned with `resolved: false` where it does not. That is the
honest split: the publisher names acts we may not hold, and a null id is a
coverage fact rather than a parse failure.

This route takes no query parameters and is not paged: one provision's own
outbound edges are a short list. `totalActs` and `totalSections` are the full
counts, and `truncated` says whether the row cap cut either list.



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/{act_id}/sections/{section_number}/references
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}/references:
    get:
      tags:
        - Indian Acts and Legislation
      summary: What this provision points at
      description: >-
        Outbound citations: the other enactments this provision names, and the
        sections

        of its own act it cross-refers to.


        **Cost: 2 credits.** An empty result for a provision we hold IS the
        answer and

        is charged; a provision we do not hold is refunded.


        Act references are resolved to an `actId` where the title names
        something we

        serve, and returned with `resolved: false` where it does not. That is
        the

        honest split: the publisher names acts we may not hold, and a null id is
        a

        coverage fact rather than a parse failure.


        This route takes no query parameters and is not paged: one provision's
        own

        outbound edges are a short list. `totalActs` and `totalSections` are the
        full

        counts, and `truncated` says whether the row cap cut either list.
      operationId: india_section_references
      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_17068
            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:
              - '79'
            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/ActReferencesResponse'
              example:
                actId: IND_state_17068
                sectionNumber: '79'
                citation:
                  citation: The Factories Act, 1948, s. 79
                  citationShort: Factories Act, s. 79
                  displayPath: The Factories Act, 1948 / Chapter VI. ``` / s. 79
                  breadcrumb:
                    - type: chapter
                      num: VI
                      label: Chapter VI
                      name: '```'
                acts:
                  - title: Industrial Disputes Act, 1947
                    actId: INC_554437
                    resolved: true
                sections:
                  - sectionNumber: '2'
                  - sectionNumber: '81'
                totalActs: 1
                totalSections: 4
                truncated: false
                matchBasis: publisher_title
                note: >-
                  Edges are matched on the act's TITLE as the publisher wrote
                  it, because that is what the corpus stores. A citing document
                  that spelled the title differently is not found, and the
                  publisher's own line breaks make this measurable: one act can
                  appear as two dist…
                meta:
                  processingTimeMs: 3905.5
                  creditsConsumed: 2
        '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: Unrecognised query parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
components:
  schemas:
    ActReferencesResponse:
      properties:
        actId:
          type: string
          title: Actid
        sectionNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Sectionnumber
        citation:
          $ref: '#/components/schemas/Citation'
        acts:
          items:
            $ref: '#/components/schemas/ReferencedAct'
          type: array
          title: Acts
          description: Other enactments this provision names.
        sections:
          items:
            $ref: '#/components/schemas/ReferencedSection'
          type: array
          title: Sections
          description: Sections of this act it cross-refers to.
        totalActs:
          type: integer
          title: Totalacts
          description: >-
            Distinct enactments this provision names, before the cap on rows.
            `acts` is shorter than this when the provision names more than the
            cap; `truncated` says so.
        totalSections:
          type: integer
          title: Totalsections
          description: Distinct own-act sections cross-referred, before the cap on rows.
        truncated:
          type: boolean
          title: Truncated
          description: >-
            True when either list was cut to the row cap. This route is not
            paged: one provision's own outbound edges are a short list, and the
            cap exists only so a malformed passage cannot return unbounded
            output.
        matchBasis:
          type: string
          title: Matchbasis
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
        meta:
          $ref: '#/components/schemas/Meta'
      type: object
      required:
        - actId
        - citation
        - totalActs
        - totalSections
        - truncated
        - matchBasis
        - meta
      title: ActReferencesResponse
    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.
    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.
    ReferencedAct:
      properties:
        title:
          type: string
          title: Title
          description: The act's title as the publisher wrote it.
        actId:
          anyOf:
            - type: string
            - type: 'null'
          title: Actid
          description: Resolved id, when the title names an act we serve.
        resolved:
          type: boolean
          title: Resolved
          description: >-
            False when the publisher names an act we do not hold. A coverage
            fact, not a parse failure.
      type: object
      required:
        - title
        - resolved
      title: ReferencedAct
    ReferencedSection:
      properties:
        sectionNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Sectionnumber
        sectionTitle:
          anyOf:
            - type: string
            - type: 'null'
          title: Sectiontitle
      type: object
      title: ReferencedSection
    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
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: vq_key_*
      description: >-
        API key issued from the developer dashboard. Pass as `Authorization:
        Bearer vq_key_...`

````