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.

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.

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

TierReq / minMax rows / response
Anonymous (no key)305
Hobby (€9 / mo)120100
Pro (€29 / mo)6001,000
Team3,0005,000
  • Anonymous limits are per IP; keyed limits are per key.
  • 429 responses include a Retry-After header.
  • Every response echoes your active tier in the tier field.

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.