MioDio LLC · Live API

Check before you sign.

Your AI agent checks who gets paid, whether the transaction matches its intent, and what it will do first.

USDC on Base · no account · no API key

  1. 01 Agent

    unsigned tx

    to
    0x8335…2913
    value
    0
    data
    0xa9059cbb…
  2. 02 Meridian checks read-only

    1. Sanctions

      Price per call: $0.005

      Who is this?

      Sample result, no flag:

      "match": false
    2. Drift

      Price per call: $0.005

      Is this what I meant?

      Sample result, no flag:

      "verdict": "match","chain": "base"
    3. Simulate

      Price per call: $0.01

      What will this do?

      Sample result, no flag:

      "result": "success","gas_used": "24000"

    If the recipient changed

    Drift returns this instead

    Alternate result of the same Drift check, not a fourth step:

    "verdict": "drift","flags": ["recipient_differs"]
  3. 03 Sign or stop

    • SignNo flags. Your agent signs.
    • StopRecipient changed. Your agent stops.
Meridian never signs transactions or moves funds. Sample fields from the free demos and docs.

Disclaimer

Meridian is an x402-paid HTTP API. It returns best-effort snapshots of public on-chain data (Aave v3, Lido + Curve contracts, ERC-4626 vaults), an informational exact-match screen against the public OFAC SDN list, a parameter-drift check that diffs a declared intent against an unsigned transaction or EIP-712 payload you send, and a transaction simulation dry-run of an unsigned transaction against latest chain state. It is not financial, investment, legal, or compliance advice. A vault APY-style field is a reported vault metric — a share-price lookback, not a promise. A drift match means those two inputs agree on the decoded fields — not that the intent was authentic or safe, and not a recommendation to sign. A simulation is a point-in-time dry run, not a guarantee of inclusion or the eventual outcome. Meridian never signs transactions or moves funds. Do not use a card as the sole basis for lending, borrowing, trading, staking exits, custody, or compliance decisions. Data can be incomplete, delayed, or wrong. No SDN match does not mean the wallet is clean. You are responsible for how you use the response. © MioDio LLC.

AI agents Cheap, machine-payable risk check before acting on a wallet.
Builders Wire HTTP + x402 into bots, tooling, and backends.
Not for consumers Not a portfolio tracker. Not a dashboard.

What you get

Thin landing for humans. Agents speak x402.

Try it free, no wallet needed: /v1/demo/risk · /v1/demo/vault · /v1/demo/sanctions · /v1/demo/drift · /v1/demo/simulate (fixed sample inputs; complete cards cached up to 5 min, incomplete cards are not cached).

GET /v1/risk · /v1/lido · /v1/vault · /v1/passport · /v1/sanctions · POST /v1/drift · POST /v1/simulate · POST /v1/payment-check

Endpoint

  • GET /v1/risk/:address?chain=base|ethereum — Aave v3 snapshot (~$0.005)
  • GET /v1/lido/exit-risk?amount=32 — stETH peg + queue ETA (~$0.005)
  • GET /v1/vault/:address?chain=base — ERC-4626 share price, reported vault metric (APY lookback, not a promise), idle cash (~$0.005)
  • GET /v1/passport/:address?chain=base|ethereum — deep passport decision card (~$0.02)
  • GET /v1/sanctions/:address — OFAC SDN exact-match screen (~$0.005)
  • GET /v1/passport-sanctions/:address — passport + SDN bundle (~$0.02)
  • POST /v1/sanctions/batch — up to 50 addresses (~$0.10)
  • POST /v1/drift — parameter-drift check on an unsigned tx / EIP-712 payload (~$0.005)
  • POST /v1/simulate — unsigned-tx dry run: success/revert, gas, balance changes, approvals (~$0.01)
  • POST /v1/payment-check — on-chain USDC nonce / transfer / tx check on Base (~$0.005)
  • GET /v1/payment/status — free status of a payment to Meridian (30/min per IP)
  • GET /v1/receipt/:id — look up a signed per-call receipt · keys at /.well-known/meridian-receipt-keys.json
  • JSON after x402 payment. Free health: GET /health. Scanner receipt: GET /v1/receipt. Docs: /docs · /.well-known/x402 · /.well-known/agent-card.json · /llms.txt · /openapi.json · /robots.txt
  • MioDio LLC

Price

~$0.005 USDC per single card via x402. Deep passport SKU is ~$0.02 USDC. SDN screen is ~$0.005, bundle ~$0.02, batch ~$0.10. Transaction simulation is ~$0.01 USDC (10000 atomic). Payment-check is ~$0.005 USDC (5000 atomic). Paid calls are final; charged-but-failed (5xx) or duplicate calls are refunded on request within 30 days with the tx hash (see Terms §7). No payment → 402. Valid payment → JSON card.

  • Asset: Base USDC 0x8335…2913
  • Singles: 5000 atomic (~$0.005)
  • Deep passport: 20000 atomic (~$0.02)
  • SDN / bundle / batch: 5000 / 20000 / 100000
  • Simulate: 10000 atomic (~$0.01)
  • Payment-check: 5000 atomic (~$0.005)
  • Network: base · Facilitator: Coinbase CDP
Example (Base)
curl -i "https://meridian.miodiollc.com/v1/risk/0xBA9424d650A4F5c80a0dA641254d1AcCE2A37057?chain=base"

