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

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

**Source**: transcribed from the correspondence tables published by the Bureau
of Police Research and Development, an attached office of India's Ministry of
Home Affairs. The `coverage.source` block on every response names the exact
document and links to it.

**Both codes are live law at once.** The repealed code still governs offences
committed before 1 July 2024, for the lifetime of pending trials, so this is a
correspondence and not a redirect.

**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 and 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 2024.


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


        **Source**: transcribed from the correspondence tables published by the
        Bureau

        of Police Research and Development, an attached office of India's
        Ministry of

        Home Affairs. The `coverage.source` block on every response names the
        exact

        document and links to it.


        **Both codes are live law at once.** The repealed code still governs
        offences

        committed before 1 July 2024, for the lifetime of pending trials, so
        this is a

        correspondence and not a redirect.


        **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: >-
              Either side of a recodification pair, matched case-insensitively
              so `IPC` and `ipc` are the same request. `ipc`/`bns` and
              `crpc`/`bnss` each return the same mapping; `iea`/`bsa` are
              accepted and 404 until that mapping lands. Values: `ipc`, `crpc`,
              `iea`, `bns`, `bnss`, `bsa`.
            examples:
              - ipc
            enum:
              - ipc
              - crpc
              - iea
              - bns
              - bnss
              - bsa
            title: Act Code
          description: >-
            Either side of a recodification pair, matched case-insensitively so
            `IPC` and `ipc` are the same request. `ipc`/`bns` and `crpc`/`bnss`
            each return the same mapping; `iea`/`bsa` are accepted and 404 until
            that mapping lands. Values: `ipc`, `crpc`, `iea`, `bns`, `bnss`,
            `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: '1'
                    newAct: BNS
                    newSection: 1(1)
                    subject: Short title, commencement and application.
                    effectiveDate: '2024-07-01'
                  - oldAct: IPC
                    oldSection: '2'
                    newAct: BNS
                    newSection: 1(3)
                    subject: Punishment of offences committed within India.
                    effectiveDate: '2024-07-01'
                total: 534
                coverage:
                  mappedProvisions: 534
                  numberedSectionsMapped: 477
                  numberedSectionsInOldCode: 511
                  numberedSectionCoverage: 0.933
                  oldCode: IPC
                  source:
                    publisher: >-
                      Bureau of Police Research and Development, Ministry of
                      Home Affairs
                    title: >-
                      Correspondence Table and Comparison Summary of the
                      Bharatiya Nyaya Sanhita, 2023 (BNS) to the Indian Penal
                      Code, 1860 (IPC)
                    url: >-
                      https://bprd.nic.in/uploads/pdf/COMPARISON%20SUMMARY%20BNS%20to%20IPC%20.pdf
                  basis: official-publication
                  isComplete: false
                  note: >-
                    Transcribed from the correspondence table the Bureau of
                    Police Research and Development (Ministry of Home Affairs)
                    publishes for this pair, named in `source`. `isComplete` is
                    false and stays false: the publisher's table omits sections
                    the new code dropped out…
                  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: 54
                  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, where it came from,
            and how it was checked. `source` names the government publication
            the table is transcribed from, so a caller can go and read it. 🔴 It
            is still not a complete concordance: a section absent here is NOT
            thereby unchanged, and the correspondence is many-to-many in places.
            Read `numberedSectionsMapped` 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
          description: >-
            The NEW provision's own heading, as printed in the publisher's
            correspondence table. It is not the repealed section's heading, and
            where the recodification changed the offence the two differ.
        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_...`

````