Skip to content

hosted lanes

Choose the hosted service you need.

WhiteMagic runs locally without a hosted service. Use hosted recall to search the read-only public corpus, or use the verifier to check a Continuity Receipt bundle. Both have a free path; install nothing to try them.

Recall · search public documentation

Search the read-only public corpus from an MCP client. A free evaluation key allows 50 recalls/day; anonymous and trial access are also available in the reference below.

Inspect the tool directory without a key
curl -s https://mcp.whitemagic.dev/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Evaluation keys are available at mcp.whitemagic.dev/keys; no account or payment is required.

Verification · check a receipt bundle

The hosted API has a free evaluation-key path at mcp.whitemagic.dev/keys. For a fully local check, use the published sample in the browser explorer on Trust.

Hosted verification command (requires a free key and a local bundle.json):

Use the API with your receipt bundle
curl -s https://api.whitemagic.dev/verify \
  -H "Authorization: Bearer $WM_API_KEY" \
  -H 'Content-Type: application/json' \
  -d @bundle.json | jq .verdict

Connect a client with a free key

Choose your client and copy its configuration. You can inspect the setup before generating a key. This connects to the public read-only corpus; your local store is not uploaded.

Free evaluation key · 50 recalls/day

No account or payment needed. Generate a key, or use your existing key in the configuration below, to search the read-only public corpus.

.mcp.json — or: claude mcp add --transport http whitemagic-hosted https://mcp.whitemagic.dev/mcp --header "Authorization: Bearer YOUR_KEY_HERE"

Replace YOUR_KEY_HERE with your key before using this configuration.

{
  "mcpServers": {
    "whitemagic-hosted": {
      "type": "http",
      "url": "https://mcp.whitemagic.dev/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY_HERE"
      }
    }
  }
}

Prepaid credits or monthly capacity

Choose one-time prepaid credit packs or optional monthly node leases. Payment is followed by operator verification and key provisioning within 24 hours. x402 session leases on Base USDC are a separate option; read the endpoint’s current payment requirements. Arrange owner-mapped Memory Crystal access before paying for storage.

Verification receipts are Ed25519-signed CPR results from the service. Notarization signs caller-supplied digests and claims; it does not prove the underlying action occurred. A SCITT mapping is proposed; no SCITT registration or interoperability is established by these offers. Inspect the evidence and verification limits.

Card checkout or invoiceBase USDC · operator verificationXRPL · Operator Review
Local core is free & open-source forever. Free hosted paths require no account:50 calls/day instant evaluation key, or header X-WM-Trial: 1 (10 calls/day).
View pricing.json →
Commons Tip Jar · Gratitude Economy (Dāna)
Founding Patrons Hall of Fame →

WhiteMagic's local core is free & open-source forever (MIT). We practice a non-coercive gratitude economy: tips are 100% voluntary and never blended into metering or paywalls. 100% of all contributions directly fund open-source R&D, continuous test compute, and the Agent Commons Pool for developers and autonomous agents without wallets.

Base Mainnet (USDC / ETH)BaseScan
0x213b6bB4fB073E86167c58DA6Cb6E9477557DaA8
XRP Ledger (XRP / RLUSD)Ledger
raakfKn96zVmXqKwRTDTH5K3j5eTBp1hPy

