Stock split and reverse split
Change the share count for every holder at a fixed ratio through the Corporate Actions catalog.
A stock split multiplies every holder's share count by a fixed ratio; a reverse split (consolidation) divides it. The platform has no atomic on-chain rebase. Use catalog type stockSplit with direction: forward or direction: reverse. Confirm applies stored preview allocations through chunked mint or burn. Do not pause the token. Pause blocks mint and burn (TokenSupplyPausedError). First pass does not halt the market or pay cash remainder.
Prerequisites
- API key for a wallet holding the Supply Management role for the mints and burns, and the governance role for the pause and the cap change.
- For a forward split on a capped token: raise the cap before minting, since the post-split supply exceeds the old cap by definition.
- A stated rounding policy for reverse splits, announced with the ratio.
Running the split
Declare and preview the split
POST /api/v2/tokens/{tokenAddress}/corporate-actions with type: stockSplit and direction. Then preview. The platform re-reads remaining snapshot balances before confirm and before each chunk. Drift aborts the run. Do not pause the token.
Snapshot every holder
With transfers paused, GET /api/v2/tokens/{tokenAddress}/holders is a consistent snapshot. Paginate with limit=200 until you hold the complete set, and record total supply from GET .../stats/total-supply as the reconciliation baseline.
Compute each holder's delta
For a forward split at ratio R, the delta to mint is balance x (R - 1). A 2-for-1 split mints each holder their current balance again. For a reverse split at 1-for-N, the target is floor(balance / N) whole post-split units and the delta to burn is balance - target x N. Token decimals make forward splits exact; reverse splits leave sub-unit remainders that your rounding policy governs, typically burn-to-floor with cash compensation for the burned fraction.
Mint or burn the deltas
For a forward split, mint each holder's delta in groups of up to 100 recipients.
curl -X POST "https://your-platform.example.com/api/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220/mints" \
-H "X-Api-Key: sm_dalp_test_xxxxxxxxxxxxxxxx" \
-H "Idempotency-Key: split-nwih-2for1-batch-001" \
-H "Content-Type: application/json" \
-d '{
"recipients": ["0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"],
"amounts": ["1000000000000000000000"]
}'Reverse split, same batching with POST .../burns and addresses/amounts. Burning a holder's delta needs no holder signature; the Supply Management role authorizes it, and the burn pre-check verifies each holder's indexed balance covers the amount. One Idempotency-Key per batch; a retry after a timeout reattaches instead of double-executing.
Adjust the cap, unpause, verify
If the token is capped, set the post-split cap with PATCH .../supply-cap and body { "newCap": "..." }. Unpause with DELETE .../pause-state. Then verify: new total supply must equal the baseline times the ratio (minus recorded reverse-split remainders), and each spot-checked holder must hold old balance x ratio. Update the asset's price feed so the per-share reference price reflects the new count; see publish a feed update.
Operational notes
- The mints and burns are supply operations, not a re-denomination: on-chain history shows the old balances before the effective date. State the ratio and effective date in the asset's records so downstream consumers interpret history correctly.
- Batches are atomic per request. Sequence them so a mid-run failure leaves a resumable state: keep the allocation table, mark each batch's transaction hash as it confirms, and resume from the first unconfirmed batch.
- For reverse splits, pay the announced cash compensation for burned fractions as a cash-token distribution, following the one-off path in the cash dividend guide.
Related guides
- Bonus issue is the same snapshot-and-mint pattern without the pause and ratio bookkeeping.
- Decrease of capital covers burns that reduce capital rather than re-denominate it.
- Pause and unpause assets documents the pause primitive in depth.