---
title: "ICS23 Proof Verifier"
method: POST
path: "/v1/tools/verify_ics23_proof"
tags: ["ICS23", "ICS 023", "IBC", "Cosmos", "Merkle proof", "existence proof", "non-existence proof", "ProofSpec", "iavl", "tendermint", "smt", "vector commitment", "offline verifier", "zero network", "zero-PII"]
---

# ICS23 Proof Verifier

`POST /v1/tools/verify_ics23_proof`

## Request

- Base URL: `https://ainumbers.co`
- URL: `https://ainumbers.co/v1/tools/verify_ics23_proof`
- Auth: none declared

Offline verifier for ICS23 declarative Merkle proofs. Paste an ExistenceProof or NonExistenceProof in proofs.proto JSON shape (base64 or 0x-hex byte fields, enum names or numbers), supply the commitment root and the key being claimed, and pick one of three build-time-pinned ProofSpec presets (iavl, tendermint, smt). The page recomputes the Merkle root and every spec-conformance check entirely client-side and names the specific check that failed. There is no free-text ProofSpec input by design: a spec supplied alongside the proof it constrains could declare a forged shape legal, which is the shape of the October 2022 VSA-2022-103 forged-membership finding. Verify-only, no prover, zero network calls.

**Tool URL:** https://ainumbers.co/tools/585-ics23-proof-verifier.html

## Request body

- object
  - `proofInput` string, required
  - `rootInput` string, required
  - `keyInput` string, required
  - `specInput` string, required

## Response `200`

Successful tool execution result

- object
  - `verification_report` object: PASS or FAIL verdict from verifyExistence/verifyNonExistence plus a per-step check list naming the exact failing check

---

[API](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite.md) · [All operations](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/llms.txt) · [OpenAPI document](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/revisions/b462e4f5bb28?raw)
