Archive checkpoints
Our archive claims to be append-only: once a datapoint is recorded, it is never edited and never backdated. A claim like that should not rest on our word. So every day we publish a checkpoint: a compact, signed fingerprint of everything the archive held for that day.
Each checkpoint is chained to the one before it, and its digest is independently time-stamped through OpenTimestamps, which commits it to the Bitcoin blockchain, a public record that nobody controls, including us. After a day is checkpointed, quietly rewriting it is no longer possible: any change to the archived objects changes the digest, which breaks the chain and contradicts the anchored timestamp. The rewrite would show.
Digest
We list every object in yesterday's archive partition and compute one SHA-256 digest over the sorted listing (key, etag, size), plus per-feed object counts.
Sign
The checkpoint document is Ed25519-signed with the same key that signs every Dynamic Feed envelope. Verify it against /.well-known/keys.
Chain
Each checkpoint carries the previous day's digest, so the days form one continuous chain. Altering any past day breaks every link after it.
Anchor
The digest is time-stamped via OpenTimestamps onto the Bitcoin blockchain. The proof is a standard .ots file you can verify offline with public tooling.
The last 30 days
| Day (UTC) | Digest (SHA-256, first 16) | Objects | Anchor | Proof |
|---|---|---|---|---|
| Loading checkpoints from /v1/checkpoints ... | ||||
Chain check runs in your browser once the list loads.
Check it yourself
01Fetch the checkpoint document
The keyless API lists recent checkpoints, newest first. Each entry carries the full signed document: day, digest, per-feed counts, the previous day's digest, and the Ed25519 signature.
$ curl -s https://dynamicfeed.ai/v1/checkpoints?limit=5
02Download the timestamp proof
Every anchored checkpoint has a detached proof file. Replace the date with the day you are checking.
$ curl -s -o checkpoint-2026-07-05.ots https://dynamicfeed.ai/v1/checkpoints/2026-07-05/proof
03Verify the proof against the digest
The OpenTimestamps client is open source and talks to the Bitcoin network directly, not to us. Pass the checkpoint's digest_sha256 from step 1.
$ pip install opentimestamps-client
$ ots verify -d <digest_sha256> checkpoint-2026-07-05.ots
04Check the signature and the chain
The document's Ed25519 signature verifies against the published keys at https://dynamicfeed.ai/.well-known/keys (or with the df-verify packages on PyPI, npm and crates.io). Then confirm each day's prev_digest equals the digest_sha256 of the day before it. If both hold, the history you are looking at is the history that was anchored.
$ pip install df-verify
Honest limits. Checkpoints make the archive tamper-evident, not tamper-proof: they cannot stop a rewrite, they make one visible and provable. A fresh checkpoint shows as pending for some hours while Bitcoin blocks confirm; the proof then upgrades to confirmed automatically. And a checkpoint is advisory evidence, not a certification: it proves what our archive contained on a given day, and nothing beyond that.