/api/v1/ownership/analytics/threshold-crossingsRecent filings that crossed 5%, 10%, 15%, or 20% ownership thresholds.
Recent filings that crossed 5%, 10%, 15%, or 20% ownership thresholds.
10 tokensSince v3.0.0
Why use this
Surfaces 13D/13G filings that crossed a beneficial-ownership threshold (5%, 10%, 15%, 20%) in either direction — the leading-indicator endpoint for material ownership-buildup or position-trim events. Computed via amendment-chain analysis: comparing each filing's `percentOfClass` against the prior filing by the same `(filer, issuer)` pair and emitting a row whenever the crossing occurs. Filterable by issuer ticker, specific threshold level, direction (`up` = accumulating; `down` = reducing), and date range. The 5% threshold is the SEC trigger; 10% triggers Section 16 short-swing-profit rules and is a common activist threshold; 15% (added v3.7.3) is a finer-grained activist-watching level; 20% is the often-used 'control-position' threshold. The right endpoint for compliance teams monitoring control-block accumulation and for analysts tracking activist position-building campaigns.
Common use case
Monitor for large ownership buildups/reductions, detect threshold trigger events, filter by crossing direction.
Surfaces 13D/13G filings that crossed a beneficial-ownership threshold (5%, 10%, 15%, 20%) in either direction. Filterable by issuerTicker, threshold, direction, dateTo (v3.7.3). The 15% threshold defaults to detection in the response (added v3.7.3).
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| issuerTicker | query | optional | — | — | Issuer ticker filter, case-insensitive (server normalizes to canonical hyphen form). Returns only crossings against this specific issuer. Useful for company-overview pages: 'has anyone crossed 5% in this name recently?' | IBM |
| threshold | query | optional | — | — | Specific threshold to filter on — `5`, `10`, `15`, or `20`. Default: returns crossings of any threshold. The `15` threshold was added in v3.7.3; pre-v3.7.3 only `5`, `10`, `20` were detected. | 10 |
| direction | query | optional | — | — | Crossing direction filter — `up` (accumulating: prior < threshold ≤ current) or `down` (reducing: prior ≥ threshold > current). Default: returns both directions blended. `up` crossings are the more actionable surveillance target. | up |
| dateFrom | query | optional | — | — | Inclusive lower bound on `filedAt` (the date of the crossing-triggering filing). Format ISO `YYYY-MM-DD`. Use for incremental polling: `dateFrom = last_run_timestamp`. | 2026-01-01 |
| dateTo | query | optional | — | — | Inclusive upper bound on `filedAt` (added v3.7.3). Format ISO `YYYY-MM-DD`. Combine with `dateFrom` for closed ranges. | 2026-04-01 |
| page | query | optional | 1 | — | 1-based page number. Crossings are a moderate-density subset of 13D/G filings — even broad date ranges typically fit on 5-20 pages. | 1 |
| size | query | optional | 50 | — | Page size, capped at 200 server-side. For full-corpus enumeration use date-range chunking + `size=200`. | 50 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| crossings | array | no | Array of threshold-crossing rows, sorted by `filedAt DESC` (most recent crossings first). Each row represents one threshold-crossing event by one filer at one issuer (a single filing that crosses multiple thresholds emits multiple rows — e.g. going from 4% to 11% emits both `5%` and `10%` rows). Empty array on no match. |
| crossings[].accessionNumber | string | no | SEC accession of the filing that triggered the crossing. Pass to `/ownership/beneficial-ownership/filings/{accession}` for the full filing payload (purpose, intent flags, exhibits). |
| crossings[].filedAt | string | no | ISO-8601 UTC timestamp of SEC EDGAR acceptance for the crossing-triggering filing. Use for time-bucketed crossing-rate analytics ('how many 10% crossings filed this quarter?'). |
| crossings[].issuerCik | string | no | Issuer CIK in 10-char zero-padded form. The company whose ownership threshold was crossed. |
| crossings[].issuerTicker | string | yes | Resolved issuer ticker (canonical hyphen form). Null only for private-issuer filings (rare; most threshold-crossings target public issuers). |
| crossings[].filerCik | string | no | Filer CIK in 10-char zero-padded form. The entity that crossed the threshold. Pass to `/ownership/beneficial-ownership/filers/{cik}/portfolio` for the filer's full position book. |
| crossings[].filerName | string | no | Filer name from the crossing filing (typically all-caps EDGAR convention). For activist crossings commonly surfaces names like `TRIAN FUND MANAGEMENT LP`, `STARBOARD VALUE LP`, `ELLIOTT INVESTMENT MANAGEMENT LP`. |
| crossings[].threshold | integer | no | The threshold that was crossed — `5`, `10`, `15`, or `20`. A single filing can produce multiple rows in this response if it crossed multiple thresholds (e.g. accumulating from 4% to 11% → two rows: one for `5` and one for `10`). |
| crossings[].direction | string | no | Crossing direction — literal `"up"` (accumulating: prior was below threshold, current is at-or-above) or `"down"` (reducing: prior was at-or-above, current is below). The actionable direction for surveillance is `"up"`. |
| crossings[].priorPercent | number | yes | Filer's `percent_of_class` from the IMMEDIATELY-PRIOR filing (the last filing before this crossing-triggering one). Together with `currentPercent` defines the magnitude of the threshold crossing. Null on first-ever filings by this `(filer, issuer)` pair (i.e. fresh 5% accumulations from zero). |
| crossings[].currentPercent | number | no | Filer's `percent_of_class` on the crossing-triggering filing. Always above the threshold for `direction='up'`; always below the threshold for `direction='down'`. Use `currentPercent - priorPercent` (when prior is not null) to compute crossing-event size. |
Sample response
·
- "crossings":
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/api/v1/ownership/analytics/threshold-crossings?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).