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

# Browse and discover acts

> Browse Indian acts, regulations and legislation with filters.

Use this endpoint to **discover act IDs** for the other routes here.

⚠️ **This browse does not cover the whole corpus.** It enumerates about 22,000
acts from a legacy index, while search and the act routes serve about 64,000.
An act absent from this listing may still be held: confirm with
`POST /acts/search`, and see `GET /acts/coverage` for what the corpus contains.
Every response repeats this in `note`.

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

**Cost**: 1 credit

Filter by category (central, state, regulatory, repealed, spent), state,
department, year range, and act status. Sort by year, title, or popularity.



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/list
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/list:
    get:
      tags:
        - Indian Acts & Legislation
      summary: Browse and discover acts
      description: >-
        Browse Indian acts, regulations and legislation with filters.


        Use this endpoint to **discover act IDs** for the other routes here.


        ⚠️ **This browse does not cover the whole corpus.** It enumerates about
        22,000

        acts from a legacy index, while search and the act routes serve about
        64,000.

        An act absent from this listing may still be held: confirm with

        `POST /acts/search`, and see `GET /acts/coverage` for what the corpus
        contains.

        Every response repeats this in `note`.


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


        **Cost**: 1 credit


        Filter by category (central, state, regulatory, repealed, spent), state,

        department, year range, and act status. Sort by year, title, or
        popularity.
      operationId: list_acts_api_v1_in_acts_list_get
      parameters:
        - name: category
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Jurisdictional class.
            examples:
              - central
            enum:
              - central
              - state
              - regulatory
              - repealed
              - spent
            title: Category
          description: Jurisdictional class.
        - name: state
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: Jurisdiction slug. `central` is a value here.
            examples:
              - maharashtra
            enum:
              - andaman-and-nicobar-islands
              - andaman-nicobar
              - andhra-pradesh
              - arunachal-pradesh
              - assam
              - bihar
              - central
              - chandigarh
              - chhattisgarh
              - dadra-and-nagar-haveli-and-daman-and-diu
              - dadra-nagar-haveli
              - delhi
              - goa
              - gujarat
              - haryana
              - himachal-pradesh
              - jammu-and-kashmir
              - jammu-kashmir
              - jharkhand
              - karnataka
              - kerala
              - ladakh
              - lakshadweep
              - madhya-pradesh
              - maharashtra
              - manipur
              - meghalaya
              - mizoram
              - nagaland
              - odisha
              - puducherry
              - punjab
              - rajasthan
              - sikkim
              - tamil-nadu
              - telangana
              - tripura
              - uttar-pradesh
              - uttarakhand
              - west-bengal
            title: State
          description: Jurisdiction slug. `central` is a value here.
        - name: department
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Issuing body. Free text rather than a list: 943 distinct values,
              mixing regulator slugs with state department names. See GET
              /acts/filters.
            examples:
              - sebi
            title: Department
          description: >-
            Issuing body. Free text rather than a list: 943 distinct values,
            mixing regulator slugs with state department names. See GET
            /acts/filters.
        - name: yearFrom
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Minimum year (inclusive)
            title: Yearfrom
          description: Minimum year (inclusive)
        - name: yearTo
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Maximum year (inclusive)
            title: Yearto
          description: Maximum year (inclusive)
        - name: status
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: The publisher's lifecycle status for the act.
            examples:
              - repealed
            enum:
              - in_force
              - repealed
              - superseded
              - spent
            title: Status
          description: The publisher's lifecycle status for the act.
        - name: search
          in: query
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 2
                maxLength: 200
              - type: 'null'
            description: Filter by title substring
            title: Search
          description: Filter by title substring
        - name: sort
          in: query
          required: false
          schema:
            type: string
            description: >-
              Sort order. `popular` is DEPRECATED and behaves as `year_desc`: it
              ordered by a read counter held only in the retired store.
            examples:
              - title_asc
            enum:
              - year_desc
              - year_asc
              - title_asc
              - title_desc
              - popular
            default: year_desc
            title: Sort
          description: >-
            Sort order. `popular` is DEPRECATED and behaves as `year_desc`: it
            ordered by a read counter held only in the retired store.
        - name: page
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            description: Page number
            default: 1
            title: Page
          description: Page number
        - name: pageSize
          in: query
          required: false
          schema:
            type: integer
            maximum: 100
            minimum: 1
            description: Results per page (1-100)
            default: 50
            title: Pagesize
          description: Results per page (1-100)
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActListResponse'
              example:
                results:
                  - actId: IND_central_21049
                    title: The &quot;Tribhuvan&quot; Sahkari University Act, 2025
                    year: 2025
                    category: central
                    state: central
                    department: ''
                    actNumber: ''
                    actStatus: in_force
                    enactmentDate: ''
                  - actId: IND_central_21919
                    title: The Bills of Lading Act, 2025
                    year: 2025
                    category: central
                    state: central
                    department: ''
                    actNumber: ''
                    actStatus: in_force
                    enactmentDate: ''
                total: 12
                page: 1
                pageSize: 3
                hasMore: true
                meta:
                  processingTimeMs: 460.3
                  creditsConsumed: 1
                note: >-
                  This listing enumerates about 22,000 acts from a legacy index,
                  while search and the act routes serve about 64,000. An act
                  missing here may still be held: confirm with POST
                  /acts/search, and see GET /acts/coverage for what the corpus
                  actually contains.
        '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:
    ActListResponse:
      properties:
        results:
          items:
            $ref: '#/components/schemas/ActListItem'
          type: array
          title: Results
        total:
          type: integer
          title: Total
        page:
          type: integer
          title: Page
        pageSize:
          type: integer
          title: Pagesize
        hasMore:
          type: boolean
          title: Hasmore
        meta:
          $ref: '#/components/schemas/ActMeta'
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
          description: >-
            Always set on this endpoint, stating that the listing covers a
            subset of the corpus. A gap a caller can see is not the same as one
            they cannot.
      type: object
      required:
        - results
        - total
        - page
        - pageSize
        - hasMore
      title: ActListResponse
    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.
    ActListItem:
      properties:
        actId:
          type: string
          title: Actid
        title:
          type: string
          title: Title
        year:
          anyOf:
            - type: integer
            - type: 'null'
          title: Year
        category:
          anyOf:
            - type: string
            - type: 'null'
          title: Category
        state:
          anyOf:
            - type: string
            - type: 'null'
          title: State
        department:
          anyOf:
            - type: string
            - type: 'null'
          title: Department
        actNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Actnumber
        actStatus:
          anyOf:
            - type: string
            - type: 'null'
          title: Actstatus
        enactmentDate:
          anyOf:
            - type: string
            - type: 'null'
          title: Enactmentdate
      type: object
      required:
        - actId
        - title
      title: ActListItem
      description: Lightweight act summary for browsing and discovery.
    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_...`

````