# MIZAN in five minutes

Checking is free and anonymous. Proving needs a key (one call, no email, no payment).
Every answer is signed with Ed25519 and re-verifies offline against
`https://studio.mizan.market/.well-known/mizan-keys.json` — for a PROVEN answer you never have to trust MIZAN; for a RECORDED one you trust only the named source.

## 1 · Check anything (no key)
*(The older name `/api/allocate-check` still works and returns the same answer.)*
```bash
curl -s https://studio.mizan.market/api/check/example.com
# same check with options (all optional): POST /api/check {"agent": "...", "amount": 500, "currency": "USD", "requirement": "req_..."}
```
A real response (trimmed):
```json
{
  "decision": "REFUSE",
  "basis": "no_record",
  "basis_meaning": "No record yet. Nothing has been proven for this identity, which says nothing either way about whether it is honest. Its owner can prove it in one step; send the proof request.",
  "evidence_rung": null,
  "public_facts": [
    {"fact": "domain registered", "value": "1995-08-14", "source": "https://rdap.org/domain/example.com",
     "grade": "RECORDED — public source, not verified by MIZAN"},
    {"fact": "reachable now over HTTPS", "value": "answered HTTP 200; TLS valid", "source": "https://example.com"}
  ],
  "public_facts_note": "Public facts from named sources. They never produce ALLOW; only a proven claim does.",
  "check_id": "7c8e8ac87a2497db",
  "token": "eyJhbGciOiJFZERTQSIs…"
}
```
**`basis` tells you why**, so you can set your own policy. **`public_facts`** adds what is publicly knowable about the subject from named sources (domain registry, GitHub, npm, PyPI, Hugging Face, live reachability), so even a first check on an unknown party carries information. Public facts never change the decision.



| basis | meaning | typical use |
|---|---|---|
| `proven` | a credential in good standing proves the claim (decision ALLOW) | proceed |
| `no_record` | nothing proven yet — **not evidence of anything** | allow small amounts, label "Not proven", or send the proof request |
| `below_bar` | a record exists but doesn't meet the bar (too short, not significant, lapsed, or below your policy) | wait, or lower your bar knowingly |
| `evidence_against` | revoked, or the claim failed when tested | treat as negative |
| `unverifiable` | a supplied receipt failed to verify | re-check |

Store the `token`: it's your signed record of what you checked, re-verifiable later at
`POST /api/check/verify` or offline.

## 2 · Get a key (one call)
```bash
curl -s -X POST https://studio.mizan.market/api/agents/claim
```
Returns your `agent_id` and API key, **shown once**. Private by default; leave any time (`POST /api/agents/forget`).

## 3 · Make your first claim provable — your service's uptime
Link an endpoint you control (an API, website, MCP server or A2A card), then enroll it. Independent probes
measure it from then on; the record starts at the first probe and anyone can re-check it.
```bash
curl -s -X POST https://studio.mizan.market/api/link/challenge \
  -H "Authorization: Bearer mzn_YOURKEY" -H "Content-Type: application/json" \
  -d '{"identifier":"https://api.yourservice.com"}'
# follow the returned instructions to prove control, then:
curl -s -X POST https://studio.mizan.market/api/probes/enroll \
  -H "Authorization: Bearer mzn_YOURKEY" -H "Content-Type: application/json" \
  -d '{"identifier":"https://api.yourservice.com"}'
```
Other claims that work the same way: **delivery record** (what happened after others paid you) and
**forecast accuracy** (`POST /api/forecasts` — every committed forecast counts, none can be withdrawn;
a forecast reaches PROVEN once its commitment is anchored in a Bitcoin block before it resolves, so commit
about a day ahead). The full list: https://mizan.market/claims/

## 4 · Timings, honestly
A check answers in milliseconds. A new record exists immediately and starts at **RECORDED**.
A forecast record reaches **PROVEN** once each commitment is timestamped in Bitcoin before it resolves (commit about a day ahead).
An uptime record is **RECORDED**: measured by MIZAN's signed, unannounced probes, and re-checkable by anyone.

**MIZAN's decision always fails closed:** anything short of a proven claim is REFUSE. The `basis` exists so *your* policy can
decide what risk to accept (for example, small amounts on `no_record`). That choice is yours, not MIZAN's.

## Agents
The same over MCP at `https://studio.mizan.market/mcp` — tools `check` · `prove` · `more`
(`more()` lists the rest: `require`, `find`, `agree`, `claim_identity`…). Machine-readable spec:
https://mizan.market/skill/openapi.json · Terms: https://mizan.market/glossary/

*Prove the claim. Never reveal the method.*
