{"uid":"cap_KB4ZepiVIBryI1vmF2Z03","slug":"dappgrade-score-api-b5782bd2","name":"dappgrade Score API","description":"dappgrade score — pre-transaction health/safety verdict for an onchain app, by contract address. Returns ok / caution / avoid / unknown with the coverage the verdict rests on.","url":"https://dappgrade.vercel.app/v1/score","method":"GET","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method"],"properties":{"type":{"type":"string","const":"http"},"method":{"enum":["GET"],"type":"string"},"queryParams":{"type":"object","required":["chain","address"],"properties":{"chain":{"type":"string","description":"EVM chain — id (8453), CAIP-2 (eip155:8453), or name (base, mainnet, arbitrum, optimism)"},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"the contract address the agent is about to call"}}}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","properties":{"tier":{"type":["integer","null"]},"flags":{"type":"array","items":{"type":"string"}},"score":{"type":["integer","null"]},"reasons":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"flag":{"type":"string","description":"on CRITICAL_FLAG"},"check":{"type":"string","description":"on CHECK_FAILED"},"detail":{"type":"string"}}},"description":"stable machine-readable causes behind the verdict; see /v1/methodology → reason_codes"},"verdict":{"enum":["ok","caution","avoid","unknown"],"type":"string","description":"decision-shaped: ok = proceed, caution = hold, avoid = abort, unknown = not rated (never read as safe)"},"coverage":{"type":"number","description":"0..1 fraction of the rubric that actually ran; meaningless to read score without it"},"freshness":{"type":["object","null"],"description":"checked_at/age_seconds/stale. Pass max_age=<seconds> to get `unknown` + STALE_FOR_CALLER instead of an old answer — the observation still travels, so that response is billed normally. The scored fields are absent entirely (not null) on an `unknown` where we have no answer, and that one is free."},"verdict_reason":{"type":"string","description":"prose; wording not stable — branch on reasons[].code"}}}}}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.01","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.01/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.01","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_oWmr32B8FsZirZD-saDXK","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.01","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Returns a pre-transaction safety verdict (ok/caution/avoid/unknown) for an onchain smart contract by address and chain, with a coverage fraction and machine-readable reasons.","exampleAgentPrompt":"Before I approve the transaction, check the dappgrade safety verdict for contract 0xAbCd1234...5678 on Base — is it ok, caution, or avoid, and how much of the rubric was covered?","exampleUseCases":[{"title":"DeFi swap pre-flight safety check","prompt":"Before I swap tokens through 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD on mainnet, can you get a dappgrade verdict on it so I know if I should proceed or abort?"},{"title":"NFT marketplace contract vetting","prompt":"I'm about to approve 0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC on Ethereum to handle my NFTs — pull the dappgrade score and tell me the verdict and any flags before I sign."},{"title":"Automated agent transaction guardrail","prompt":"Check the dappgrade health verdict for contract 0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5 on Arbitrum and only let the transaction proceed if the verdict comes back as ok with coverage above 0.5."}],"resultDescription":"A JSON object containing: verdict (ok/caution/avoid/unknown), score (integer or null), tier (integer or null), coverage (0–1 float indicating rubric completion), flags (array of flag strings), reasons (array of objects with code, flag, check, and detail fields for machine-readable causes), verdict_reason (prose explanation), and freshness metadata (checked_at, age_seconds, stale). A verdict of unknown with no scored fields is returned free when no data exists; unknown should never be read as safe.","failureModes":["Contract address not found or never analyzed → verdict: unknown with no scored fields (free call)","Stale data when max_age param is set → verdict: unknown + STALE_FOR_CALLER reason (still billed)","Invalid address format (not 0x + 40 hex chars) → validation error","Unsupported chain identifier → error response","Network/service unavailability → HTTP 5xx","Insufficient USDC payment → x402 payment required error"],"whenToPreferThis":"Use this endpoint when an AI agent needs a fast, decision-shaped safety verdict on a smart contract before executing a transaction — especially in automated pipelines where aborting on 'avoid' or pausing on 'caution' is required. Prefer it over generic blockchain explorers when you need a structured verdict with machine-readable reason codes and coverage framing rather than raw on-chain data. The coverage field makes it uniquely useful for understanding how much of the rubric actually ran, so you can decide whether an 'unknown' is a gap or a genuine no-data case.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T12:38:01.150Z","isFirstParty":false}