<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: cyberpolak99</title>
    <description>The latest articles on DEV Community by cyberpolak99 (@cyberpolak99).</description>
    <link>https://dev.to/cyberpolak99</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3819031%2F7372324a-2314-4575-9491-f4faea1a40eb.png</url>
      <title>DEV Community: cyberpolak99</title>
      <link>https://dev.to/cyberpolak99</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cyberpolak99"/>
    <language>en</language>
    <item>
      <title>I built a free Threat Intelligence API in Python/Flask – ML-based IP reputation scoring</title>
      <dc:creator>cyberpolak99</dc:creator>
      <pubDate>Thu, 12 Mar 2026 15:16:43 +0000</pubDate>
      <link>https://dev.to/cyberpolak99/i-built-a-free-threat-intelligence-api-in-pythonflask-ml-based-ip-reputation-scoring-554p</link>
      <guid>https://dev.to/cyberpolak99/i-built-a-free-threat-intelligence-api-in-pythonflask-ml-based-ip-reputation-scoring-554p</guid>
      <description>&lt;p&gt;While building &lt;strong&gt;Cyber Shield&lt;/strong&gt; – a honeypot-based intrusion detection system running on my VPS – I realized I needed a way to quickly check if incoming IPs were known threats. Most threat intelligence services require expensive API keys or have very low free limits.&lt;/p&gt;

&lt;p&gt;So I extracted my threat intelligence module into a standalone REST API and published it on RapidAPI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The Threat Intelligence API aggregates data from multiple sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VirusTotal&lt;/strong&gt; – malware and URL scanner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CERT PL&lt;/strong&gt; – Polish Computer Emergency Response Team threat feeds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ML anomaly scoring&lt;/strong&gt; – IsolationForest + RandomForest trained on 5,000 samples&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Endpoints
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /api/check/{ip}     # Check IP reputation
GET /api/threats        # Get curated threat feed
GET /api/threats/stats  # Severity distribution
GET /health             # Uptime check
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example response for &lt;code&gt;/api/check/45.156.129.135&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ip"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"45.156.129.135"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"malicious"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"severity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"CERT_PL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VirusTotal"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"anomaly_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-0.73&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"last_seen"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-03-11"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.10&lt;/strong&gt; + Flask&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; for local threat cache&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;scikit-learn&lt;/strong&gt; – IsolationForest, RandomForest, DBSCAN&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployed on Render.com&lt;/strong&gt; (free tier with UptimeRobot keepalive)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Published on RapidAPI&lt;/strong&gt; with free tier&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-world data from Cyber Shield honeypot
&lt;/h2&gt;

&lt;p&gt;My VPS honeypot has collected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;44,618 anomalies&lt;/strong&gt; detected by ML models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;25,613 blocked IPs&lt;/strong&gt; from honeypot triggers (Telnet, SMB, HTTP-Proxy scans)&lt;/li&gt;
&lt;li&gt;Attack types: port scanners, credential stuffers, botnet nodes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it for free
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RapidAPI listing&lt;/strong&gt; (free tier, 10 requests per day, no credit card):&lt;br&gt;
&lt;a href="https://rapidapi.com/darro2323/api/threat-intelligence-api1" rel="noopener noreferrer"&gt;https://rapidapi.com/darro2323/api/threat-intelligence-api1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback and contributions welcome!&lt;/p&gt;

</description>
      <category>python</category>
      <category>security</category>
      <category>api</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
