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

# Get act text URLs

> Get URLs for the full text, PDF, and HTML versions of an act.

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

**Cost**: 3 credits



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/{act_id}/text
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}/text:
    get:
      tags:
        - Indian Acts & Legislation
      summary: Get act text URLs
      description: |-
        Get URLs for the full text, PDF, and HTML versions of an act.

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

        **Cost**: 3 credits
      operationId: get_act_text_api_v1_in_acts__act_id__text_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 /coverage.
            examples:
              - IND_state_20326
            title: Act Id
          description: Act identifier, as returned by search, /list or /coverage.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ActTextResponse'
              example:
                actId: IND_state_20326
                title: The Maharashtra Value Added Tax Act, 2002.
                year: 2002
                category: state
                textUrl: >-
                  https://acts-india.vaquill.ai/IND_state_20326/act.normalized.txt
                pdfUrl: https://acts-india.vaquill.ai/IND_state_20326/act.pdf
                htmlUrl: https://acts-india.vaquill.ai/IND_state_20326/act.html
                chunksCount: 345
                isSubordinate: false
                issuedDate: 9-Mar-2005
                meta:
                  processingTimeMs: 308.8
                  creditsConsumed: 3
                currencyStatus: repeal_tracked
        '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:
    ActTextResponse:
      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
        textUrl:
          type: string
          title: Texturl
        pdfUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Pdfurl
        htmlUrl:
          anyOf:
            - type: string
            - type: 'null'
          title: Htmlurl
        chunksCount:
          type: integer
          title: Chunkscount
          default: 0
        isSubordinate:
          type: boolean
          title: Issubordinate
          description: >-
            True for subordinate legislation: notifications, rules, circulars,
            orders. False for principal acts.
          default: false
        issuedDate:
          anyOf:
            - type: string
            - type: 'null'
          title: Issueddate
          description: Date the instrument was issued by the publisher, where known.
        meta:
          $ref: '#/components/schemas/ActMeta'
        currencyStatus:
          type: string
          title: Currencystatus
          description: >-
            How far the currency of this document can be vouched for.
            `repeal_tracked`: the publisher records a repeal flag for this
            document, so a repealed instrument is identifiable. `as_issued`:
            served as issued on `issuedDate`, and it MAY HAVE BEEN SUPERSEDED
            since. India Code publishes no supersession status for subordinate
            legislation, and a superseding instrument names its predecessor only
            in prose, so this API cannot tell you whether a notification is
            still in force. Treat `as_issued` documents as evidence of what was
            issued on a date, not as a statement of current law.
          default: unknown
      type: object
      required:
        - actId
        - title
        - textUrl
      title: ActTextResponse
    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.
    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_...`

````