Skip to main content

Grant State Machine

Every grant moves through a defined set of statuses. Understanding these transitions is critical for building a reliable integration.

Status Reference


Creating a Grant

When you call addSingleGrant, the grant is created in PENDING status. The recipient receives an email notification.

Vesting Calculation

Once a grant reaches ACCEPTED, vestings are calculated automatically:

Standard 4-Year Schedule (48 months, 12-month cliff, 25% cliff)

Monitoring Vesting Progress

The percentageOfUnitsVested field updates as vestings occur. Poll periodically to track progress.

Termination

Immediate Termination

Terminates the grant and recalculates vestings — only tokens vested before the termination date are retained.

Future Termination

Set a termination date in the future. The grant remains active until that date.

Bulk Termination (Employee Departure)

Terminate all grants when an employee leaves:
Or terminate specific grants only:

Reverting a Termination

Made a mistake? Revert a termination to restore the grant and regenerate future vestings.

Single Grant

Bulk Revert

Reverting a termination regenerates all future vestings from the original schedule. Any settlements or distributions that were already processed for the terminated vestings are not affected.

Edge Cases

Grant with zero token amount

Fiat-only grants have grantAmount: 0. The grantAmountInFiat field holds the fiat value.

Multiple grants per employee

An employee can have multiple independent grants, each with its own vesting schedule. Use externalEmployeeID or roleInOrgID to find all grants for an employee.

Terminated then reverted

When a grant is reverted, it returns to ACCEPTED with the original vesting schedule fully restored. The termination is as if it never happened.

Future termination then reverted

A MARKED_FOR_FUTURE_TERMINATION grant can be reverted before the termination date arrives. It returns to ACCEPTED immediately.

Polling Strategy

Since webhooks are not yet available, poll for status changes: