§1 · ACCOUNT
Purchase an ACCOUNT
An ACCOUNT is a one-time purchase that gives you an anchor key and a capacity quota. Register artifacts against the key as many times as your capacity allows — no per-transaction signing, no Stripe, no user accounts.
Payment — x402 on Base
Payment uses the x402 protocol — USDC on Base, settled via the Coinbase CDP facilitator. The server returns a 402 with payment requirements for both tiers; sign a USDC transfer authorization via EIP-712 and retry with an X-PAYMENT header. The ACCOUNT is created, and your anchor key is returned once — save it.
curl -X POST https://api.anchorregistry.ai/register/account \
-H "Content-Type: application/json" \
-d '{"capacity_tier": "starter"}'
# → 402 Payment Required
# Accepts header lists starter ($50) and builder ($100) options.{
"ar_id": "AR-2026-XXXXXXX",
"anchor_key": "<32-byte hex>", // shown ONCE — save this
"capacity": 50,
"tier": "starter",
"tx_hash": "0x...",
"block_number": 12345678,
"rail": "x402",
"status": "confirmed",
"verify_url": "https://anchorregistry.ai/AR-2026-XXXXXXX"
}§2 · Registration
Register an artifact
Use your anchor key as a bearer token. Each successful registration deducts one from your ACCOUNT balance — no per-call payment. The manifest hash should be a SHA-256 over the artifact content or canonical metadata.
curl -X POST https://api.anchorregistry.ai/register/x402 \
-H "Authorization: Bearer <anchor_key>" \
-H "Content-Type: application/json" \
-d '{
"manifest_hash": "<sha256 of artifact>",
"artifact_type": "CODE",
"title": "My Project v1.0",
"descriptor": "MY-PROJECT-V1",
"git_hash": "abc123",
"license": "MIT",
"language": "Python",
"version": "1.0.0",
"url": "https://github.com/org/repo"
}'{
"ar_id": "AR-2026-YYYYYYY",
"tx_hash": "0x...",
"verify_url": "https://anchorregistry.ai/AR-2026-YYYYYYY",
"remaining_capacity": 24,
"status": "confirmed"
}Supported types
Each type carries its own optional fields — pass any type-specific field on the request body and it will be persisted with the anchor.
§3 · Balance & tree
Check balance and top up
Every ACCOUNT is the root of a provenance tree. The balance derives from the capacity of the root plus any top-ups, minus artifacts already registered. Top-ups attach as child ACCOUNT anchors under the same root.
curl https://api.anchorregistry.ai/account/<anchor_key>/balance
# {
# "root_ar_id": "AR-2026-XXXXXXX",
# "total_capacity": 50,
# "used": 1,
# "remaining": 49
# }curl https://api.anchorregistry.ai/account/<anchor_key>/tree
curl -X POST https://api.anchorregistry.ai/register/account/topup \
-H "Content-Type: application/json" \
-d '{"anchor_key": "<key>", "capacity_tier": "starter"}'
# → 402 (pay via x402, then capacity increases)§4 · SEAL
Seal a provenance tree
Sealing a tree declares it authentic, complete, and permanent. No new children can be added under a sealed tree. Useful at release boundaries — lock a v1.0 tree before moving to v2.0. The SEAL action is on-chain and irreversible.
curl -X POST https://api.anchorregistry.ai/registration/seal \
-H "Content-Type: application/json" \
-d '{
"ar_id": "AR-2026-XXXXXXX",
"reason": "Release v1.0 finalized",
"token_commitment": "0x<sha256(anchor_key + ar_id)>",
"new_tree_root": ""
}'token_commitment is 0x-prefixed SHA-256 of your anchor key concatenated with the AR-ID being sealed. Only the tree root can be sealed. Optionally pass a continuation pointer in new_tree_root to point readers at a successor tree.
§5 · Verify
Resolve any AR-ID
Verification is free and public. Resolve any AR-ID or manifest hash to its full provenance record — no authentication needed. The machine endpoint always returns JSON; the smart URL content-negotiates on Accept.
curl https://api.anchorregistry.ai/verify/AR-2026-XXXXXXX
curl https://api.anchorregistry.ai/verify/hash/<sha256>
curl https://anchorregistry.ai/machine/AR-2026-XXXXXXX
curl -H "Accept: application/json" \ https://anchorregistry.ai/AR-2026-XXXXXXX
Embed tags
Drop an SPDX-Anchor tag into your README, paper, or model card — any human or AI encountering it can resolve the full provenance tree in one request.
SPDX-Anchor: https://anchorregistry.ai/AR-2026-XXXXXXX
§6 · MCP Server
Native AI agent integration
AnchorRegistry ships a public, authless MCP server at mcp.anchorregistry.ai/mcp. Any MCP-compatible AI client — Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, or any custom agent — can install it and resolve AR-IDs, manifest hashes, and full provenance trees in a single tool call. The server is published in the Official MCP Registry as io.github.AnchorRegistry/ar-mcp and listed on Smithery.
Tools (v0.1)
Resolve an AR-ID to its full provenance record. Use when an SPDX-Anchor or DAPX-Anchor tag is encountered in a README, paper, model card, or website.
input: ar_id (e.g. AR-2026-qnPOJ1z)
Resolve an artifact by SHA-256 manifest hash. Use when the artifact is in hand but no AR-ID is known.
input: manifest_hash (64-char hex, no 0x prefix)
Resolve the full provenance tree for any AR-ID — root anchor plus all descendants with relationships, types, manifest hashes, and timestamps.
input: ar_id (any anchor in the tree)
All three tools are read-only and authless — no API key, no anchor key, no rate limit beyond defaults. Free to use. Future versions will add registration, balance lookup, and seal tools once the MCP credential pattern stabilizes.
Install
claude mcp add --transport http anchorregistry https://mcp.anchorregistry.ai/mcp
{
"mcpServers": {
"anchorregistry": {
"type": "http",
"url": "https://mcp.anchorregistry.ai/mcp"
}
}
}For Claude Desktop and Cursor, add via Settings → Connectors / MCP → Add custom connector with URL https://mcp.anchorregistry.ai/mcp. For testing without an installed client, use the MCP Inspector — a browser-based tool that connects to any MCP server URL and exercises its tools interactively.
Try it
Once installed, ask any MCP-aware AI client a question that requires provenance lookup. The agent will discover and call the appropriate AnchorRegistry tool automatically.
“Look at https://github.com/AnchorRegistry/ar-contracts-v1 — find any AR-ID in the README and resolve it.”
Found and resolved. Here’s what’s anchored at AR-2026-qnPOJ1z:
AnchorRegistry V1 — the genesis CODE anchor for the v1 contracts repo.
- Author: Ian Moore
- Descriptor: ANCHORREGISTRY-V1-GENESIS
- Manifest hash: 664034ff7b3517ef8f2708b81646414a6482d8cc362d52144a877648f94ceae6
- License / language / version: BUSL-1.1 · Solidity · v1
- URL: https://github.com/AnchorRegistry/ar-contracts-v1
- Registrant: 0xC7a7AFde1177fbF0Bb265Ea5a616d1b8D7eD8c44
- Registry contract: 0x3eC509393425BCAa48224FB90C710e100ADA1D2A
- Anchored: 2026-04-11 15:48:47 UTC, block 44,566,590
- Tx: 0xdf1b1acbc1899110abe5126a4bc550a8a8648521dc3e92d363d062b13a865434
- Status: root anchor (depth 0), not sealed, not retracted
Tree children (depth 1):
- AR-2026-jVPvp5Q — RESEARCH — Trustless Provenance Trees: A Game-Theoretic Framework for Operator-Gated Blockchain Registries (the arXiv paper)
- AR-2026-pJ53j6K — CODE — AnchorRegistry Python Package
The agent fetches the repo, finds the SPDX-Anchor tag, calls ar_verify_arid, and returns the full provenance record — title, author, type, manifest hash, registrant address, transaction hash, block number, anchored timestamp, and seal status.
For deeper provenance lookups, agents reach for the other two tools as the situation calls for. ar_resolve_tree returns the full descendant graph rooted at any AR-ID — useful when the agent needs to verify not just one artifact but every component of a release tree (e.g., a paper plus the code plus the dataset that produced it). ar_verify_by_hash is the inverse path: when the artifact is in hand but no AR-ID has been observed, the agent computes a SHA-256 of the content and resolves the anchor directly from the hash — useful for integrity-checking a downloaded model weight, a research PDF, or a code archive against the registry without trusting any tag the file might carry.
Transport
Streamable HTTP at /mcp (canonical, recommended). Legacy SSE at /sse for older clients. Both transports proxy to the same Cloudflare Worker deployment — a thin pass-through over the AnchorRegistry verify endpoints. Source under MIT at github.com/AnchorRegistry/ar-mcp.
§7 · Python Package
Read the registry directly from Base
No API key. No account. No dependency on AnchorRegistry infrastructure. Just an RPC endpoint and the contract address. The anchorregistry Python package reads on-chain event logs directly — trustless by construction. If anchorregistry.com goes offline tomorrow, every anchor remains queryable with this package and any Ethereum RPC provider.
pip install anchorregistry
from anchorregistry import configure configure(network="base")
from anchorregistry import get_by_arid
record = get_by_arid("AR-2026-x1llnO1")
print(record["artifact_type_name"]) # CODE
print(record["manifest_hash"]) # sha256 of the artifact
print(record["contract_address"]) # which deployment holds itfrom anchorregistry import authenticate_tree
result = authenticate_tree(
ownership_token="0x1a2b3c...",
root_ar_id="AR-2026-x1llnO1",
)
print(result["authenticated"]) # True
print(result["anchors_verified"]) # 3
print(result["anchors_failed"]) # 0from anchorregistry import verify
result = verify("AR-2026-x1llnO1", file_path="./my_artifact.py")
print(result["verified"]) # True
print(result["hash_match"]) # Truefrom anchorregistry import watermark
tag = watermark("AR-2026-x1llnO1")
# "SPDX-Anchor: anchorregistry.ai/AR-2026-x1llnO1"from anchorregistry import is_sealed
status = is_sealed("AR-2026-x1llnO1")
print(status["sealed"]) # True
print(status["continuation"]) # AR-2026-YYYYYYYFull documentation: anchorregistry.readthedocs.io
§8 · Testnet
A shared sandboxed AnchorRegistry environment
AnchorRegistry runs a single shared testnet — one UI, one API, one contract on Base Sepolia, used by every developer with access. It mirrors the mainnet surface end-to-end: same endpoints, same AR-ID format, same verify flow, full V1.5 feature parity including the x402 rail, ACCOUNT anchors, and SEAL. Separate state from production, separate keys, no real money.
Hosted access is by request only. Email support@anchorregistry.com with a brief description of what you’re building and we’ll grant you access to the shared testnet UI and API.
Endpoints
What testnet gives you
- Stripe rail in test mode — $5 / $9 / $12 individual anchor purchases with Stripe’s published test card numbers. No real charges.
- x402 rail — ACCOUNT anchors, batch registration, top-ups, Starter and Builder tiers. Uses Sepolia USDC.
- SEAL end-to-end, including the H(K ∥ C_seal) token commitment flow.
- All 24 artifact types, including the gated types (LEGAL, ENTITY, PROOF) for testing only.
- Full verify surface, ownership token flow, and tree resolution.
Read testnet from Python
The anchorregistry Python package reads on-chain logs directly and works against testnet without any hosted dependency. Point it at Base Sepolia:
from anchorregistry import configure, get_by_arid
configure(network="base-sepolia")
record = get_by_arid("AR-2026-XXXXXXX")
print(record["artifact_type_name"])
print(record["contract_address"]) # 0xB0435faA...What’s different from production
- AR-IDs issued on testnet are not portable to mainnet. They share the AR-{YYYY}-{hashid} format but are scoped to the testnet contract address.
- Testnet uses Base Sepolia ETH for gas and Sepolia USDC for x402. Both are freely available from public faucets.
- Testnet state may be reset between major version upgrades. Production is immutable; testnet is not.
- Testnet anchors carry no real provenance weight and should not be embedded in published artifacts as proof of authorship.
Requesting access
Email support@anchorregistry.com and include:
- — Your name, GitHub handle, or organization
- — A short description of what you’re integrating (anchorid CLI, custom client, agent, etc.)
- — The wallet address you’ll use for x402 testing on Base Sepolia (if applicable)
Testnet is a shared environment — every approved developer registers against the same contract and the same database. Treat anything you publish there as visible to other testers.
Full API surface is listed at api.anchorregistry.ai/docs. Source for the Python client lives at github.com/anchorregistry/ar-python. Questions: support@anchorregistry.com.