---
title: "Reverse-split calendar: every US reverse stock split, executed and UPCOMING,"
method: GET
path: "/v1/capital/reverse-splits"
---

# Reverse-split calendar: every US reverse stock split, executed and UPCOMING,

`GET /v1/capital/reverse-splits`

## Request

- Base URL: `https://api.alphanume.com`
- URL: `https://api.alphanume.com/v1/capital/reverse-splits`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Reverse-split calendar: every US reverse stock split, executed and UPCOMING,
with pre-split price, market-cap tier, and dilution/shelf cross-links.

One row per (ticker, execution date), sourced daily from Polygon's reference
splits feed. Because the feed carries future execution dates, upcoming=true is
a genuine forward calendar (~40 scheduled splits at any moment); ~70-100
reverse splits execute per month, almost all sub-$1 microcaps curing a listing
deficiency. first_seen_at records when the pull first observed the row (an
announcement proxy; for rows backfilled before launch it is set to the
execution date itself and is synthetic).

Requires an Alphanume Pro API key. There is no date clamp on this route: a Pro
key sees full history and the forward calendar.

Research context, stated plainly: in the Alphanume anomaly sweep
(2022-2026, matched-control event study), reverse-split names underperform
controls by roughly -6%/-12%/-18%/-40% over the 21/63/126/252 sessions after
execution (~60% of events negative; Kim-Klein-Rosenfeld 2008 found the same).
That makes this a screening/avoidance signal -- e.g. exclude fresh
reverse-splitters from long screens, or use the calendar to anticipate the
event. It is NOT a tradeable short card: borrow on these names is scarce and
expensive and is not modeled anywhere, the calendar-time short portfolio was
statistically inconclusive net of costs, and the long-horizon numbers are
survivor-conditioned (only ~47% of events still have a full price history
252 sessions out). No CAR columns are served; the feed is the product.

Enrichment semantics. sub_dollar_flag marks names whose unadjusted close
the session before the split was under $1 (the raw price is an internal
input and is not served). market_cap_before / market_cap_tier are populated
from 2024-01-02 (NULL earlier -- the cap history starts there). ratio =
split_to/split_from (<1 = reverse; a 1-for-10 is 0.1);
is_deficiency_candidate flags ratio <= 0.5, separating real consolidations
from ADR-fee-style near-1.0 adjustments, which are served raw.
dilution_link_flag/shelf_link_flag mark an S-1 or S-3/F-3 filing by the
same ticker in the trailing 365 days (dilution links meaningful from 2026,
shelf links from 2025 -- the linked datasets' own history floors). Upcoming
rows carry NULL sub_dollar_flag until execution; OTC names outside the
coverage universe may keep it NULL along with cap fields. Open-end mutual
fund share adjustments are excluded at ingest; ETFs and closed-end funds
are included.

Pagination: results are capped at 50,000 rows per request; when the response
has has_more=true, pass next_cursor's cursor_date and cursor_ticker back to
fetch the next page.

## Query parameters

- `ticker` string
- `date` string
- `date_gte` string
- `date_lte` string
- `date_gt` string
- `date_lt` string
- `upcoming` string
- `ratio_gte` number
- `ratio_lte` number
- `cap_tier` 'nano' | 'micro' | 'small' | 'mid_plus'
- `deficiency_only` string
- `sub_dollar` string
- `updated_since` string
- `cursor_date` string
- `cursor_ticker` string

## Response `200`

Matching rows.

- PaginatedEnvelope
  - `count` integer, required
  - `data` object[], required
  - `has_more` boolean, required
  - `next_cursor` object, nullable, required: Keyset cursor: pass its fields back as the cursor_* query parameters to fetch the next page.

## Other responses

- `400`: Invalid or conflicting query parameters.
- `401`: Missing or unrecognized API key.
- `403`: PRO_SUBSCRIPTION_REQUIRED: the key's plan does not include API access (every endpoint requires an active Pro subscription), or this Pro-only dataset is not covered by the key. No choice of dates makes the request succeed. The data is not missing.
- `429`: Rate limit exceeded (600/min); the body carries retry_after_seconds.

---

[API](https://skmtc.dev/alphanume/apis/alphanume-api.md) · [All operations](https://skmtc.dev/alphanume/apis/alphanume-api/llms.txt) · [OpenAPI document](https://skmtc.dev/alphanume/apis/alphanume-api/revisions/2cb83f10bba4?raw)
