{"openapi":"3.0.2","info":{"title":"EDGAR Insider-Buy Signals API","version":"1.0.0","description":"Read-only REST API over SEC EDGAR insider-buy signals. Every record is Rule-2-gated: it traces to a parsed filing field and carries its source `filing_url`. Records without a filing link are never returned."},"servers":[{"url":"https://api.tradestarinsider.com","description":"Base URL (tunnel origin, set at listing time). Gated /v1/... routes require the RapidAPI proxy secret; the open discovery subset under /public/v1/... needs no key (per-IP rate-limited) and is what a Custom GPT with Auth=None calls."}],"paths":{"/v1/health":{"get":{"operationId":"health","summary":"Liveness + per-dataset coverage for all four products","responses":{"200":{"description":"service health; `datasets` reports per-product day coverage (insider/usaspending/activist/fund) and `datasets_empty` flags any empty dataset (status 'degraded' when non-empty)"}}}},"/v1/signals/today":{"get":{"operationId":"signalsToday","summary":"Signals filed today (default 25 newest-first)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25,"description":"Max rows in this page (default 25, newest first). Use with total_matched + offset to page; limit<=0 = no cap."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0},"example":0,"description":"Rows to skip before this page (pagination)."},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":7,"description":"Keep only rows filed within the last N days (relative to today)."},{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"DKS","description":"Case-insensitive exact ticker filter."}]}},"/v1/signals/ticker/{ticker}":{"get":{"operationId":"signalsByTicker","summary":"All signals for a ticker (case-insensitive)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string"},"example":"DKS"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25,"description":"Max rows in this page (default 25, newest first). Use with total_matched + offset to page; limit<=0 = no cap."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0},"example":0,"description":"Rows to skip before this page (pagination)."},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":7,"description":"Keep only rows filed within the last N days (relative to today)."}]}},"/v1/signals/range":{"get":{"operationId":"signalsByRange","summary":"Signals in an inclusive ISO date range","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date"},"example":"2026-08-27"},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date"},"example":"2026-08-31"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25,"description":"Max rows in this page (default 25, newest first). Use with total_matched + offset to page; limit<=0 = no cap."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0},"example":0,"description":"Rows to skip before this page (pagination)."},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":7,"description":"Keep only rows filed within the last N days (relative to today)."},{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"DKS","description":"Case-insensitive exact ticker filter."}]}},"/v1/signals/clusters":{"get":{"operationId":"clusterBuys","summary":"Cluster buys only (>=2 insiders), default 25 newest-first","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25,"description":"Max rows in this page (default 25, newest first). Use with total_matched + offset to page; limit<=0 = no cap."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0},"example":0,"description":"Rows to skip before this page (pagination)."},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":7,"description":"Keep only rows filed within the last N days (relative to today)."},{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"DKS","description":"Case-insensitive exact ticker filter."}]}},"/v1/signals/filing/{accession}":{"get":{"operationId":"filingLookup","summary":"Single filing's Rule-2 record by SEC accession","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"accession","in":"path","required":true,"schema":{"type":"string"},"example":"0001493152-26-040454"}]}},"/v1/usaspending/recent":{"get":{"operationId":"usaspendingRecent","summary":"Recent federal contract awards (USAspending.gov), each with its source award_url","responses":{"200":{"description":"Award envelope (awards[])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwardEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"min_amount","in":"query","required":false,"schema":{"type":"number"},"example":1000000},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"example":0},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":7,"description":"Keep only awards signed within the last N days."}]}},"/v1/activist/recent":{"get":{"operationId":"activistRecent","summary":"Recent activist stakes (SEC Schedule 13D/13D-A), each with its source filing_url","responses":{"200":{"description":"Stake envelope (stakes[])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StakeEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"min_percent","in":"query","required":false,"schema":{"type":"number"},"example":5},{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"DH"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"example":0},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":30,"description":"Keep only stakes filed within the last N days."}]}},"/v1/fund/changes":{"get":{"operationId":"fundPositionChanges","summary":"Institutional 13F quarter-over-quarter position changes (the delta is the product; values are as-of quarter-end and up to ~45 days stale; ticker is null \u2014 no free CUSIP->ticker source; long US 13(f) positions only; a convenience/completeness view, not a trading edge). Each change carries its source filing_url.","responses":{"200":{"description":"Change envelope (changes[])","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"filer","in":"query","required":false,"schema":{"type":"string"},"example":"Berkshire"},{"name":"change_type","in":"query","required":false,"schema":{"type":"string","enum":["new_position","added","trimmed","exited","no_prior_quarter"]}},{"name":"min_value_usd","in":"query","required":false,"schema":{"type":"number"},"example":100000},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25},"example":25},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"example":0},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"example":90,"description":"Keep only changes filed within the last N days."}]}},"/v1/verify":{"get":{"operationId":"verifyInsiderPurchase","summary":"Verify an insider open-market-purchase claim against the full code-P Form-4 corpus (confirmed / partial / not_found / out_of_coverage \u2014 never a guess)","parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"DKS"},{"name":"issuer_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"person","in":"query","required":false,"schema":{"type":"string"},"example":"Ed Stack"},{"name":"amount_usd","in":"query","required":false,"schema":{"type":"number"},"example":2000000},{"name":"shares","in":"query","required":false,"schema":{"type":"number"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"txn_type","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"verify verdict (status one of confirmed / partial / not_found / out_of_coverage)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyVerdict"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}}}},"/public/v1/signals/today":{"get":{"operationId":"publicSignalsToday","summary":"Signals filed today (open, no key)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"security":[]}},"/public/v1/signals/clusters":{"get":{"operationId":"publicClusterBuys","summary":"Cluster buys only (>=2 insiders) (open, no key)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"security":[]}},"/public/v1/verify":{"get":{"operationId":"publicVerifyInsiderPurchase","summary":"Verify an insider open-market-purchase claim (open, no key)","responses":{"200":{"description":"verify verdict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyVerdict"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"DKS"},{"name":"issuer_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"person","in":"query","required":false,"schema":{"type":"string"},"example":"Ed Stack"},{"name":"amount_usd","in":"query","required":false,"schema":{"type":"number"},"example":2000000},{"name":"shares","in":"query","required":false,"schema":{"type":"number"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"txn_type","in":"query","required":false,"schema":{"type":"string"}}],"security":[]}},"/public/v1/verify/13d":{"get":{"operationId":"publicVerify13d","summary":"Verify a Schedule 13D activist-stake claim (open, no key)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string"}},{"name":"subject_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"filer_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"security":[]}},"/public/v1/verify/8k":{"get":{"operationId":"publicVerify8k","summary":"Verify an 8-K material-event claim (open, no key)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"cik","in":"query","required":false,"schema":{"type":"string"}},{"name":"company_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"accession","in":"query","required":false,"schema":{"type":"string"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"security":[]}},"/public/v1/verify/13f":{"get":{"operationId":"publicVerify13f","summary":"Verify a 13F institutional-holding claim (open, no key)","responses":{"200":{"description":"Rule-2 signal envelope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignalEnvelope"}}}},"400":{"description":"JSON error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate limit exceeded"}},"parameters":[{"name":"filer","in":"query","required":false,"schema":{"type":"string"}},{"name":"issuer_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"cusip","in":"query","required":false,"schema":{"type":"string"}},{"name":"quarter","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"security":[]}}},"components":{"securitySchemes":{"RapidAPIProxySecret":{"type":"apiKey","in":"header","name":"X-RapidAPI-Proxy-Secret","description":"Origin-side check that the request came through the RapidAPI gateway."}},"schemas":{"Signal":{"type":"object","description":"One Rule-2 insider-buy signal. Every field traces to a parsed SEC filing; `filing_url` is always present. `ticker` is NOT guaranteed (the store guarantees only filed_date + filing_url).","required":["filed_date","filing_url"],"properties":{"filed_date":{"type":"string","format":"date","example":"2026-08-31"},"ticker":{"type":"string","example":"DKS"},"issuer_name":{"type":"string"},"issuer_cik":{"type":"string"},"insider":{"type":"string"},"relationship":{"type":"string"},"code":{"type":"string","description":"SEC transaction code (P = open-market purchase)","example":"P"},"shares":{"type":"number"},"price_per_share":{"type":"number"},"value_usd":{"type":"number"},"shares_owned_following":{"type":"number"},"increase_ratio":{"type":"number","description":"Holdings increase as a RATIO of the insider's prior stake (0.07 = +7%, 58.0 = 58x). null for a new/initiated position. Renamed from increase_pct (A3) \u2014 it was never a percent. Present only on large-vs-holdings (s2) rows."},"cluster":{"type":"boolean"},"cluster_insiders":{"type":"integer"},"cluster_notional":{"type":"number"},"s2":{"type":"boolean","description":"Large-vs-holdings flag (filter signal S2). True when the buy grew the insider's stake by >=10% (increase_ratio >= 0.10) OR opened a new/initiated position (no prior shares). Marks a buy that is large RELATIVE to what the insider already held, independent of dollar size."},"accession":{"type":"string"},"filing_url":{"type":"string","format":"uri","description":"RULE 2 source link \u2014 always an https SEC filing URL"}}},"SignalEnvelope":{"type":"object","required":["api_version","endpoint","rule2_guarantee","count","signals"],"properties":{"api_version":{"type":"string","example":"v1"},"endpoint":{"type":"string"},"rule2_guarantee":{"type":"string","example":"Every record traces to a parsed SEC filing field and carries its source filing_url (docs/edgar/EDGAR_INSIDER_BRIEF.md Rule 2). Records without a filing link are dropped upstream and never returned."},"count":{"type":"integer","description":"Rows in THIS page."},"total_matched":{"type":"integer","description":"Total rows matching the filter before limit/offset (A1). count == len(this page); page via limit+offset."},"params":{"type":"object","additionalProperties":true},"signals":{"type":"array","items":{"$ref":"#/components/schemas/Signal"}}}},"Error":{"type":"object","required":["api_version","error"],"properties":{"api_version":{"type":"string"},"error":{"type":"string"}}},"VerifyVerdict":{"type":"object","description":"A /v1/verify verdict. `status` is the outcome; the rest of the payload varies by status (a `match` block on confirmed/partial, a `message` on the negative statuses). Coverage bounds and the Rule-2 guarantee are always present. Absence is reported as absence \u2014 never a guess.","required":["api_version","endpoint","status","coverage_note","rule2_guarantee"],"properties":{"api_version":{"type":"string","example":"v1"},"endpoint":{"type":"string","example":"verify"},"status":{"type":"string","enum":["confirmed","partial","not_found","out_of_coverage","out_of_scope"],"description":"confirmed = matched a filing; partial = identity match with a claimed-vs-filed diff; not_found = in coverage but no match; out_of_coverage = claimed window outside collected days (we did not look); out_of_scope = not an open-market buy."},"coverage_start":{"type":"string","format":"date","nullable":true},"coverage_end":{"type":"string","format":"date","nullable":true},"coverage_note":{"type":"string"},"rule2_guarantee":{"type":"string"},"message":{"type":"string"},"match":{"type":"object","additionalProperties":true,"description":"On confirmed/partial: the matched filing fields incl. filing_url."}},"additionalProperties":true},"Award":{"type":"object","description":"One USAspending.gov federal award. `award_url` is the Rule-2 source link.","required":["award_url"],"properties":{"award_url":{"type":"string","format":"uri","description":"RULE 2 source link \u2014 usaspending.gov award page"}},"additionalProperties":true},"AwardEnvelope":{"type":"object","required":["api_version","endpoint","award_guarantee","count","awards"],"properties":{"api_version":{"type":"string","example":"v1"},"endpoint":{"type":"string"},"award_guarantee":{"type":"string"},"count":{"type":"integer"},"total_matched":{"type":"integer","description":"Total rows matching the filter before limit/offset (Issue 2.6). count == len(this page)."},"params":{"type":"object","additionalProperties":true},"awards":{"type":"array","items":{"$ref":"#/components/schemas/Award"}}}},"Stake":{"type":"object","description":"One SEC Schedule 13D/13D-A activist stake. `filing_url` is the Rule-2 source link.","required":["filing_url"],"properties":{"filing_url":{"type":"string","format":"uri","description":"RULE 2 source link \u2014 sec.gov 13D filing"}},"additionalProperties":true},"StakeEnvelope":{"type":"object","required":["api_version","endpoint","activist_guarantee","count","stakes"],"properties":{"api_version":{"type":"string","example":"v1"},"endpoint":{"type":"string"},"activist_guarantee":{"type":"string"},"count":{"type":"integer"},"total_matched":{"type":"integer","description":"Total rows matching the filter before limit/offset (Issue 2.6). count == len(this page)."},"params":{"type":"object","additionalProperties":true},"stakes":{"type":"array","items":{"$ref":"#/components/schemas/Stake"}}}},"Change":{"type":"object","description":"One 13F quarter-over-quarter position change (the delta is the product; ticker is always null). `filing_url` is the Rule-2 source link.","required":["filing_url"],"properties":{"filing_url":{"type":"string","format":"uri","description":"RULE 2 source link \u2014 sec.gov 13F-HR filing"}},"additionalProperties":true},"ChangeEnvelope":{"type":"object","required":["api_version","endpoint","fund_guarantee","count","changes"],"properties":{"api_version":{"type":"string","example":"v1"},"endpoint":{"type":"string"},"fund_guarantee":{"type":"string"},"count":{"type":"integer"},"total_matched":{"type":"integer","description":"Total rows matching the filter before limit/offset (Issue 2.6). count == len(this page)."},"params":{"type":"object","additionalProperties":true},"changes":{"type":"array","items":{"$ref":"#/components/schemas/Change"}}}}}}}