No payment header → 402 with requirements. Paid request → JSON card.

Lido exit-risk (Ethereum, 32 stETH)
curl -i "https://meridian.miodiollc.com/v1/lido/exit-risk?amount=32"

Peg from Curve stETH/ETH. Queue from Lido withdrawal contracts. Not a health-factor remake.

ERC-4626 vault (Moonwell Flagship USDC on Base)
curl -i "https://meridian.miodiollc.com/v1/vault/0xc1256Ae5FF1cf2719D4937adb3bbCCab2E00A2Ca?chain=base"
Deep passport (joined Aave + Lido + optional vault)
curl -i "https://meridian.miodiollc.com/v1/passport/0x0000000000000000000000000000000000000001?chain=base&lido_amount=32"

~$0.02 USDC. Default Lido probe is 32 stETH. Pass ?vault= only when you have a real ERC-4626 address — we do not invent positions.

Parameter drift (unsigned ERC-20 transfer)
curl -i -X POST https://meridian.miodiollc.com/v1/drift -H 'content-type: application/json' -d '{"chain":"base","intent":{"action":"transfer","recipient":"0x0000000000000000000000000000000000000001","token":"0x0000000000000000000000000000000000000001","amount":"1000000"},"tx":{"to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","value":"0x0","data":"0xa9059cbb"}}'

~$0.005 USDC. Send the intent you were given plus the exact unsigned tx (or EIP-712 typed data) before signing. Free sample: GET /v1/demo/drift. A match is not a guarantee.

Transaction simulation (unsigned native transfer)
curl -i -X POST https://meridian.miodiollc.com/v1/simulate -H 'content-type: application/json' -d '{"chain":"base","tx":{"from":"0x4200000000000000000000000000000000000006","to":"0x0000000000000000000000000000000000000001","value":"0x1","data":"0x"}}'

~$0.01 USDC. Send the exact unsigned tx (from, to, value, data) before signing. Free sample: GET /v1/demo/simulate. A simulation is a point-in-time dry run, not a guarantee.

Example (Ethereum)
curl -i "https://meridian.miodiollc.com/v1/risk/0xf0e04EdA5b8362Ec7100eA4147df79A94ce75B2c?chain=ethereum"
curl · free health
curl -sS https://meridian.miodiollc.com/health
curl · free scanner receipt
curl -sS https://meridian.miodiollc.com/v1/receipt

How paying works

No API keys. Wallet pays. Header proves it.

How paying works: agent request, 402 Payment Required, USDC on Base, answer plus signed Meridian-Receipt

Flow

  1. GET /v1/risk/:address?chain=base with no payment header.
  2. HTTP 402. Decode the PAYMENT-REQUIRED header: accepts[0].amount, asset, network, payTo.
  3. Pay Exact USDC on Base. Retry the same URL with PAYMENT-SIGNATURE.
402 accepts excerpt
{
  "scheme": "exact",
  "network": "eip155:8453",
  "amount": "5000",
  "payTo": "0x4DA1…8d7F",
  "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "maxTimeoutSeconds": 120
}
agent sketch · TypeScript
// Pseudocode. Use an x402 client / EIP-3009 payer for production.
const url = "https://meridian.miodiollc.com/v1/risk/0xADDRESS?chain=base";

let res = await fetch(url);
if (res.status === 402) {
  const required = JSON.parse(atob(res.headers.get("PAYMENT-REQUIRED")));
  const payment = await payExact(required.accepts[0]);
  res = await fetch(url, {
    headers: { "PAYMENT-SIGNATURE": payment },
  });
}
// 200 JSON plus PAYMENT-RESPONSE, and Meridian-Receipt when signing is on.
const passport = await res.json();

Sample passport JSON

Shape when Aave getUserAccountData succeeds.

200 · application/json
{
  "product": "mio_dio_defi_risk_passport",
  "version": "0.7.0",
  "status": "ok",
  "address": "0x…",
  "chain": "base",
  "as_of": "2026-09-14T20:00:00.000Z",
  "disclaimer": "MioDio DeFi Risk Passport (MVP). Best-effort public on-chain reads only. Not financial, legal, or investment advice. …",
  "aave_v3": {
    "protocol": "aave_v3",
    "pool": "0xA238Dd80C259a72e81d7e4664a9801593F98d1c5",
    "total_collateral_usd": "125430.12",
    "total_debt_usd": "48210.05",
    "available_borrows_usd": "…",
    "liquidation_threshold_pct": "…",
    "ltv_pct": "…",
    "health_factor": "1.84"
  },
  "hooks": {
    "notes": ["MVP uses Aave v3 Pool.getUserAccountData only. No other protocols in this response."]
  }
}

Empty or inactive addresses return status: "partial", aave_v3: null, and an errors array. We never invent balances.

Try it

Hit the endpoint. Pay with x402. Get JSON.

GET /v1/risk/:address?chain=base|ethereum

No payment header → 402 with requirements. Paid → risk passport. RPC-verified getUserAccountData · 2026-09-14.

your curl

          

Where to find us

Live API and directory listings. Payment terms stay on /.well-known/x402.

Contact

MioDio LLC, corp@miodiollc.com, 755 Monroe Rd, Unit 470067, Sanford, FL 32747 (Florida LLC).

For API, billing, or legal questions use the email above. Terms: /terms. Privacy: /privacy.