Developer API · v1
Insynet API · v1

Insider trading,
congress trades
& 13F data.

A self-serve read API over the same regulatory pipelines that power the Insynet app: US & SE insider filings, US Congress (STOCK Act) trades, SEC 13D/13G filings, and hedge-fund 13F position changes — as clean JSON over HTTP, updated daily.

One bearer token. Five endpoints. No SDK required.

Public regulatory data · JSON over HTTPS · Informational only, not investment advice

curl — GET /congress
curl -s "https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1/congress?since=2026-06-01" \
  -H "Authorization: Bearer isk_live_xxx"
200 OK · application/json
{
  "data": [
    {
      "ticker": "NVDA",
      "company": "NVIDIA Corp",
      "politician": "Rep. Example Member",
      "party": null,
      "chamber": "House",
      "state_district": "CA-12",
      "action": "buy",
      "amount_range": "$50,001 - $100,000",
      "transaction_date": "2026-06-18",
      "disclosure_date": "2026-06-27",
      "filed_date": "2026-06-27",
      "source_url": "https://disclosures-clerk.house.gov/...",
      "score": 3
    }
  ],
  "meta": {
    "tier": "free",
    "delayed": true,
    "count": 1,
    "remaining_today": 98,
    "disclaimer": "Informational only. Not investment advice. Data may be delayed."
  }
}
Quick start

Three steps to your first call.

1

Get a key

Subscribe and your key is issued instantly on the confirmation page; free keys by email. Keys look like isk_live_… and are shown once at issue time.

Send it as a bearer token on every request.

2

Make a call

Every endpoint is a plain GET returning JSON. Filter with ticker, since, and limit.

CORS is open, so it works from the shell, the server, or the browser.

3

Read the shape

Rows come back under data; request metadata (tier, freshness, remaining daily calls) sits under meta.

Order is newest business date first.

Get a key. Subscribe below for Hobby/Pro, or email us for a free key.

Pay by card and your key is issued instantly on the confirmation page. Free keys on request by email. Plaintext is shown once — we only store its SHA-256 hash.

Request an API key
Reference

The basics.

Everything an endpoint needs: where to send the request, how to authenticate, and how the response is shaped. These apply to all five endpoints.

Base URL
https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1
All endpoints are GET. Responses are JSON. CORS is open (GET, OPTIONS). A custom domain (api.insynet.se) is planned.
Authentication
Send your key as a bearer token: Authorization: Bearer isk_live_…
The key is an Insynet-issued key (isk_live_ + 32 hex chars), not a Supabase JWT. We store only its SHA-256 hash; the plaintext is shown once at issue time and cannot be recovered — keep it safe. Missing, unknown, or revoked keys all return 401 (the response never reveals which).
Freshness
Your tier controls data freshness. On free, every endpoint only returns rows ingested more than 24 hours ago (meta.delayed = true). hobby and pro get the freshest data.
Ordering
Results are ordered newest business date first, then by ingestion time.

Query parameters

All five endpoints accept the same three optional parameters.

ParamTypeDefaultNotes
tickerstringFilter by symbol (1–12 chars of A-Z 0-9 . -), case-insensitive.
sincedateISO YYYY-MM-DD; returns rows on or after this business date.
limitint25Max 100; values are clamped into 1…100.

Response envelope

Every 200 response wraps rows in data and request metadata in meta.

Response envelope
{
  "data": [ /* endpoint-specific rows */ ],
  "meta": {
    "tier": "free",          // "free" | "hobby" | "pro"
    "delayed": true,          // true only on the free tier (24h delay)
    "count": 25,             // number of rows in this response
    "remaining_today": 74,   // daily calls left on your key
    "disclaimer": "Informational only. Not investment advice. Data may be delayed."
  }
}
Endpoints

Five endpoints, one shape.

Each endpoint returns rows under data and metadata under meta. All accept ticker, since, and limit. Examples below are illustrative.

GET/insiders

