{
 "openapi": "3.1.0",
 "info": {
  "title": "BotOrNot public data API",
  "version": "2.0.0",
  "description": "Read-only, unauthenticated JSON API for BotOrNot: a sourced directory of trading bots, a scam watchlist built only from regulator records (SEC, CFTC, California DFPI), and a Hyperliquid vault leaderboard computed from on-chain data. CORS is open (*). Not investment advice. BotOrNot earns affiliate commissions from some outbound links (currently Hyperliquid referral links, https://app.hyperliquid.xyz/join/AMPLIFY, labeled on the site); payouts never change a listing, ranking or warning. Full disclosure: https://getbotornot.com/about/#disclosure"
 },
 "servers": [
  {
   "url": "https://getbotornot.com"
  }
 ],
 "paths": {
  "/api/bots.json": {
   "get": {
    "operationId": "listBots",
    "summary": "List all documented trading bots",
    "responses": {
     "200": {
      "description": "Bot list",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "meta": {
           "type": "object"
          },
          "bots": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Bot"
           }
          }
         },
         "required": []
        }
       }
      }
     }
    }
   }
  },
  "/api/bots/{slug}.json": {
   "get": {
    "operationId": "getBot",
    "summary": "Get one bot fact sheet",
    "parameters": [
     {
      "name": "slug",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "3commas",
        "alertatron",
        "altrady",
        "axiom",
        "backtesting-py",
        "backtrader",
        "banana-gun",
        "chrisleekr-binance-trading-bot",
        "binance-trading-bots",
        "bingx-trading-bots",
        "bitget-trading-bots",
        "bitsgap",
        "blankly",
        "bloom",
        "bonkbot",
        "bybit-trading-bots",
        "capitalise-ai",
        "catalyst",
        "cloddsbot",
        "coinrule",
        "collective2",
        "composer",
        "cornix",
        "crypto-signal",
        "haehnchen-crypto-trading-bot",
        "crypto-com-exchange-bots",
        "cryptohero",
        "cryptohopper",
        "ctrader-algo",
        "etoro-copytrader",
        "finestel",
        "finrl",
        "freqtrade",
        "gainium",
        "gekko",
        "gemini-predictions",
        "gmgn",
        "goodcryptox",
        "gunbot",
        "haasonline",
        "htx-trading-bots",
        "hummingbot",
        "jesse",
        "kalshi-ai-trading-bot",
        "kalshi-api",
        "kryllos",
        "krypto-trading-bot",
        "kucoin-trading-bots",
        "lean",
        "lumibot",
        "maestro",
        "metatrader-5",
        "mevx",
        "mizar",
        "nautilus-trader",
        "nothing-ever-happens",
        "octobot",
        "octobot-prediction-market",
        "okx-trading-bots",
        "option-alpha",
        "oracle3",
        "passivbot",
        "phemex-trading-bots",
        "photon",
        "pionex",
        "pmxt",
        "poly-maker",
        "polymarket-agents",
        "polymarket-api",
        "polymarket-py-clob-client",
        "prediction-markets-bot-toolkits",
        "profittrailer",
        "qlib",
        "quantconnect",
        "revenuebot",
        "shrimpy",
        "sigma",
        "signalstack",
        "solareum",
        "stocksharp",
        "stoic-ai",
        "streak",
        "superalgos",
        "surmount",
        "tensortrade",
        "tickeron",
        "trade-ideas",
        "traderspost",
        "tradesanta",
        "tradetron",
        "trality",
        "trendspider",
        "trojan",
        "unibot",
        "vectorbt",
        "vnpy",
        "veles",
        "wundertrading",
        "zenbot",
        "zignaly",
        "zipline-reloaded",
        "zulutrade"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Bot",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "meta": {
           "type": "object"
          },
          "bot": {
           "$ref": "#/components/schemas/Bot"
          }
         },
         "required": []
        }
       }
      }
     },
     "404": {
      "description": "Unknown slug"
     }
    }
   }
  },
  "/api/scams.json": {
   "get": {
    "operationId": "listScams",
    "summary": "Regulator enforcement actions and CA DFPI scam tracker entries",
    "responses": {
     "200": {
      "description": "Scam records",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "meta": {
           "type": "object"
          },
          "enforcement_actions": {
           "type": "array",
           "items": {
            "type": "object"
           }
          },
          "dfpi_entries": {
           "type": "array",
           "items": {
            "type": "object"
           }
          }
         },
         "required": []
        }
       }
      }
     }
    }
   }
  },
  "/api/leaderboard.json": {
   "get": {
    "operationId": "getLeaderboard",
    "summary": "Hyperliquid vault leaderboard (30-day PnL)",
    "responses": {
     "200": {
      "description": "Vaults",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "meta": {
           "type": "object"
          },
          "vaults": {
           "type": "array",
           "items": {
            "type": "object"
           }
          }
         },
         "required": []
        }
       }
      }
     }
    }
   }
  },
  "/api/site-check.json": {
   "get": {
    "operationId": "checkWebsite",
    "summary": "Scam signals for a website (DFPI matches, look-alikes, RDAP domain age, HTTPS). Signals, not a verdict.",
    "parameters": [
     {
      "name": "url",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "maxLength": 300
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Signals",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "400": {
      "description": "Not a valid public domain"
     }
    }
   }
  },
  "/api/methodology.json": {
   "get": {
    "operationId": "getMethodology",
    "summary": "Report card rules",
    "responses": {
     "200": {
      "description": "Rules",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  },
  "/api/changes.json": {
   "get": {
    "operationId": "listChanges",
    "summary": "Change events (newest first)",
    "responses": {
     "200": {
      "description": "Events",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  },
  "/api/proven-returns.json": {
   "get": {
    "operationId": "getProvenReturns",
    "summary": "On-chain results of self-described bot vaults on Hyperliquid",
    "responses": {
     "200": {
      "description": "Vaults",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  },
  "/api/check.json": {
   "get": {
    "operationId": "checkBot",
    "summary": "Check a bot name or website against the directory and scam records",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "minLength": 2,
       "maxLength": 200
      },
      "description": "Bot name or website/domain, e.g. \"3Commas\" or \"web3-cryptohopper.com\""
     }
    ],
    "responses": {
     "200": {
      "description": "Check result",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "query": {
           "type": "string"
          },
          "verdict": {
           "type": "string",
           "enum": [
            "watchlist_match",
            "documented_bot",
            "both",
            "no_record"
           ]
          },
          "guidance": {
           "type": "string"
          },
          "bots": {
           "type": "array",
           "items": {
            "type": "object"
           }
          },
          "enforcement_actions": {
           "type": "array",
           "items": {
            "type": "object"
           }
          },
          "dfpi_entries": {
           "type": "array",
           "items": {
            "type": "object"
           }
          },
          "dfpi_total_matches": {
           "type": "integer"
          }
         },
         "required": []
        }
       }
      }
     },
     "400": {
      "description": "Missing or too-short q"
     }
    }
   }
  },
  "/api/key": {
   "get": {
    "operationId": "getKeyStatus",
    "summary": "Your API tier, limits and today's usage (send Authorization: Bearer <key>; without a key returns free-tier limits)",
    "responses": {
     "200": {
      "description": "Tier and limits",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Invalid or inactive key"
     }
    }
   }
  },
  "/api/advertise.json": {
   "get": {
    "operationId": "getRateCard",
    "summary": "Advertising rate card, integrity rules and active paid placements",
    "responses": {
     "200": {
      "description": "Rate card",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Bot": {
    "type": "object",
    "properties": {
     "slug": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "category": {
      "type": "string"
     },
     "record_status": {
      "type": "string",
      "enum": [
       "no_incidents_found",
       "incidents_on_record",
       "shutting_down",
       "discontinued"
      ]
     },
     "report_card": {
      "type": "object",
      "properties": {
       "result": {
        "type": "string",
        "enum": [
         "red_flags",
         "closed",
         "caution",
         "limited",
         "clear"
        ]
       },
       "label": {
        "type": "string"
       },
       "rules_version": {
        "type": "string"
       },
       "drivers": {
        "type": "array",
        "items": {
         "type": "string"
        }
       },
       "factors": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "rule": {
           "type": "string"
          },
          "level": {
           "type": "string"
          },
          "text": {
           "type": "string"
          },
          "source": {
           "type": [
            "string",
            "null"
           ]
          }
         },
         "required": []
        }
       }
      },
      "required": []
     },
     "custody": {
      "type": "string",
      "enum": [
       "self_hosted",
       "api_keys",
       "platform",
       "bot_wallet",
       "signals_only",
       "exchange_account",
       "discontinued",
       "other"
      ]
     },
     "official_url": {
      "type": [
       "string",
       "null"
      ]
     },
     "summary": {
      "type": "string"
     },
     "pricing": {
      "type": "string"
     },
     "pricing_source": {
      "type": [
       "string",
       "null"
      ]
     },
     "exchanges": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "connection": {
      "type": "string"
     },
     "license": {
      "type": "string"
     },
     "red_flags": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "text": {
         "type": "string"
        },
        "source": {
         "type": [
          "string",
          "null"
         ]
        }
       },
       "required": []
      }
     },
     "impostor_reports": {
      "type": "integer"
     },
     "last_checked": {
      "type": "string",
      "format": "date"
     },
     "page_url": {
      "type": "string"
     },
     "api_url": {
      "type": "string"
     }
    },
    "required": []
   }
  },
  "securitySchemes": {
   "apiKey": {
    "type": "http",
    "scheme": "bearer",
    "description": "Optional. Without a key: free tier, 60 requests/min per IP. Paid keys: https://getbotornot.com/api-access/"
   }
  }
 },
 "security": [
  {},
  {
   "apiKey": []
  }
 ]
}