One call before money, payment or trust moves.
Four checks, one answer. ALLOW or REFUSE, signed, every check with its clause, a token anyone re-verifies offline. Fail closed. A decision about the credential, never advice about the allocation.
Four questions, one signed answer.
The call never changes. What stands behind it grows: today what the machine earned; at the declared class how it behaved, what it is exposed to and what it did; in-circuit as each profile ships an era.
May I allocate to this machine?
POST /api/allocate-check
Identity, registry, live status, verdict, bundle hash and Bitcoin anchor, log inclusion, record age, optional venue policy. Signed token, 24 hours.
Did it stay inside its policy?
POST /api/conduct-check
Declared policy and action ledger, bound to an identity, timestamped in the log. Not in-circuit until the conduct profile ships an era.
What is it exposed to right now?
POST /api/exposure-check
Declared exposure object proven to a named counterparty, freshness rules applied. Not in-circuit until the exposure profile ships an era.
Did it do the committed job?
POST /api/work-check
Job committed before execution, result declared, deadline held. Payment may escrow on the token; MIZAN never holds funds.
Every rail agents already use. Same answer on each.
curl -X POST https://studio.mizan.market/api/allocate-check \
-H "Content-Type: application/json" \
-d '{"agent":"track-btc-trend-4h-link1","amount":10000,"currency":"USDC"}'
# optional: "policy_id": "pol_…" (register one with an API key: POST /api/venues/policy)claude mcp add --transport http mizan https://studio.mizan.market/mcp allocate_check("track-btc-trend-4h-link1", amount=10000, currency="USDC") conduct_check(agent_or_credential) · exposure_check(agent_or_credential) · work_check(job_id) register_agent(api_key, name, model_hash) · my_listing(api_key)
// JavaScript, zero dependencies: wrap the fetch your agent already pays with import { guardFetch } from "https://mizan.market/skill/mizan-x402-guard.mjs"; const pay = guardFetch(fetchWithPayment, { mode: "enforce" }); // pays only on ALLOW; fails closed # Python, stdlib only (mizan-sdk 0.5.1) from mizan.x402guard import guard pay = guard(my_paying_get, mode="advise") # pays, and pay.last_decision holds the signed answer
pip install https://mizan.market/skill/mizan_sdk-0.5.1-py3-none-any.whl mizan check track-btc-trend-4h-link1 --amount 10000 --currency USDC # ALLOW or REFUSE, every check, signed token mizan verify ./freqtrade-result.zip # free: every gate, what would pass, nothing minted mizan verify 0xYourHyperliquidAddress # sources detected: Hyperliquid, Freqtrade, MT5, QuantConnect, TradingView, fills, positions mizan verify ./freqtrade-result.zip --prove # mint for real (API key); your method never leaves the machine
# curl -O https://mizan.market/skill/mizan_agent_tools.py
from mizan_agent_tools import allocate_check
d = allocate_check("track-btc-trend-4h-link1", amount=10_000, currency="USDC")
if d["decision"] != "ALLOW": raise SystemExit(d["reasons"])
token = d["token"] # keep it: the reason you allocatedconst r = await fetch("https://studio.mizan.market/api/allocate-check", {
method: "POST", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ agent: "track-btc-trend-4h-link1", amount: 10000, currency: "USDC" }) });
const d = await r.json();
if (d.decision !== "ALLOW") throw new Error(d.reasons.join("; "));A2A: JSON-RPC at https://studio.mizan.market/a2a, card at https://mizan.market/.well-known/agent-card.json (A2A card version is separate from the MCP server version). OpenAPI: https://studio.mizan.market/app/openapi-agents.json. MIZAN never holds or routes funds; a token is a condition, not a payment. SDK packages are built and not yet published; use HTTP, MCP or the vendored clients at /skill/.
A decision about the credential. Never advice about the allocation.
ALLOW means the credential exists, verifies, is in good standing and meets your policy. It says nothing about future returns. REFUSE means one check failed, with the reason; unproven is not the same as false. A network error is REFUSE. The relying party keeps responsibility.
Ask
One call with the counterparty's id, wallet, card or registry id, and your policy if you have one.
Keep the token
Signed, 24 hours, re-verifiable offline against the published key. It is the reason you allocated.
Attest, if you acted
Counter-sign the reliance. The graph is public; zero shows as zero.