---
title: "Insider transaction history (Form 4)"
method: GET
path: "/api/insider-activity"
tags: ["Filings"]
---

# Insider transaction history (Form 4)

`GET /api/insider-activity`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/insider-activity`
- Auth: none declared

Insider transactions from DB.

2026-09-26 (MCP audit MCP-B B5): the ticker branch ignored `days` and always
served the latest 20, so a caller asking for "the last 30 days" got 20 rows of
any age. Both branches now honour `days` and `limit`; with a ticker and no
`days` the window stays open, which is what every existing reader relies on.

## Query parameters

- `ticker` string: Ticker symbol (leave blank for market-wide recent buys)
- `days` integer, nullable: Look-back window in days on filing date (1-3650). Market-wide default 90; with a ticker, no window unless set.
- `limit` integer, nullable: Max rows (1-100). Default 20 with a ticker, 50 market-wide.

## Response `200`

Successful Response

- InsiderActivityResponse: `GET /api/insider-activity` response. F4 schema-tightening (2026-04-30): `transactions` REQUIRED. Both 200 paths (with-ticker and no-ticker market-wide) include `transactions` as a list. The 500 fallback uses ErrorResponse via the responses dict. Note: `ticker` is only present in the with-ticker branch (the no-ticker branch returns market-wide recent buys without a ticker echo) — kept Optional.
  - `transactions` InsiderActivityTxn[], required
    - `ticker` string, nullable
    - `date` string, nullable
    - `insiderName` string, nullable
    - `relationship` string, nullable
    - `position` string, nullable
    - `transactionType` string, nullable
    - `shares` number, nullable
    - `price` number, nullable
    - `value` number, nullable
    - `url` string, nullable
    - `securityTitle` string, nullable, required: Form 4 security title as the filer wrote it (Common Stock, Stock Option (Right to Buy), 4.250 pct Notes due 2025). NULL when the filing did not say. A row whose title is not common stock is NOT comparable to a common-share price.
    - `isDerivative` boolean, nullable, required: True for a derivative security (option/RSU/warrant/right), False for a non-derivative, NULL when the stored SMALLINT is absent or unrecognised. Never read a null as False.
    - `issuerSelfFiled` boolean, nullable: True when the reporting-owner CIK equals the issuer's CIK: filed under the company's own SEC ID, so the reporting-owner field names the company, not a person (footnotes may still name the officer). Shown, labelled, and never counted in any buy/sell summary, net figure or cluster. False when a CIK is missing.
  - `ticker` string, nullable
  - `count` integer, nullable

## Other responses

- `400`: Bad Request
- `422`: Validation Error
- `500`: Internal Server Error

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