SEC Form 4 (US) + Finansinspektionen (SE) + OpenInsider insider filings.

Row fields: tickercompanyexchangecurrencyinsider_nameinsider_roleactionsharesprice_localtotal_value_localtotal_value_sekfiling_datetransaction_datesourcesource_url
GET Request
curl -s "https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1/insiders?ticker=AAPL&limit=10" \
  -H "Authorization: Bearer isk_live_xxx"
200 OK — one row shown
{
  "data": [
    {
      "ticker": "AAPL",
      "company": "Apple Inc.",
      "exchange": "NASDAQ",
      "currency": "USD",
      "insider_name": "Example Director",
      "insider_role": "Director",
      "action": "buy",
      "shares": 2000,
      "price_local": 212.40,
      "total_value_local": 424800,
      "total_value_sek": 4540000,
      "filing_date": "2026-07-03",
      "transaction_date": "2026-07-01",
      "source": "SEC",
      "source_url": "https://www.sec.gov/..."
    }
  ],
  "meta": { "tier": "hobby", "delayed": false, "count": 1, "remaining_today": 942, "disclaimer": "…" }
}
GET/congress

US House STOCK Act purchase disclosures (buys only in v1). party is always null — it is not in the House Clerk feed. When several members disclose the same ticker on the same day they are folded into politicians[].

Row fields: tickercompanypoliticianpartychamberstate_districtactionamount_rangetransaction_datedisclosure_datefiled_datepoliticians[]source_urlscore
GET Request
curl -s "https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1/congress?since=2026-06-01" \
  -H "Authorization: Bearer isk_live_xxx"
200 OK — one row shown
{
  "data": [
    {
      "ticker": "NVDA",
      "company": "NVIDIA Corp",
      "politician": "Rep. Example Member",
      "party": null,
      "chamber": "House",
      "state_district": "CA-12",
      "action": "buy",
      "amount_range": "$50,001 - $100,000",
      "transaction_date": "2026-06-18",
      "disclosure_date": "2026-06-27",
      "filed_date": "2026-06-27",
      "politicians": ["Rep. Example Member"],
      "source_url": "https://disclosures-clerk.house.gov/...",
      "score": 3
    }
  ],
  "meta": { "tier": "free", "delayed": true, "count": 1, "remaining_today": 98, "disclaimer": "…" }
}
GET/13d

SEC Schedule 13D/13G beneficial-ownership filings — someone crossed a 5%+ stake. form_type distinguishes activist (13D) from passive (13G).

Row fields: tickercompanyfiler_namefilers[]form_typepercent_ownedfiled_dateaccessionsource_urlscoreverdict
GET Request
curl -s "https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1/13d?limit=50" \
  -H "Authorization: Bearer isk_live_xxx"
200 OK — one row shown
{
  "data": [
    {
      "ticker": "TGT",
      "company": "Target Corp",
      "filer_name": "Example Capital Management LP",
      "filers": ["Example Capital Management LP"],
      "form_type": "SC 13D",
      "percent_owned": 6.5,
      "filed_date": "2026-07-02",
      "accession": "0001104659-26-071234",
      "source_url": "https://www.sec.gov/Archives/edgar/...",
      "score": 4,
      "verdict": "MEDIUM_ACTIVITY"
    }
  ],
  "meta": { "tier": "pro", "delayed": false, "count": 1, "remaining_today": 9873, "disclaimer": "…" }
}
GET/funds

Hedge-fund NEW / INCREASED position changes derived from SEC 13F filings (45-day-lagged facts).

Row fields: fund_namefund_ciktickercompanychange_typeprev_sharesnew_sharesprev_value_usdnew_value_usdpercent_changefiling_datequarter
GET Request
curl -s "https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1/funds?ticker=NVDA" \
  -H "Authorization: Bearer isk_live_xxx"
