---
title: "Merkle proofs for one account's balances under the last published root"
method: GET
path: "/ledger/proof/{account}"
tags: ["Ledger"]
---

# Merkle proofs for one account's balances under the last published root

`GET /ledger/proof/{account}`

## Request

- Base URL: `https://kellian.app/api/v1`
- URL: `https://kellian.app/api/v1/ledger/proof/{account}`
- Auth: none required

## Path parameters

- `account` string, required: Checksummed or lowercase 20-byte EVM address (0x + 40 hex).

## Response `200`

Success

- LedgerAccountProofResponse: Merkle proofs for one account under the LAST PUBLISHED root — never the live one, because a proof over unbatched entries could not verify against the chain.
  - `account` string, required: Checksummed or lowercase 20-byte EVM address (0x + 40 hex).
  - `chainId` integer, required: Compiled protocol release chain ID (Base 8453).
  - `root` string, required: The last root this venue published. Compare it with `ledgerRoot()` on the contract before trusting a proof.
  - `batchNonce` string, nullable, required: The batch that published `root`. Null before the first batch of the current ledger.
  - `leaves` LedgerProofLeaf[], required: One entry per non-zero balance this account held at the published root. May be empty.
    - `assetId` string, required: Asset this balance is in, as the contract numbers it: `0` is the play-money collateral, and `(marketId << 8) | side` is one outcome of one market.
    - `balance` string, required: Balance in the asset's smallest unit, as it was hashed into the leaf.
    - `proof` string[], required: Merkle path from this leaf to the published root, in OpenZeppelin `MerkleProof.verify` order (sorted pairs).
  - `verify` object, required: Everything needed to check this proof without reading the venue's code.
    - `docsUrl` string, required: Where the leaf and tree conventions are published.
    - `contract` string, required: Checksummed or lowercase 20-byte EVM address (0x + 40 hex).

## Other responses

- `400`: Error: one of INVALID_QUERY
- `500`: Error: one of INTERNAL_ERROR
- `default`: Error response (RFC 9457 Problem Details for HTTP APIs)

---

[API](https://skmtc.dev/problee/apis/kellian-consumer-api.md) · [All operations](https://skmtc.dev/problee/apis/kellian-consumer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/problee/apis/kellian-consumer-api/revisions/2b8254b0ec57?raw)
