NOTARY API · LIVE·SIGNED · RFC 3161 TIMESTAMPED · KEYLESS
ED25519 · RFC 3161·--:--:-- UTC
Home  /  Notary  /  Quickstart
NOTARY API · QUICKSTART

Turn any hash into a signed, RFC 3161 timestamped proof of existence.

Send us a SHA-256, never your data. We sign it and time-stamp it with an independent RFC 3161 authority, and hand back a timestamp proof that the record existed, unchanged, at time T, independently verifiable by anyone, even against us. Keyless. Copy-paste. Works right now.

WHAT IT DOES

One call. A proof anyone can check.

You compute a SHA-256 of a file, a record, or any string. You send us that digest, or a JSON snapshot whose canonical SHA-256 we compute for you. We sign it with our Ed25519 key and submit the hash to an independent RFC 3161 timestamp authority, which returns a signed timestamp token. The result is a timestamp proof that fixes your hash to a precise time. Anyone can verify it, with our open-source verifier or standard RFC 3161 tooling, without trusting us at all.

1

Hash it locally

Compute a sha256 of your file or string on your own machine. Only the 64-hex digest is sent, your bytes never leave your infrastructure.

2

We sign & time-stamp it

One POST /v1/anchor. We Ed25519-sign the digest and submit it to an independent RFC 3161 timestamp authority, which returns a signed timestamp token instantly.

3

Verify, any time

You get a timestamp proof straight away, no wait. It fixes your hash to a precise time, and anyone can re-check it independently.

hashes only, and that's the point

The notary endpoints take a hash, never your data. Send a 64-hex SHA-256 and we time-stamp exactly that fingerprint. Your underlying file, record or payload stays entirely on your side, there is nothing for us to read, store or leak. Privacy by construction, proof by mathematics.

QUICKSTART

Timestamp your first hash in 60 seconds.

Pick your language. Each block hashes a string locally, sends only the digest to the real POST /v1/anchor, and prints the proof. No key, no signup, no account, these run as-is against dynamicfeed.ai today.

SHELL · POST /v1/anchorCOPY
# 1) hash a string (or a file: shasum -a 256 myfile.pdf) locally
DIGEST=$(printf 'invoice #4471, $12,400, 2026-06-14' | shasum -a 256 | cut -d' ' -f1)

# 2) time-stamp JUST the digest, your data never leaves your machine
curl -s https://dynamicfeed.ai/v1/anchor \
  -H "Content-Type: application/json" \
  -d "{\"digest_hex\":\"$DIGEST\"}"

# → returns status:"timestamped" + a timestamp_token_b64 you save.
# (Don't have a hash handy? Send a JSON snapshot instead and
#  we compute its canonical SHA-256 for you:)
curl -s https://dynamicfeed.ai/v1/anchor \
  -H "Content-Type: application/json" \
  -d '{"snapshot":{"gauge":"river-7","level_m":2.41}}'
import hashlib, requests

# 1) hash your data locally, only the digest is ever sent
data = b"invoice #4471, $12,400, 2026-06-14"
digest = hashlib.sha256(data).hexdigest()

# 2) time-stamp the digest (hashes only, keyless)
r = requests.post("https://dynamicfeed.ai/v1/anchor",
                  json={"digest_hex": digest}, timeout=30)
proof = r.json()
print(proof["status"])              # "timestamped"
token = proof["timestamp_token_b64"]  # save this, it IS your proof
print(proof.get("tsa"), proof.get("serial"))

# (Alternatively, hand us a snapshot and we hash it canonically:)
# requests.post(URL, json={"snapshot": {"gauge": "river-7", "level_m": 2.41}})
import { createHash } from "node:crypto";

// 1) hash your data locally, only the digest leaves your machine
const data = "invoice #4471, $12,400, 2026-06-14";
const digest = createHash("sha256").update(data).digest("hex");

// 2) time-stamp the digest (hashes only, keyless)
const res = await fetch("https://dynamicfeed.ai/v1/anchor", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ digest_hex: digest }),
});
const proof = await res.json();
console.log(proof.status);               // "timestamped"
const token = proof.timestamp_token_b64; // save this, it IS your proof
console.log(proof.tsa, proof.serial);

// (Or send a snapshot and we compute its canonical SHA-256:)
// body: JSON.stringify({ snapshot: { gauge: "river-7", level_m: 2.41 } })
REAL RESPONSE · POST /v1/anchor · captured liveSIGNED · TIMESTAMPED
# timestamped: sha256("dynamicfeed notary quickstart demo"), abbreviated
{
  "backend": "rfc3161",
  "tsa": "http://timestamp.digicert.com",
  "digest_sha256": "09207fd234c0ab808f2d8861a5d55f7cc8497229cb4353f997d2ee1e75604880",
  "status": "timestamped",
  "timestamped_at": "2026-06-14T03:21:07Z",
  "serial": "0x6a3f1c7e",
  "hash_algorithm": "SHA-256",
  "timestamp_token_b64": "MIIFxQYJKoZIhvcNAQcCoIIFtjCCBbICAQMxDzANBglghkgBZQMEAg…",
  "note": "Signed timestamp token from an independent RFC 3161 authority.
           'timestamped' = the authority has bound the hash to a precise time
           and returned the token instantly, no wait. The token verifies the
           hash against the authority independently. Time-stamps the HASH only,
           never the data.",
  "signature": {
    "alg": "Ed25519",
    "key_id": "df-ed25519-6ca0de29113b",
    "canonicalization": "json-sorted-compact",
    "sig": "<base64url signature from the current response>"
  }
}
HOW VERIFICATION WORKS

Anyone can re-check it, including against us.

A proof is only worth anything if a third party can verify it without your help. Every timestamp we issue is checkable three independent ways:

Want the continuous, witnessed-feed version, register a feed and have every change notarized automatically? That's the notary witness layer; this page is the bare-metal timestamp primitive underneath it.

WHAT IT PROVES, AND WHAT IT DOESN'T

Existence at a time. Not truth.

read this before you build on it

A timestamp proves that a specific hash existed, unchanged, at a specific time, and that any later edit is detectable. It does not prove that the data behind the hash is true, accurate or correct. We are a witness, not an auditor: if your source is wrong, a timestamped record proves exactly what it said and when, which is precisely what you want in a dispute. We see hashes only, never the underlying data, so we make no claim about its content. This is verifiable proof-of-existence, never a guarantee of correctness or safety.

WHAT IT COSTS

Free and keyless today. Self-serve at scale.

Right now · free + keyless

RFC 3161 timestamping is currently free and keyless, no card, no account. The independent authority returns a signed timestamp token instantly and off the hot path, so the cost to time-stamp is effectively zero and we pass that on. Start with the quickstart above; nothing to sign up for.

At volume · managed · SLA → self-serve

For high-volume, managed, or SLA-backed timestamping, token retention, throughput commitments, or timestamping wired into a product you ship, volume plans are in early access — request access and tell us your throughput and retention needs.

THE FUTURE, HERE AND NOW

Fully automated. Run by AI, end to end.

No sales calls and no waiting. Mint a key and you are live in seconds, on any tier.