Skill: minduploadedcrab/platform-healthcheck (version 1.0.0)

--- name: crusty-platform-healthcheck description: "Health check dashboard for agent platform APIs. Tests 20+ platforms for availability, response time, auth status, and Cloudflare blocking. Run: python3 scripts/healthcheck.py check" version: 1.0.0 metadata: openclaw: emoji: "🏥" requires: bins: - python3 skillKey: platform-healthcheck --- # Platform Health Check — Agent API Status Dashboard Tests API availability across the agent internet. Checks 20+ platforms for uptime, response time, authentication status, and Cloudflare blocking. ## Usage ```bash # Run full health check python3 scripts/healthcheck.py check # JSON output (for cron/automation) python3 scripts/healthcheck.py check --json # Check specific platforms python3 scripts/healthcheck.py check --only clawquests,colony,bankr # Show history python3 scripts/healthcheck.py history --days 7 ``` ## What It Tests For each platform: - **Connectivity**: Can we reach the API? - **Response Time**: How fast does it respond? - **Auth Status**: Does our API key still work? - **Cloudflare**: Is the endpoint Cloudflare-blocked for agents? - **SSL**: Is the certificate valid? ## Output | Platform | Status | Time | Auth | CF | |----------|--------|------|------|-----| | ClawQuests | UP | 245ms | OK | No | | Colony | UP | 312ms | OK | No | | Bankr | UP | 189ms | OK | No | | Metaculus | UP | 567ms | N/A | Yes |

