{"openapi":"3.0.3","info":{"title":"web3radar Public API","version":"1.0.0","description":"Public, free, read-only API for web3 security incident data. Rate-limited to 100 requests / hour per IP. All responses are JSON. Only PUBLISHED incidents are returned.","contact":{"url":"https://web3radar.stakecito.com/about"},"license":{"name":"Incident data: see /about for sourcing and licensing"}},"servers":[{"url":"https://web3radar.stakecito.com/api/v1"}],"tags":[{"name":"incidents","description":"Verified security incidents"},{"name":"chains","description":"Monitored chains"},{"name":"reference","description":"Reference data"},{"name":"stats","description":"Aggregate statistics"}],"paths":{"/incidents":{"get":{"tags":["incidents"],"summary":"List incidents","description":"Filter, sort, and paginate published security incidents.","parameters":[{"name":"chain","in":"query","description":"Chain slug (repeatable).","schema":{"type":"string"}},{"name":"attack_vector","in":"query","description":"Attack vector slug (repeatable).","schema":{"type":"string"}},{"name":"protocol_category","in":"query","schema":{"type":"string","enum":["DEX","LENDING","BRIDGE","CEX","STABLECOIN","NFT_MARKETPLACE","YIELD_AGGREGATOR","STAKING","DERIVATIVES","WALLET","INFRASTRUCTURE","OTHER"]}},{"name":"root_cause","in":"query","schema":{"type":"string","enum":["SMART_CONTRACT_BUG","ORACLE_MANIPULATION","PRIVATE_KEY_COMPROMISE","ACCESS_CONTROL","GOVERNANCE_ATTACK","BRIDGE_VALIDATION","FRONTEND_COMPROMISE","SOCIAL_ENGINEERING","FLASH_LOAN_ATTACK","REENTRANCY","ARITHMETIC","RUG_PULL","INFRASTRUCTURE","OTHER","UNKNOWN"]}},{"name":"recovery_status","in":"query","schema":{"type":"string","enum":["NONE","PARTIAL","FULL","ONGOING","UNKNOWN"]}},{"name":"since","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"until","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"loss_min","in":"query","schema":{"type":"number","minimum":0}},{"name":"loss_max","in":"query","schema":{"type":"number","minimum":0}},{"name":"q","in":"query","description":"Search protocol, attacker address, tx hash.","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["occurred_at","loss_usd"],"default":"occurred_at"}},{"name":"order","in":"query","schema":{"type":"string","enum":["asc","desc"],"default":"desc"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"pageSize","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentListResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/incidents/{slug}":{"get":{"tags":["incidents"],"summary":"Get incident by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/IncidentDetail"}}}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/incidents/recent":{"get":{"tags":["incidents"],"summary":"Recently published incidents — for syncing.","parameters":[{"name":"since","in":"query","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK"}}}},"/chains":{"get":{"tags":["chains"],"summary":"List monitored chains with counts.","responses":{"200":{"description":"OK"}}}},"/attack-vectors":{"get":{"tags":["reference"],"summary":"List attack-vector taxonomy.","responses":{"200":{"description":"OK"}}}},"/stats":{"get":{"tags":["stats"],"summary":"Aggregate stats (all-time, 365d, 30d, 7d).","responses":{"200":{"description":"OK"}}}}},"components":{"schemas":{"IncidentSummary":{"type":"object","required":["id","slug","title","protocolName","protocolCategory","chain","occurredAt","recoveryStatus","rootCauseCategory","attackVectors"],"properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"title":{"type":"string"},"protocolName":{"type":"string"},"protocolCategory":{"type":"string","enum":["DEX","LENDING","BRIDGE","CEX","STABLECOIN","NFT_MARKETPLACE","YIELD_AGGREGATOR","STAKING","DERIVATIVES","WALLET","INFRASTRUCTURE","OTHER"]},"chain":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"}}},"occurredAt":{"type":"string","format":"date-time"},"lossUsd":{"type":"number","nullable":true},"recoveryStatus":{"type":"string","enum":["NONE","PARTIAL","FULL","ONGOING","UNKNOWN"]},"rootCauseCategory":{"type":"string","enum":["SMART_CONTRACT_BUG","ORACLE_MANIPULATION","PRIVATE_KEY_COMPROMISE","ACCESS_CONTROL","GOVERNANCE_ATTACK","BRIDGE_VALIDATION","FRONTEND_COMPROMISE","SOCIAL_ENGINEERING","FLASH_LOAN_ATTACK","REENTRANCY","ARITHMETIC","RUG_PULL","INFRASTRUCTURE","OTHER","UNKNOWN"]},"attackVectors":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}}}}},"IncidentDetail":{"allOf":[{"$ref":"#/components/schemas/IncidentSummary"},{"type":"object","properties":{"disclosedAt":{"type":"string","format":"date-time","nullable":true},"lossUsdCurrent":{"type":"number","nullable":true},"recoveredUsd":{"type":"number","nullable":true},"summary":{"type":"string","nullable":true,"description":"Markdown."},"timeline":{"type":"array","nullable":true,"items":{"type":"object"}},"attackerAddresses":{"type":"array","items":{"type":"string"}},"victimContracts":{"type":"array","items":{"type":"string"}},"keyTransactions":{"type":"array","items":{"type":"string"}},"externalSources":{"type":"array","items":{"$ref":"#/components/schemas/SourceLink"}},"verifiedBy":{"type":"string","nullable":true},"verifiedAt":{"type":"string","format":"date-time","nullable":true}}}]},"SourceLink":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"publisher":{"type":"string"},"publishedAt":{"type":"string","format":"date-time","nullable":true},"sourceType":{"type":"string","enum":["POST_MORTEM","NEWS","RESEARCH","OFFICIAL_STATEMENT","BLOCK_EXPLORER","FORUM","SOCIAL"]}}},"Chain":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"category":{"type":"string","enum":["L1","L2","APPCHAIN","DA_LAYER"]},"ecosystem":{"type":"string","nullable":true},"isPrimary":{"type":"boolean"},"monitoringStartedAt":{"type":"string","format":"date-time"},"brandColor":{"type":"string","nullable":true},"incidentCount":{"type":"integer"},"totalLossUsd":{"type":"number","nullable":true}}},"IncidentListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IncidentSummary"}},"meta":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"}}}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"responses":{"BadRequest":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix seconds."},"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"x-incident-statuses":["DRAFT","REVIEW","PUBLISHED","RETRACTED"]}