<?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: Cristian Lungu</title>
    <description>The latest articles on DEV Community by Cristian Lungu (@lungucristian1980hub).</description>
    <link>https://dev.to/lungucristian1980hub</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4053394%2Fe8e6d1d7-6d5e-4b97-b4e8-913eb9c7f084.png</url>
      <title>DEV Community: Cristian Lungu</title>
      <link>https://dev.to/lungucristian1980hub</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lungucristian1980hub"/>
    <language>en</language>
    <item>
      <title>Check if a crypto is about to get rekt — in 3 lines of Python</title>
      <dc:creator>Cristian Lungu</dc:creator>
      <pubDate>Tue, 18 Aug 2026 11:05:45 +0000</pubDate>
      <link>https://dev.to/lungucristian1980hub/check-if-a-crypto-is-about-to-get-rekt-in-3-lines-of-python-1ngk</link>
      <guid>https://dev.to/lungucristian1980hub/check-if-a-crypto-is-about-to-get-rekt-in-3-lines-of-python-1ngk</guid>
      <description>&lt;p&gt;By the time a hack, depeg, or exchange delisting shows up in your Twitter feed, the price has already moved. That's especially brutal for &lt;strong&gt;trading bots&lt;/strong&gt;, which happily buy the dip straight into a coin that's actively on fire.&lt;/p&gt;

&lt;p&gt;I got tired of finding out &lt;em&gt;after&lt;/em&gt; the candle, so I built a small API that answers one question in a single request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Is this coin dangerous &lt;em&gt;right now&lt;/em&gt; — and can you prove it?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's free to start, and the demo endpoint below needs no key. Copy, paste, run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 30-second check
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://crypto-intel-api-rulu.onrender.com/risk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                 &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Live response (your numbers will differ — this is real-time data):&lt;br&gt;
&lt;/p&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;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"risk_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"chg_24h"&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.88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"funding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.9e-05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"danger_event"&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="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"breach"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"verified"&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;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"source_count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&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;"BitcoinMagazine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CryptoSlate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Decrypt"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"headline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SafePal Bitcoin Wallet Data Breach Stokes Fears of Physical Attacks"&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;span class="nl"&gt;"global_risk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&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;p&gt;That's the whole point: a &lt;code&gt;risk_score&lt;/code&gt; from 0–100, plus the &lt;strong&gt;actual event&lt;/strong&gt; driving it, with the &lt;strong&gt;headline and the sources&lt;/strong&gt; so you can verify it yourself. No black box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the score is trustworthy
&lt;/h2&gt;

&lt;p&gt;Most "crypto sentiment" APIs will happily flag a coin because one no-name blog used the word &lt;em&gt;hack&lt;/em&gt;. This one only marks a danger event as &lt;code&gt;verified: true&lt;/code&gt; when &lt;strong&gt;at least two independent sources&lt;/strong&gt; report it. One rumor isn't an event.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-coin, not global&lt;/strong&gt; — &lt;code&gt;risk_score&lt;/code&gt; is specific to the symbol you asked about, not a market-wide mood ring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-verified&lt;/strong&gt; — &lt;code&gt;source_count &amp;gt;= 2&lt;/code&gt; before anything is "confirmed", so you don't get faked out by a single clickbait headline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It tells you *why&lt;/strong&gt;* — &lt;code&gt;event&lt;/code&gt; (&lt;code&gt;breach&lt;/code&gt; / &lt;code&gt;depeg&lt;/code&gt; / &lt;code&gt;delist&lt;/code&gt; / &lt;code&gt;legal&lt;/code&gt;), plus the headline and sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A clean coin just comes back quiet:&lt;br&gt;
&lt;/p&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;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PEPE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"risk_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"danger_event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"global_risk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&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;
  
  
  Drop it into your bot as a pre-trade gate
&lt;/h2&gt;

&lt;p&gt;Here's the part that actually saves money — a safety gate you call &lt;em&gt;before&lt;/em&gt; opening a position:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_safe_to_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_risk&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Return (ok, reason). Blocks trades on verified danger events.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://crypto-intel-api-rulu.onrender.com/risk&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;symbol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;ev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;danger_event&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ev&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verified&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;event&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;headline&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;max_risk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk_score &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;risk_score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &amp;gt;= &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;max_risk&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clear&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;is_safe_to_trade&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BTC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⛔ Skipping trade — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ Clear to trade&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three outcomes, no guesswork: a verified breach/depeg/delist/legal event blocks the trade, a high score blocks the trade, everything else is clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: what did the Fed / SEC / Treasury just say?
&lt;/h2&gt;