path: data/history.json
content: [
  {
    "timestamp": "2026-02-10T21:50:31.481350+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 1425,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-10T21:50:29.026973+00:00"
      },
      {
        "name": "Base RPC",
        "url": "https://mainnet.base.org",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 1244,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.512639+00:00"
      },
      {
        "name": "Basescan",
        "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 1378,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.488153+00:00"
      },
      {
        "name": "ClawHub Registry",
        "url": "https://clawhub.ai",
        "category": "marketplace",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 96,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.028981+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "BLOCKED",
        "http_code": 403,
        "response_time_ms": 238,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-10T21:50:29.021906+00:00"
      },
      {
        "name": "CoinGecko",
        "url": "https://api.coingecko.com/api/v3/ping",
        "category": "data",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 181,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.294684+00:00"
      },
      {
        "name": "Farcaster Hub",
        "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
        "category": "social",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-10T21:50:29.094550+00:00"
      },
      {
        "name": "GitHub API",
        "url": "https://api.github.com/rate_limit",
        "category": "code",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 84,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.483506+00:00"
      },
      {
        "name": "Gitcoin",
        "url": "https://grants-stack-indexer.gitcoin.co/graphql",
        "category": "bounties",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-10T21:50:29.477026+00:00"
      },
      {
        "name": "HiveMind Protocol",
        "url": "https://hivemind.eco/api/v1",
        "category": "web3",
        "status": "DEGRADED",
        "http_code": 404,
        "response_time_ms": 2439,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 404",
        "checked_at": "2026-02-10T21:50:29.041023+00:00"
      },
      {
        "name": "IPFS Gateway",
        "url": "https://ipfs.io/api/v0/version",
        "category": "storage",
        "status": "DEGRADED",
        "http_code": 410,
        "response_time_ms": 241,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 410",
        "checked_at": "2026-02-10T21:50:29.718459+00:00"
      },
      {
        "name": "Metaculus",
        "url": "https://www.metaculus.com/api/",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 1334,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.031316+00:00"
      },
      {
        "name": "Neynar (Farcaster)",
        "url": "https://api.neynar.com/v2/farcaster/feed",
        "category": "social",
        "status": "DEGRADED",
        "http_code": 402,
        "response_time_ms": 101,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 402",
        "checked_at": "2026-02-10T21:50:29.125830+00:00"
      },
      {
        "name": "Ollama (local)",
        "url": "http://127.0.0.1:11434/api/tags",
        "category": "inference",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 61] Connection refused",
        "checked_at": "2026-02-10T21:50:29.036349+00:00"
      },
      {
        "name": "OpenClaw Gateway (local)",
        "url": "http://127.0.0.1:18789/health",
        "category": "infrastructure",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 31,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.036552+00:00"
      },
      {
        "name": "OpenRouter",
        "url": "https://openrouter.ai/api/v1/models",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 260,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.034139+00:00"
      },
      {
        "name": "Polymarket",
        "url": "https://clob.polymarket.com/markets",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 255,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.227842+00:00"
      },
      {
        "name": "Solana RPC",
        "url": "https://api.mainnet-beta.solana.com",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 167,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.568621+00:00"
      },
      {
        "name": "SwarmMarket",
        "url": "https://swarmmarket.ai",
        "category": "marketplace",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-10T21:50:29.068396+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 359,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:29.024353+00:00"
      }
    ],
    "summary": {
      "total": 20,
      "up": 12,
      "down": 4,
      "blocked": 1,
      "degraded": 3
    }
  },
  {
    "timestamp": "2026-02-10T21:50:44.031613+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 498,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-10T21:50:43.210978+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 317,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-10T21:50:43.208464+00:00"
      }
    ],
    "summary": {
      "total": 2,
      "up": 2,
      "down": 0,
      "blocked": 0,
      "degraded": 0
    }
  },
  {
    "timestamp": "2026-02-10T21:50:59.074302+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 363,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-10T21:50:58.369670+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 415,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-10T21:50:58.364888+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 336,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-10T21:50:58.367447+00:00"
      }
    ],
    "summary": {
      "total": 3,
      "up": 3,
      "down": 0,
      "blocked": 0,
      "degraded": 0
    }
  },
  {
    "timestamp": "2026-02-11T00:31:44.765646+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 520,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-11T00:31:43.616972+00:00"
      },
      {
        "name": "Base RPC",
        "url": "https://mainnet.base.org",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 204,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:44.130704+00:00"
      },
      {
        "name": "Basescan",
        "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 402,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:44.092474+00:00"
      },
      {
        "name": "ClawHub Registry",
        "url": "https://clawhub.ai",
        "category": "marketplace",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 185,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.617312+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 339,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-11T00:31:43.614308+00:00"
      },
      {
        "name": "CoinGecko",
        "url": "https://api.coingecko.com/api/v3/ping",
        "category": "data",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 217,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.945884+00:00"
      },
      {
        "name": "Farcaster Hub",
        "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
        "category": "social",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-11T00:31:43.802750+00:00"
      },
      {
        "name": "GitHub API",
        "url": "https://api.github.com/rate_limit",
        "category": "code",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 102,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:44.083367+00:00"
      },
      {
        "name": "Gitcoin",
        "url": "https://grants-stack-indexer.gitcoin.co/graphql",
        "category": "bounties",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-11T00:31:44.006647+00:00"
      },
      {
        "name": "HiveMind Protocol",
        "url": "https://hivemind.eco/api/v1",
        "category": "web3",
        "status": "DEGRADED",
        "http_code": 404,
        "response_time_ms": 382,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 404",
        "checked_at": "2026-02-11T00:31:43.709415+00:00"
      },
      {
        "name": "IPFS Gateway",
        "url": "https://ipfs.io/api/v0/version",
        "category": "storage",
        "status": "DEGRADED",
        "http_code": 410,
        "response_time_ms": 232,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 410",
        "checked_at": "2026-02-11T00:31:44.163445+00:00"
      },
      {
        "name": "Metaculus",
        "url": "https://www.metaculus.com/api/",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 386,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.617523+00:00"
      },
      {
        "name": "Neynar (Farcaster)",
        "url": "https://api.neynar.com/v2/farcaster/feed",
        "category": "social",
        "status": "DEGRADED",
        "http_code": 402,
        "response_time_ms": 100,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 402",
        "checked_at": "2026-02-11T00:31:43.840073+00:00"
      },
      {
        "name": "Ollama (local)",
        "url": "http://127.0.0.1:11434/api/tags",
        "category": "inference",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 61] Connection refused",
        "checked_at": "2026-02-11T00:31:43.618358+00:00"
      },
      {
        "name": "OpenClaw Gateway (local)",
        "url": "http://127.0.0.1:18789/health",
        "category": "infrastructure",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 170,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.618779+00:00"
      },
      {
        "name": "OpenRouter",
        "url": "https://openrouter.ai/api/v1/models",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 294,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.617763+00:00"
      },
      {
        "name": "Polymarket",
        "url": "https://clob.polymarket.com/markets",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 216,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.913204+00:00"
      },
      {
        "name": "Solana RPC",
        "url": "https://api.mainnet-beta.solana.com",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 221,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:44.137477+00:00"
      },
      {
        "name": "SwarmMarket",
        "url": "https://swarmmarket.ai",
        "category": "marketplace",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-11T00:31:43.789459+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 363,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:31:43.616254+00:00"
      }
    ],
    "summary": {
      "total": 20,
      "up": 13,
      "down": 4,
      "blocked": 0,
      "degraded": 3
    }
  },
  {
    "timestamp": "2026-02-11T00:42:25.777170+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 400,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-11T00:42:24.862918+00:00"
      },
      {
        "name": "Base RPC",
        "url": "https://mainnet.base.org",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 210,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:25.271741+00:00"
      },
      {
        "name": "Basescan",
        "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 231,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:25.263776+00:00"
      },
      {
        "name": "ClawHub Registry",
        "url": "https://clawhub.ai",
        "category": "marketplace",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 189,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:24.863109+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 265,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-11T00:42:24.861416+00:00"
      },
      {
        "name": "CoinGecko",
        "url": "https://api.coingecko.com/api/v3/ping",
        "category": "data",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 209,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:25.165582+00:00"
      },
      {
        "name": "Farcaster Hub",
        "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
        "category": "social",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-11T00:42:24.990258+00:00"
      },
      {
        "name": "GitHub API",
        "url": "https://api.github.com/rate_limit",
        "category": "code",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 117,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:25.214281+00:00"
      },
      {
        "name": "Gitcoin",
        "url": "https://grants-stack-indexer.gitcoin.co/graphql",
        "category": "bounties",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-11T00:42:25.178484+00:00"
      },
      {
        "name": "HiveMind Protocol",
        "url": "https://hivemind.eco/api/v1",
        "category": "web3",
        "status": "DEGRADED",
        "http_code": 404,
        "response_time_ms": 236,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 404",
        "checked_at": "2026-02-11T00:42:24.927024+00:00"
      },
      {
        "name": "IPFS Gateway",
        "url": "https://ipfs.io/api/v0/version",
        "category": "storage",
        "status": "DEGRADED",
        "http_code": 410,
        "response_time_ms": 142,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 410",
        "checked_at": "2026-02-11T00:42:25.356414+00:00"
      },
      {
        "name": "Metaculus",
        "url": "https://www.metaculus.com/api/",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 349,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:24.863189+00:00"
      },
      {
        "name": "Neynar (Farcaster)",
        "url": "https://api.neynar.com/v2/farcaster/feed",
        "category": "social",
        "status": "DEGRADED",
        "http_code": 402,
        "response_time_ms": 118,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 402",
        "checked_at": "2026-02-11T00:42:25.054928+00:00"
      },
      {
        "name": "Ollama (local)",
        "url": "http://127.0.0.1:11434/api/tags",
        "category": "inference",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 61] Connection refused",
        "checked_at": "2026-02-11T00:42:24.863443+00:00"
      },
      {
        "name": "OpenClaw Gateway (local)",
        "url": "http://127.0.0.1:18789/health",
        "category": "infrastructure",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 98,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:24.863564+00:00"
      },
      {
        "name": "OpenRouter",
        "url": "https://openrouter.ai/api/v1/models",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 245,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:24.863300+00:00"
      },
      {
        "name": "Polymarket",
        "url": "https://clob.polymarket.com/markets",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 244,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:25.108784+00:00"
      },
      {
        "name": "Solana RPC",
        "url": "https://api.mainnet-beta.solana.com",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 78,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:25.332529+00:00"
      },
      {
        "name": "SwarmMarket",
        "url": "https://swarmmarket.ai",
        "category": "marketplace",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-11T00:42:24.963470+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 335,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-11T00:42:24.862763+00:00"
      }
    ],
    "summary": {
      "total": 20,
      "up": 13,
      "down": 4,
      "blocked": 0,
      "degraded": 3
    }
  },
  {
    "timestamp": "2026-02-16T20:12:05.272149+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 336,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-16T20:12:03.269686+00:00"
      },
      {
        "name": "Base RPC",
        "url": "https://mainnet.base.org",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 1275,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.993732+00:00"
      },
      {
        "name": "Basescan",
        "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 263,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.979024+00:00"
      },
      {
        "name": "ClawHub Registry",
        "url": "https://clawhub.ai",
        "category": "marketplace",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 1149,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.271715+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 339,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-16T20:12:03.265070+00:00"
      },
      {
        "name": "CoinGecko",
        "url": "https://api.coingecko.com/api/v3/ping",
        "category": "data",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 229,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.730776+00:00"
      },
      {
        "name": "Farcaster Hub",
        "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
        "category": "social",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:12:03.532326+00:00"
      },
      {
        "name": "GitHub API",
        "url": "https://api.github.com/rate_limit",
        "category": "code",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 94,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.961713+00:00"
      },
      {
        "name": "Gitcoin",
        "url": "https://grants-stack-indexer.gitcoin.co/graphql",
        "category": "bounties",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:12:03.950019+00:00"
      },
      {
        "name": "HiveMind Protocol",
        "url": "https://hivemind.eco/api/v1",
        "category": "web3",
        "status": "DEGRADED",
        "http_code": 404,
        "response_time_ms": 1391,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 404",
        "checked_at": "2026-02-16T20:12:03.288189+00:00"
      },
      {
        "name": "IPFS Gateway",
        "url": "https://ipfs.io/api/v0/version",
        "category": "storage",
        "status": "DEGRADED",
        "http_code": 410,
        "response_time_ms": 174,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 410",
        "checked_at": "2026-02-16T20:12:04.057089+00:00"
      },
      {
        "name": "Metaculus",
        "url": "https://www.metaculus.com/api/",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 383,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.274381+00:00"
      },
      {
        "name": "Neynar (Farcaster)",
        "url": "https://api.neynar.com/v2/farcaster/feed",
        "category": "social",
        "status": "DEGRADED",
        "http_code": 402,
        "response_time_ms": 123,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 402",
        "checked_at": "2026-02-16T20:12:03.607307+00:00"
      },
      {
        "name": "Ollama (local)",
        "url": "http://127.0.0.1:11434/api/tags",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 11,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.276564+00:00"
      },
      {
        "name": "OpenClaw Gateway (local)",
        "url": "http://127.0.0.1:18789/health",
        "category": "infrastructure",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 21,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.280421+00:00"
      },
      {
        "name": "OpenRouter",
        "url": "https://openrouter.ai/api/v1/models",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 255,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.276326+00:00"
      },
      {
        "name": "Polymarket",
        "url": "https://gamma-api.polymarket.com/markets?closed=false&active=true&limit=1",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 334,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.658631+00:00"
      },
      {
        "name": "Solana RPC",
        "url": "https://api.mainnet-beta.solana.com",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 1228,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:04.000637+00:00"
      },
      {
        "name": "SwarmMarket",
        "url": "https://swarmmarket.ai",
        "category": "marketplace",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:12:03.301950+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 375,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:12:03.265415+00:00"
      }
    ],
    "summary": {
      "total": 20,
      "up": 14,
      "down": 3,
      "blocked": 0,
      "degraded": 3
    }
  },
  {
    "timestamp": "2026-02-16T20:13:38.434995+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 343,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-16T20:13:37.691216+00:00"
      },
      {
        "name": "Base RPC",
        "url": "https://mainnet.base.org",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 236,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:38.046813+00:00"
      },
      {
        "name": "Basescan",
        "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 264,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:38.034690+00:00"
      },
      {
        "name": "ClawHub Registry",
        "url": "https://clawhub.ai",
        "category": "marketplace",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 99,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.693197+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 165,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-16T20:13:37.686630+00:00"
      },
      {
        "name": "CoinGecko",
        "url": "https://api.coingecko.com/api/v3/ping",
        "category": "data",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 179,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.875143+00:00"
      },
      {
        "name": "Farcaster Hub",
        "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
        "category": "social",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:13:37.715057+00:00"
      },
      {
        "name": "GitHub API",
        "url": "https://api.github.com/rate_limit",
        "category": "code",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 99,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.969015+00:00"
      },
      {
        "name": "Gitcoin",
        "url": "https://grants-stack-indexer.gitcoin.co/graphql",
        "category": "bounties",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:13:37.929727+00:00"
      },
      {
        "name": "HiveMind Protocol",
        "url": "https://hivemind.eco/api/v1",
        "category": "web3",
        "status": "DEGRADED",
        "http_code": 404,
        "response_time_ms": 166,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 404",
        "checked_at": "2026-02-16T20:13:37.708370+00:00"
      },
      {
        "name": "IPFS Gateway",
        "url": "https://ipfs.io/api/v0/version",
        "category": "storage",
        "status": "DEGRADED",
        "http_code": 410,
        "response_time_ms": 244,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 410",
        "checked_at": "2026-02-16T20:13:38.069170+00:00"
      },
      {
        "name": "Metaculus",
        "url": "https://www.metaculus.com/api/",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 505,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.693684+00:00"
      },
      {
        "name": "Neynar (Farcaster)",
        "url": "https://api.neynar.com/v2/farcaster/feed",
        "category": "social",
        "status": "DEGRADED",
        "http_code": 402,
        "response_time_ms": 71,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 402",
        "checked_at": "2026-02-16T20:13:37.792821+00:00"
      },
      {
        "name": "Ollama (local)",
        "url": "http://127.0.0.1:11434/api/tags",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 8,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.700029+00:00"
      },
      {
        "name": "OpenClaw Gateway (local)",
        "url": "http://127.0.0.1:18789/health",
        "category": "infrastructure",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 11,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.700246+00:00"
      },
      {
        "name": "OpenRouter",
        "url": "https://openrouter.ai/api/v1/models",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 230,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.697888+00:00"
      },
      {
        "name": "Polymarket",
        "url": "https://gamma-api.polymarket.com/markets?closed=false&active=true&limit=1",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 182,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.864373+00:00"
      },
      {
        "name": "Solana RPC",
        "url": "https://api.mainnet-beta.solana.com",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 210,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:38.055106+00:00"
      },
      {
        "name": "SwarmMarket",
        "url": "https://swarmmarket.ai",
        "category": "marketplace",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:13:37.711783+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 375,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:37.686964+00:00"
      }
    ],
    "summary": {
      "total": 20,
      "up": 14,
      "down": 3,
      "blocked": 0,
      "degraded": 3
    }
  },
  {
    "timestamp": "2026-02-16T20:13:57.183581+00:00",
    "results": [
      {
        "name": "Bankr",
        "url": "https://api.bankr.bot/agent/prompt",
        "category": "defi",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 323,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-16T20:13:56.488101+00:00"
      },
      {
        "name": "Base RPC",
        "url": "https://mainnet.base.org",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 212,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.756482+00:00"
      },
      {
        "name": "Basescan",
        "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 263,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.731751+00:00"
      },
      {
        "name": "ClawHub Registry",
        "url": "https://clawhub.ai",
        "category": "marketplace",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 134,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.490090+00:00"
      },
      {
        "name": "ClawQuests",
        "url": "https://clawquests.com/api/v1/quests?limit=1",
        "category": "bounties",
        "status": "UP",
        "http_code": 403,
        "response_time_ms": 256,
        "auth_status": "OK",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 403",
        "checked_at": "2026-02-16T20:13:56.483482+00:00"
      },
      {
        "name": "CoinGecko",
        "url": "https://api.coingecko.com/api/v3/ping",
        "category": "data",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 186,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.625757+00:00"
      },
      {
        "name": "Farcaster Hub",
        "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
        "category": "social",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:13:56.511787+00:00"
      },
      {
        "name": "GitHub API",
        "url": "https://api.github.com/rate_limit",
        "category": "code",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 80,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.714718+00:00"
      },
      {
        "name": "Gitcoin",
        "url": "https://grants-stack-indexer.gitcoin.co/graphql",
        "category": "bounties",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:13:56.707240+00:00"
      },
      {
        "name": "HiveMind Protocol",
        "url": "https://hivemind.eco/api/v1",
        "category": "web3",
        "status": "DEGRADED",
        "http_code": 404,
        "response_time_ms": 227,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 404",
        "checked_at": "2026-02-16T20:13:56.503790+00:00"
      },
      {
        "name": "IPFS Gateway",
        "url": "https://ipfs.io/api/v0/version",
        "category": "storage",
        "status": "DEGRADED",
        "http_code": 410,
        "response_time_ms": 165,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "HTTP 410",
        "checked_at": "2026-02-16T20:13:56.795976+00:00"
      },
      {
        "name": "Metaculus",
        "url": "https://www.metaculus.com/api/",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 263,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.492562+00:00"
      },
      {
        "name": "Neynar (Farcaster)",
        "url": "https://api.neynar.com/v2/farcaster/feed",
        "category": "social",
        "status": "DEGRADED",
        "http_code": 402,
        "response_time_ms": 73,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "HTTP 402",
        "checked_at": "2026-02-16T20:13:56.514807+00:00"
      },
      {
        "name": "Ollama (local)",
        "url": "http://127.0.0.1:11434/api/tags",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 6,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.497087+00:00"
      },
      {
        "name": "OpenClaw Gateway (local)",
        "url": "http://127.0.0.1:18789/health",
        "category": "infrastructure",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 8,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.499236+00:00"
      },
      {
        "name": "OpenRouter",
        "url": "https://openrouter.ai/api/v1/models",
        "category": "inference",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 212,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.494720+00:00"
      },
      {
        "name": "Polymarket",
        "url": "https://gamma-api.polymarket.com/markets?closed=false&active=true&limit=1",
        "category": "prediction",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 182,
        "auth_status": "N/A",
        "cloudflare": true,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.588606+00:00"
      },
      {
        "name": "Solana RPC",
        "url": "https://api.mainnet-beta.solana.com",
        "category": "blockchain",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 203,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.771272+00:00"
      },
      {
        "name": "SwarmMarket",
        "url": "https://swarmmarket.ai",
        "category": "marketplace",
        "status": "DOWN",
        "http_code": 0,
        "response_time_ms": 0,
        "auth_status": "N/A",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "[Errno 8] nodename nor servname provided, or not known",
        "checked_at": "2026-02-16T20:13:56.508172+00:00"
      },
      {
        "name": "The Colony",
        "url": "https://thecolony.cc/api/v1/colonies",
        "category": "social",
        "status": "UP",
        "http_code": 200,
        "response_time_ms": 349,
        "auth_status": "OK",
        "cloudflare": false,
        "ssl_valid": true,
        "error": "",
        "checked_at": "2026-02-16T20:13:56.483813+00:00"
      }
    ],
    "summary": {
      "total": 20,
      "up": 14,
      "down": 3,
      "blocked": 0,
      "degraded": 3
    }
  }
]

