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

# Map a repealed code to its replacement

> Section-by-section mapping from a repealed Indian criminal code to the 2023
code that replaced it, in force from 1 July 2025.

Pass either side of the pair: `ipc` and `bns` both return the IPC to BNS
mapping, `crpc` and `bnss` both return CrPC to BNSS.

**Coverage**: `ipc`/`bns` and `crpc`/`bnss`. `iea`/`bsa` are accepted but
return 404 until the Evidence Act mapping lands, rather than an empty list
that would read as "nothing changed".

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

**Cost**: 1 credit



## OpenAPI

````yaml https://api.vaquill.ai/in/openapi.json get /api/v1/in/acts/corresponding-provisions/{act_code}
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/corresponding-provisions/{act_code}:
    get:
      tags:
        - Indian Acts & Legislation
      summary: Map a repealed code to its replacement
      description: >-
        Section-by-section mapping from a repealed Indian criminal code to the
        2023

        code that replaced it, in force from 1 July 2025.


        Pass either side of the pair: `ipc` and `bns` both return the IPC to BNS

        mapping, `crpc` and `bnss` both return CrPC to BNSS.


        **Coverage**: `ipc`/`bns` and `crpc`/`bnss`. `iea`/`bsa` are accepted
        but

        return 404 until the Evidence Act mapping lands, rather than an empty
        list

        that would read as "nothing changed".


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


        **Cost**: 1 credit
      operationId: >-
        get_corresponding_provisions_api_v1_in_acts_corresponding_provisions__act_code__get
      parameters:
        - name: act_code
          in: path
          required: true
          schema:
            type: string
            pattern: ^(?i:ipc|crpc|iea|bns|bnss|bsa)$
            description: 'Act code: ipc, crpc, iea, bns, bnss or bsa'
            title: Act Code
          description: 'Act code: ipc, crpc, iea, bns, bnss or bsa'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorrespondingProvisionsResponse'
              example:
                oldAct: Indian Penal Code, 1860
                newAct: Bharatiya Nyaya Sanhita, 2023
                effectiveDate: '2024-07-01'
                provisions:
                  - oldAct: IPC
                    oldSection: '302'
                    newAct: BNS
                    newSection: '103'
                    subject: Murder
                    effectiveDate: '2024-07-01'
                  - oldAct: IPC
                    oldSection: '304'
                    newAct: BNS
                    newSection: '105'
                    subject: Culpable homicide not amounting to murder
                    effectiveDate: '2024-07-01'
                total: 30
                coverage:
                  mappedProvisions: 30
                  basis: curated
                  isComplete: false
                  note: >-
                    This is a curated subset of the recodification, covering the
                    provisions most often cited. No official machine-readable
                    correspondence table exists for the 2023 codes; the
                    government handbooks are training aids and every online
                    converter is a private reconstru…
                  bothCodesAreLiveLaw: >-
                    The old code still applies to offences committed before
                    2024-07-01, so both codes are live law simultaneously for
                    the lifetime of pending trials. This mapping is a
                    correspondence, not a redirect.
                meta:
                  processingTimeMs: 87.6
                  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 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:
    CorrespondingProvisionsResponse:
      properties:
        oldAct:
          type: string
          title: Oldact
        newAct:
          type: string
          title: Newact
        effectiveDate:
          type: string
          title: Effectivedate
        provisions:
          items:
            $ref: '#/components/schemas/CorrespondingProvisionItem'
          type: array
          title: Provisions
        total:
          type: integer
          title: Total
        coverage:
          additionalProperties: true
          type: object
          title: Coverage
          description: >-
            How much of the old code this mapping covers, and what it is. 🔴 It
            is a CURATED subset, not a complete concordance: there is no
            official machine-readable IPC-to-BNS table, and every published
            converter is a private reconstruction. Read `mappedProvisions`
            before treating an absent section as unmapped-because-unchanged.
        meta:
          $ref: '#/components/schemas/ActMeta'
      type: object
      required:
        - oldAct
        - newAct
        - effectiveDate
        - provisions
        - total
      title: CorrespondingProvisionsResponse
    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.
    CorrespondingProvisionItem:
      properties:
        oldAct:
          type: string
          title: Oldact
        oldSection:
          type: string
          title: Oldsection
        newAct:
          type: string
          title: Newact
        newSection:
          type: string
          title: Newsection
        subject:
          type: string
          title: Subject
        effectiveDate:
          type: string
          title: Effectivedate
      type: object
      required:
        - oldAct
        - oldSection
        - newAct
        - newSection
        - subject
        - effectiveDate
      title: CorrespondingProvisionItem
    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_...`

````