Create options

Grants options to a stakeholder from an equity plan.

POST /v1/captable/options

Addresshttps://api.hanzo.ai/v1/captable/options
MethodPOST
Operationpost_captable_options
AuthAuthorization: Bearer $HANZO_API_KEY

Grants options to a stakeholder from an equity plan.

Request

15 fields, body application/json (required).

FieldInTypeRequiredDescription
boardApprovalDatebodyany—BoardApprovalDate is when the board approved the grant, YYYY-MM-DD.
cliffYearsbodyany—CliffYears is how long before ANY of the grant vests.
equityPlanIdbodyany—EquityPlanID is the plan the options come from.
exercisePricebodyany—ExercisePrice is the strike price per share, in the company's currency.
expirationDatebodyany—ExpirationDate is when unexercised options lapse, YYYY-MM-DD.
grantIdbodyany—GrantID is the grant's identifier.
issueDatebodyany—IssueDate is when the grant was made, YYYY-MM-DD.
notesbodyany—Notes is a free-text note kept with the grant.
quantitybodyany—Quantity is how many options to grant.
rule144Datebodyany—Rule144Date is when the Rule 144 holding period starts, YYYY-MM-DD.
stakeholderIdbodyany—StakeholderID is who receives the grant.
statusbodyany—Status is DRAFT, ACTIVE, EXERCISED, EXPIRED or CANCELLED.
typebodyany—Type is ISO, NSO or RSU.
vestingStartDatebodyany—VestingStartDate is when vesting begins, YYYY-MM-DD.
vestingYearsbodyany—VestingYears is the total vesting period.

Response

StatusBodyMeaning
201captable.captableCreatedcreated
defaultproblem-detailsrefused

201 body — 3 fields.

FieldInTypeAlwaysDescription
idbodystring—ID is the created row's id.
messagebodystring—Message is the human sentence the cap table wrote, e.g. "Share issued".
successbodyboolean—Success is true when the row was written.

Failure carries the platform error shape — see Errors.

Examples

hanzo captable options create
import { Configuration, CaptableApi } from 'hanzoai';

const api = new CaptableApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postCaptableOptions({ boardApprovalDate: "<boardApprovalDate>", cliffYears: "<cliffYears>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import CaptableApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = CaptableApi(client).post_captable_options(board_approval_date="<boardApprovalDate>", cliff_years="<cliffYears>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.CaptableAPI.PostCaptableOptions(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, captable_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = captable_api::post_captable_options(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.CaptableApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new CaptableApi(client).postCaptableOptions();
curl -X POST https://api.hanzo.ai/v1/captable/options \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "boardApprovalDate": "<boardApprovalDate>",
       "cliffYears": "<cliffYears>"
     }'

MCP reaches captable through the captable tool, which names its 30 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_captable_classes"
         }
       }
     }'

Captable API · All Hanzo APIs · Interactive reference

Was this page useful?