List checkpoints

Browse checkpoints, newest first unless you change `sortBy` or `order`. A checkpoint commits to a consecutive range of finalized batches, making it possible to verify a long stretch of history without processing every batch individually. Each one names the first and last batch it covers, so the range it speaks for is `start_sequence` to `end_sequence`. A checkpoint goes through the same proof-and-anchor stages as a batch, without the NFT and challenge-window settlement stages: ``` building → requesting → proving → storing → anchoring → finalized ``` `finalized` means the checkpoint commitment has been anchored. `failed` is terminal; every other value means the checkpoint is still being processed. Open to everyone. No sign-in needed.

GET
/public/checkpoints

Query Parameters

id?string

Return only the resource with this identifier. Equivalent to fetching it by path, but usable together with the other list filters.

autocomplete?string

Look up one checkpoint by id or by hash. A 24-character hexadecimal value is treated as an id, anything else as a checkpoint hash.

limit?integer

How many items to return in one page. The default and the maximum are both 25; a larger value is rejected with 400.

Default25
Formatint64
Range1 <= value <= 25
next?string

Cursor for the next page, taken verbatim from the next field of the previous response. Keep every other query parameter the same between pages: sortBy and order are part of what the cursor means. An absent or empty next in a response means there are no more pages.

The value is opaque. Do not parse it or build one yourself.

order?string

Sort direction. Defaults to desc, newest first.

Default"desc"
Value in"asc" | "desc"
sortBy?string

Field used to sort the result. Supported fields depend on the endpoint; use when_created for chronological ordering where it is available. The default is the resource identifier, and identifiers break ties so cursor paging stays stable.

hash?string

Return the checkpoint with this hash.

status?string

Return only checkpoints in this pipeline stage.

Value in"building" | "requesting" | "proving" | "storing" | "anchoring" | "finalized" | "failed"
when_created[$gt]?string

Built strictly after this instant.

Formatdate-time
when_created[$lt]?string

Built strictly before this instant.

Formatdate-time
when_created[$gte]?string

Built at or after this instant.

Formatdate-time
when_created[$lte]?string

Built at or before this instant.

Formatdate-time
when_modified[$gt]?string

Last advanced strictly after this instant.

Formatdate-time
when_modified[$lt]?string

Last advanced strictly before this instant.

Formatdate-time
when_modified[$gte]?string

Last advanced at or after this instant.

Formatdate-time
when_modified[$lte]?string

Last advanced at or before this instant.

Formatdate-time

Response Body

application/json

application/json

application/json

curl -X GET "https://api.dual.network/public/checkpoints"
{
  "checkpoints": [
    {
      "id": "665f1c2d4b1a2c3d4e5f6a30",
      "sequence": 41,
      "hash": "0x3c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8091a2b",
      "start_sequence": 761,
      "start_hash": "0x5d2b4806a1c9d8e7f6a5b4c3d2e1f00918273645546372819a0b1c2d7f1a9c3e",
      "end_sequence": 794,
      "end_hash": "0x7f1a9c3e5d2b4806a1c9d8e7f6a5b4c3d2e1f00918273645546372819a0b1c2d",
      "sender": "0x9999999999999999999999999999999999999999",
      "status": "finalized",
      "when_created": "2026-03-02T19:00:00Z"
    }
  ]
}
{
  "code": 3,
  "message": "Key: 'limit' Error:Field validation for 'limit' failed on the 'lte' tag"
}
{
  "code": 13,
  "message": "internal error"
}