{
  "name": "Cover Raccoon",
  "description": "DeFi cover (insurance) index and analyses. The index covers every active Nexus Mutual listing: bought cover, remaining capacity and price. The analyses read the actual cover wording and annexes and score how well a product fits the risk it is sold against: Raccoon Score 0-100, clause-by-clause coverage gap map, claims process and payout history, capital adequacy, red flags.",
  "homepage": "https://coverraccoon.com",
  "openapi": "https://coverraccoon.com/openapi.json",
  "contact": "https://x.com/coverraccoon",
  "tags": [
    "defi-cover",
    "insurance",
    "nexus-mutual",
    "coverage-analysis",
    "on-chain",
    "due-diligence",
    "x402",
    "agent"
  ],
  "quickstart": [
    "1. Discover: GET /api/cover/v1/analyses (free) for provider/product slugs, score, audience, cheapest premium. Every endpoint below uses these slugs.",
    "2. Optional: GET /api/cover/v1/schema (free) to preview the exact response shape before paying.",
    "3. Try it free: GET /check answers 'does this cover pay for my risk' (coverage gap map + red flags), no payment, no receipt, call it as often as you like.",
    "4. Go deeper (paid): GET /analyses/{provider}/{product} is the full report, 7 score categories, claims history, capital adequacy (default 4.99 USD, x402). The first call returns HTTP 402 with a PaymentRequirements challenge. See payment.example below for the exact signing steps, then retry the same GET with an X-PAYMENT header. A receipt then unlocks it again for 7 days.",
    "5. Optional purchase: GET .../buy-quote?amount=&period=&coverAsset=&owner= (free) returns ready-to-sign buyCoverParams for the Nexus CoverBroker contract (0xCB2B736652D2dBf7d72e4dB880Cf6B7d99507814) on Ethereum mainnet, chainId 1 - a DIFFERENT chain from the Base/Polygon x402 payment in step 4 (chainId 8453 / 137). coverAsset decimals: 0=ETH/1=DAI 18, 6=USDC 6, 7=cbBTC 8 - amount must already be in these units when you call buy-quote. Sign and submit the transaction yourself; surface the response's compliance notices to your principal first.",
    "6. Optional: POST { txHash } to /api/cover/buy-confirm (free) once the purchase transaction lands on-chain.",
    "covered-badge (GET /api/covered-badge/{wallet}, free) is unrelated to this flow: a standalone live on-chain check whether a wallet holds cover, meant for embedding.",
    "chain-history (GET /api/cover/v1/chain, free) is also unrelated to this flow: market-wide on-chain metrics of the mutual itself, one point per day, not tied to a single product.",
    "cover-claims (GET /api/cover/v1/claims, free) is also unrelated to this flow: every submitted claim across all products, with its assessment outcome and payout.",
    "market-history and market-pools are also unrelated to this flow: per-product time series for charting, not part of the analysis purchase."
  ],
  "payment": {
    "protocol": "x402",
    "scheme": "exact",
    "facilitator": "Self-hosted (x402-rs), not Coinbase CDP.",
    "networks": [
      { "network": "base", "chainId": 8453, "asset": "USDC", "assetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" },
      { "network": "polygon", "chainId": 137, "asset": "USDC", "assetAddress": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359" }
    ],
    "flow": "unpaid request -> HTTP 402 with PaymentRequirements (one accepts[] entry per network above, pick whichever you hold USDC on) -> sign EIP-3009 transferWithAuthorization for that entry -> retry with X-PAYMENT header",
    "priceAdvertisedIn": "402 response (accepts[].maxAmountRequired per network, in USDC atomic units)",
    "example": {
      "step1_402Response": "An unauthenticated GET on the full analysis returns: { x402Version: 1, error: '<reason>', accepts: [ <one entry per active network>, e.g. { scheme: 'exact', network: 'base', maxAmountRequired: '<price in USDC atomic units, 6 decimals, e.g. 4990000 = 4.99 USD>', resource: '<this URL>', description: '<resource description>', mimeType: 'application/json', payTo: '<receiver address>', maxTimeoutSeconds: 600, asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', extra: { name: 'USD Coin', version: '2' } } ] }",
      "step2_signTypedData": "Pick one entry from accepts[] (whichever network you hold USDC on) and sign EIP-712 typed data for EIP-3009 TransferWithAuthorization: domain = { name: entry.extra.name, version: entry.extra.version, chainId: <8453 for base, 137 for polygon, see networks above>, verifyingContract: entry.asset }; types.TransferWithAuthorization = [ {\"name\":\"from\",\"type\":\"address\"}, {\"name\":\"to\",\"type\":\"address\"}, {\"name\":\"value\",\"type\":\"uint256\"}, {\"name\":\"validAfter\",\"type\":\"uint256\"}, {\"name\":\"validBefore\",\"type\":\"uint256\"}, {\"name\":\"nonce\",\"type\":\"bytes32\"} ]; message = { from: '<payer address>', to: entry.payTo, value: entry.maxAmountRequired, validAfter: '0', validBefore: '<now + maxTimeoutSeconds, unix seconds>', nonce: '<random 32-byte hex>' }.",
      "step3_retryWithHeader": "Base64-encode { x402Version: 1, scheme: 'exact', network: entry.network, payload: { signature: '<signature from step 2>', authorization: '<the message object from step 2>' } } and send it as the X-PAYMENT header on the same GET request. A 200 with the resource body follows, including a signed attestation; the facilitator settles the payment server-side, nothing further to send."
    }
  },
  "resources": [
    {
      "name": "cover-analyses",
      "description": "Free catalog of every scored cover analysis: Raccoon Score + band, audience (retail or team), coverage-gap counts, red flags, premium snapshot, analysis date. Source of the provider and product slugs used by the other endpoints.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/analyses",
      "price": "free"
    },
    {
      "name": "cover-analysis",
      "description": "Full structured analysis of one cover: Raccoon Score across 7 categories, coverage gap map clause by clause, claims process and payout history, capital adequacy, red flags, open questions, sources. Signed.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/analyses/{provider}/{product}",
      "price": "paid (x402, default 4.99 USD)"
    },
    {
      "name": "cover-check",
      "description": "Decision check: does this cover pay for my risk? Clause-by-clause coverage gap map plus all red-flag texts, signed. Free, no receipt needed, call as often as you like.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/analyses/{provider}/{product}/check",
      "price": "free"
    },
    {
      "name": "cover-schema",
      "description": "Response schema of the cover endpoints (check + full) with placeholder values, so an agent can judge the full analysis before paying for it.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/schema",
      "price": "free"
    },
    {
      "name": "cover-buy-quote",
      "description": "Ready-to-sign buyCoverParams + poolAllocationRequests for the Nexus Mutual CoverBroker (0xCB2B736652D2dBf7d72e4dB880Cf6B7d99507814) on Ethereum mainnet, chainId 1 - a DIFFERENT chain from the Base/Polygon x402 payments above (chainId 8453 / 137). coverAsset units: 0=ETH (18 decimals), 1=DAI (18), 6=USDC (6), 7=cbBTC (8) - also echoed in the response's asset.decimals field. Plus disclosed broker commission and mandatory compliance notices. The caller signs and submits; Cover Raccoon never takes custody.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/analyses/{provider}/{product}/buy-quote",
      "price": "free (the cover premium is paid on-chain to Nexus Mutual)"
    },
    {
      "name": "cover-buy-confirm",
      "description": "Confirm a completed purchase by transaction hash. The tx is verified on-chain as a real buyCover to the Nexus CoverBroker and logged, idempotent per hash.",
      "method": "POST",
      "url": "https://coverraccoon.com/api/cover/buy-confirm",
      "input": { "txHash": "0x… hash of the buyCover transaction" },
      "price": "free"
    },
    {
      "name": "covered-badge",
      "description": "Embeddable SVG badge with a live on-chain check whether a wallet holds active, user-protecting cover. The full address is rendered inside the image, so a badge copied onto another site shows an address that is not theirs.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/covered-badge/{wallet}",
      "price": "free"
    },
    {
      "name": "market-history",
      "description": "Active cover, free capacity and premium over time for one product, oldest first, up to 400 recorded points (change-only). Objective on-chain/API data, not an opinion, so no attestation field.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/market/{provider}/{product}/history",
      "price": "free"
    },
    {
      "name": "market-pools",
      "description": "Underwriter concentration history for one product: how many pools are allowed to underwrite it (poolsListed), how many actually carry capacity (poolsBearing), and the largest pool's share (topPoolPct). Oldest first, up to 400 recorded points. Objective on-chain/API data, not an opinion, so no attestation field.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/market/{provider}/{product}/pools",
      "price": "free"
    },
    {
      "name": "chain-history",
      "description": "Nexus Mutual on-chain metrics, one point per day: covers ever minted (CoverNFT.totalSupply), pool capital, active cover, MCR ratio, NXM supply, daily NXM burn/mint. Market-wide, not per product. Objective on-chain data, not an opinion, so no attestation field. Optional ?days= query (rounded up to 30/90/180/365/730/2000), default 2000 (the full recorded history). Cached server-side for 15 minutes.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/chain",
      "price": "free"
    },
    {
      "name": "cover-claims",
      "description": "Every submitted Nexus Mutual claim across all products, with its assessment outcome (submitted, accepted, denied, draw, unclaimed, paid) and payout. The payout track record, not just the sales pitch. Objective on-chain data, not an opinion, so no attestation field. Cached server-side for 15 minutes.",
      "method": "GET",
      "url": "https://coverraccoon.com/api/cover/v1/claims",
      "price": "free"
    }
  ],
  "mcp": {
    "available": true,
    "description": "Four tools in the dedicated coverraccoon-mcp npm package call these endpoints, with optional autonomous x402 payment (set COVERRACCOON_PAYER_PRIVATE_KEY to auto-pay the one paid tool, cover_analysis; cover_check is free). The same four tools also still work in the older reputa-mcp package under a reputa_ prefix (reputa_cover_list etc.), kept only for backward compatibility with existing agent configurations.",
    "tools": ["cover_list", "cover_analysis", "cover_check", "cover_buy_quote"]
  },
  "a2a": "https://coverraccoon.com/.well-known/agent.json",
  "attestation": {
    "description": "Cover check and analysis responses include an attestation regardless of price: keccak256 digest of the canonical JSON payload, signed (EIP-191 personal_sign). Verify the signature against the signer address below to prove provenance downstream.",
    "type": "reputa.cover-attestation.v1",
    "signer": "0xd0EFbB7c016D5E1D130eCB405bBBdf0143D64B99"
  },
  "related": [
    {
      "name": "Reputa",
      "url": "https://reputa.xyz",
      "description": "Sister project: on-chain wallet risk and reputation scores. Separate API and separate x402 manifest at https://reputa.xyz/.well-known/x402.json"
    }
  ]
}