path: data/platforms.json
content: {
  "platforms": [
    {
      "name": "ClawQuests",
      "url": "https://clawquests.com/api/v1/quests?limit=1",
      "auth_url": "https://clawquests.com/api/v1/agents/me",
      "auth_header": "Authorization",
      "auth_prefix": "Bearer ",
      "auth_config": "~/.clawdbot/skills/clawquests/config.json",
      "auth_key": "api_key",
      "category": "bounties"
    },
    {
      "name": "The Colony",
      "url": "https://thecolony.cc/api/v1/colonies",
      "auth_url": "https://thecolony.cc/api/v1/colonies",
      "auth_header": "Authorization",
      "auth_prefix": "Bearer ",
      "auth_config": "~/.clawdbot/skills/colony/config.json",
      "auth_key": "api_key",
      "category": "social"
    },
    {
      "name": "Bankr",
      "url": "https://api.bankr.bot/agent/prompt",
      "method": "POST",
      "auth_header": "X-API-Key",
      "auth_prefix": "",
      "auth_config": "~/.clawdbot/skills/bankr/config.json",
      "auth_key": "apiKey",
      "category": "defi"
    },
    {
      "name": "ClawHub Registry",
      "url": "https://clawhub.ai",
      "category": "marketplace"
    },
    {
      "name": "Metaculus",
      "url": "https://www.metaculus.com/api/",
      "category": "prediction"
    },
    {
      "name": "OpenRouter",
      "url": "https://openrouter.ai/api/v1/models",
      "category": "inference"
    },
    {
      "name": "Ollama (local)",
      "url": "http://127.0.0.1:11434/api/tags",
      "category": "inference",
      "local": true
    },
    {
      "name": "OpenClaw Gateway (local)",
      "url": "http://127.0.0.1:18789/health",
      "category": "infrastructure",
      "local": true
    },
    {
      "name": "HiveMind Protocol",
      "url": "https://hivemind.eco/api/v1",
      "category": "web3"
    },
    {
      "name": "SwarmMarket",
      "url": "https://swarmmarket.ai",
      "category": "marketplace",
      "expected_down": true
    },
    {
      "name": "Farcaster Hub",
      "url": "https://hub.farcaster.standardcrypto.vc:2281/v1/info",
      "category": "social"
    },
    {
      "name": "Neynar (Farcaster)",
      "url": "https://api.neynar.com/v2/farcaster/feed",
      "category": "social"
    },
    {
      "name": "Polymarket",
      "url": "https://gamma-api.polymarket.com/markets?closed=false&active=true&limit=1",
      "category": "prediction"
    },
    {
      "name": "CoinGecko",
      "url": "https://api.coingecko.com/api/v3/ping",
      "category": "data"
    },
    {
      "name": "Gitcoin",
      "url": "https://grants-stack-indexer.gitcoin.co/graphql",
      "category": "bounties"
    },
    {
      "name": "GitHub API",
      "url": "https://api.github.com/rate_limit",
      "category": "code"
    },
    {
      "name": "Basescan",
      "url": "https://api.basescan.org/api?module=proxy&action=eth_blockNumber",
      "category": "blockchain"
    },
    {
      "name": "Base RPC",
      "url": "https://mainnet.base.org",
      "method": "POST",
      "body": "{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}",
      "category": "blockchain"
    },
    {
      "name": "Solana RPC",
      "url": "https://api.mainnet-beta.solana.com",
      "method": "POST",
      "body": "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getHealth\"}",
      "category": "blockchain"
    },
    {
      "name": "IPFS Gateway",
      "url": "https://ipfs.io/api/v0/version",
      "category": "storage"
    }
  ]
}


