Timestamped evidence · RFC 3161
Prove a fingerprint existed by a given moment.
Register the SHA-256 fingerprint of any file. The file is hashed in your browser and never leaves your device. Each entry is chained to the one before it, so tampering shows.
Free for everyone. No accounts, no limits, no payments.
1 · Fingerprint
Web Crypto computes a SHA-256 hash locally. 64 hex characters that change completely if one byte changes.
2 · Chain
Each ledger entry stores the previous entry's hash. Altering or removing any record breaks the chain visibly.
3 · Verify
Drop the same file later. If its fingerprint is on the ledger, you see exactly when it was registered.
Free for everyone
No accounts, no limits, no payments. Register and verify as many files as you like.
What it proves — and what it doesn't
Proves
- This exact SHA-256 fingerprint was registered no later than the stated time.
- Any file producing this fingerprint existed, byte-for-byte, by that time.
- The record sits in a hash chain: altering or removing it breaks the chain visibly.
Does not prove
- Who created or authored the document.
- Whether the contents of the document are true.
- When the document was originally written or created.
FAQ
Is my file uploaded?
No. Only the 64-character fingerprint is stored. The file cannot be rebuilt from it.
Is this a real RFC 3161 timestamp?
Not by itself. Times here come from your device clock (or the server clock if you run the backend). A true RFC 3161 timestamp needs a Timestamp Authority (TSA) such as FreeTSA to sign the hash. You can send the fingerprint to a TSA with openssl ts.
Does the Safety Check replace antivirus?
No. This flags common warning signs; it is not a full antivirus. A clean result doesn't guarantee a file is safe. It looks for disguised programs, macros, risky PDF actions, suspicious archives and scam/malware patterns in text, all inside your browser. Use the VirusTotal button for a second opinion.
Is the ledger public?
In static mode the ledger lives in this browser's localStorage — export it as JSON to share or back it up. A shared public ledger needs the included Python backend (or another server).
What does "chain intact" mean?
Every entry's hash is recomputed from its contents plus the previous entry's hash. If anything was edited, deleted or reordered, the check fails and shows where.
Register
Choose a file to fingerprint
Verify
Check a file against the ledger
Public Ledger
Hash-chained entries
| # | Registered | Fingerprint | Label | Entry hash |
|---|
Safety Check
Check a file or text for warning signs
This flags common warning signs; it is not a full antivirus. A clean result doesn't guarantee a file is safe.
Free for everyone
Crypto News
Crypto headlines. No account or payment needed.
Crypto news · Latest 200 headlines across the available feeds. Updates every 5 minutes while this tab is open. Older topic coverage keeps its original date. Not financial advice.
Canada & global markets · Free
Financial Markets
A market snapshot and the latest business headlines. No account or API key needed.
Indicative quotes may be delayed, stale or unavailable. Currency and quote time appear on each card. Markets close on weekends and holidays. Not financial advice.
Quotes via Yahoo Finance, with a secondary Yahoo host as an availability fallback. Gold and WTI are futures contracts. USD/CAD is CAD per US$1. Changes are versus previous close, not since the last refresh; “—” means unavailable.
Markets & business news
Quotes check every minute and headlines every 5 minutes while Markets is visible. Read the full story at its original publisher. Use the free market API →
Free · No key · Read only
Markets API
Public JSON endpoints for the same snapshot and headlines shown in Markets. Cross-origin GET requests are supported.
Quotes
GET /api/markets/quotes?symbols=^GSPTSE,CAD=X
Omit symbols for all 13 instruments. Comma-separated whitelist only:
^GSPTSE, ^GSPC, ^DJI, ^IXIC, CAD=X, GC=F, CL=F, BTC-CAD, RY.TO, TD.TO, SHOP.TO, ENB.TO, CNQ.TO
{
"quotes": [{"symbol": "CAD=X", "name": "USD/CAD",
"price": 1.35, "currency": "CAD", "change": 0.002,
"change_percent": 0.148, "as_of": "2026-11-06T21:00:00.000Z",
"source": "Yahoo Finance", "delayed": true, "status": "ok"}],
"fetched_at": "2026-11-08T15:00:00.000Z", "delayed": true
}Illustrative values only, not actual quotes. Times are ISO 8601 UTC. Change is against previous close; units are points or the quote currency. Unavailable symbols have status "unavailable" and null price.
Headlines
GET /api/markets/news?region=canada
Regions: all (default), canada, us, commodities, forex. Categories are approximate feed/keyword matches.
{
"items": [{"title": "Example market headline", "url": "https://example.com/story",
"source": "Publisher", "published_at": "2026-11-06T17:00:00.000Z",
"regions": ["canada"]}],
"sources": ["Publisher"], "region": "canada", "fetched_at": "…"
}Fair use & limitations
Quotes cache for 60 seconds; headlines for 300 seconds. Please do not poll faster. GET and OPTIONS only, CORS origin *. Invalid parameters return 400; unavailable upstreams return 502. No guaranteed uptime, completeness, real-time prices or trading suitability.
Free access to this endpoint is not a data redistribution licence: original publishers and market-data providers retain their rights and terms. Verify permissions before commercial reuse. Headline links may lead to paywalled stories. Never use this data as financial advice.
fetch('https://sample-8.pages.dev/api/markets/quotes?symbols=RY.TO')
.then(response => response.json()).then(console.log);