/insider-module/api/insiders/transactions/by-insider/{cik}Get all transactions by a specific insider (CIK).
Get all transactions by a specific insider (CIK). Each row includes total_beneficial_ownership and sector/industry classification from Sharadar. Response includes ownership_summary with per-company vehicle breakdown.
Why use this
Common use case
Insider-scoped transaction history — one reporting person's complete trade tape across every issuer they file at. The natural lookup when a person/entity is the analyst's primary key (insider profile pages, activist-tracking dashboards, fund-manager activity feeds).
The path parameter expects a 10-character zero-padded CIK; shorter forms are auto-padded server-side. Returns HTTP 404 when the CIK cannot be resolved to any reporting owner. Use the ticker query parameter to narrow to a single-issuer history (e.g. 'all of Cook's AAPL trades') without falling back to /transactions/by-ticker.
The response carries a meta.insider block (cik / name / is_entity / total_companies) so UI page headers can render the insider profile without a second round-trip to GET /insider-module/api/insiders/insider/{insider_cik}. When dedup_owners=true, joint filings only surface for THIS insider if they were the deterministic winner of the dedup partition (lowest transaction_id); the surviving row carries the full co_owners array so the UI can show 'this trade was filed jointly by N entities'.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| cik | path | required | — | — | Insider CIK number | 0000320193 |
| limit | query | optional | 50 | — | Limit results | 20 |
| from_date | query | optional | — | — | Start date (YYYY-MM-DD) | 2026-01-01 |
| to_date | query | optional | — | — | End date (YYYY-MM-DD) | 2026-04-01 |
| dedup_owners | query | optional | false | — | Opt-in server-side joint-filer dedup. When true, the response only includes the canonical winner of each natural-key partition (deterministic by lowest transaction_id) and adds co_owners + co_owner_count. The insider only appears for a joint filing if they were the canonical winner. Default-path response shape unchanged. | true |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| status | string | no | Always `success` on 2xx. |
| data | array | no | Array of transaction rows scoped to this insider across ALL issuers (or a single issuer when `ticker` is set). Sorted by `transaction_date DESC`. Empty array when the insider has no qualifying transactions in the date range — never null. Returns HTTP 404 when the insider CIK cannot be resolved at all. |
| data[].transaction_id | string | yes | Stable internal primary key. When `dedup_owners=true`, the canonical winner of the joint-filer dedup partition (only present for joint filings where THIS insider was the winner). |
| data[].transaction_date | string | yes | ISO `YYYY-MM-DD` trade execution date. |
| data[].transaction_code | string | yes | Raw SEC Form 4 transaction code. |
| data[].transaction_description | string | yes | Human-readable code description. |
| data[].acquired_disposed_code | string | yes | `A` (Acquired) or `D` (Disposed). |
| data[].shares | number | no | Share count (split-adjusted). |
| data[].price_per_share | number | yes | Per-share USD price, rounded to 2 decimals. |
| data[].transaction_value | number | yes | Computed `shares × price_per_share` in USD. |
| data[].shares_owned_following | number | yes | Per-vehicle holdings after this transaction. |
| data[].value_owned_following | number | yes | Computed `shares_owned_following × price_per_share` in USD. |
| data[].ownership_nature | string | yes | `D` or `I`. |
| data[].is_derivative | boolean | yes | `true` for Form 4 Table II rows. |
| data[].is_rule_10b5_1 | boolean | no | `true` for 10b5-1 plan executions. |
| data[].is_cashless_exercise | boolean | no | `true` for option-exercise-and-immediate-sale patterns. |
| data[].insider_name | string | yes | The reporting person's name (matches the `cik` path parameter for non-joint filings; may be a co-filer for joint filings on the dedup branch). |
| data[].insider_cik | string | yes | The reporting person's CIK (10-character zero-padded). |
| data[].is_entity | boolean | yes | `true` for entity reporters. |
| data[].is_director | boolean | no | Director relationship to this issuer. |
| data[].is_officer | boolean | no | Officer relationship to this issuer. |
| data[].is_ten_percent_owner | boolean | no | 10%-owner relationship to this issuer. |
| data[].insider_title | string | yes | Officer title raw text from the filing. |
| data[].officer_title_standardized | string | yes | Officer title normalized to FinRadar's vocabulary. |
| data[].is_c_suite | boolean | no | C-suite indicator. |
| data[].ticker | string | yes | Issuer ticker for THIS row (varies across rows when the insider files at multiple companies). |
| data[].company_name | string | yes | Issuer name for THIS row. |
| data[].sector | string | yes | Sharadar sector classification for the issuer. |
| data[].industry | string | yes | Sharadar industry classification for the issuer. |
| data[].issuer_cik | string | yes | Issuer CIK. |
| data[].security_type | string | yes | Security title. |
| data[].is_common_stock | boolean | yes | `true` for cash-equity common-stock rows. |
| data[].accession_number | string | yes | Source filing accession number. |
| data[].form_type | string | yes | Form type. |
| data[].filed_at | string | yes | ISO-8601 UTC filing acceptance timestamp. |
| data[].is_amendment | boolean | yes | `true` for `*/A` amendments. |
| data[].co_owners | array | yes | Present ONLY when `dedup_owners=true`. |
| data[].co_owner_count | integer | yes | Length of `co_owners` (only when `dedup_owners=true`). |
| meta | object | yes | Result metadata block — pagination + insider profile. |
| meta.pagination | object | no | Pagination sub-block. |
| meta.pagination.total | integer | no | Total matching rows for the filter set. |
| meta.pagination.limit | integer | no | Effective page size. |
| meta.pagination.offset | integer | no | Echo of requested offset. |
| meta.pagination.has_more | boolean | no | `true` when another page is available. |
| meta.insider | object | no | Insider profile block — surfaces identity + cross-issuer reach (`total_companies`) so UIs don't need a separate `/insider/{insider_cik}` call to render the page header. |
| meta.insider.cik | string | no | Insider CIK (10-character zero-padded). |
| meta.insider.name | string | yes | Insider legal name (`name_as_filed` from the most-recent Form 4). |
| meta.insider.is_entity | boolean | yes | `true` for entity reporters. |
| meta.insider.total_companies | integer | no | Distinct count of issuers this insider has a current relationship with (from `OwnerRelationship` rows where `is_current=true`). Use this as a `n+1`-style hint when sizing UI tables. |
| request_id | string | yes | Per-request UUID for log correlation. |
| timestamp | string | no | ISO-8601 UTC response timestamp. |
Sample response
- "status": "success"
- "data":
- "meta":
- "pagination":
- "insider":
- "request_id": "1f6a2b3c-9d4e-4a5f-b6c7-8d9e0a1b2c3d"
- "timestamp": "2026-05-02T15:36:42.117Z"
Errors
| Status | Label | Description |
|---|---|---|
| 200 | OK | Request succeeded. |
| 400 | Bad Request | Invalid query, body, or path parameter. |
| 401 | Unauthorized | Missing or invalid Authorization header / api_Token. |
| 402 | Payment Required | Insufficient token balance for this call. Top up |
| 429 | Too Many Requests | Rate limit exceeded for your tier (see /pricing for tier limits). Tier limits |
| 500 | Server Error | Unexpected server-side failure. Retry with backoff; report if persistent. |
Code samples
curl "https://api.finradar.ai/insider-module/api/insiders/transactions/by-insider/{cik}?api_Token=YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"Generate an API key in /account/credentials to run live queries (literal YOUR_API_KEY placeholder shown until then).