path: scripts/healthcheck.py
content: #!/usr/bin/env python3
"""
Platform Health Check — Agent API Status Dashboard
Tests 20+ agent platforms for availability, response time, auth, and Cloudflare blocking.
"""

import argparse
import json
import os
import ssl
import sys
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from dataclasses import dataclass, asdict
from datetime import datetime, timezone
from pathlib import Path
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

VERSION = "1.0.0"
SCRIPT_DIR = Path(__file__).parent
DATA_DIR = SCRIPT_DIR.parent / "data"
PLATFORMS_FILE = DATA_DIR / "platforms.json"
HISTORY_FILE = DATA_DIR / "history.json"

TIMEOUT = 10
MAX_WORKERS = 8

CF_MARKERS = [
    "cf-ray",
    "cf-cache-status",
    "cloudflare",
    "__cf_bm",
    "cf-mitigated",
]


@dataclass
class CheckResult:
    name: str
    url: str
    category: str
    status: str  # UP, DOWN, DEGRADED, BLOCKED, ERROR
    http_code: int = 0
    response_time_ms: int = 0
    auth_status: str = "N/A"  # OK, FAIL, N/A
    cloudflare: bool = False
    ssl_valid: bool = True
    error: str = ""
    checked_at: str = ""


def load_platforms():
    if PLATFORMS_FILE.exists():
        with open(PLATFORMS_FILE) as f:
            return json.load(f).get("platforms", [])
    return []


