umarise
Anchor files to Bitcoin. Verify proofs offline.
Content-blind proof-of-existence infrastructure. Umarise never receives your file, only its SHA-256 hash.
Install
pip install umarise
Quick start (CLI)
# 1. Get your free API key at https://umarise.com/developers
export UMARISE_API_KEY=um_your_key_here
# 2. Anchor a file
umarise anchor contract.pdf
# 3. After ~2 hours (Bitcoin confirmation), get full proof
umarise proof contract.pdf
# 4. Verify — no API key needed, works offline
umarise verify contract.pdf
Expected output
$ umarise anchor contract.pdf
✓ hash computed: sha256:a1b2c3d4e5f6...
✓ anchored: origin_id f47ac10b-58cc-4372-a567-0e02b2c3d479
ℹ proof.ots pending — Bitcoin confirmation takes ~2 hours
✓ certificate saved: contract.pdf.proof
✓ receipt: contract.pdf.certificate.json
$ umarise proof contract.pdf # after ~2 hours
✓ hash: sha256:a1b2c3d4e5f6... (already anchored)
✓ origin_id: f47ac10b-58cc-4372-a567-0e02b2c3d479
✓ anchored in Bitcoin block 943943
✓ no later than: 2026-04-06
✓ saved: contract.pdf.proof
✓ extracted: contract.pdf-proof/
✓ proof valid — independent of Umarise
$ umarise verify contract.pdf
✓ hash matches
✓ anchored in Bitcoin block 943943
✓ no later than: 2026-04-06
✓ proof valid — independent of Umarise
Python SDK
from umarise import UmariseClient
client = UmariseClient(api_key="um_your_key_here")
# Anchor a file (hash computed locally, file never leaves your machine)
result = client.anchor("contract.pdf")
print(result.origin_id) # f47ac10b-...
print(result.hash) # sha256:a1b2c3...
# Check proof status
proof = client.proof(result.origin_id)
if proof.status == "anchored":
print(f"Bitcoin block: {proof.bitcoin_block_height}")
# Anchor a pre-computed hash (for pipelines)
result = client.anchor_hash("sha256:a1b2c3d4e5f6...")
# Resolve metadata (no API key required)
origin = client.resolve(origin_id="f47ac10b-...")
origin = client.resolve(hash="sha256:a1b2c3...")
# Verify a hash (no API key required)
check = client.verify("sha256:a1b2c3d4e5f6...")
if check["found"]:
print(check["origin"])
How it works
- Hash locally — SHA-256 is computed on your machine. Your file never leaves.
- Anchor — The hash is submitted to the Umarise registry and queued for Bitcoin anchoring.
- Bitcoin confirms — Within ~2 hours, the hash is embedded in a Bitcoin block via OpenTimestamps.
- Verify independently — Anyone with the file and
.proofbundle can verify. No API, no account, no Umarise dependency.
The .proof bundle
contract.pdf.proof (ZIP)
├── certificate.json # origin metadata (hash, origin_id, timestamp, block)
├── proof.ots # binary OpenTimestamps proof (Bitcoin anchor)
├── artifact.pdf # copy of the original file (proof command only)
└── VERIFY.txt # verification instructions
Important: The
.prooffile must be in the same directory as the original file forverifyto find it automatically.
CI/CD
For automated anchoring in GitHub Actions, use the official action:
- uses: AnchoringTrust/anchor-action@v1
with:
api-key: ${{ secrets.UMARISE_API_KEY }}
files: dist/build.tar.gz
→ GitHub Marketplace: Umarise Anchor
Pricing
Your API key includes 100 free anchors. No email, no account required.
For production use, see umarise.com/pricing.
Links
- Documentation
- API Reference
- Anchoring Specification
- Independent Verification
- npm CLI (Node.js alternative)
- Status
License
MIT
Release files for umarise 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| umarise-1.0.0.tar.gz | 8.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| umarise-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.7 kB
Release files / umarise-1.0.0.tar.gz
| Download URL | umarise-1.0.0.tar.gz |
|---|---|
| Size | 8.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
de30fac6f3c8b6eebe9bdb6be8494f2aaa71a994efd07e287648aa0d85797e13
|
|
BLAKE2b-256 checksum How to use checksums |
e90d19dc070e370e4fb007365481361dd3f1da5e1f1d213ed13fefddca605280
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|
Release files / umarise-1.0.0-py3-none-any.whl
| Download URL | umarise-1.0.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6e948537b6b5159ab132e65e7689357f2f88b48c9ec3d0eef42093241867dcba
|
|
BLAKE2b-256 checksum How to use checksums |
a426626b6ba283b768945c511fb6eee2224d824ae2d4e8909fcce868553362d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.3
|