&lt;p&gt;Regulatory headlines move this market more than any indicator. One call gives you the official ones, tagged bullish/bearish:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://crypto-intel-api-rulu.onrender.com/us-movers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;events&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🏛️ official&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;official&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;press&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lean_text&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;flag&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;headline&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[neutral] 🏛️ official — Federal Reserve issues FOMC statement
[bullish]   press — U.S. Treasury Department proposes GENIUS Act stablecoin rule
[neutral] 🏛️ official — SEC, CFTC Seek Public Comment on Derivatives Product Definitions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sources are the real Fed / SEC / Treasury / CFTC feeds — not someone's newsletter.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo (no key):&lt;/strong&gt; &lt;code&gt;https://crypto-intel-api-rulu.onrender.com/docs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get it for your app&lt;/strong&gt; (free tier + API key, 14 endpoints, per-coin risk, US market-movers, whale txns, funding, Fear &amp;amp; Greed): &lt;strong&gt;&lt;a href="https://rapidapi.com/lungucristian1980/api/crypto-intel" rel="noopener noreferrer"&gt;Crypto Intel on RapidAPI&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The free tier is enough to wire the safety gate above into a real bot. If it saves you one bad entry, it's paid for itself. Feedback welcome — I'm still adding endpoints.&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>crypto</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The input most MT4/MT5 trading bots get wrong: position size</title>
      <dc:creator>Cristian Lungu</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:35:06 +0000</pubDate>
      <link>https://dev.to/lungucristian1980hub/the-input-most-mt4mt5-trading-bots-get-wrong-position-size-a2d</link>
      <guid>https://dev.to/lungucristian1980hub/the-input-most-mt4mt5-trading-bots-get-wrong-position-size-a2d</guid>
      <description>&lt;p&gt;Ask someone why their trading bot blew up and they'll tell you about the strategy. The real answer is usually more boring: the position size was wrong, so a normal losing streak turned into a dead account.&lt;/p&gt;

&lt;p&gt;Most EAs I'm asked to fix hardcode the lot size — lots = 0.10, forever. That's the bug. Here's why it kills accounts, and the handful of lines that fix it. It's MT4/MT5 here, but the logic is the same anywhere you place orders in code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a fixed lot quietly kills an account
&lt;/h2&gt;

&lt;p&gt;Two reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your risk swings with volatility.&lt;/strong&gt; A 0.10-lot trade with a 15-pip stop and a 0.10-lot trade with a 150-pip stop are not the same trade — one risks 10x the other. With a fixed lot, your real risk per trade is whatever the market's volatility happens to be that day. You're not choosing your risk; the market is choosing it for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Losses compound against a fixed base.&lt;/strong&gt; A hardcoded lot is sized off your starting balance. After a drawdown you're still betting the same absolute size on a smaller account, so your percentage risk climbs exactly when you can least afford it. That's the math that turns a rough week into a blown account.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: choose the risk, derive the lot from the stop
&lt;/h2&gt;

