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

# Rules and notifications made under this act

> Subordinate instruments the publisher records as made under this act: rules,
regulations, notifications and orders.

**Cost: 2 credits.** An act with no subordinate instruments on record is the
answer and is charged.

🔴 Resolved by the parent's TITLE. The stored `parent_act_id` is unusable: all
35,502 values are India Code's own identifiers and none is an `act_id` in this
corpus, so a hard link would resolve to nothing. Title matching reaches a
served parent for about 85.8% of the instruments that name one, and
`matchBasis` says so on every response.

We serve 37,013 subordinate instruments and, before this route, no way to walk
from a parent act to any of them.

Paged with `page` + `pageSize`. `total` counts distinct INSTRUMENTS across all
pages, not the rows on this page (`returned`) and not matching passages: the
Environment (Protection) Act, 1986 matches 8,047 passages.



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/{act_id}/subordinate
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}/subordinate:
    get:
      tags:
        - Indian Acts and Legislation
      summary: Rules and notifications made under this act
      description: >-
        Subordinate instruments the publisher records as made under this act:
        rules,

        regulations, notifications and orders.


        **Cost: 2 credits.** An act with no subordinate instruments on record is
        the

        answer and is charged.


        🔴 Resolved by the parent's TITLE. The stored `parent_act_id` is
        unusable: all

        35,502 values are India Code's own identifiers and none is an `act_id`
        in this

        corpus, so a hard link would resolve to nothing. Title matching reaches
        a

        served parent for about 85.8% of the instruments that name one, and

        `matchBasis` says so on every response.


        We serve 37,013 subordinate instruments and, before this route, no way
        to walk

        from a parent act to any of them.


        Paged with `page` + `pageSize`. `total` counts distinct INSTRUMENTS
        across all

        pages, not the rows on this page (`returned`) and not matching passages:
        the

        Environment (Protection) Act, 1986 matches 8,047 passages.
      operationId: india_act_subordinate
      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: 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:
            anyOf:
              - type: integer
                maximum: 100
                minimum: 1
              - type: 'null'
            description: Rows per page (1-100). Defaults to 25.
            examples:
              - 25
            title: Pagesize
          description: Rows per page (1-100). Defaults to 25.
        - name: limit
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
                maximum: 100
                minimum: 1
              - type: 'null'
            description: >-
              DEPRECATED alias for `pageSize`, kept working for clients written
              against the original shape. Send one or the other, not both.
            deprecated: true
            examples:
              - 25
            title: Limit
          description: >-
            DEPRECATED alias for `pageSize`, kept working for clients written
            against the original shape. Send one or the other, not both.
          deprecated: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActSubordinateResponse'
              example:
                actId: IND_state_17068
                title: The Factories Act, 1948
                citation: The Factories Act, 1948
                children:
                  - actId: INC_570455
                    title: The Maharashtra Factories Rules, 1963
                    citation: The Maharashtra Factories Rules, 1963, s. 3
                    year: 1948
                    actStatus: in_force
                  - actId: INC_601336
                    title: Tripura Factories Rules, 2007
                    citation: Tripura Factories Rules, 2007, s. 11
                    year: 1948
                    actStatus: in_force
                total: 12
                totalIsExact: true
                returned: 3
                page: 1
                pageSize: 3
                hasMore: true
                truncated: true
                matchBasis: parent_act_name
                note: >-
                  Resolved by the parent act's title. The stored parent
                  identifier is the publisher's own and does not address this
                  corpus, so an instrument whose parent name differs from the
                  act's title is not found. Measured, title matching reaches a
                  served parent for 85.8% …
                meta:
                  processingTimeMs: 528.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 or conflicting parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
components:
  schemas:
    ActSubordinateResponse:
      properties:
        actId:
          type: string
          title: Actid
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        citation:
          anyOf:
            - type: string
            - type: 'null'
          title: Citation
        children:
          items:
            $ref: '#/components/schemas/SubordinateRow'
          type: array
          title: Children
        total:
          type: integer
          title: Total
          description: >-
            Distinct subordinate instruments across all pages, not rows on this
            page (that is `returned`). Counted per instrument, so an instrument
            stored as many passages counts once.
        totalIsExact:
          type: boolean
          title: Totalisexact
          description: >-
            False when the corpus scan behind `total` hit its ceiling, which
            makes `total` a floor. The largest parent measured, the Environment
            (Protection) Act, 1986, matches 8,047 passages.
        returned:
          type: integer
          title: Returned
          description: Rows in `children` on THIS page.
        page:
          type: integer
          title: Page
          description: 1-based page this response answers.
        pageSize:
          type: integer
          title: Pagesize
          description: Rows per page requested.
        hasMore:
          type: boolean
          title: Hasmore
          description: True when a further page of instruments exists.
        truncated:
          type: boolean
          title: Truncated
          description: >-
            DEPRECATED. True when `hasMore` is true or `totalIsExact` is false.
            Read those two instead.
        matchBasis:
          type: string
          title: Matchbasis
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
        meta:
          $ref: '#/components/schemas/Meta'
      type: object
      required:
        - actId
        - total
        - totalIsExact
        - returned
        - page
        - pageSize
        - hasMore
        - truncated
        - matchBasis
        - meta
      title: ActSubordinateResponse
    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.
    SubordinateRow:
      properties:
        actId:
          type: string
          title: Actid
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        citation:
          anyOf:
            - type: string
            - type: 'null'
          title: Citation
        delegationType:
          anyOf:
            - type: string
            - type: 'null'
          title: Delegationtype
          description: '`rules`, `regulations`, `notification` or `order`.'
        year:
          anyOf:
            - type: integer
            - type: 'null'
          title: Year
        actStatus:
          anyOf:
            - type: string
            - type: 'null'
          title: Actstatus
      type: object
      required:
        - actId
      title: SubordinateRow
    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_...`

````