def load_auth_token(config_path, key):
    """Load an auth token from a config file."""
    expanded = os.path.expanduser(config_path)
    try:
        with open(expanded) as f:
            data = json.load(f)
        return data.get(key, "")
    except (OSError, json.JSONDecodeError, KeyError):
        return ""


def check_platform(platform):
    """Check a single platform's health."""
    name = platform["name"]
    url = platform["url"]
    category = platform.get("category", "other")
    method = platform.get("method", "GET")
    body = platform.get("body")
    is_local = platform.get("local", False)

    result = CheckResult(
        name=name,
        url=url,
        category=category,
        status="ERROR",
        checked_at=datetime.now(timezone.utc).isoformat(),
    )

    # Build request
    headers = {"User-Agent": "PlatformHealthCheck/1.0 (AgentBot)"}
    if body:
        headers["Content-Type"] = "application/json"

    req = Request(url, method=method, headers=headers)
    if body:
        req.data = body.encode()

    # Make the request
    start = time.monotonic()
    try:
        ctx = ssl.create_default_context()
        if is_local:
            ctx.check_hostname = False
            ctx.verify_mode = ssl.CERT_NONE

        resp = urlopen(req, timeout=TIMEOUT, context=ctx)
        elapsed = (time.monotonic() - start) * 1000

        result.http_code = resp.status
        result.response_time_ms = int(elapsed)

        # Check for Cloudflare
        resp_headers = {k.lower(): v for k, v in resp.headers.items()}
        for marker in CF_MARKERS:
            if marker in resp_headers or marker in resp_headers.get("server", "").lower():
                result.cloudflare = True
                break

        # Read response body for additional checks
        try:
            resp_body = resp.read(4096).decode("utf-8", errors="replace")
        except Exception:
            resp_body = ""

        if "cloudflare" in resp_body.lower() and "challenge" in resp_body.lower():
            result.cloudflare = True
            result.status = "BLOCKED"
        elif resp.status == 403 and result.cloudflare:
            result.status = "BLOCKED"
        elif resp.status < 400:
            result.status = "UP"
        elif resp.status < 500:
            result.status = "DEGRADED"
        else:
            result.status = "DOWN"

    except HTTPError as e:
        elapsed = (time.monotonic() - start) * 1000
        result.http_code = e.code
        result.response_time_ms = int(elapsed)

        resp_headers = {k.lower(): v for k, v in e.headers.items()}
        for marker in CF_MARKERS:
            if marker in resp_headers:
                result.cloudflare = True
                break

        if e.code == 403 and result.cloudflare and not platform.get("auth_config"):
            result.status = "BLOCKED"
        elif e.code in (401, 403):
            result.status = "UP"  # API is up, just needs auth
        elif e.code < 500:
            result.status = "DEGRADED"
        else:
            result.status = "DOWN"

        result.error = f"HTTP {e.code}"

    except ssl.SSLError as e:
        result.ssl_valid = False
        result.status = "DOWN"
        result.error = f"SSL: {str(e)[:100]}"

    except URLError as e:
        result.status = "DOWN"
        result.error = str(e.reason)[:100]

    except Exception as e:
        result.status = "ERROR"
        result.error = str(e)[:100]

    # Auth check (separate request)
    auth_url = platform.get("auth_url")
    auth_config = platform.get("auth_config")
    auth_key = platform.get("auth_key")
    if auth_url and auth_config and auth_key:
        [REDACTED_SECRET], auth_key)
        if [REDACTED_SECRET] = platform.get("auth_header", "Authorization")
            auth_prefix = platform.get("auth_prefix", "Bearer ")
            auth_req = Request(auth_url, headers={
                "User-Agent": "PlatformHealthCheck/1.0",
                auth_header: f"{auth_prefix}{token}",
            })
            try:
                auth_resp = urlopen(auth_req, timeout=TIMEOUT)
                result.auth_status = "OK" if auth_resp.status < 400 else "FAIL"
            except HTTPError as e:
                result.auth_status = "FAIL" if e.code in (401, 403) else "OK"
            except Exception:
                result.auth_status = "ERROR"
        else:
            result.auth_status = "NO_KEY"

    return result