&lt;p&gt;Flip it around. You don't choose the lot — you choose the risk (say 1% of balance), and the lot falls out of the stop distance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;money at risk = balance x 1%&lt;/li&gt;
&lt;li&gt;loss-if-stopped, per 1.0 lot = stop distance x tick value&lt;/li&gt;
&lt;li&gt;lot = money at risk / loss-per-lot (then snap to the broker's volume step)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now every trade risks the same 1%, whether the stop is 15 pips or 150. The size shrinks automatically when the stop is wide or the account is smaller. Nothing about the strategy changed — only the thing that decides whether you're still here next month.&lt;/p&gt;

&lt;p&gt;Pair it with an ATR-based stop (stop = a multiple of Average True Range) and the whole system breathes with volatility: wider stops in fast markets, smaller lots to match, constant risk throughout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does the discipline actually show up in the numbers?
&lt;/h2&gt;

&lt;p&gt;I put exactly this — trend filter, pullback entry, ATR stop, 1% risk-based sizing — into a sample EA and ran it through the MT5 Strategy Tester on a year of XAUUSD H1 data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Return: +33.7%&lt;/li&gt;
&lt;li&gt;Profit factor: 1.45&lt;/li&gt;
&lt;li&gt;Max drawdown: 8.0%&lt;/li&gt;
&lt;li&gt;114 trades, ~44% win rate at 2:1 reward-to-risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The number that matters there isn't the return — it's the 8% drawdown. That's what risk-based sizing buys you: the account bends instead of breaking, so you're still around when the winners show up. Note the win rate is only ~44%; it's profitable purely because the size and the reward-to-risk are disciplined. Fixed lots would have made the same strategy a much rougher ride.&lt;/p&gt;

&lt;p&gt;You can see the sample EA, its adjustable parameters and the equity curve here:&lt;br&gt;
&lt;a href="https://darling-kataifi-559215.netlify.app" rel="noopener noreferrer"&gt;https://darling-kataifi-559215.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Spend your time on the strategy — but the line that decides whether you survive long enough for the strategy to matter is the one that sizes the trade. If your EA has lots = 0.10 hardcoded anywhere, that's the first place I'd look.&lt;/p&gt;

&lt;p&gt;I build and fix MT4/MT5 EAs and other execution software at Quiet Machines — risk-based sizing, clean stops, backtests you can actually read. If your bot's risk feels like a guess rather than a number you chose, that's the work I do.&lt;/p&gt;

&lt;p&gt;— Cristian Lungu · &lt;a href="https://contra.com/lungu_cristian_d7nm4wbh" rel="noopener noreferrer"&gt;https://contra.com/lungu_cristian_d7nm4wbh&lt;/a&gt;&lt;/p&gt;

</description>
      <category>trading</category>
      <category>algotrading</category>
      <category>python</category>
      <category>riskmanagement</category>
    </item>
    <item>
      <title>Most trading bots break in the same four places — and none of them are the strategy</title>
      <dc:creator>Cristian Lungu</dc:creator>
      <pubDate>Tue, 18 Aug 2026 07:23:20 +0000</pubDate>
      <link>https://dev.to/lungucristian1980hub/most-trading-bots-break-in-the-same-four-places-and-none-of-them-are-the-strategy-bil</link>
      <guid>https://dev.to/lungucristian1980hub/most-trading-bots-break-in-the-same-four-places-and-none-of-them-are-the-strategy-bil</guid>
      <description>&lt;p&gt;Everyone building a trading bot pours their energy into the strategy. The entry logic, the indicators, the pretty backtest curve. Then they wire it to a live broker API and it quietly falls apart — not because the strategy was wrong, but because the layer underneath it lied about what actually happened in the market.&lt;/p&gt;

&lt;p&gt;I've spent more time on that layer than on any strategy, so here are the four places it breaks, and how I stop it from breaking. Examples are on the Interactive Brokers API, but the failure modes are the same on any broker.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four ways it goes wrong
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The duplicate callback.&lt;/strong&gt; The API sends you the same execution twice. Naive code adds the fill twice, and now your bot thinks it owns 200 shares when it owns 100.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The reconnect replay.&lt;/strong&gt; Your socket drops for four seconds. On reconnect, the broker helpfully replays recent fills. If you treat them as new, you double-count everything that happened around the disconnect — which is exactly when you can least afford to be wrong about your position.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The out-of-order partial fill.&lt;/strong&gt; A large order fills in pieces. The messages don't always arrive in order. If you just overwrite state with the latest message, a late-arriving early fill can rewind your average price or your filled quantity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The stale status that rewinds a finished order.&lt;/strong&gt; You get a Filled. Then, a beat later, a delayed Submitted for the same order shows up. Trust it and you've just un-filled a completed trade in your own books.&lt;/p&gt;

&lt;p&gt;Notice what none of these do: &lt;strong&gt;crash.&lt;/strong&gt; No exception, no stack trace, no red text. They silently corrupt state — phantom positions, double orders, wrong P&amp;amp;L — and you find out when real money is already on the wrong side. That's what makes them the expensive kind of bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix is boring on purpose
&lt;/h2&gt;

&lt;p&gt;You don't beat these with clever code. You beat them with a few strict rules and a design that lets you prove they hold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make executions idempotent.&lt;/strong&gt; Every fill has a unique id (execId on IB). Key on it. If you've seen it, it's a no-op. Replays and duplicates just do nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take truth from executions, not from status.&lt;/strong&gt; Filled quantity is the sum of real executions you've actually seen — never a number you trust blindly from a single orderStatus. And state only moves forward: once an order is terminal, no late message drags it backward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregate partial fills properly.&lt;/strong&gt; Accumulate the pieces and carry a quantity-weighted average price, so order matters less and a late fragment can't distort your basis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reconcile — don't overwrite.&lt;/strong&gt; Periodically pull the broker's own open-orders and positions snapshot and compare it to your local truth. If they disagree, &lt;strong&gt;report the drift.&lt;/strong&gt; Don't silently overwrite one with the other — the disagreement is the signal, and hiding it is how small errors become big ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep the fragile logic pure.&lt;/strong&gt; The part that does dedup, aggregation and reconciliation has no broker I/O in it at all. That's deliberate: it means you can run the nasty scenarios deterministically in CI instead of hoping they behave on a live line.&lt;/p&gt;

&lt;h2&gt;
  
  
  Proof, not vibes
&lt;/h2&gt;

&lt;p&gt;I put all of this in a small, tested engine. The offline suite fires every failure mode above at it and asserts the state stays sane — 8/8 checks passing: duplicate execution ignored, reconnect replay idempotent, partial fills aggregated to a quantity-weighted average, stale and stray statuses rejected, and reconciliation flagging any order/position drift.&lt;/p&gt;

&lt;p&gt;Then I ran it against a live IBKR paper account over the TWS API — strictly read-only, it observes and reconciles, it never places orders. I placed a market order by hand in TWS and let the engine reconstruct the truth on its own: it tracked every transition (Submitted then Filled), summed the fill, derived the position, and matched the broker's own snapshot exactly — reconciliation clean.&lt;/p&gt;

&lt;h2&gt;
  
  
  The point
&lt;/h2&gt;

&lt;p&gt;A strategy decides what to do. The execution layer decides whether what you think happened matches what actually happened. Get the second part wrong and the first part doesn't matter — you're trading on a fiction.&lt;/p&gt;

&lt;p&gt;The whole thing is open. Read it instead of taking my word for it:&lt;br&gt;
&lt;a href="https://github.com/lungucristian1980-hub/ibkr-order-state-engine" rel="noopener noreferrer"&gt;https://github.com/lungucristian1980-hub/ibkr-order-state-engine&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I build execution reliability like this for a living — reconnect-safe order handling, kill-switches, reconciliation, clean handovers — at Quiet Machines. If your bot does something it shouldn't when the connection drops, that's the work I do. You bring the strategy; I make sure the plumbing tells the truth.&lt;/p&gt;

&lt;p&gt;— Cristian Lungu · &lt;a href="https://contra.com/lungu_cristian_d7nm4wbh" rel="noopener noreferrer"&gt;https://contra.com/lungu_cristian_d7nm4wbh&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>trading</category>
      <category>api</category>
      <category>reliability</category>
    </item>
    <item>
      <title>I built an insider-conviction screener for my watchlist in ~40 lines of Python (SEC Form 4)</title>
      <dc:creator>Cristian Lungu</dc:creator>
      <pubDate>Mon, 03 Aug 2026 09:17:57 +0000</pubDate>
      <link>https://dev.to/lungucristian1980hub/i-built-an-insider-conviction-screener-for-my-watchlist-in-40-lines-of-python-sec-form-4-hkc</link>
      <guid>https://dev.to/lungucristian1980hub/i-built-an-insider-conviction-screener-for-my-watchlist-in-40-lines-of-python-sec-form-4-hkc</guid>
      <description>&lt;p&gt;Corporate insiders — CEOs, CFOs, directors — have to report every time they buy or sell their own company's stock on &lt;strong&gt;SEC Form 4&lt;/strong&gt;, within two business days. Insider &lt;em&gt;buying&lt;/em&gt; on the open market is one of the few market signals that's both public and hard to fake: people rarely put their own cash into their own stock unless they mean it.&lt;/p&gt;

&lt;p&gt;The problem: Form 4 is filed as &lt;strong&gt;XML&lt;/strong&gt;, thousands of times a week. Reading it by hand is hopeless, and parsing the XML yourself is a weekend gone.&lt;/p&gt;

&lt;p&gt;So I built a small screener that ranks &lt;strong&gt;my watchlist&lt;/strong&gt; by insider conviction. Here's the whole thing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I use my own API for this (SEC Intel). The Form 4 parsing + scoring is the tedious part it removes; the screener logic below is yours to keep.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;For each ticker on my watchlist, pull the &lt;strong&gt;parsed Form 4 summary&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Read the &lt;strong&gt;insider-conviction score (0–100)&lt;/strong&gt; — it weighs how many insiders bought, whether the C-suite is involved, and buys vs. sells.&lt;/li&gt;
&lt;li&gt;Rank so the real buying floats to the top.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;HOST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sec-intel-filings-financials-insider-trades.p.rapidapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;WATCHLIST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MSFT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TSLA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMD&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;META&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AMZN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XOM&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ticker&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;WATCHLIST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;summary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/insider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conviction_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;net_usd&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;

&lt;span class="c1"&gt;# rank: strongest insider conviction first
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;net&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; conviction &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;score&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;signal&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  net $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Live output when I ran it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TSLA   conviction  70  bullish   net $879,654,993
XOM    conviction   0  neutral   net $0
AAPL   conviction   0  bearish   net $-111,739,341
MSFT   conviction   0  bearish   net $-2,843,905
META   conviction   0  bearish   net $-10,063,533
AMZN   conviction   0  bearish   net $-51,643,529
AMD    conviction   0  bearish   net $-167,076,160
NVDA   conviction   0  bearish   net $-410,446,401
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One insider put ~$880M into TSLA on the open market while the rest of mega-cap tech shows insiders &lt;em&gt;selling&lt;/em&gt;. That's the whole point: the buy is the rare signal, and it floats straight to the top. No XML, no CIK lookups, no Form 4 field decoding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it an alert
&lt;/h2&gt;

&lt;p&gt;Wrap it in a loop and ping yourself when conviction crosses your threshold — Slack, Telegram, email, whatever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;scan_and_alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ticker&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;WATCHLIST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/insider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conviction_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Insider buying: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;conviction_score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/100, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; want the whole market instead of a watchlist? &lt;code&gt;GET /insider-signals&lt;/code&gt; returns the newest open-market insider buys across &lt;em&gt;all&lt;/em&gt; filers (Form 4 code P), sorted by size.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Feed it to an agent instead
&lt;/h2&gt;

&lt;p&gt;The same JSON drops straight into a prompt or a tool call — or connect the API as an &lt;strong&gt;MCP server&lt;/strong&gt; (Claude Desktop, Cursor, VS Code) and just ask &lt;em&gt;"any strong insider buying on my watchlist today?"&lt;/em&gt;. The data comes back structured, so the model doesn't guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes on using this responsibly
&lt;/h2&gt;

&lt;p&gt;Insider buying is a &lt;em&gt;signal&lt;/em&gt;, not a crystal ball — people buy for many reasons, and this isn't investment advice. But as a &lt;strong&gt;filter&lt;/strong&gt; to surface where informed people put their own money, a conviction-ranked screen beats scrolling filings by hand.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Free tier (1,000 calls/mo, no card): &lt;strong&gt;&lt;a href="https://rapidapi.com/lungucristian1980/api/sec-intel-filings-financials-insider-trades" rel="noopener noreferrer"&gt;SEC Intel API on RapidAPI&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Try every endpoint in the browser: &lt;strong&gt;&lt;a href="https://sec-intel-api.onrender.com/docs" rel="noopener noreferrer"&gt;live docs&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;More on the API: &lt;strong&gt;&lt;a href="https://secintelapi.netlify.app" rel="noopener noreferrer"&gt;secintelapi.netlify.app&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would you screen for? Drop your watchlist + threshold in the comments.&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>showdev</category>
      <category>python</category>
    </item>
    <item>
      <title>Give your AI agent real SEC data (financials + insider signals) in 5 minutes</title>
      <dc:creator>Cristian Lungu</dc:creator>
      <pubDate>Fri, 31 Jul 2026 11:35:06 +0000</pubDate>
      <link>https://dev.to/lungucristian1980hub/give-your-ai-agent-real-sec-data-financials-insider-signals-in-5-minutes-430j</link>
      <guid>https://dev.to/lungucristian1980hub/give-your-ai-agent-real-sec-data-financials-insider-signals-in-5-minutes-430j</guid>
      <description>&lt;p&gt;Ask an LLM &lt;em&gt;"What was Apple's revenue last quarter?"&lt;/em&gt; or &lt;em&gt;"Are insiders buying NVIDIA right now?"&lt;/em&gt; and you'll often get a confident, &lt;strong&gt;wrong&lt;/strong&gt; answer. Financial numbers are exactly the kind of thing models hallucinate - and the ground truth (SEC EDGAR) is not something you can just paste into a prompt.&lt;/p&gt;

&lt;p&gt;If you've tried, you know the pain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single 10-K is &lt;strong&gt;megabytes of XBRL and HTML&lt;/strong&gt;. It blows your context window instantly.&lt;/li&gt;
&lt;li&gt;Parsing XBRL by hand is a second job.&lt;/li&gt;
&lt;li&gt;Insider trades live in &lt;strong&gt;Form 4 XML&lt;/strong&gt; that nobody enjoys scraping.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So your agent needs &lt;em&gt;structured&lt;/em&gt; SEC data, not raw filings. Here's how to wire that up in about five minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we'll build
&lt;/h2&gt;

&lt;p&gt;An agent tool that, given a ticker, returns clean JSON: company profile, XBRL financials (revenue, net income, EPS), recent filings, and &lt;strong&gt;parsed insider trades with a 0-100 conviction score&lt;/strong&gt;. Then we'll hand that JSON to an LLM and ask it a real question.&lt;/p&gt;

&lt;p&gt;We'll use the &lt;a href="https://rapidapi.com/lungucristian1980/api/sec-intel-filings-financials-insider-trades" rel="noopener noreferrer"&gt;SEC Intel API&lt;/a&gt; - it wraps official SEC EDGAR data (US public domain) and returns exactly the shape an LLM can reason over. There's a free tier, no credit card.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I built this API. But the technique below works with any structured-data source - the point is &lt;em&gt;don't feed raw filings to your model.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1 - one call, everything
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;HOST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sec-intel-filings-financials-insider-trades.p.rapidapi.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;HEADERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Host&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sec_company&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;   &lt;span class="c1"&gt;# ticker, CIK, or company name
&lt;/span&gt;        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sec_company&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAPL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;profile&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;          &lt;span class="c1"&gt;# Apple Inc.
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;financials&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;revenue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;    &lt;span class="c1"&gt;# latest revenue from XBRL
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;/company&lt;/code&gt; bundles profile + financials + insider summary + recent filings in &lt;strong&gt;one&lt;/strong&gt; response, so your agent doesn't have to orchestrate four calls. Want just one slice? There are focused endpoints too: &lt;code&gt;/financials&lt;/code&gt;, &lt;code&gt;/filings&lt;/code&gt;, &lt;code&gt;/insider&lt;/code&gt;, &lt;code&gt;/search&lt;/code&gt;, &lt;code&gt;/latest&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(No key yet? You can hit the &lt;a href="https://sec-intel-api.onrender.com/docs" rel="noopener noreferrer"&gt;live interactive docs&lt;/a&gt; and try every endpoint in the browser first.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2 - the part most APIs don't give you: insider conviction
&lt;/h2&gt;

&lt;p&gt;Ten insiders each filed a Form 4 last week. Which company are they actually &lt;em&gt;betting&lt;/em&gt; on? Raw filings won't tell you - you'd have to weigh how many insiders bought, whether the CFO/CEO were among them, and how buys compare to sells.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/insider&lt;/code&gt; does that math for you and returns a single &lt;strong&gt;&lt;code&gt;conviction_score&lt;/code&gt;&lt;/strong&gt; (0-100):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;insider_conviction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/insider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HEADERS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;nvda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;insider_conviction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nvda&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conviction_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;nvda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="c1"&gt;# e.g. 82 strong_accumulation
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your agent reads &lt;em&gt;intent&lt;/em&gt;, not XML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 - hand it to the model
&lt;/h2&gt;

&lt;p&gt;The whole point: put clean JSON in the context, then let the LLM reason. Here's the pattern with Claude (works the same with the OpenAI SDK):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# ANTHROPIC_API_KEY in env
&lt;/span&gt;
&lt;span class="n"&gt;facts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sec_company&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;insider&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;insider_conviction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NVDA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;

&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Using ONLY this SEC data, summarize NVIDIA&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s latest &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fundamentals and whether insiders are accumulating.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;facts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the model is grounded in real, structured numbers, it stops guessing. This is the same idea as RAG - just with a financial data source instead of a vector DB.&lt;/p&gt;

&lt;h3&gt;
  
  
  Turn it into a tool the agent can call itself
&lt;/h3&gt;

&lt;p&gt;If you're using function/tool calling, expose it as a tool and let the agent decide when to pull data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_sec_company&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get SEC financials + insider conviction for a ticker.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_schema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticker&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ticker&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="c1"&gt;# when the model calls it, run sec_company(ticker) and return the JSON
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why not just parse EDGAR yourself?
&lt;/h2&gt;

&lt;p&gt;You can - EDGAR is free and public domain. But you'll spend your week on XBRL taxonomies, Form 4 XML quirks, CIK/ticker resolution, and rate-limit etiquette before you write a line of agent logic. A structured wrapper turns all of that into one HTTP call, and the data stays resale-safe because it's public domain.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Free tier (1,000 calls/mo, no card): &lt;strong&gt;&lt;a href="https://rapidapi.com/lungucristian1980/api/sec-intel-filings-financials-insider-trades" rel="noopener noreferrer"&gt;SEC Intel API on RapidAPI&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Poke the endpoints in your browser: &lt;strong&gt;&lt;a href="https://sec-intel-api.onrender.com/docs" rel="noopener noreferrer"&gt;live docs&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build something with it - an earnings summarizer, an insider-buying screener, a due-diligence agent - I'd love to hear about it in the comments. What SEC data would make your agent smarter?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>api</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Stop trading on fake crypto signals: a free API with cross-verified danger scores + Fed/Trump tracking</title>
      <dc:creator>Cristian Lungu</dc:creator>
      <pubDate>Wed, 29 Jul 2026 14:12:10 +0000</pubDate>
      <link>https://dev.to/lungucristian1980hub/stop-trading-on-fake-crypto-signals-a-free-api-with-cross-verified-danger-scores-fedtrump-5gkp</link>
      <guid>https://dev.to/lungucristian1980hub/stop-trading-on-fake-crypto-signals-a-free-api-with-cross-verified-danger-scores-fedtrump-5gkp</guid>
      <description>&lt;p&gt;If you build trading bots or dashboards, two failure modes are expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fake danger signals&lt;/strong&gt; — a single tweet or low-quality feed claims a hack or depeg, your bot reacts, and it wasn't true.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blind spots on macro and regulation&lt;/strong&gt; — a Fed decision or an SEC action moves the market and your news pipeline is late.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most crypto APIs give you one global sentiment number and call it a day. I wanted something that (a) refuses to report an event unless multiple independent sources agree, and (b) watches the people and institutions that actually move crypto.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Crypto Intel API does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-coin DANGER score (0-100).&lt;/strong&gt; Hacks, exploits, depegs, delistings and lawsuits are only reported when &lt;strong&gt;2+ independent sources&lt;/strong&gt; confirm them. Each event ships with a confidence and the source list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US market-movers feed.&lt;/strong&gt; Real-time signals from the official &lt;strong&gt;Fed / SEC / Treasury / CFTC&lt;/strong&gt; feeds plus &lt;strong&gt;Trump&lt;/strong&gt;, each tagged bullish/bearish for crypto.&lt;/li&gt;
&lt;li&gt;Per-coin sentiment, Fear &amp;amp; Greed, whale transactions, prices and keyword news search — from &lt;strong&gt;60+ sources&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it (free tier)
&lt;/h2&gt;

&lt;p&gt;Per-coin risk and the confirmed event behind it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://crypto-intel-api-rulu.onrender.com/risk?symbol=BTC"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BTC"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"risk_score"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"chg_24h"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"danger_event"&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="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"legal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&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.75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"verified"&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;"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;"CoinDesk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Decrypt"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source_count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&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;span class="nl"&gt;"global_risk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NORMAL"&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;p&gt;What the Fed / SEC / Treasury / Trump are doing to crypto right now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://crypto-intel-api-rulu.onrender.com/us-movers"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the cross-verification works
&lt;/h2&gt;

&lt;p&gt;Each source has a trust weight. For a coin, the engine collects danger-keyword hits across all sources, counts the &lt;strong&gt;distinct&lt;/strong&gt; sources, and marks an event verified only when at least &lt;strong&gt;2&lt;/strong&gt; independent sources agree — with a confidence derived from how many sources and how trusted they are. That single rule is what keeps rumors out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to get it
&lt;/h2&gt;

&lt;p&gt;Free plan on RapidAPI — grab a key and you're calling it in a minute:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rapidapi.com/lungucristian1980/api/crypto-intel" rel="noopener noreferrer"&gt;https://rapidapi.com/lungucristian1980/api/crypto-intel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome, especially on the risk model.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>api</category>
      <category>python</category>
      <category>trading</category>
    </item>
  </channel>
</rss>
