{
 "openapi": "3.1.0",
 "info": {
  "title": "Diamond Bitcoin intelligence API",
  "version": "13.4",
  "description": "Heuristic intelligence derived from public blockchain data observed by an independent Bitcoin node and from public sanctions and ransomware lists. It flags patterns, not proof. Not legal, compliance or investment advice. The absence of a flag is not evidence that an address is legitimate. Provided as-is, without warranty.",
  "x-guidance": "Bitcoin risk intelligence from an independent node, paid per call. USDC on Base: GET /x402/<product> and answer the 402 (x402 v2). Lightning: GET /l402/<product> (L402). Address products take ?address=<bitcoin address>; daily datasets take ?date=YYYY-MM-DD. The same products are MCP tools at /mcp."
 },
 "servers": [
  {
   "url": "https://diamond.btc-intel.workers.dev/api"
  }
 ],
 "paths": {
  "/x402/risk": {
   "get": {
    "summary": "risk (pay with USDC on Base, x402)",
    "description": "Risk check for one Bitcoin address: OFAC SDN sanctions, ransomware payment lists, ownership-clustering with sanctioned/ransomware entities, sweeper-bot collection addresses, and this node's AML cases (30 days).",
    "parameters": [
     {
      "name": "address",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Bitcoin mainnet address (bc1..., 1... or 3...)"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.250000"
     }
    }
   }
  },
  "/l402/risk": {
   "get": {
    "summary": "risk (300 sats over Lightning, L402)",
    "description": "Risk check for one Bitcoin address: OFAC SDN sanctions, ransomware payment lists, ownership-clustering with sanctioned/ransomware entities, sweeper-bot collection addresses, and this node's AML cases (30 days).",
    "parameters": [
     {
      "name": "address",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Bitcoin mainnet address (bc1..., 1... or 3...)"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/aml_day": {
   "get": {
    "summary": "aml_day (pay with USDC on Base, x402)",
    "description": "Every AML case (score >= 25) this node detected on one day (YYYY-MM-DD, last 30 days), gzipped JSON lines.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/gzip": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "2.400000"
     }
    }
   }
  },
  "/l402/aml_day": {
   "get": {
    "summary": "aml_day (3000 sats over Lightning, L402)",
    "description": "Every AML case (score >= 25) this node detected on one day (YYYY-MM-DD, last 30 days), gzipped JSON lines.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/gzip": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/whales_day": {
   "get": {
    "summary": "whales_day (pay with USDC on Base, x402)",
    "description": "Every transaction of US$100,000 or more this node saw on one day, gzipped JSON lines.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/gzip": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "1.600000"
     }
    }
   }
  },
  "/l402/whales_day": {
   "get": {
    "summary": "whales_day (2000 sats over Lightning, L402)",
    "description": "Every transaction of US$100,000 or more this node saw on one day, gzipped JSON lines.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/gzip": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/brief": {
   "get": {
    "summary": "brief (pay with USDC on Base, x402)",
    "description": "Today's AI analyst brief (AML patterns, whales, correlations).",
    "parameters": [],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.400000"
     }
    }
   }
  },
  "/l402/brief": {
   "get": {
    "summary": "brief (500 sats over Lightning, L402)",
    "description": "Today's AI analyst brief (AML patterns, whales, correlations).",
    "parameters": [],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/geo_report": {
   "get": {
    "summary": "geo_report (pay with USDC on Base, x402)",
    "description": "Whale x Geopolitics report for one day (YYYY-MM-DD, last 90 days): whale flows vs world news, lagged correlations, laundering patterns, headlines and the analyst brief. JSON.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.800000"
     }
    }
   }
  },
  "/l402/geo_report": {
   "get": {
    "summary": "geo_report (1000 sats over Lightning, L402)",
    "description": "Whale x Geopolitics report for one day (YYYY-MM-DD, last 90 days): whale flows vs world news, lagged correlations, laundering patterns, headlines and the analyst brief. JSON.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/geo_dataset": {
   "get": {
    "summary": "geo_dataset (pay with USDC on Base, x402)",
    "description": "Hourly research dataset for one day: BTC price, whale count and volume, AML cases, ransomware leak posts and 11 news-topic intensities. CSV.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "text/csv": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "1.600000"
     }
    }
   }
  },
  "/l402/geo_dataset": {
   "get": {
    "summary": "geo_dataset (2000 sats over Lightning, L402)",
    "description": "Hourly research dataset for one day: BTC price, whale count and volume, AML cases, ransomware leak posts and 11 news-topic intensities. CSV.",
    "parameters": [
     {
      "name": "date",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Day as YYYY-MM-DD"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "text/csv": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/pulse": {
   "get": {
    "summary": "pulse (pay with USDC on Base, x402)",
    "description": "Live Bitcoin market pulse from this node: fee rates for 1 block to 1 day, mempool size, the last 24 h of whale transactions (>= US$100k) and laundering-pattern (AML) cases, implied BTC/USD. JSON.",
    "parameters": [],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.020000"
     }
    }
   }
  },
  "/l402/pulse": {
   "get": {
    "summary": "pulse (20 sats over Lightning, L402)",
    "description": "Live Bitcoin market pulse from this node: fee rates for 1 block to 1 day, mempool size, the last 24 h of whale transactions (>= US$100k) and laundering-pattern (AML) cases, implied BTC/USD. JSON.",
    "parameters": [],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/watch": {
   "get": {
    "summary": "watch (pay with USDC on Base, x402)",
    "description": "Address Watch for 30 days: every confirmed transaction paying to or spending from one Bitcoin address, in a private feed (web, JSON, RSS) and as phone push (ntfy). Optional feed=<id> adds the address to, or extends it in, an existing feed. Returns the feed links.",
    "parameters": [
     {
      "name": "address",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Bitcoin mainnet address (bc1..., 1... or 3...)"
     },
     {
      "name": "feed",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Optional: an existing Address Watch feed id to add to or extend"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "1.000000"
     }
    }
   }
  },
  "/l402/watch": {
   "get": {
    "summary": "watch (1000 sats over Lightning, L402)",
    "description": "Address Watch for 30 days: every confirmed transaction paying to or spending from one Bitcoin address, in a private feed (web, JSON, RSS) and as phone push (ntfy). Optional feed=<id> adds the address to, or extends it in, an existing feed. Returns the feed links.",
    "parameters": [
     {
      "name": "address",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Bitcoin mainnet address (bc1..., 1... or 3...)"
     },
     {
      "name": "feed",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Optional: an existing Address Watch feed id to add to or extend"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/proof": {
   "get": {
    "summary": "proof (pay with USDC on Base, x402)",
    "description": "Batch inclusion receipt for one to five transactions in one retained Bitcoin block. locator=blockhash:txid[,txid...]. Returns a Bitcoin Core Merkle inclusion proof, block header and node-observed confirmations. Retained blocks only; unavailable requests are rejected before payment. Verify against a trusted header chain. Does not prove outputs unspent or irreversible finality.",
    "parameters": [
     {
      "name": "locator",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "64-character block hash, colon, and one to five comma-separated unique transaction ids in that block."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.020000"
     }
    }
   }
  },
  "/l402/proof": {
   "get": {
    "summary": "proof (20 sats over Lightning, L402)",
    "description": "Batch inclusion receipt for one to five transactions in one retained Bitcoin block. locator=blockhash:txid[,txid...]. Returns a Bitcoin Core Merkle inclusion proof, block header and node-observed confirmations. Retained blocks only; unavailable requests are rejected before payment. Verify against a trusted header chain. Does not prove outputs unspent or irreversible finality.",
    "parameters": [
     {
      "name": "locator",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "64-character block hash, colon, and one to five comma-separated unique transaction ids in that block."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/feeplan": {
   "get": {
    "summary": "feeplan (pay with USDC on Base, x402)",
    "description": "Batch fee-budget analysis for one to 25 transaction sizes. plan=budget_sats:vbytes[,vbytes...]. The budget is a per-transaction cap in sats. Returns rounded-up fee estimates and the fastest observed estimate fitting each cap. Uses fresh independent-node observations; no confirmation guarantee.",
    "parameters": [
     {
      "name": "plan",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Per-transaction fee cap in sats, colon, and one to 25 comma-separated transaction sizes in vbytes. Example 1000:140,220,350. Fee cap 1..100000000; each size 60..100000."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.010000"
     }
    }
   }
  },
  "/l402/feeplan": {
   "get": {
    "summary": "feeplan (20 sats over Lightning, L402)",
    "description": "Batch fee-budget analysis for one to 25 transaction sizes. plan=budget_sats:vbytes[,vbytes...]. The budget is a per-transaction cap in sats. Returns rounded-up fee estimates and the fastest observed estimate fitting each cap. Uses fresh independent-node observations; no confirmation guarantee.",
    "parameters": [
     {
      "name": "plan",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Per-transaction fee cap in sats, colon, and one to 25 comma-separated transaction sizes in vbytes. Example 1000:140,220,350. Fee cap 1..100000000; each size 60..100000."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/utxos": {
   "get": {
    "summary": "utxos (pay with USDC on Base, x402)",
    "description": "Batch output status for one to 25 unique Bitcoin outpoints (txid:vout pairs). Reports this node's chainstate and sequential mempool observations, value, script, confirmations and coinbase flag. Missing does not prove spent. No cryptographic unspentness proof or spendability guarantee; all-absent batches rejected before charging.",
    "parameters": [
     {
      "name": "outpoints",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 1774,
       "description": "One to 25 unique comma-separated txid:vout pairs. txid is 64 hex characters; vout 0..65535. URLs disclose these public outpoints to Diamond."
      },
      "description": "One to 25 unique comma-separated txid:vout pairs. txid is 64 hex characters; vout 0..65535. URLs disclose these public outpoints to Diamond."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     },
     "400": {
      "description": "Invalid input; not charged"
     },
     "404": {
      "description": "Data not observed; not charged"
     },
     "409": {
      "description": "Observation changed; retry; not charged"
     },
     "422": {
      "description": "Service limit exceeded; not charged"
     },
     "503": {
      "description": "Node unavailable, unsynchronized or service busy; not charged"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.020000"
     }
    }
   }
  },
  "/l402/utxos": {
   "get": {
    "summary": "utxos (20 sats over Lightning, L402)",
    "description": "Batch output status for one to 25 unique Bitcoin outpoints (txid:vout pairs). Reports this node's chainstate and sequential mempool observations, value, script, confirmations and coinbase flag. Missing does not prove spent. No cryptographic unspentness proof or spendability guarantee; all-absent batches rejected before charging.",
    "parameters": [
     {
      "name": "outpoints",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 1774,
       "description": "One to 25 unique comma-separated txid:vout pairs. txid is 64 hex characters; vout 0..65535. URLs disclose these public outpoints to Diamond."
      },
      "description": "One to 25 unique comma-separated txid:vout pairs. txid is 64 hex characters; vout 0..65535. URLs disclose these public outpoints to Diamond."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/cpfp": {
   "get": {
    "summary": "cpfp (pay with USDC on Base, x402)",
    "description": "CPFP budget scenarios for a mempool transaction and its ancestors. package=txid:target_sat_vb:child_vbytes[,child_vbytes...]. Up to 25 unique sizes; actual ancestor base fees, ceiling arithmetic and observed relay/mempool floors. Not transaction construction, package-policy validation, broadcast or a confirmation guarantee.",
    "parameters": [
     {
      "name": "package",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 255,
       "description": "txid:target_sat_vb:child_vbytes[,child_vbytes...]. Target 0.001..10000 sat/vB (up to 3 decimals), one to 25 unique child sizes of 60..100000 vbytes."
      },
      "description": "txid:target_sat_vb:child_vbytes[,child_vbytes...]. Target 0.001..10000 sat/vB (up to 3 decimals), one to 25 unique child sizes of 60..100000 vbytes."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     },
     "400": {
      "description": "Invalid input; not charged"
     },
     "404": {
      "description": "Data not observed; not charged"
     },
     "409": {
      "description": "Observation changed; retry; not charged"
     },
     "422": {
      "description": "Service limit exceeded; not charged"
     },
     "503": {
      "description": "Node unavailable, unsynchronized or service busy; not charged"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "0.020000"
     }
    }
   }
  },
  "/l402/cpfp": {
   "get": {
    "summary": "cpfp (20 sats over Lightning, L402)",
    "description": "CPFP budget scenarios for a mempool transaction and its ancestors. package=txid:target_sat_vb:child_vbytes[,child_vbytes...]. Up to 25 unique sizes; actual ancestor base fees, ceiling arithmetic and observed relay/mempool floors. Not transaction construction, package-policy validation, broadcast or a confirmation guarantee.",
    "parameters": [
     {
      "name": "package",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 255,
       "description": "txid:target_sat_vb:child_vbytes[,child_vbytes...]. Target 0.001..10000 sat/vB (up to 3 decimals), one to 25 unique child sizes of 60..100000 vbytes."
      },
      "description": "txid:target_sat_vb:child_vbytes[,child_vbytes...]. Target 0.001..10000 sat/vB (up to 3 decimals), one to 25 unique child sizes of 60..100000 vbytes."
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/x402/batch": {
   "get": {
    "summary": "batch (pay with USDC on Base, x402)",
    "description": "Batch risk check for up to 25 Bitcoin addresses in one call: OFAC SDN sanctions, ransomware payment lists, ownership clusters, sweeper-bot addresses and this node's AML cases (30 days) for each, plus a summary of the flagged ones. Volume price, about 60% below single checks.",
    "parameters": [
     {
      "name": "addresses",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "1 to 25 Bitcoin mainnet addresses separated by commas (bc1..., 1... or 3...)"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: PAYMENT-REQUIRED header (x402 v2) and accepts[] (v1)"
     }
    },
    "x-payment-info": {
     "protocols": [
      {
       "x402": {}
      }
     ],
     "price": {
      "mode": "fixed",
      "currency": "USD",
      "amount": "2.500000"
     }
    }
   }
  },
  "/l402/batch": {
   "get": {
    "summary": "batch (3000 sats over Lightning, L402)",
    "description": "Batch risk check for up to 25 Bitcoin addresses in one call: OFAC SDN sanctions, ransomware payment lists, ownership clusters, sweeper-bot addresses and this node's AML cases (30 days) for each, plus a summary of the flagged ones. Volume price, about 60% below single checks.",
    "parameters": [
     {
      "name": "addresses",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "1 to 25 Bitcoin mainnet addresses separated by commas (bc1..., 1... or 3...)"
     }
    ],
    "responses": {
     "200": {
      "description": "The product",
      "content": {
       "application/json": {}
      }
     },
     "402": {
      "description": "Payment required: WWW-Authenticate L402 macaroon + invoice"
     }
    }
   }
  },
  "/mcp": {
   "post": {
    "summary": "MCP (Streamable HTTP, JSON-RPC 2.0): the same products as tools for AI agents",
    "responses": {
     "200": {
      "description": "JSON-RPC response"
     }
    }
   }
  },
  "/free/screen": {
   "get": {
    "summary": "Free: is this address on the OFAC SDN list or a known ransomware payment address?",
    "description": "Exact list matches only (a limited number per hour). The paid risk check adds ownership clusters, sweeper bots and laundering-pattern cases.",
    "parameters": [
     {
      "name": "address",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Bitcoin mainnet address (bc1..., 1... or 3...)"
     }
    ],
    "responses": {
     "200": {
      "description": "Screen result",
      "content": {
       "application/json": {}
      }
     },
     "400": {
      "description": "Invalid address"
     },
     "429": {
      "description": "Free screens busy"
     }
    }
   }
  }
 }
}
