/api/v1/cusip/chain/{cusip}Get full CUSIP successor chain for a security (corporate actions tracking).
Get full CUSIP successor chain for a security (corporate actions tracking).
Why use this
Common use case
Walks the full successor chain for a CUSIP — the canonical answer to 'show me every CUSIP that has ever represented this security'. Phase 11 (initial chain table) + Phase 47 (unified-holder layer chain expansion) work product. The chain walks BOTH directions from the input CUSIP (pre-mergers AND post-mergers) so passing any CUSIP in the chain returns the same complete history. Each entry preserves the historical issuer name AT THE TIME that CUSIP was active — useful for time-stamped ownership reports that need 'who owned the security as filed' rather than 'who would own it under the current name'. Used internally by POST /api/v1/form-13f/holdings for chain-aware position aggregation when include_chain=true. For the ticker-keyed equivalent see GET /api/v1/cusip/ticker/{ticker}?chain=true. The CUSIP6 prefix CHANGES across reorgs (e.g. RKLB went from G9442R -> 773122 -> 773121) so do NOT use CUSIP6 as a stable issuer identifier across corporate actions — use the chain itself or the unified-holder layer.
Parameters
| Name | In | Required | Default | Allowed | Description | Example |
|---|---|---|---|---|---|---|
| cusip | path | required | — | — | Any CUSIP in the chain (old or current). The endpoint walks the chain in BOTH directions from the input — pre-mergers AND post-mergers — to return the complete history. Examples: `G9442R126` (pre-SPAC RKLB) returns the same chain as `773121108` (current RKLB). | 773121108 |
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
| cusip | string | no | Echoed input CUSIP — the seed for the chain walk. |
| chain | array | no | Array of chain entries in CHRONOLOGICAL order (oldest CUSIP first, current CUSIP last). The last entry's `cusip` is the CURRENT active CUSIP for the security. |
| chain[].cusip | string | no | 9-character CUSIP at this point in the chain. |
| chain[].issuer_name | string | no | Issuer name AT THE TIME this CUSIP was active — preserves the historical-issuer-identity view (e.g. `VECTOR ACQUISITION CORP` for the pre-SPAC RKLB CUSIP, `ROCKET LAB USA INC` for the post-SPAC CUSIP, `ROCKET LAB CORP` for the post-redomicile CUSIP). |
| chain[].effective_date | string | yes | ISO-8601 date this CUSIP became active. Null on the seed CUSIP (catalog-origin date is not always known; the chain only tracks the TRANSITION dates between CUSIPs, not the initial issuance). |
| chain[].reason | string | yes | Corporate-action reason that triggered the CUSIP transition — one of `SPAC merger`, `Reorg`, `Redomicile`, `Acquisition`, `Spin-off`, `Reverse merger`, `Symbol change`. Null on the seed (initial-issuance) entry. |
| chain[].is_current | boolean | no | `true` for exactly one entry — the CURRENT active CUSIP. `false` for all historical predecessors. |
| current_ticker | string | yes | Convenience field — the canonical ticker for the CURRENT CUSIP (last chain entry). Null when the security is delisted or has no public-equity ticker. |
Sample response
- "cusip": "773121108"
- "chain":
- "current_ticker": "RKLB"
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/cusip/chain/{cusip}?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).