Vesting Schedules Guide
How to create vesting schedules, materialize vesting events, vest or forfeit shares, and handle termination and acceleration scenarios.
What is vesting?
Section titled “What is vesting?”Vesting is a mechanism that distributes equity ownership over time. Instead of receiving all shares immediately, a recipient earns them incrementally according to a schedule. Unvested shares can be forfeited if the recipient leaves the company, aligning long-term incentives between the company and its equity holders.
1. Create a vesting schedule
Section titled “1. Create a vesting schedule”Attach a vesting schedule to an existing equity grant.
corp cap-table create-vesting \ --grant-id $GRANT_ID \ --total-shares 1000000 \ --start-date 2026-04-01 \ --template "4yr/1yr cliff" \ --cliff-months 12 \ --total-months 48curl -X POST http://localhost:8000/v1/entities/$ENTITY_ID/vesting-schedules \ -H "Authorization: Bearer $CORP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "grant_id": "'$GRANT_ID'", "total_shares": 1000000, "vesting_start_date": "2026-04-01", "template": "standard_4y_1y_cliff", "cliff_months": 12, "total_months": 48 }'Save the returned vesting_schedule_id.
Parameters
Section titled “Parameters”| Parameter | Description |
|---|---|
grant_id | The equity grant this schedule applies to |
total_shares | Total number of shares that will vest over the schedule |
vesting_start_date | Date vesting begins (typically the hire date or grant date) |
template | Predefined vesting pattern (see below) |
cliff_months | Months before the first vesting event occurs |
total_months | Total duration of the vesting schedule |
2. Standard 4-year / 1-year cliff template
Section titled “2. Standard 4-year / 1-year cliff template”The standard_4y_1y_cliff template is the industry default for startup equity:
- Cliff: 12 months. No shares vest during this period. If the recipient departs before the cliff, they receive nothing.
- Cliff vest: 25% of total shares vest on the 1-year anniversary.
- Monthly vesting: The remaining 75% vests in equal monthly installments over the next 36 months (approximately 2.08% per month).
Example with 1,000,000 shares starting 2026-04-01:
| Date | Event | Shares | Cumulative |
|---|---|---|---|
| 2027-04-01 | Cliff vest | 250,000 | 250,000 |
| 2027-05-01 | Monthly vest | 20,833 | 270,833 |
| 2027-06-01 | Monthly vest | 20,833 | 291,666 |
| … | … | … | … |
| 2030-04-01 | Final vest | 20,839 | 1,000,000 |
3. Materialize vesting events
Section titled “3. Materialize vesting events”After creating a schedule, materialize it to generate individual vesting events:
corp cap-table materialize-vesting \ --schedule-id $VESTING_SCHEDULE_IDcurl -X POST http://localhost:8000/v1/entities/$ENTITY_ID/vesting-schedules/$VESTING_SCHEDULE_ID/materialize \ -H "Authorization: Bearer $CORP_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'This creates individual vesting event records, each with a date and share count. All events start in the Scheduled state.
List materialized events:
corp cap-table vesting $ENTITY_ID4. Vest events
Section titled “4. Vest events”As each vesting date passes, transition events from Scheduled to Vested:
corp cap-table vest-event $EVENT_IDcurl -X POST http://localhost:8000/v1/entities/$ENTITY_ID/vesting-events/$EVENT_ID/vest \ -H "Authorization: Bearer $CORP_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'Vested shares become part of the holder’s exercisable or owned position on the cap table.
5. Forfeit events
Section titled “5. Forfeit events”When a recipient departs the company, all remaining Scheduled events are forfeited:
Forfeit is currently API-only — no CLI subcommand exists yet.
curl -X POST http://localhost:8000/v1/entities/$ENTITY_ID/vesting-events/$EVENT_ID/forfeit \ -H "Authorization: Bearer $CORP_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'Forfeited events transition from Scheduled to Forfeited. Already-vested events are not affected.
6. Terminate a vesting schedule
Section titled “6. Terminate a vesting schedule”To terminate the entire schedule on departure, which forfeits all remaining scheduled events in bulk:
Terminate is currently API-only — no CLI subcommand exists yet.
curl -X POST http://localhost:8000/v1/entities/$ENTITY_ID/vesting-schedules/$VESTING_SCHEDULE_ID/terminate \ -H "Authorization: Bearer $CORP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "termination_date": "2027-09-15" }'This vests all events with dates on or before the termination date and forfeits all events after it.
7. Acceleration provisions
Section titled “7. Acceleration provisions”Acceleration allows some or all unvested shares to vest immediately upon a triggering event.
Acceleration provisions are configured when creating the vesting schedule via the acceleration_single_trigger and acceleration_double_trigger boolean fields. When an acceleration event occurs, the company vests all remaining scheduled events manually or via the API.
Single trigger
Section titled “Single trigger”All unvested shares vest upon a single event, typically an acquisition (change of control). Enable by setting acceleration_single_trigger: true when creating the schedule.
Double trigger
Section titled “Double trigger”Unvested shares vest only when both conditions are met: (1) a change of control occurs, and (2) the holder is terminated without cause within a defined window (typically 12 months after closing). Enable by setting acceleration_double_trigger: true when creating the schedule.
| Type | Trigger | Common use |
|---|---|---|
single_trigger | Change of control alone | Founders, key executives |
double_trigger | Change of control + involuntary termination | Employees with equity grants |
8. Early exercise
Section titled “8. Early exercise”Some grants allow recipients to exercise unvested shares before they vest. Early-exercised shares are still subject to the vesting schedule but are already purchased.
Early exercise uses the same exercise-option command. The grant’s vesting schedule must have early_exercise_allowed: true set when created.
corp cap-table exercise-option \ --grant-id $GRANT_ID \ --holder-id $HOLDER_ID \ --shares 250000curl -X POST http://localhost:8000/v1/entities/$ENTITY_ID/grants/$GRANT_ID/exercise \ -H "Authorization: Bearer $CORP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "holder_id": "'$HOLDER_ID'", "shares_to_exercise": 250000 }'Early-exercised but unvested shares are automatically subject to a company repurchase right. If the holder departs before vesting, the company can buy back the unvested portion at the original strike price.
Vesting event lifecycle
Section titled “Vesting event lifecycle”Scheduled → Vested (normal vesting or acceleration)Scheduled → Forfeited (termination or departure)Events can only transition forward. A Vested event cannot be forfeited, and a Forfeited event cannot be vested.
Summary
Section titled “Summary”| Action | CLI | API |
|---|---|---|
| Create schedule | corp cap-table create-vesting | POST /v1/entities/{id}/vesting-schedules |
| Materialize events | corp cap-table materialize-vesting | POST /v1/entities/{id}/vesting-schedules/{id}/materialize |
| Vest event | corp cap-table vest-event | POST /v1/entities/{id}/vesting-events/{id}/vest |
| Forfeit event | API only | POST /v1/entities/{id}/vesting-events/{id}/forfeit |
| Terminate schedule | API only | POST /v1/entities/{id}/vesting-schedules/{id}/terminate |
| Exercise options | corp cap-table exercise-option | POST /v1/entities/{id}/grants/{id}/exercise |