Api Endpoint

dappgrade

dappgrade score — front-end integrity verdict for an onchain app, looked up by contract address. Inspects the app's public web front-end, not contract bytecode or admin control. Returns ok / caution / avoid / unknown with the coverage the verdict rests on.

Open interactive test console

Offering

Provider
dappgrade.vercel.app
Method
GET
Offering type
Api Endpoint
Transport type
http
Category
Security
Delivery
Not provided
Pricing model
Not provided
x402 version
2

Endpoint context

URL
https://dappgrade.vercel.app/v1/score
MIME type
application/json
First seen
2026-10-16T01:51:51.176Z
Last seen
Tags
DeFi, Security, Risk, Onchain, dapp, pre-transaction

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.01 USDC
Atomic price: 10000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "10000",
    "payTo": "0x4a0aed4ce878e44ef922941f2b06137bc0b69b69"
  }
]

Observed health

Status
Healthy
Latest latency
96 ms
Average latency
365 ms
HTTP status
402
Last checked
Reachability
100% over 14 checks

Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.

Input schema

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "const": "http"
    },
    "method": {
      "type": "string",
      "enum": [
        "GET"
      ]
    },
    "queryParams": {
      "type": "object",
      "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"
        }
      },
      "required": [
        "chain",
        "address"
      ]
    }
  },
  "required": [
    "type",
    "method"
  ],
  "additionalProperties": false
}

Output schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "input": {
      "additionalProperties": false,
      "properties": {
        "method": {
          "enum": [
            "GET"
          ],
          "type": "string"
        },
        "queryParams": {
          "properties": {
            "address": {
              "description": "the contract address the agent is about to call",
              "pattern": "^0x[a-fA-F0-9]{40}$",
              "type": "string"
            },
            "chain": {
              "description": "EVM chain — id (8453), CAIP-2 (eip155:8453), or name (base, mainnet, arbitrum, optimism)",
              "type": "string"
            }
          },
          "required": [
            "chain",
            "address"
          ],
          "type": "object"
        },
        "type": {
          "const": "http",
          "type": "string"
        }
      },
      "required": [
        "type",
        "method"
      ],
      "type": "object"
    },
    "output": {
      "properties": {
        "example": {
          "properties": {
            "coverage": {
              "description": "0..1 fraction of the rubric that actually ran; meaningless to read score without it",
              "type": "number"
            },
            "flags": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "freshness": {
              "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.",
              "type": [
                "object",
                "null"
              ]
            },
            "reasons": {
              "description": "stable machine-readable causes behind the verdict; see /v1/methodology → reason_codes",
              "items": {
                "properties": {
                  "check": {
                    "description": "on CHECK_FAILED",
                    "type": "string"
                  },
                  "code": {
                    "type": "string"
                  },
                  "detail": {
                    "type": "string"
                  },
                  "flag": {
                    "description": "on CRITICAL_FLAG",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "type": "array"
            },
            "score": {
              "type": [
                "integer",
                "null"
              ]
            },
            "tier": {
              "type": [
                "integer",
                "null"
              ]
            },
            "verdict": {
              "description": "decision-shaped: ok = proceed, caution = hold, avoid = abort, unknown = not rated (never read as safe)",
              "enum": [
                "ok",
                "caution",
                "avoid",
                "unknown"
              ],
              "type": "string"
            },
            "verdict_reason": {
              "description": "prose; wording not stable — branch on reasons[].code",
              "type": "string"
            }
          },
          "type": "object"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "type": "object"
    }
  },
  "required": [
    "input"
  ],
  "type": "object"
}