---
title: "List ledger entries"
method: GET
path: "/api/v1/ledger"
tags: ["Ledger"]
---

# List ledger entries

`GET /api/v1/ledger`

## Request

- Base URL: `https://www.vestiarion.xyz`
- URL: `https://www.vestiarion.xyz/api/v1/ledger`
- Auth: HTTP bearer

The audit chain, oldest first, as a resumable stream. Because the ledger is append-only and ascending by `seq`, a stored `page.nextCursor` is a watermark: a request from it never returns an entry before it. Persist the last non-null `nextCursor` only after processing every entry in the responses read, and resume from it; the last page, which had no cursor of its own, is returned again, so de-duplicate on `seq`.

`seq` is monotonic within a workspace but not gap-free; continuity is proven by the hash chain, not by `seq`.

## Query parameters

- `limit` integer
- `cursor` string
- `domain` string
- `actor` string

## Response `200`

OK

- ListLedgerEntriesResponse
  - `data` object[], required
    - `seq` number, required: Monotonic within a workspace, but not gap-free; the hash chain proves continuity.
    - `id` string, required
    - `ts` string, required
    - `actor` string, required
    - `domain` string, required
    - `action` string, required
    - `summary` string, required
    - `detail` object, required
    - `bodyHash` string, required: Present so a consumer can verify the chain itself rather than trust us.
    - `signature` string, required
    - `prevHash` string, required
    - `hash` string, required
    - `signingKeyId` string, nullable, required: Which key signed the entry; `null` for entries written before key identity existed. A consumer verifying for itself needs this to pick the right key.
  - `page` object, required: Where this page sits in the collection.
    - `nextCursor` string, nullable, required: Pass back as `?cursor=` to continue. Null when the end is reached.
    - `hasMore` boolean, required: Whether another page follows this one.
    - `count` integer, required: How many items this response carries.

## Other responses

- `400`: invalid_request
- `401`: unauthorized
- `403`: forbidden
- `500`: internal

---

[API](https://skmtc.dev/vestiarion/apis/vestiarion-api.md) · [All operations](https://skmtc.dev/vestiarion/apis/vestiarion-api/llms.txt) · [OpenAPI document](https://skmtc.dev/vestiarion/apis/vestiarion-api/revisions/fd2f589dac9b?raw)
