# Risk Graph Node Search

> Risk Graph Node Search is a paid API for AI agents from risk-graph-gx7v4.ondigitalocean.app, paid per call via x402, $0.001/call, status unknown (last checked 2026-09-13).

Searches the DeFi risk knowledge graph by asset address or protocol/asset name to return matching nodes with risk grades and properties

## Facts

- Endpoint: GET https://risk-graph-gx7v4.ondigitalocean.app/api/v1/agent/search
- Price: $0.001/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/risk-graph-gx7v4-ondigitalocean-app-f5d8e6bd
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_B5l6ajm5la4l_SY4rUiPV

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability risk-graph-gx7v4-ondigitalocean-app-f5d8e6bd
```

Example prompt: Search the DeFi risk graph for 'Aave' and return up to 5 matching nodes — I want to see their risk tiers and whether any are graded B or better.

## When to prefer this

Use this endpoint as the primary discovery path when you know an asset address or protocol/asset name and need to find its corresponding node(s) in the risk graph before fetching full risk details, neighborhood data, or score breakdowns. Prefer this over the pools listing endpoint when you have a specific target rather than wanting a full sorted list.

## Known failure modes

- Empty or wildcard queries (*, %) are explicitly rejected with an error
- No nodes found for an obscure or misspelled asset name
- TVL or grade comparator syntax errors cause rejection
- Limit exceeds hard cap of 10 and is clamped or rejected
- Rate limiting or payment failure (x402) when USDC balance is insufficient

## How this service works

Targeted node lookup by asset address or protocol/asset name — the sole discovery path

## Output

Returns an array of up to 10 graph nodes matching the query, each with a stable node ID, PascalCase labels (e.g. Pool, Asset, Protocol, Chain), and a property bag including the _riskTier field (A–F) and other per-label metadata.

## Example request

```json
{
 "input": {
  "type": "http",
  "method": "GET",
  "queryParams": {
   "q": "Aave",
   "grade": "<=B",
   "limit": 5
  }
 }
}
```

## Request schema (JSON Schema)

```json
{
 "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": [
      "q"
     ],
     "properties": {
      "q": {
       "type": "string",
       "description": "Asset address or protocol/asset name. Targeted lookup only — empty and wildcard (`*`, `%`) queries are rejected."
      },
      "tvl": {
       "type": "string",
       "description": "Optional TVL comparator filter, e.g. \">1000000\" or \"<5e8\"."
      },
      "grade": {
       "type": "string",
       "description": "Optional grade comparator over A–F, e.g. \"A\", \"<=B\", \">=C\"."
      },
      "label": {
       "type": "string",
       "description": "Optional PascalCase label filter (e.g. \"Pool\", \"Asset\", \"Protocol\", \"Chain\")."
      },
      "limit": {
       "type": "integer",
       "maximum": 10,
       "minimum": 1,
       "description": "Max nodes to return; hard-capped at 10 (default 10)."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "required": [
      "nodes"
     ],
     "properties": {
      "nodes": {
       "type": "array",
       "items": {
        "type": "object",
        "required": [
         "id",
         "labels",
         "properties"
        ],
        "properties": {
         "id": {
          "type": "string",
          "description": "Stable node id — pass to `/node` and `/dependencies`."
         },
         "labels": {
          "type": "array",
          "items": {
           "type": "string"
          },
          "description": "PascalCase Neo4j labels (e.g. \"Pool\", \"Asset\")."
         },
         "properties": {
          "type": "object",
          "properties": {
           "name": {
            "type": "string"
           },
           "tvlUsd": {
            "type": "number",
            "description": "Value-locked $ TVL, coalesced across real pool types. Absent for LST/token nodes (see marketCapUsd) and pools with no USD figure."
           },
           "address": {
            
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/risk-graph-gx7v4-ondigitalocean-app-f5d8e6bd/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from risk-graph-gx7v4.ondigitalocean.app](https://www.zero.xyz/host/risk-graph-gx7v4.ondigitalocean.app/llms.txt)