200 OK — one row shown
{
  "data": [
    {
      "fund_name": "Example Capital Management LP",
      "fund_cik": "0001234567",
      "ticker": "NVDA",
      "company": "NVIDIA Corp",
      "change_type": "NEW",
      "prev_shares": 0,
      "new_shares": 250000,
      "prev_value_usd": 0,
      "new_value_usd": 38500000,
      "percent_change": null,
      "filing_date": "2026-05-15",
      "quarter": "2026Q1"
    }
  ],
  "meta": { "tier": "hobby", "delayed": false, "count": 1, "remaining_today": 870, "disclaimer": "…" }
}
GET/signals

The unified market_signals firehose across all signal types. details is a type-specific JSON object.

Row fields: signal_typetickercompanyexchangecurrencysignal_datescoreverdictdetails
GET Request
curl -s "https://tlyddvcmpcbhotxhbiao.supabase.co/functions/v1/api-v1/signals?since=2026-07-01&limit=100" \
  -H "Authorization: Bearer isk_live_xxx"
200 OK — one row shown
{
  "data": [
    {
      "signal_type": "congress_buy",
      "ticker": "NVDA",
      "company": "NVIDIA Corp",
      "exchange": "NASDAQ",
      "currency": "USD",
      "signal_date": "2026-07-02",
      "score": 3,
      "verdict": "WATCH",
      "details": { "politician": "Rep. Example Member", "amount_range": "$50,001 - $100,000", "chamber": "House" }
    }
  ],
  "meta": { "tier": "pro", "delayed": false, "count": 1, "remaining_today": 9990, "disclaimer": "…" }
}
Tiers & pricing

Freshness & volume. Nothing else.

Every tier can call all five endpoints. Your tier only sets how fresh the data is and how many calls per day you get.

Free
$0
24-hour delayed data
  • All five endpoints
  • 100 calls / day
  • ~60 requests / minute
  • Data ingested > 24 h ago
Launch pricing
Hobby
$29 /mo
Fresh (realtime) data
  • All five endpoints
  • 1,000 calls / day
  • ~120 requests / minute
  • No 24 h delay
MOST DATA
Launch pricing
Pro
$79 /mo
Fresh (realtime) data
  • All five endpoints
  • 10,000 calls / day
  • ~300 requests / minute
  • Webhooks coming soon

Hobby and Pro are launch pricing and may change. Pay by card and your API key is issued instantly on the confirmation page. Free keys are issued by email.

Rate limits & errors

Two windows. Clear signals.

Two rolling limits are enforced per key: a per-minute window and a per-day window (rolling 24 h). Exceeding either returns 429 with a Retry-After header (in seconds) and a retry_after_seconds body field. meta.remaining_today on every 200 response tells you how many daily calls remain.

StatuserrorMeaning
400bad_requestInvalid ticker or since parameter.
401unauthorizedMissing, unknown, or revoked API key.
404not_foundUnknown endpoint path.
405method_not_allowedNon-GET method.
429rate_limitedPer-minute or per-day limit hit — see Retry-After.
500internal_errorKey lookup failed.
503unavailableUpstream data query failed.
429 Too Many Requests — error body
{
  "error": "rate_limited",
  "message": "Daily limit of 100 requests exceeded.",
  "retry_after_seconds": 3421
}
Disclaimer

Data, not advice.

Informational only. The Insynet API exposes public regulatory records from sources including the SEC, the US House Clerk, and Finansinspektionen. Nothing returned by the API constitutes financial, investment, legal, or tax advice, nor a recommendation or solicitation to buy or sell any security.

Data may be delayed. On the free tier all data is at least 24 hours old. Even on fresh tiers, upstream filings are inherently lagged (13F facts are ~45 days behind) and may contain errors, omissions, or restatements from the original filers.

No warranty. The API is provided "as is", without warranty of any kind, express or implied. We do not guarantee accuracy, completeness, timeliness, or availability, and are not liable for any loss arising from its use. You are responsible for your own due diligence.

By using the API you agree to our Terms of Service and Privacy Policy.