{
  "openapi": "3.1.0",
  "info": {
    "title": "FinTech Hodl Base DeFi yield and risk data",
    "version": "2",
    "description": "Risk data only, not investment advice. Free: static JSON files on this site, refreshed hourly and delayed. Paid: the live API at https://intel.fintechhodl.com, per call with x402 (USDC on Base); prices at https://intel.fintechhodl.com/.well-known/x402."
  },
  "servers": [
    {
      "url": "https://yields.fintechhodl.com"
    }
  ],
  "paths": {
    "/data/opportunities.json": {
      "get": {
        "summary": "The top 25 opportunities",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schema_version": {
                      "type": "integer"
                    },
                    "as_of": {
                      "type": "string"
                    },
                    "captured_at": {
                      "type": "string"
                    },
                    "delay_hours": {
                      "type": "number"
                    },
                    "model_version": {
                      "type": "string"
                    },
                    "disclaimer": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "protocol": {
                            "type": "string"
                          },
                          "market": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "apy": {
                            "type": "number",
                            "description": "Percent per year"
                          },
                          "sustainable_apy": {
                            "type": "number",
                            "description": "Percent per year"
                          },
                          "tvl_usd": {
                            "type": "number"
                          },
                          "risk_score": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 100
                          },
                          "opportunity_score": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 100
                          },
                          "confidence": {
                            "type": "number"
                          },
                          "yield_sustainability": {
                            "type": "number"
                          },
                          "liquidity": {
                            "type": "string"
                          },
                          "primary_yield_source": {
                            "type": "string"
                          },
                          "yield_sources": {
                            "type": "array",
                            "items": {
                              "type": "object"
                            }
                          },
                          "major_risks": {
                            "type": "array",
                            "items": {
                              "type": "object"
                            }
                          },
                          "key_dependencies": {
                            "type": "array",
                            "items": {
                              "type": "object"
                            }
                          },
                          "governance_evidence": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "why_this_yield_exists": {
                            "type": "string"
                          },
                          "what_could_lose_money": {
                            "type": "string"
                          },
                          "what_changed_recently": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "data_url": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/data/o/{id}.json": {
      "get": {
        "summary": "One opportunity",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The file-safe id from a row's data_url"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "schema_version": {
                      "type": "integer"
                    },
                    "as_of": {
                      "type": "string"
                    },
                    "captured_at": {
                      "type": "string"
                    },
                    "delay_hours": {
                      "type": "number"
                    },
                    "model_version": {
                      "type": "string"
                    },
                    "disclaimer": {
                      "type": "string"
                    },
                    "item": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "protocol": {
                          "type": "string"
                        },
                        "market": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "apy": {
                          "type": "number",
                          "description": "Percent per year"
                        },
                        "sustainable_apy": {
                          "type": "number",
                          "description": "Percent per year"
                        },
                        "tvl_usd": {
                          "type": "number"
                        },
                        "risk_score": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "opportunity_score": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "confidence": {
                          "type": "number"
                        },
                        "yield_sustainability": {
                          "type": "number"
                        },
                        "liquidity": {
                          "type": "string"
                        },
                        "primary_yield_source": {
                          "type": "string"
                        },
                        "yield_sources": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "major_risks": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "key_dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "governance_evidence": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "why_this_yield_exists": {
                          "type": "string"
                        },
                        "what_could_lose_money": {
                          "type": "string"
                        },
                        "what_changed_recently": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        },
                        "data_url": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown id"
          }
        }
      }
    },
    "/.well-known/x402": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Every API route with its x402 price",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Free-route limit reached (60 calls an hour per client)"
          }
        }
      }
    },
    "/api/v1/opportunities": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Search and filter all tracked Base opportunities",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Text search"
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opportunity type"
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Asset symbol"
          },
          {
            "name": "risk_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Highest risk score, 0-100"
          },
          {
            "name": "min_apy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Lowest APY, percent"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "At most 100"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Free-route limit reached (60 calls an hour per client)"
          }
        }
      }
    },
    "/api/v1/yields": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Yields screener: quoted APY next to the APY realized on-chain over 7 and 30 days",
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Asset symbol"
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opportunity type"
          },
          {
            "name": "stable_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only stablecoin principal"
          },
          {
            "name": "realized_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only opportunities with a realized on-chain APY"
          },
          {
            "name": "min_apy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Lowest quoted APY, percent"
          },
          {
            "name": "risk_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Highest risk score, 0-100"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "risk_adjusted, realized_apy, quoted_apy, sustainable_apy or tvl"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "At most 50"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/lending-rates": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Lending rates: supply APY of Base lending markets, quoted vs realized on-chain",
        "parameters": [
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Asset symbol"
          },
          {
            "name": "stable_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only stablecoin principal"
          },
          {
            "name": "realized_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only markets with a realized on-chain APY"
          },
          {
            "name": "min_apy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Lowest quoted APY, percent"
          },
          {
            "name": "risk_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Highest risk score, 0-100"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "risk_adjusted, realized_apy, quoted_apy, sustainable_apy or tvl"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "At most 50"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/yield-farming": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Yield farming: Base liquidity pools, concentrated liquidity and vaults, risk-rated",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "lp, stable_lp, concentrated or vault"
          },
          {
            "name": "asset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Asset symbol"
          },
          {
            "name": "stable_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only stablecoin principal"
          },
          {
            "name": "realized_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only opportunities with a realized on-chain APY"
          },
          {
            "name": "min_apy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Lowest quoted APY, percent"
          },
          {
            "name": "risk_max",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Highest risk score, 0-100"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "risk_adjusted, realized_apy, quoted_apy, sustainable_apy or tvl"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "At most 50"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/opportunity/{id}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Full risk card for one opportunity",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An opportunity id, as listed by /api/v1/opportunities"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/opportunity-score/{id}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Scoring breakdown for one opportunity",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An opportunity id, as listed by /api/v1/opportunities"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/history/{id}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Daily APY, TVL and score history of one opportunity",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An opportunity id, as listed by /api/v1/opportunities"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/dependency-graph/{id}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "What one opportunity depends on",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An opportunity id, as listed by /api/v1/opportunities"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/closure/{entity}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Everything an entity depends on, transitively",
        "parameters": [
          {
            "name": "entity",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An entity id, for example protocol:morpho-blue"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/dependents/{entity}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Which tracked opportunities depend on an entity",
        "parameters": [
          {
            "name": "entity",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "An entity id, for example protocol:morpho-blue"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/yield-premium": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Why one opportunity pays more than a reference",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "The opportunity id"
          },
          {
            "name": "benchmark",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Reference opportunity id; a low-risk lending market by default"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/protocol-risk/{slug}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Risk profile of one protocol on Base",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Protocol slug, for example morpho-blue"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/stablecoin-risk/{symbol}": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Peg and supply risk of one stablecoin on Base",
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Stablecoin symbol, for example USDC"
          }
        ],
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/risk-events": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Recent risk events on Base DeFi",
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    },
    "/api/v1/incidents": {
      "servers": [
        {
          "url": "https://intel.fintechhodl.com"
        }
      ],
      "get": {
        "summary": "Labelled incidents affecting Base protocols and stablecoins",
        "responses": {
          "200": {
            "description": "OK; the PAYMENT-RESPONSE header carries the settlement receipt",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "Payment required: the PAYMENT-REQUIRED header holds the x402 challenge (price, USDC on Base, pay-to address). Pay and repeat the request."
          },
          "503": {
            "description": "Data is refreshing; nothing is charged"
          }
        }
      }
    }
  }
}