Every patron and contributor receives a signed CPR continuity attestation (0.5#attestation) permanently recorded in our Founding Patrons ledger.

Nano Pack$0.002 / call
$5USD / USDC

2,500 metered tool calls

2,500 metered tool calls ($0.002/call) + 128 MB Memory Crystal Vault

Pro Swarm Pack$0.002 / call
$20USD / USDC

10,000 metered tool calls

10,000 metered tool calls ($0.002/call) + 512 MB Memory Crystal Vault

Citadel Sovereign$0.002 / call
$150USD / USDC

75,000 metered tool calls

75,000 metered tool calls ($0.002/call) + High-throughput swarm lane & notarization

Enterprise custom leases, high-volume swarms, and bespoke SLA pilots are scoped via /enterprise. See our Billing, Delivery, Refunds & Cancellations Policy.

wm-crystal/1.0

Client-Encrypted Memory Crystals & Citadel Notary

Agents can encrypt memory payloads locally with client-side AES-256-GCM or ChaCha20-Poly1305; while keys remain client-side, this protects payload plaintext. The service stores ciphertext plus envelope metadata, including content addresses and any supplied public metadata. Hosted requests and operations also expose limited service metadata; see the Privacy Policy for audit fields and IP-related limits. The VPS Citadel stores content-addressed ciphertext envelopes (up to 2 MiB per crystal) and countersigns Causal Provenance Receipts (CPR).

Crystal Endpoints:
  • POST https://api.whitemagic.dev/crystals (Store sealed crystal)
  • GET https://api.whitemagic.dev/crystals/:id (Owner-authenticated read)
  • GET https://api.whitemagic.dev/crystals/lineage (State provenance chain)
Citadel Notary & Receipts:
  • POST https://api.whitemagic.dev/verify (Stateless verification)
  • POST https://api.whitemagic.dev/notarize (Digest attestation)
  • GET https://api.whitemagic.dev/anchors/:digest (OpenTimestamps proof)

Client SDK available in crystal_client.py. Every read and write requires a provisioned owner-mapped key. Arrange storage access before paying; an x402 payment or session pass alone does not establish ownership.

Hosted Memory — Write Beta (Experimental Next Lane)

On the experimental next lane (next.mcp.whitemagic.dev), write-scoped keys store their own memories: each key gets an isolated per-tenant store, and reads fuse tenant + public corpus with partition: tenant | corpus labels. The beta is invitation-only and quota-scoped: free evaluation keys include a daily write sample (20 writes / 1 MB), x402 task-and-above leases carry a write scope (500 writes / 10 MB per payer per day), and operator-issued keys set their own limits.

Tenant plan — published direction, opening in beta: $5/mo per 128 MB, including 10,000 write ops/mo; extra ops $1/10,000. Request access at lab@whitemagic.dev.

Distinct from the $49/mo Hosted Node Lease above: that plan buys a dedicated per-tenant store with priority access and service-signed CPR verification receipts; this write beta is a shared-lane, invitation-only plan for lighter tenants — different limits, manual provisioning within 24h, and the same daily backup/restore targets (best-effort pilot tier, no SLA).

Data handling: tenant content lives only in that key's isolated store; gateway audit lines stay content-free; the key can export its store (GET /tenant/export) or hard-delete it (DELETE /tenant?confirm=1); tenant stores are included in the operator backup (size-capped). No SLA.

Privacy: recall queries are processed to answer the request and are not added to the corpus; write-beta tenant content is stored only in that key's isolated store. Gateway audit entries may record a normalized route and request metadata; see Privacy. Hosted services have no SLA. Looking to support open sovereign infrastructure or sponsor the Agent Commons Pool? Voluntary patronage rails live on the Support page.

API reference, access, billing, and data limits

Service access and limits

WhiteMagic works locally without these services. This reference separates public access, metered access, and owner-authenticated storage.

Recall
Read-only recall over a curated public corpus.
Access
Keyless discovery; anonymous access is capped at 3 calls/day per client; X-WM-Trial allows 10 calls/day; free evaluation keys allow 50 recalls/day; OAuth 2.1 is supported.
Published cost basis
Free within the published allowances. Prepaid invoiced keys start at $5 for 2,500 recalls, with no subscription. The captured /mcp HTTP 402 challenge declared the separate x402 lease tiers below; no payment was made.
Main limit
Curated corpus only; read-only and rate-capped.
Verify, receipts, anchors, and notarization
Check receipt bundles and proofs; host anchors and caller-supplied digest attestations.
Access
POST /verify supports keyless evaluation probes alongside evaluation keys, trial access, or an x402 session lease (verifies multi-record 0.1–0.6 bundles and Gen 3 v11.0.0+ hybrid 0.5 bundles; earlier Gen 3 preview flat 0.5#session records require Gen 3 MCP or v11.0.0+). AER-1 verification, metadata, and selected fetches are keyless. Notarization lookup is keyless; check the current service requirements before submitting a notarization.
Published cost basis
Stateless evaluation probes are free; per-call x402 metering is $0.002 USDC, and the default POST /verify x402 task lease is $0.01 USDC for a 5-minute task lease; alternative lease tiers and free evaluation paths remain available. Read each endpoint's current 402 challenge before paying.
Main limit
Generic API body limit is 1 MiB; batch verification is limited to 50 bundles. Bundle verification is stateless; notarization attests caller-supplied claims.
Evaluation store
Add, search, and delete participant-isolated evaluation records.
Access
Request an access token; health check is keyless.
Published cost basis
No public rate published; evaluation-only service, no SLA.
Main limit
Records are participant-isolated; no general expiry schedule is published.
ERC-8004 outcome adapter
Map a core verifier result plus task binding to an outcome statement.
Access
x402 challenge; signed response is not submitted onchain.
Published cost basis
Default x402 offer: $0.01 USDC for a 5-minute task lease. Evaluation keys and trial access are also available.
Main limit
Issuer policy is not evaluated; anchors are not required; five per-check fields are unreported.
Memory Crystals
Store client-encrypted state and retrieve it within an owner's scope.
Access
Every read and write requires a provisioned owner-mapped key. An x402 payment or session pass alone does not establish ownership.
Published cost basis
Owner-authenticated reads and lineage are free. Arrange storage provisioning before paying; credit-pack and vault allowances are published in /pricing.json.
Main limit
2 MiB maximum per crystal. Manual owner mapping; no first-reader ownership. Unmapped legacy data remains quarantined.

Recall challenge lease tiers · USDC on Base

  • call: $0.002 / 1 minute
  • task: $0.01 / 5 minutes
  • swarm: $0.05 / 15 minutes
  • day: $0.50 / 24 hours

Metadata reviewed 2026-11-07: /info reports verifier 0.5.1; OpenAPI 0.4.1 is a separate contract revision covering 20 paths across verification, AER-1 checks, anchors, payment receipts, notarization, Memory Crystals, and the ERC-8004 outcome adapter. Check live metadata before integrating; these snapshots do not prove successful paid use. Service metadata · OpenAPI contract

Endpoint directory

ServiceURLAccess
MCP recallhttps://mcp.whitemagic.dev/mcpkeyless initialize/tools/list; X-WM-Trial: 1 (10 calls/day); free eval key (50 recalls/day); OAuth 2.1
Evaluation keyshttps://mcp.whitemagic.dev/keysinstant, no account, email optional
Verifier healthhttps://api.whitemagic.dev/healthkeyless
Service metadatahttps://api.whitemagic.dev/infokeyless (verifier version, supported specs, issuer did:key)
OpenAPI contracthttps://api.whitemagic.dev/openapi.jsonkeyless
Receipt verificationhttps://api.whitemagic.dev/verifykeyless evaluation probes, free eval key, or x402 (bundle → verdict; ?receipt=1 for a signed verification receipt)
Anchor proofshttps://api.whitemagic.dev/anchors/<digest>keyless fetch (OpenTimestamps proof hosting)
Evaluation storehttps://api.whitemagic.dev/evalaccess token on request; keyless /eval/health
Notarizationhttps://api.whitemagic.dev/notarizecaller-supplied digest attestation; check current metadata and response requirements
Client-encrypted crystalshttps://api.whitemagic.dev/crystalsowner-authenticated reads; writes via x402
Hostile-IP IOC feedhttps://api.whitemagic.dev/iocskeyless (sanitized blocklist, payload hashes, JA4s; refreshed twice daily)

Recall – read-only

A hosted MCP endpoint at mcp.whitemagic.dev/mcp (streamable-http) serves recall over a curated public corpus: docs, spec, release notes, and the grimoire. Keyless initialize / tools/list for directory probes; an anonymous free tier (3 calls/day per client IP, no key and no header); free evaluation keys are instant at mcp.whitemagic.dev/keys (50 recalls/day, no account, email optional); OAuth 2.1 for clients that speak it. Prefer local? Follow the version-pinned installation guide for the full local write path. Your local store is never uploaded.

Hosted memory – write beta (next lane)

The experimental lane at next.mcp.whitemagic.dev/mcp adds an invitation-only write beta beside the read-only corpus: write-scoped keys get an isolated per-tenant store, and their reads fuse tenant + corpus results with partition: tenant | corpus labels. Write scope reaches evaluation keys as a daily sample (20 writes / 1 MB) and x402 task-and-above leases as a per-payer daily budget (500 writes / 10 MB). Quotas, a per-key write rate limit, a lane-wide daily budget, and a disk guard bound every path; refusals are audited content-free. Tenant control: GET /tenant/export and DELETE /tenant?confirm=1 on the next-lane host with the tenant's key. The tenant plan ($5/mo per 128 MB, including 10,000 write ops/mo, extra $1/10,000) is the published direction while the beta opens; the read-only primary lane is unchanged.

Verify, anchors, receipts

A stateless verification API at api.whitemagic.dev: keyless /health, /info, and /openapi.json; keyed /verify (bundle → verdict, optional signed verification receipt), /verify-receipt, /verify-anchor, and /anchors (OpenTimestamps proof hosting; keyless fetch at /anchors/<digest>). The service metadata snapshot reviewed 2026-11-07 reports verifier 0.5.1 and support for continuity-receipt specs 0.1–0.6; the OpenAPI contract is contract revision 0.4.1 (20 paths covering verification, AER1 checks, anchors, payment receipts, notarization, Memory Crystals, and the ERC-8004 outcome adapter). The keyless POST /aer1/verify reports separate structural and identity verdicts for the AER1 draft 22 profile. Check current /info metadata before integration. The format and five-minute walkthrough are on the trust and receipts pages, and the verification explorer runs the checks in your browser.

Proof-of-Context notarization

An audit trail for agent decisions: POST /notarize signs the caller's supplied context digest or prompt hash together with bounded claims — the action label, model identifier, optional metadata, and the caller's agent address — and returns an Ed25519 attestation under a tamper-evident UTC timestamp. Retrieval is keyless at GET /notarize/<digest>. The service does not observe the underlying context or execution; it attests what the caller supplied, not that the claim is true. For POST /notarize, check current service metadata and access requirements before integrating.

# Python (whitemagic-pay)
receipt = client.notarize_context(
    context_digest="sha256:...",   # or prompt_hash
    action="agent.decision",
    model="gemini-2.5-flash",
    metadata={"epoch": 1},
)

// TypeScript
const receipt = await client.notarizeContext({ contextDigest: "sha256:...", action: "agent.decision" });

Evaluation endpoint

Add / Search / Delete over a participant-isolated store for evaluation harnesses: api.whitemagic.dev/eval (keyless health at /eval/health; access token on request; eval-only infrastructure, no SLA).

ERC-8004 Task-Outcome Validation

The hosted adapter at api.whitemagic.dev/erc8004/validate maps the core receipt-verifier verdict plus task binding to an outcome: TRUSTED → ACCEPT, PROVISIONAL → NEEDS_EVIDENCE, and UNTRUSTED → REJECT. Issuer policy is not evaluated and anchors are not required. Its chain_integrity, signatures_valid,policy_compliant, resource_caps_respected, and anchors_verifiedfields are null (unreported). It returns an Ed25519-signed canonical JSON statement; that signature is not independent proof of the task facts. The service does not submit statements onchain or settle transactions. See the live API info. Calls use x402; the published endpoint price is summarized above.

Client-Encrypted Memory Crystals

Client-encrypted agent-state storage at api.whitemagic.dev/crystals. State payloads are encrypted client-side using ChaCha20-Poly1305 AEAD, which protects plaintext while the keys remain with the client. The service stores ciphertext addressed by a SHA-256 object ID. All reads and writes require an authenticated owner assertion mapped through the explicit owner registry; payment or a session pass alone does not establish ownership. Owner assignment is manual, with no automatic first-reader claim or self-service mapping flow. Existing unmapped legacy data remains held in protected quarantine until an explicit operator mapping is confirmed. If you need help with an existing unmapped crystal, use the contact page to request an ownership review. Do not send plaintext, encryption keys, or bearer credentials. For an already-mapped owner, GET /crystals/owner-locator returns the registry-mapped locator. The wm-crystal/1.0 envelope is preserved. Reads and lineage remain free and require authenticated owner scope. Reads use Cache-Control: private, no-store. Conditional ETag/304 responses are available only after owner authentication; no shared caching. Lineage uses authenticated owner scope at GET /crystals/lineage; writes remain gated via x402 at the published write price summarized above. The /info metadata declares a crystal-specific maximum size of 2 MiB; the general API body limit is 1 MiB; the crystal route has its own 2 MiB cap. See the live API info and OpenAPI contract.

Metering and keys

Metered calls settle per call in USDC on Base via x402: a keyless call to a keyed method answers HTTP 402 with the payment requirements in the challenge – no account, no invoice. Free evaluation keys stay free (50 recalls/day, email optional), an anonymous free tier covers 3 calls/day with no key at all, and per-contract keys carry higher caps and metered audit lines. For scopes and terms, see Enterprise engagements or contact.

x402 quickstart

A method using x402 returns its payment requirement in HTTP 402, mirrored in the base64 PAYMENT-REQUIRED header. The captured /mcp challenge declared the call, task, swarm, and day lease tiers shown above; it was not a paid execution. The first paid call on a payer wallet also returns a welcome session pass (header X-Session-Pass and the tool result); reuse it to skip per-call payment.

Prefer a client library? The open-source whitemagic-pay SDK negotiates the challenge, signs the permit, caches the lease, and retries in one call — and it claims the free faucet pass with no wallet. PyPI · npm · source

pip install whitemagic-pay        # Python
npm install whitemagic-pay        # TypeScript

# Python
from whitemagic_pay import X402Client
client = X402Client(private_key="0xYOUR_FUNDED_BASE_KEY", preferred_tier="task")
status, data, headers = client.request("POST", "https://mcp.whitemagic.dev/mcp", data={...})

// TypeScript
import { X402Client } from "whitemagic-pay";
const client = new X402Client({ privateKey: process.env.AGENT_WALLET_KEY, preferredTier: "task" });
const { status, data } = await client.request("POST", "https://mcp.whitemagic.dev/mcp", { ... });

# No wallet yet? The faucet grants a free 10-minute pass:
client.claim_faucet("https://mcp.whitemagic.dev")   # Python
await client.claimFaucet("https://mcp.whitemagic.dev"); // TypeScript

Manual payer (Python, eth-account): sign an EIP-3009 authorization for the challenge and retry with the base64 payload.

python3 - <<'PY'
import base64, json, secrets, time, urllib.request, urllib.error
from eth_account import Account
from eth_account.messages import encode_typed_data

URL = "https://mcp.whitemagic.dev/mcp"
acct = Account.from_key("0xYOUR_FUNDED_BASE_KEY")

body = {"jsonrpc": "2.0", "id": 1, "method": "tools/call",
        "params": {"name": "memory.search",
                   "arguments": {"query": "recall where we left off"}}}
req = urllib.request.Request(URL, data=json.dumps(body).encode(),
                             headers={"Content-Type": "application/json"})
try:
    urllib.request.urlopen(req)
except urllib.error.HTTPError as e:
    challenge = json.loads(e.read())

tier = challenge["accepts"][0]        # $0.002 call; [1..3] = task/swarm/day
now = int(time.time())
auth = {"from": acct.address, "to": tier["payTo"], "value": str(int(tier["amount"])),
        "validAfter": str(now - 60), "validBefore": str(now + 300),
        "nonce": "0x" + secrets.token_hex(32)}
domain = {"name": tier["extra"]["name"], "version": tier["extra"]["version"],
          "chainId": 8453, "verifyingContract": tier["asset"]}
msg = encode_typed_data(full_message={
    "types": {"TransferWithAuthorization": [
        {"name": "from", "type": "address"}, {"name": "to", "type": "address"},
        {"name": "value", "type": "uint256"}, {"name": "validAfter", "type": "uint256"},
        {"name": "validBefore", "type": "uint256"}, {"name": "nonce", "type": "bytes32"}]},
    "primaryType": "TransferWithAuthorization", "domain": domain, "message": auth})
sig = acct.sign_message(msg).signature.hex()
payment = {"x402Version": 2, "resource": challenge.get("resource"), "accepted": tier,
           "payload": {"signature": sig if sig.startswith("0x") else "0x" + sig,
                       "authorization": auth},
           "extensions": challenge.get("extensions") or {}}
req.add_header("PAYMENT-SIGNATURE",
               base64.b64encode(json.dumps(payment).encode()).decode())
resp = urllib.request.urlopen(req)
print("pass:", resp.headers.get("X-Session-Pass"))  # reuse for later calls
print(resp.read(300).decode())
PY

Reuse the pass — no per-call signing:

curl -s https://mcp.whitemagic.dev/mcp \
  -H "X-Session-Pass: wm_pass_..." \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"memory.search","arguments":{"query":"..."}}}'

