Developer API
Read-only JSON endpoints. CORS-enabled. Cached 10 minutes at the CDN. Anonymous access works without a key at the free-tier limits below; attach a Bearer key (generate one at /account/api) to lift rate limits and row caps to match your subscription plan.
Connect European insider filings directly into Gemini, Claude Desktop, Cursor, Glama, and Smithery. Public tools need no key; paper trading and Radar Pro use your API key (Claude/Cursor). View MCP Server Documentation & Setup →
Authentication
Optional. Send your key as a Bearer token:
Authorization: Bearer ins_live_XXXXXXXXXXXXXXXXXXXXXX
Generate and revoke keys from /account/api. Keys inherit the owning account's plan — upgrading from Hobby to Pro lifts existing keys without rotation. Keys are hashed at rest; we can never show you a lost key and will only let you regenerate.
Endpoints
Leaderboard
Anonymous callers get the top 5 rows; Hobby keys extend this to 100, Pro to 1,000, Team to 5,000. The limitquery param is clamped to your tier's row cap — it won't error, just return up to your maximum.
GET /api/v1/leaderboard?sort=win_rate&limit=5
GET /api/v1/leaderboard?sort=active&limit=500 # needs a Pro key
Response:
{
"sort": "win_rate",
"rows": [
{
"insider_id": "klaus-muller__sap-se",
"insider_name": "Klaus Müller",
"most_recent_company": "SAP SE",
"most_recent_role": "CFO",
"win_rate_3m": 0.78,
"avg_return_3m": 0.12,
"buys_with_price_data": 7,
"last_buy_at": "2026-03-14"
}
]
}Insider profile
GET /api/v1/insider/{id}
Response:
{
"insider": {
"id": "klaus-muller__sap-se",
"name": "Klaus Müller",
"role": "CFO",
"country": "DE",
"companies": ["SAP SE"]
},
"stats": {
"total_filings": 12,
"buys": 8,
"sells": 4,
"total_buy_eur": 5420000,
"total_sell_eur": 1800000,
"net_flow_eur": 3620000
},
"filings": [
{
"id": "...",
"date": "2026-03-14",
"type": "buy",
"company": "SAP SE",
"isin": "DE0007164600",
"shares": 1500,
"price": 148.20,
"value_eur": 222300,
"exchange": "XETRA"
}
]
}Company profile
GET /api/v1/company/{isin}
Response: same shape as insider, but stats include distinct_insiders count.Streaming APIs (Server-Sent Events)
Listen to live insider trades and substantial holdings as they are ingested. Perfect for algorithmic execution or immediate alerts. You can also connect via Make.com or n8n by using a standard HTTP request to poll the base /api/v1/filings?since=...endpoint every 1 minute.
GET /api/v1/filings/stream?since=2026-09-03T16:00:00Z
GET /api/v1/holdings/stream?since=2026-09-03T16:00:00Z
# Connect using EventSource in JavaScript
const source = new EventSource('https://insidereu.com/api/v1/filings/stream', {
headers: { 'Authorization': 'Bearer ins_live_...' }
});
source.addEventListener('filing', (e) => {
console.log("New Trade:", JSON.parse(e.data));
});Recent buys (Atom)
GET /feed.xml Standard Atom 1.0 feed. Works in any RSS reader.
Service health
GET /api/health Returns 200 if green, 503 if the last scrape is > 36h old or failed. Point your uptime monitor (UptimeRobot, BetterStack) at this URL.
Rate limits
| Tier | Req / min | Max rows / response |
|---|---|---|
| Anonymous (no key) | 30 | 5 |
| Hobby (€9 / mo) | 120 | 100 |
| Pro (€29 / mo) | 600 | 1,000 |
| Team | 3,000 | 5,000 |
- Anonymous limits are per IP; keyed limits are per key.
- 429 responses include a
Retry-Afterheader. - Every response echoes your active tier in the
tierfield.
Stability
The v1 prefix is a soft promise of compatibility. Additive changes (new fields, new endpoints) will not be considered breaking. Removed fields or schema changes would ship under v2.
What's not public (yet)
- Full per-insider 3m/12m forward return arrays — Pro-tier only.
- Bulk filings endpoint without filters — see Team.
- Historical leaderboard snapshots.
Team
Need limits above 3,000 req/min, a no-cache pass-through, a private feed of your competitors' insider activity, or bulk historical pulls? Those sit in the Team conversation — email george@insidereu.comwith fund size, coverage needs, and integration details and we'll reply the same day.