Create convertibles

Records a convertible note.

POST /v1/captable/convertibles

Addresshttps://api.hanzo.ai/v1/captable/convertibles
MethodPOST
Operationpost_captable_convertibles
AuthAuthorization: Bearer $HANZO_API_KEY

Records a convertible note.

Request

11 fields, body application/json (required).

FieldInTypeRequiredDescription
additionalTermsbodyany—AdditionalTerms is free text for anything the fields above do not carry.
boardApprovalDatebodyany—BoardApprovalDate is when the board approved it, YYYY-MM-DD.
capitalbodyany—Capital is the principal lent, in the company's currency.
conversionCapbodyany—ConversionCap is the valuation the note converts at, at most.
discountRatebodyany—DiscountRate is the discount to the next round's price, as a percentage.
interestRatebodyany—InterestRate is the annual interest the principal accrues, as a percentage.
issueDatebodyany—IssueDate is when the note was issued, YYYY-MM-DD.
publicIdbodyany—PublicID is the note's identifier.
stakeholderIdbodyany—StakeholderID is the lender.
statusbodyany—Status is DRAFT, ACTIVE, PENDING, EXPIRED or CANCELLED.
typebodyany—Type is CCD, OCD or NOTE.

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

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

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

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?