Lock-Up Expiration Calendar
get_lockup_expirationsLock-up expiration calendar: when insider and pre-offering shares become eligible for sale after a US IPO or follow-on offering, past and UPCOMING, with the size of the locked block versus the offering float.
One row per lock-up tranche per offering, sourced from the final prospectus
(SEC Form 424B4 / 424B1) filed the day after pricing. date (also served as
expiration_date) = the lock-up anchor (normally the prospectus date) plus the
lock-up length in calendar days; shares_sellable_from is the first NYSE session
on or after it. A plain 180-day lock-up is one row (tranche_seq 1 of 1); a
staggered release is several rows sharing accession_no with tranche_pct.
lockup_type separates operating-company IPOs (typically 180 days) from
follow-on offerings by already-public issuers (typically 60-90 days).
Blank-check (SPAC) IPOs are excluded. History from 2021.
Sizing: locked_shares is the prospectus-stated locked count where given,
otherwise shares outstanding after the offering minus shares offered.
float_shares_at_offering = shares sold in the offering (plus the
over-allotment when its exercise is stated); locked_to_float_ratio = locked /
float, so 3.0 means three times the offering float unlocks on date.
locked_pct_of_outstanding is the same block as a share of total shares
outstanding.
Requires an Alphanume Pro API key. There is no date clamp on this route: a Pro key sees full history and the forward calendar.
Honest limits, stated plainly. Early-release clauses are common in recent
IPOs (a release tied to the first earnings announcement, a price-based
release, or staged tranches); the row carries early_release_type and the
verbatim early_release_terms, but v1 does not compute the earlier date --
treat date as the contractual outside date when early_release_type is not
'none'. The over-allotment exercise is unknown at prospectus time, so the
float can be understated by up to 15%. ticker may be NULL for a few days on a
brand-new IPO; first_trade_date is IPO-only (NULL on follow-ons);
market_cap_at_offering is NULL until the cap history covers the ticker; rows
are never dropped for missing enrichment. confidence (0-1) is a per-row
quality signal for the extracted terms; 0.9 means every term was resolved by
the deterministic parser. first_seen_at is when our pull first observed the
prospectus (synthetic = filing time for rows backfilled before launch).
Default order: upcoming expirations first, nearest to today first, then already-expired rows most recent first -- so the first page is the calendar of what happens next.
Pagination: results are capped at 50,000 rows per request; when the response has has_more=true, pass next_cursor's cursor_date, cursor_ticker and cursor_id back to fetch the next page.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Exact date, YYYY-MM-DD. Cannot be combined with the date range parameters. | |
| status | No | Row status as of the last nightly sweep (ET). | |
| ticker | No | Ticker symbol filter, e.g. 'AAPL'. Case-insensitive. | |
| date_gt | No | Start of date range, exclusive (YYYY-MM-DD). | |
| date_lt | No | End of date range, exclusive (YYYY-MM-DD). | |
| date_gte | No | Start of date range, inclusive (YYYY-MM-DD). | |
| date_lte | No | End of date range, inclusive (YYYY-MM-DD). | |
| max_rows | No | Maximum data rows to return to the client (applied after the API responds). Default 500. Use 0 for no cap. Prefer narrowing with date/ticker filters over raising this. | |
| upcoming | No | 'true' = only lock-ups expiring today or later (the forward calendar); 'false' = only already-expired lock-ups. Omit for both. | |
| cursor_id | No | Pagination: the 'cursor_id' value from the previous response's next_cursor. | |
| cursor_date | No | Pagination: the 'cursor_date' value from the previous response's next_cursor. Send with cursor_ticker and cursor_id. | |
| lockup_type | No | 'ipo' = operating-company initial public offerings (typically 180-day lock-ups); 'follow_on' = offerings by already-public issuers (typically 60-90 days). | |
| cursor_ticker | No | Pagination: the 'cursor_ticker' value from the previous response's next_cursor (may be an empty string). | |
| early_release | No | 'true' = only lock-ups with an early-release clause (earnings-, price-based or staggered); 'false' = plain fixed-period lock-ups only. | |
| updated_since | No | Only rows updated at or after this date/datetime (YYYY-MM-DD or YYYY-MM-DD HH:MM:SS) -- for incremental syncs. | |
| min_confidence | No | Only rows with extraction confidence >= this value (0-1). Regex-resolved rows carry 0.9; LLM-assisted rows carry the model's own estimate. | |
| min_locked_to_float | No | Only rows whose locked block is at least this multiple of the shares sold in the offering (e.g. 2 = locked shares >= 2x the offering float). |