Common 402 errors: payload is not base64 JSON; signature missing from the authorization; replayed nonce (each authorization is single-use — sign a fresh one); insufficient USDC or wrong chain. Free alternatives: X-WM-Trial: 1 for 10 calls per day, an instant evaluation key (50 recalls/day), or POST /faucet for a 10-minute pass.

What is recorded, and the limits

Gateway audit entries may include a key name or “unknown”, timestamp, method, status, byte count, normalized route, JSON-RPC method and tool name, client family, bounded User-Agent family, latency, and decision details. Tool arguments, query text, response content, bearer tokens, and raw User-Agent strings are not included. An unrecognized non-empty User-Agent is represented by a truncated SHA-256 fingerprint. The anonymous trial limit uses client IP in an in-memory daily counter; the faucet uses IP and an optional payer/address identifier and writes both into certain persistent audit entries. Bundle verification is processed in memory and the submitted bundle is not stored as bundle content. Details in the Privacy Policy and Terms. The evaluation endpoint stores participant-isolated records for its Add/Search/Delete operations; no general expiry schedule is published. Optional persistent API data also includes revocation documents, anchor proofs, payment receipts, caller-claim notarizations (supplied digests and bounded claims, not the underlying prompt or execution), client-encrypted crystal objects, assertion replay nonces, and service signing keys. The optional verification cache is in memory with a 15-minute configured lifetime; assertion nonces are retained until expiry plus clock-skew allowance. Gateway audit logs have a 90-day retention target under periodic rotation; old archives may not expire immediately. Backups of the hosted store and durable authorization state retain up to four weekly remote and twelve weekly local copies; service records removed from active storage may remain in those backups. Audit logs are excluded from that backup set. Other durable state, including owner mappings, service signing keys, receipts, and crystal ciphertext, has no general expiry schedule. Glimind receives operational tool-call spans containing bounded tool name, HTTP status, latency, service labels, and error class, without arguments, results, payloads, tokens, keys, or IP addresses. See the Privacy Policy. The hosted recall lane is read-only and rate-capped; other endpoints follow the access and payment terms above. Services carry no SLA and run under partial kernel confinement – disclosed, not hidden.