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

# Is this act still law, and who says so

> Everything we know about an act's standing, kept in three separate vocabularies
that are deliberately never collapsed into one verdict.

**Cost: 1 credit.**

- `publisherStatus` is `act_status` exactly as India Code records it. Their
  word.
- `servedStatus` is ours: whether this API answers for the act, or has retired
  it as withdrawn by the publisher or as a duplicate of one we kept.
- `repealClaim` is the publisher's repeal record WITH its source, and with the
  caveat that we do not verify whether the repealing instrument was itself
  brought into force.

That last distinction is not pedantry. India Code lists the Industrial Disputes
Act, 1947 as repealed by Act 37 of 2020, the Industrial Relations Code, which
has never been commenced. Serving that as flatly "repealed" would be wrong, so
this endpoint does not.

A retired act answers here with `servedStatus: retired` and the reason, rather
than 404ing, because "we deliberately withdrew this" is a more useful answer
than "no such thing".



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/{act_id}/status
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}/status:
    get:
      tags:
        - Indian Acts & Legislation
      summary: Is this act still law, and who says so
      description: >-
        Everything we know about an act's standing, kept in three separate
        vocabularies

        that are deliberately never collapsed into one verdict.


        **Cost: 1 credit.**


        - `publisherStatus` is `act_status` exactly as India Code records it.
        Their
          word.
        - `servedStatus` is ours: whether this API answers for the act, or has
        retired
          it as withdrawn by the publisher or as a duplicate of one we kept.
        - `repealClaim` is the publisher's repeal record WITH its source, and
        with the
          caveat that we do not verify whether the repealing instrument was itself
          brought into force.

        That last distinction is not pedantry. India Code lists the Industrial
        Disputes

        Act, 1947 as repealed by Act 37 of 2020, the Industrial Relations Code,
        which

        has never been commenced. Serving that as flatly "repealed" would be
        wrong, so

        this endpoint does not.


        A retired act answers here with `servedStatus: retired` and the reason,
        rather

        than 404ing, because "we deliberately withdrew this" is a more useful
        answer

        than "no such thing".
      operationId: get_act_status_api_v1_in_acts__act_id__status_get
      parameters:
        - name: act_id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 200
            pattern: ^[a-zA-Z0-9_-]+$
            examples:
              - IND_state_20326
            title: Act Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActStatusResponse'
              example:
                actId: IND_state_20326
                title: The Maharashtra Value Added Tax Act, 2002.
                citation:
                  citation: The Maharashtra Value Added Tax Act, 2002.
                  citationShort: Maharashtra Value Added Tax Act, 2002.
                goodLawStatus: good_law
                goodLawReason: >-
                  The publisher records this act as in force and no repeal is on
                  the record. We have not independently verified it.
                publisherStatus: in_force
                servedStatus: served
                isSubordinate: false
                enactmentDate: 9-Mar-2005
                lastAmendedYear: 2019
                subordinateCount: 0
                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: 361.8
                  creditsConsumed: 1
        '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 request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiDetailError'
components:
  schemas:
    ActStatusResponse:
      properties:
        actId:
          type: string
          title: Actid
        title:
          anyOf:
            - type: string
            - type: 'null'
          title: Title
        citation:
          $ref: '#/components/schemas/Citation'
        goodLawStatus:
          type: string
          title: Goodlawstatus
          description: >-
            Our DERIVED verdict: `good_law`, `not_good_law` or `unknown`.
            Conservative by construction -- an unverified repeal claim maps to
            `unknown`, NEVER to `not_good_law`, because we do not check whether
            a repealing instrument was brought into force and at least one
            repeal on this record involves an Act that never commenced. One
            field to filter on; the three raw fields below remain if you want to
            judge it yourself.
          default: unknown
          examples:
            - good_law
        goodLawReason:
          type: string
          title: Goodlawreason
          description: Why the verdict above is what it is. Always present.
          default: ''
        publisherStatus:
          anyOf:
            - type: string
            - type: 'null'
          title: Publisherstatus
          description: >-
            `act_status` exactly as the publisher records it. Their word, not
            our verdict.
        servedStatus:
          type: string
          title: Servedstatus
          description: >-
            `served` or `retired`. OUR word about whether this API answers for
            it.
        isSubordinate:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Issubordinate
        delegationType:
          anyOf:
            - type: string
            - type: 'null'
          title: Delegationtype
        parentActName:
          anyOf:
            - type: string
            - type: 'null'
          title: Parentactname
        commencementInfo:
          anyOf:
            - type: string
            - type: 'null'
          title: Commencementinfo
        territorialExtent:
          anyOf:
            - type: string
            - type: 'null'
          title: Territorialextent
        enactmentDate:
          anyOf:
            - type: string
            - type: 'null'
          title: Enactmentdate
        dateOfAssent:
          anyOf:
            - type: string
            - type: 'null'
          title: Dateofassent
        lastAmendedYear:
          anyOf:
            - type: integer
            - type: 'null'
          title: Lastamendedyear
        repeals:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Repeals
          description: >-
            Acts this one repeals, as the publisher names them. The inverse of
            `repealClaim`, and subject to the same caveat: it is their record,
            and we do not verify commencement.
        supersededBy:
          anyOf:
            - type: string
            - type: 'null'
          title: Supersededby
          description: >-
            A later consolidation that replaced this version, where one is
            recorded.
        subordinateCount:
          anyOf:
            - type: integer
            - type: 'null'
          title: Subordinatecount
          description: Subordinate instruments the publisher records under this act.
        repealClaim:
          anyOf:
            - $ref: '#/components/schemas/RepealClaim'
            - type: 'null'
        retirement:
          anyOf:
            - $ref: '#/components/schemas/Retirement'
            - type: 'null'
        currencyNote:
          anyOf:
            - type: string
            - type: 'null'
          title: Currencynote
        provenance:
          $ref: '#/components/schemas/Provenance'
        meta:
          $ref: '#/components/schemas/Meta'
      type: object
      required:
        - actId
        - citation
        - servedStatus
        - provenance
        - meta
      title: ActStatusResponse
    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.
    RepealClaim:
      properties:
        repealedBy:
          anyOf:
            - type: string
            - type: 'null'
          title: Repealedby
        repealedByYear:
          anyOf:
            - type: integer
            - type: 'null'
          title: Repealedbyyear
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
        sourceHandle:
          anyOf:
            - type: string
            - type: 'null'
          title: Sourcehandle
        commencementVerified:
          type: boolean
          title: Commencementverified
          description: >-
            Whether we checked that the repealing instrument was brought into
            force. Always false: we do not verify this, and at least one repeal
            on record involves an Act that never commenced.
          default: false
        note:
          type: string
          title: Note
      type: object
      required:
        - note
      title: RepealClaim
      description: >-
        The publisher's claim about repeal, with our caveat attached.


        Never flattened into a verdict. India Code lists the Industrial Disputes

        Act, 1947 as repealed by Act 37 of 2020, the Industrial Relations Code,

        which has never been brought into force. Serving that as flatly
        "repealed"

        would be wrong.
    Retirement:
      properties:
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
        duplicateOf:
          anyOf:
            - type: string
            - type: 'null'
          title: Duplicateof
        observedOn:
          anyOf:
            - type: string
            - type: 'null'
          title: Observedon
      type: object
      title: Retirement
    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
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: vq_key_*
      description: >-
        API key issued from the developer dashboard. Pass as `Authorization:
        Bearer vq_key_...`

````