Latest public-ledger days
GET /v1/ledger-days
https://verify.tanba-ooh.kz/v1/ledger-days
The newest 30 days, newest first. For each anchored day the platform computes a Merkle root over the approvals issued and revoked that day and a digest, SHA-256 of the anchor body hash followed by the root, and has the digest timestamped in Bitcoin through OpenTimestamps. status is pending until a Bitcoin block attestation is in the proof, then pending_check until the platform has compared the value the proof commits to with the merkle root in the header of that block, read from two independent block explorers, and anchored with block_height only after that comparison succeeded. Served on the verify and app hosts, cached for 60 seconds.
Authentication
None. This call is public.
Responses
200 The days.
application/json
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
items | array of LedgerDayItem | yes | The days, newest first. | |
items[].day | string (date) | yes | The Asia/Almaty day the ledger entry covers. | "2026-10-05" |
items[].leaf_count | integer | yes | Number of approvals issued and revoked that day. | 14 |
items[].merkle_root | string | yes | Hex SHA-256 root over the day's leaves; SHA-256 of the empty string when the day has none. | "53f8fe42a83fc01075e856d385cea164e06b7124d4c76b3a498e39de98d7168b" |
items[].digest | string | yes | Hex SHA-256 of the anchor body hash followed by the Merkle root; this is what is timestamped. | "44eeee2dfc054adad906be43d8d227a8052c19e5080b0ed64dc572fad9ee8f46" |
items[].status | string | yes | How far the digest has been anchored in Bitcoin. pending, pending_check, anchored | |
items[].block_height | integer | Bitcoin block of the attestation, present only when anchored: after its header was checked against the proof. | 905432 | |
items[].inputs_url | string | yes | Address of the inputs file of the day. | "/v1/ledger-days/2026-10-05" |
items[].ots_url | string | Present once the digest has been submitted to the calendars. | "/v1/ledger-days/2026-10-05/proof.ots" |
Example
{
"items": [
{
"day": "2026-10-05",
"leaf_count": 14,
"merkle_root": "53f8fe42a83fc01075e856d385cea164e06b7124d4c76b3a498e39de98d7168b",
"digest": "44eeee2dfc054adad906be43d8d227a8052c19e5080b0ed64dc572fad9ee8f46",
"status": "pending",
"block_height": 905432,
"inputs_url": "/v1/ledger-days/2026-10-05",
"ots_url": "/v1/ledger-days/2026-10-05/proof.ots"
}
]
}
Errors
Errors are problem documents (application/problem+json) with a stable code.
| Status | Meaning |
|---|---|
| 429 | Rate limit; see Retry-After. |
Code samples
curl
curl 'https://verify.tanba-ooh.kz/v1/ledger-days'
Python
import requests
response = requests.get(
"https://verify.tanba-ooh.kz/v1/ledger-days",
)
print(response.status_code, response.text)
Go
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://verify.tanba-ooh.kz/v1/ledger-days", nil)
if err != nil {
panic(err)
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(resp.Status, string(data))
}