Create plans

Opens an equity plan that options are granted from.

POST /v1/captable/plans

Addresshttps://api.hanzo.ai/v1/captable/plans
MethodPOST
Operationpost_captable_plans
AuthAuthorization: Bearer $HANZO_API_KEY

Opens an equity plan that options are granted from.

Request

7 fields, body application/json (required).

FieldInTypeRequiredDescription
boardApprovalDatebodyany—BoardApprovalDate is when the board adopted the plan, YYYY-MM-DD.
commentsbodyany—Comments is a free-text note kept with the plan.
defaultCancellatonBehaviorbodyany—DefaultCancellatonBehavior is what happens to cancelled grants: RETIRE, RETURN_TO_POOL, HOLD_AS_CAPITAL_STOCK or DEFINED_PER_PLAN_SECURITY.
initialSharesReservedbodyany—InitialSharesReserved is how many shares the plan may grant.
namebodyany—Name is the plan's name, e.g. "2026 Stock Option Plan".
planEffectiveDatebodyany—PlanEffectiveDate is when the plan takes effect, YYYY-MM-DD.
shareClassIdbodyany—ShareClassID is the class the plan grants from.

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 plans create
import { Configuration, CaptableApi } from 'hanzoai';

const api = new CaptableApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postCaptablePlans({ boardApprovalDate: "<boardApprovalDate>", comments: "<comments>" });
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_plans(board_approval_date="<boardApprovalDate>", comments="<comments>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.CaptableAPI.PostCaptablePlans(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_plans(&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).postCaptablePlans();
curl -X POST https://api.hanzo.ai/v1/captable/plans \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "boardApprovalDate": "<boardApprovalDate>",
       "comments": "<comments>"
     }'

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?