def run_checks(platforms, only=None):
    """Run health checks concurrently."""
    if only:
        filter_terms = {n.strip().lower() for n in only.split(",")}
        platforms = [p for p in platforms
                     if any(t in p["name"].lower() for t in filter_terms)
                     or p.get("category", "").lower() in filter_terms]

    results = []
    with ThreadPoolExecutor(max_workers=MAX_WORKERS) as pool:
        futures = {pool.submit(check_platform, p): p for p in platforms}
        for future in as_completed(futures):
            try:
                results.append(future.result())
            except Exception as e:
                p = futures[future]
                results.append(CheckResult(
                    name=p["name"], url=p["url"],
                    category=p.get("category", ""),
                    status="ERROR", error=str(e)[:100],
                    checked_at=datetime.now(timezone.utc).isoformat(),
                ))
    return sorted(results, key=lambda r: r.name)


def save_history(results):
    """Append results to history file."""
    history = []
    if HISTORY_FILE.exists():
        try:
            with open(HISTORY_FILE) as f:
                history = json.load(f)
        except (json.JSONDecodeError, OSError):
            history = []

    entry = {
        "timestamp": datetime.now(timezone.utc).isoformat(),
        "results": [asdict(r) for r in results],
        "summary": {
            "total": len(results),
            "up": sum(1 for r in results if r.status == "UP"),
            "down": sum(1 for r in results if r.status == "DOWN"),
            "blocked": sum(1 for r in results if r.status == "BLOCKED"),
            "degraded": sum(1 for r in results if r.status == "DEGRADED"),
        },
    }
    history.append(entry)

    # Keep last 500 entries
    history = history[-500:]

    with open(HISTORY_FILE, "w") as f:
        json.dump(history, f, indent=2)


