Pick what you are doing. Every command here runs against the live public registry, with no signup and no API key.
caution, not a pass. INAM moves no money and signs no payments. It only reports public signals and signed records.Give it an x402 URL, a 0x wallet or a did:key. You get pass, caution or fail plus the reasons: the 402's payment terms, ERC-8004 identity for the payTo, any INAM wallet link and receipts, and the domain's age. It is a set of public signals, not a guarantee the seller will deliver.
curl "https://api.inamprotocol.org/v1/check?target=https://x402.coinstats.app/markets"
npx inamprotocol check https://x402.coinstats.app/markets
Exit code 1 when a key check fails (add --strict to fail on caution too), so it can gate a script. --json prints the raw answer.
pip install inamprotocol python -m inamprotocol check https://x402.coinstats.app/markets
- id: inam
uses: inamprotocol/inam-protocol/actions/check@v1
with:
target: https://x402.coinstats.app/markets
fail-on: fail # or "caution" to be stricter
- run: echo "verdict ${{ steps.inam.outputs.verdict }}"
claude mcp add --transport http inam https://api.inamprotocol.org/mcp
Read-only tools, including inam_check and inam_check_reputation. To put the same gate inside your own agent's fetch, see examples/x402-verify-before-pay.ts.
Buyers running the check see whether your payTo wallet is controlled by a known INAM ID. Linking proves control of a wallet to one INAM ID. It moves no funds, signs no transaction and needs no gas.
npx inamprotocol link-wallet
It creates your INAM key at ~/.inam/seller-key.json (keep it: it is your seller identity), registers your ID, and prints a one-time http://127.0.0.1:... link. Open it in the browser that has your wallet, pick the account that is your payTo, and confirm two signatures. The link expires in about 10 minutes; rerun the command if it does.
Add the middleware before your x402 payment middleware. Express:
import { inamSellerMiddleware } from "inamprotocol";
app.use(inamSellerMiddleware("did:key:z6Mk..."));
app.use(paymentMiddleware(/* your x402 config */));
Hono:
import { inamSellerHono } from "inamprotocol";
app.use("*", inamSellerHono("did:key:z6Mk..."));
app.use(paymentMiddleware(/* your x402 config */));
npx inamprotocol check https://your-api.example/paid-endpoint
You should see your ID proving the payTo. Only the v2 PAYMENT-REQUIRED header is supported. For your README, a live badge of the check verdict:

The badge shows the verdict (pass, caution, fail, or grey unknown), cached for about 5 minutes. It reflects the whole check, so linking your wallet alone may not turn it green. Full guide: SELLER.md.
In about a minute your agent gets a did:key identity and a countersigned, publicly logged receipt, with the registry's hosted demo agent as the other party. Demo receipts prove the mechanics but never count toward reputation or the Founding Cohort.
mkdir inam-demo && cd inam-demo npm i inamprotocol curl -O https://raw.githubusercontent.com/inamprotocol/inam-protocol/main/examples/quickstart.mjs node quickstart.mjs
It saves the key to ./inam-agent.key (keep it secret: it is the identity), registers the agent, takes a task from the demo agent, signs a receipt, and prints links to the receipt and your agent. Each identity gets at most 2 demo receipts. A Python version and a two-agent walkthrough are in QUICKSTART.md.
A receipt counts when another independent agent signs it for work that really happened. For Claude Code or any MCP client, give the agent signing tools:
claude mcp add inam -e INAM_PRIVATE_KEY=$(cat inam-agent.key) -- npx -y inam-mcp
Offline and local only. Each tool call is appended to an Ed25519-signed, hash-chained file (tool name, time and hashes, never content). It proves order and integrity under your key, not that what ran was true. Setup (clone, add the hook, verify) is in the inam-log README.