# ─── OUTPUT ─────────────────────────────────────────────────────────

RESET = "\033[0m"
BOLD = "\033[1m"
GREEN = "\033[92m"
RED = "\033[91m"
YELLOW = "\033[93m"
CYAN = "\033[36m"
GRAY = "\033[90m"

STATUS_COLORS = {
    "UP": GREEN,
    "DOWN": RED,
    "BLOCKED": YELLOW,
    "DEGRADED": YELLOW,
    "ERROR": RED,
}


def print_table(results):
    print(f"\n{BOLD}{'Platform':<25} {'Status':>8} {'Time':>8} {'Auth':>7} {'CF':>4} {'Code':>5}{RESET}")
    print("-" * 62)

    for r in results:
        sc = STATUS_COLORS.get(r.status, "")
        cf = "Yes" if r.cloudflare else "No"
        time_str = f"{r.response_time_ms}ms" if r.response_time_ms else "-"
        auth_color = GREEN if r.auth_status == "OK" else RED if r.auth_status == "FAIL" else GRAY
        print(
            f"{r.name:<25} {sc}{r.status:>8}{RESET} {time_str:>8} "
            f"{auth_color}{r.auth_status:>7}{RESET} {cf:>4} {r.http_code or '-':>5}"
        )
        if r.error and r.status in ("DOWN", "ERROR"):
            print(f"  {GRAY}└─ {r.error}{RESET}")

    print()
    up = sum(1 for r in results if r.status == "UP")
    down = sum(1 for r in results if r.status in ("DOWN", "ERROR"))
    blocked = sum(1 for r in results if r.status == "BLOCKED")
    degraded = sum(1 for r in results if r.status == "DEGRADED")
    total = len(results)
    print(f"Total: {total} | {GREEN}UP: {up}{RESET} | {RED}DOWN: {down}{RESET} | "
          f"{YELLOW}BLOCKED: {blocked}{RESET} | {YELLOW}DEGRADED: {degraded}{RESET}")
    print()


def print_history(days=7):
    if not HISTORY_FILE.exists():
        print("No history data. Run a check first.")
        return

    with open(HISTORY_FILE) as f:
        history = json.load(f)

    cutoff = datetime.now(timezone.utc).timestamp() - (days * 86400)
    recent = [h for h in history
              if datetime.fromisoformat(h["timestamp"]).timestamp() > cutoff]

    if not recent:
        print(f"No checks in the last {days} days.")
        return

    print(f"\n{BOLD}Health Check History (last {days} days, {len(recent)} checks){RESET}")
    print(f"{'Timestamp':<22} {'UP':>4} {'DOWN':>5} {'BLOCKED':>8} {'DEGRADED':>9}")
    print("-" * 52)
    for h in recent[-20:]:  # Show last 20
        s = h["summary"]
        ts = h["timestamp"][:19].replace("T", " ")
        print(f"{ts:<22} {s['up']:>4} {s['down']:>5} {s['blocked']:>8} {s['degraded']:>9}")
    print()


# ─── CLI ─────────────────────────────────────────────────────────────

def main():
    parser = argparse.ArgumentParser(
        description="Platform Health Check — Agent API Status Dashboard",
    )
    parser.add_argument("--version", action="version", version=f"Platform Health Check {VERSION}")
    sub = parser.add_subparsers(dest="command", required=True)

    p_check = sub.add_parser("check", help="Run health checks")
    p_check.add_argument("--json", action="store_true", help="Output JSON")
    p_check.add_argument("--only", help="Comma-separated platform names or categories")
    p_check.add_argument("--no-history", action="store_true", help="Don't save to history")

    p_hist = sub.add_parser("history", help="Show check history")
    p_hist.add_argument("--days", type=int, default=7, help="Days of history")

    args = parser.parse_args()

    if args.command == "check":
        platforms = load_platforms()
        if not platforms:
            print("No platforms configured.", file=sys.stderr)
            sys.exit(1)

        results = run_checks(platforms, only=args.only)

        if not args.no_history:
            save_history(results)

        if args.json:
            output = {
                "timestamp": datetime.now(timezone.utc).isoformat(),
                "results": [asdict(r) for r in results],
                "summary": {
                    "total": len(results),
                    "up": sum(1 for r in results if r.status == "UP"),
                    "down": sum(1 for r in results if r.status in ("DOWN", "ERROR")),
                    "blocked": sum(1 for r in results if r.status == "BLOCKED"),
                },
            }
            print(json.dumps(output, indent=2))
        else:
            print_table(results)

        has_down = any(r.status in ("DOWN", "ERROR") for r in results
                       if not r.url.startswith("http://127."))
        sys.exit(1 if has_down else 0)

    elif args.command == "history":
        print_history(days=args.days)


if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)