{"openapi":"3.1.0","info":{"title":"Capable REST API","version":"1.0.0","description":"Read and write your company's cap table. Scopes: captable:read, stakeholders:read, stakeholders:write, securities:read, securities:write, documents:read. Docs: https://capable.so/docs/api","contact":{"email":"support@capable.so"}},"servers":[{"url":"https://capable.so/api/v1"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key from Settings → Integrations, starting with cap_."}}},"security":[{"bearerAuth":[]}],"paths":{"/company":{"get":{"operationId":"company","summary":"Get company totals","description":"Company-wide cap table totals as of today: shares, options, the pool, fully diluted shares and SAFE money.\n\nRequired scope: `captable:read`. Docs: https://capable.so/docs/api/company","tags":["Company"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"The company's id and its totals as of today.","content":{"application/json":{"schema":{"type":"object","properties":{"companyId":{"type":"string","description":"The company the key belongs to."},"asOf":{"type":"string","format":"date","description":"The date the totals are computed for: today."},"totals":{"type":"object","properties":{"outstandingShares":{"type":"number","description":"Issued shares outstanding, every class."},"options":{"type":"number","description":"Options outstanding."},"rsus":{"type":"number","description":"RSUs outstanding."},"warrants":{"type":"number","description":"Warrants outstanding."},"availablePool":{"type":"number","description":"Shares still available to grant across equity plans."},"fullyDiluted":{"type":"number","description":"Shares, options, RSUs, warrants and the available pool together."},"safePrincipal":{"type":"number","description":"Outstanding SAFE investment, in US dollars."},"notePrincipal":{"type":"number","description":"Outstanding convertible note principal, in US dollars."},"capitalContributed":{"type":"number","description":"Capital paid in for shares and convertibles, in US dollars."},"stakeholdersWithSecurities":{"type":"number","description":"Stakeholders who hold at least one outstanding security."}},"required":[],"description":"Company-wide totals as of the date."}},"required":[]},"example":{"companyId":"org_northwind8k2","asOf":"2026-11-05","totals":{"outstandingShares":9500000,"options":1015000,"rsus":0,"warrants":0,"availablePool":985000,"fullyDiluted":11500000,"safePrincipal":1250000,"notePrincipal":0,"capitalContributed":1252850,"stakeholdersWithSecurities":18}}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the captable:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}},"/cap-table":{"get":{"operationId":"capTable","summary":"Get the cap table","description":"Fully diluted ownership by stakeholder on any date, with share class and equity plan totals.\n\nRequired scope: `captable:read`. Docs: https://capable.so/docs/api/cap-table","tags":["Company"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"asOf","in":"query","required":false,"description":"Show the cap table as it stood on this date, YYYY-MM-DD. Leave it out, or send another format, for today.","schema":{"type":"string","format":"date","description":""}}],"responses":{"200":{"description":"One row per stakeholder with a holding on the date, plus class and plan totals.","content":{"application/json":{"schema":{"type":"object","properties":{"asOf":{"type":"string","format":"date","description":"The date of the cap table."},"totals":{"type":"object","properties":{"outstandingShares":{"type":"number","description":"Issued shares outstanding, every class."},"options":{"type":"number","description":"Options outstanding."},"rsus":{"type":"number","description":"RSUs outstanding."},"warrants":{"type":"number","description":"Warrants outstanding."},"availablePool":{"type":"number","description":"Shares still available to grant across equity plans."},"fullyDiluted":{"type":"number","description":"Shares, options, RSUs, warrants and the available pool together."},"safePrincipal":{"type":"number","description":"Outstanding SAFE investment, in US dollars."},"notePrincipal":{"type":"number","description":"Outstanding convertible note principal, in US dollars."},"capitalContributed":{"type":"number","description":"Capital paid in for shares and convertibles, in US dollars."},"stakeholdersWithSecurities":{"type":"number","description":"Stakeholders who hold at least one outstanding security."}},"required":[],"description":"Company-wide totals as of the date."},"rows":{"type":"array","items":{"type":"object","properties":{"stakeholderId":{"type":"string","description":"The stakeholder."},"name":{"type":"string","description":"Their name."},"relationship":{"type":"string","enum":["founder","employee","former_employee","investor","advisor","consultant","board_member","other"],"description":"How they relate to the company."},"shares":{"type":"number","description":"Shares held, every class."},"options":{"type":"number","description":"Options outstanding."},"rsus":{"type":"number","description":"RSUs outstanding."},"warrants":{"type":"number","description":"Warrants outstanding."},"fullyDiluted":{"type":"number","description":"Their fully diluted shares."},"fullyDilutedPercent":{"type":"number","description":"Their share of the fully diluted total, from 0 to 100."},"vested":{"type":"number","description":"Vested quantity on the date."},"unvested":{"type":"number","description":"Unvested quantity on the date."},"byClass":{"type":"object","additionalProperties":true,"description":"Shares held per share class, keyed by share class id."}},"required":[]},"description":"One row per stakeholder."},"shareClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Share class id."},"name":{"type":"string","description":"Name, such as Series Seed Preferred."},"type":{"type":"string","enum":["common","preferred"],"description":"Common or preferred."},"outstanding":{"type":"number","description":"Shares outstanding in the class."},"authorized":{"type":["number","null"],"description":"Shares authorized, when on record."}},"required":[]},"description":"Totals per share class."},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Equity plan id."},"name":{"type":"string","description":"Plan name."},"size":{"type":"number","description":"Shares reserved for the plan."},"outstanding":{"type":"number","description":"Awards outstanding from the plan."},"available":{"type":"number","description":"Shares still available to grant."}},"required":[]},"description":"Totals per equity plan."}},"required":[]},"example":{"asOf":"2026-06-30","totals":{"outstandingShares":9500000,"options":1015000,"rsus":0,"warrants":0,"availablePool":985000,"fullyDiluted":11500000,"safePrincipal":1250000,"notePrincipal":0,"capitalContributed":1252850,"stakeholdersWithSecurities":18},"rows":[{"stakeholderId":"stk_9d1rfoundr01","name":"Maya Chen","relationship":"founder","shares":4500000,"options":0,"rsus":0,"warrants":0,"fullyDiluted":4500000,"fullyDilutedPercent":39.13,"vested":3375000,"unvested":1125000,"byClass":{"cls_common01x9":4500000}},{"stakeholderId":"stk_4m8q2xw7ka1p","name":"Priya Raman","relationship":"employee","shares":0,"options":48000,"rsus":0,"warrants":0,"fullyDiluted":48000,"fullyDilutedPercent":0.42,"vested":16000,"unvested":32000,"byClass":{}}],"shareClasses":[{"id":"cls_common01x9","name":"Common Stock","type":"common","outstanding":9000000,"authorized":15000000},{"id":"cls_seedpref02","name":"Series Seed Preferred","type":"preferred","outstanding":500000,"authorized":500000}],"plans":[{"id":"pln_2024plan7b","name":"2024 Equity Incentive Plan","size":2000000,"outstanding":1015000,"available":985000}]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the captable:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}},"/stakeholders":{"get":{"operationId":"listStakeholders","summary":"List stakeholders","description":"Every person and entity on the register, with relationship, status and your own external id.\n\nRequired scope: `stakeholders:read`. Docs: https://capable.so/docs/api/list-stakeholders","tags":["Stakeholders"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Every stakeholder in one response, under data.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id."},"name":{"type":"string","description":"Full name of the person or the institution."},"email":{"type":["string","null"],"description":"Email address, lower case."},"type":{"type":"string","enum":["individual","institution"],"description":"A person or an entity."},"relationship":{"type":"string","enum":["founder","employee","former_employee","investor","advisor","consultant","board_member","other"],"description":"How the stakeholder relates to the company."},"relationshipLabel":{"type":"string","description":"The relationship as shown in the app, such as Former employee."},"title":{"type":["string","null"],"description":"Job title."},"status":{"type":"string","enum":["active","terminated"],"description":"Terminated once a termination is recorded."},"startDate":{"type":["string","null"],"format":"date","description":"Start date, YYYY-MM-DD."},"terminationDate":{"type":["string","null"],"format":"date","description":"Termination date, YYYY-MM-DD."},"lastDateToExercise":{"type":["string","null"],"format":"date","description":"Last day to exercise vested options after termination."},"externalId":{"type":["string","null"],"description":"Your own id for this person, such as an HRIS employee id."},"createdAt":{"type":"string","format":"date-time","description":"When the record was created, ISO 8601 in UTC."}},"required":[]},"description":"The stakeholders."}},"required":[]},"example":{"data":[{"id":"stk_4m8q2xw7ka1p","name":"Priya Raman","email":"priya@northwind.ai","type":"individual","relationship":"employee","relationshipLabel":"Employee","title":"Founding engineer","status":"active","startDate":"2025-03-03","terminationDate":null,"lastDateToExercise":null,"externalId":"rippling-0142","createdAt":"2025-03-04T17:21:09.000Z"}]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the stakeholders:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}},"post":{"operationId":"createStakeholder","summary":"Create a stakeholder","description":"Add a person or entity to the register, for example a new hire from your HRIS.\n\nRequired scope: `stakeholders:write`. Docs: https://capable.so/docs/api/create-stakeholder","tags":["Stakeholders"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"201":{"description":"The new stakeholder's id.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The new stakeholder's id."}},"required":[]},"example":{"id":"stk_b2j6nq0ve8rc"}}}},"400":{"description":"The body is not JSON.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the stakeholders:write scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"422":{"description":"A field is missing or invalid. The message names each field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Full name of the person or the institution."},"email":{"type":"string","description":"Email address. Used later for portal invites and e-signature."},"type":{"type":"string","enum":["individual","institution"],"default":"individual","description":"A person or an entity."},"relationship":{"type":"string","enum":["founder","employee","former_employee","investor","advisor","consultant","board_member","other"],"default":"employee","description":"How they relate to the company."},"title":{"type":"string","description":"Job title."},"startDate":{"type":"string","format":"date","description":"Start date, YYYY-MM-DD."},"externalId":{"type":"string","description":"Your own id for this person, such as an HRIS employee id."}},"required":["name"]},"example":{"name":"Jordan Lee","email":"jordan@northwind.ai","relationship":"employee","title":"Product designer","startDate":"2026-11-17","externalId":"rippling-0187"}}}}}},"/stakeholders/{id}":{"get":{"operationId":"getStakeholder","summary":"Get a stakeholder","description":"One stakeholder by id.\n\nRequired scope: `stakeholders:read`. Docs: https://capable.so/docs/api/get-stakeholder","tags":["Stakeholders"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The stakeholder's id, as returned by the list endpoint.","schema":{"type":"string"}}],"responses":{"200":{"description":"The stakeholder object itself, not wrapped in data.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique id."},"name":{"type":"string","description":"Full name of the person or the institution."},"email":{"type":["string","null"],"description":"Email address, lower case."},"type":{"type":"string","enum":["individual","institution"],"description":"A person or an entity."},"relationship":{"type":"string","enum":["founder","employee","former_employee","investor","advisor","consultant","board_member","other"],"description":"How the stakeholder relates to the company."},"relationshipLabel":{"type":"string","description":"The relationship as shown in the app, such as Former employee."},"title":{"type":["string","null"],"description":"Job title."},"status":{"type":"string","enum":["active","terminated"],"description":"Terminated once a termination is recorded."},"startDate":{"type":["string","null"],"format":"date","description":"Start date, YYYY-MM-DD."},"terminationDate":{"type":["string","null"],"format":"date","description":"Termination date, YYYY-MM-DD."},"lastDateToExercise":{"type":["string","null"],"format":"date","description":"Last day to exercise vested options after termination."},"externalId":{"type":["string","null"],"description":"Your own id for this person, such as an HRIS employee id."},"createdAt":{"type":"string","format":"date-time","description":"When the record was created, ISO 8601 in UTC."}},"required":[]},"example":{"id":"stk_4m8q2xw7ka1p","name":"Priya Raman","email":"priya@northwind.ai","type":"individual","relationship":"employee","relationshipLabel":"Employee","title":"Founding engineer","status":"active","startDate":"2025-03-03","terminationDate":null,"lastDateToExercise":null,"externalId":"rippling-0142","createdAt":"2025-03-04T17:21:09.000Z"}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the stakeholders:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"404":{"description":"No stakeholder with this id belongs to the company.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}},"/securities":{"get":{"operationId":"listSecurities","summary":"List securities","description":"Every share, option, RSA, RSU, SAFE, note and warrant, with vesting and outstanding amounts computed for today.\n\nRequired scope: `securities:read`. Docs: https://capable.so/docs/api/list-securities","tags":["Securities"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"type","in":"query","required":false,"description":"Return only securities of this type.","schema":{"type":"string","enum":["share","option","rsa","rsu","safe","note","warrant","unit","profits_interest","phantom"],"description":""}}],"responses":{"200":{"description":"Every security in one response, under data. Drafts and cancelled securities are included; filter on status.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id."},"certificateId":{"type":"string","description":"Certificate or grant id, such as CS-12 or OPT-9."},"type":{"type":"string","enum":["share","option","rsa","rsu","safe","note","warrant","unit","profits_interest","phantom"],"description":"Kind of security."},"status":{"type":"string","enum":["draft","outstanding","cancelled","exercised","converted","transferred","repurchased","settled","expired"],"description":"Draft securities are not on the cap table until they are published in the app."},"stakeholderId":{"type":"string","description":"The holder."},"shareClassId":{"type":["string","null"],"description":"Share class the security is in or converts into."},"equityPlanId":{"type":["string","null"],"description":"Equity plan an option, RSA or RSU was granted from."},"quantity":{"type":"number","description":"Shares or units granted. For a SAFE or note, the principal in US dollars."},"outstanding":{"type":"number","description":"Quantity still outstanding today, after exercises, cancellations and repurchases."},"exercised":{"type":"number","description":"Quantity exercised so far."},"cancelled":{"type":"number","description":"Quantity cancelled so far."},"vested":{"type":["number","null"],"description":"Quantity vested today. Null for SAFEs and notes."},"issueDate":{"type":"string","format":"date","description":"Issue or grant date, YYYY-MM-DD."},"boardApprovalDate":{"type":["string","null"],"format":"date","description":"Date the board approved it, when on record."},"pricePerShare":{"type":["number","null"],"description":"Purchase price per share, in US dollars."},"exercisePrice":{"type":["number","null"],"description":"Exercise or strike price per share, in US dollars."},"optionType":{"type":["string","null"],"enum":["iso","nso","iso_nso",null],"description":"Tax type of an option. iso_nso is a grant split at the $100,000 ISO limit."},"expirationDate":{"type":["string","null"],"format":"date","description":"Date an option or warrant expires."},"vesting":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Schedule id."},"name":{"type":"string","description":"Schedule name, such as 4-year monthly, 1-year cliff."},"description":{"type":"string","description":"The schedule in words."},"commencementDate":{"type":["string","null"],"format":"date","description":"Vesting start date, YYYY-MM-DD."}},"required":[],"description":"The vesting schedule, when the security has one."},"safeType":{"type":["string","null"],"enum":["post_money","pre_money","mfn","uncapped",null],"description":"Kind of SAFE."},"valuationCap":{"type":["number","null"],"description":"SAFE or note valuation cap, in US dollars."},"discountPercent":{"type":["number","null"],"description":"SAFE or note discount, as a percentage such as 20."},"interestRate":{"type":["number","null"],"description":"Convertible note interest rate, as a percentage."},"maturityDate":{"type":["string","null"],"format":"date","description":"Convertible note maturity date."}},"required":[]},"description":"The securities."}},"required":[]},"example":{"data":[{"id":"sec_7tq0c2n5vz3d","certificateId":"OPT-9","type":"option","status":"outstanding","stakeholderId":"stk_4m8q2xw7ka1p","shareClassId":"cls_common01x9","equityPlanId":"pln_2024plan7b","quantity":48000,"outstanding":48000,"exercised":0,"cancelled":0,"vested":19000,"issueDate":"2025-03-20","boardApprovalDate":"2025-03-18","pricePerShare":null,"exercisePrice":0.42,"optionType":"iso","expirationDate":"2035-03-20","vesting":{"id":"vst_4y1c_month","name":"4-year monthly, 1-year cliff","description":"25% after 12 months, then 1/48 monthly over the next 36 months","commencementDate":"2025-03-03"},"safeType":null,"valuationCap":null,"discountPercent":null,"interestRate":null,"maturityDate":null}]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the securities:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}},"post":{"operationId":"createSecurity","summary":"Create a security","description":"Record a grant or issuance. It is a draft unless you mark it outstanding.\n\nRequired scope: `securities:write`. Docs: https://capable.so/docs/api/create-security","tags":["Securities"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"201":{"description":"The new security's id, its certificate id and its status.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"The new security's id."},"certificateId":{"type":"string","description":"The certificate id given or assigned."},"status":{"type":"string","enum":["draft","outstanding"],"description":"The status it was created with."}},"required":[]},"example":{"id":"sec_m3w8yk1t0hxa","certificateId":"OPT-10","status":"draft"}}}},"400":{"description":"The body is not JSON.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the securities:write scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"422":{"description":"A field is missing or invalid, or stakeholderId is not a stakeholder of the company.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["share","option","rsa","rsu","safe","note","warrant"],"description":"Kind of security."},"stakeholderId":{"type":"string","description":"The holder. Create them first with POST /stakeholders."},"quantity":{"type":"number","description":"Shares or units, greater than 0. For a SAFE or note, the principal in US dollars."},"issueDate":{"type":"string","format":"date","description":"Issue or grant date, YYYY-MM-DD."},"status":{"type":"string","enum":["draft","outstanding"],"default":"draft","description":"draft lands in Drafts for an admin to review and publish. outstanding records it on the cap table straight away."},"shareClassId":{"type":"string","description":"Share class. For plan awards it defaults to the plan's class."},"equityPlanId":{"type":"string","description":"Equity plan for an option, RSA or RSU."},"vestingScheduleId":{"type":"string","description":"Vesting schedule, from the schedules set up in the app."},"vestingCommencementDate":{"type":"string","format":"date","description":"Vesting start date, YYYY-MM-DD. Defaults to the issue date when a vesting schedule is given."},"exercisePrice":{"type":"number","description":"Exercise price per share for an option or warrant, in US dollars."},"pricePerShare":{"type":"number","description":"Purchase price per share for shares or an RSA, in US dollars."},"optionType":{"type":"string","enum":["iso","nso","iso_nso"],"description":"Tax type of an option."},"certificateId":{"type":"string","description":"Your own certificate id. Leave it out and the next id for the class or plan prefix is assigned, such as OPT-10."},"valuationCap":{"type":"number","description":"SAFE or note valuation cap, in US dollars."},"discountPercent":{"type":"number","description":"SAFE or note discount, as a percentage such as 20."},"safeType":{"type":"string","enum":["post_money","pre_money","mfn","uncapped"],"description":"Kind of SAFE."},"notes":{"type":"string","description":"A note kept on the security."}},"required":["type","stakeholderId","quantity","issueDate"]},"example":{"type":"option","stakeholderId":"stk_b2j6nq0ve8rc","quantity":40000,"issueDate":"2026-11-17","equityPlanId":"pln_2024plan7b","vestingScheduleId":"vst_4y1c_month","exercisePrice":0.42,"optionType":"iso"}}}}}},"/securities/{id}":{"get":{"operationId":"getSecurity","summary":"Get a security","description":"One security by id, with vesting computed for today.\n\nRequired scope: `securities:read`. Docs: https://capable.so/docs/api/get-security","tags":["Securities"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"The security's id, as returned by the list endpoint.","schema":{"type":"string"}}],"responses":{"200":{"description":"The security object itself, not wrapped in data.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique id."},"certificateId":{"type":"string","description":"Certificate or grant id, such as CS-12 or OPT-9."},"type":{"type":"string","enum":["share","option","rsa","rsu","safe","note","warrant","unit","profits_interest","phantom"],"description":"Kind of security."},"status":{"type":"string","enum":["draft","outstanding","cancelled","exercised","converted","transferred","repurchased","settled","expired"],"description":"Draft securities are not on the cap table until they are published in the app."},"stakeholderId":{"type":"string","description":"The holder."},"shareClassId":{"type":["string","null"],"description":"Share class the security is in or converts into."},"equityPlanId":{"type":["string","null"],"description":"Equity plan an option, RSA or RSU was granted from."},"quantity":{"type":"number","description":"Shares or units granted. For a SAFE or note, the principal in US dollars."},"outstanding":{"type":"number","description":"Quantity still outstanding today, after exercises, cancellations and repurchases."},"exercised":{"type":"number","description":"Quantity exercised so far."},"cancelled":{"type":"number","description":"Quantity cancelled so far."},"vested":{"type":["number","null"],"description":"Quantity vested today. Null for SAFEs and notes."},"issueDate":{"type":"string","format":"date","description":"Issue or grant date, YYYY-MM-DD."},"boardApprovalDate":{"type":["string","null"],"format":"date","description":"Date the board approved it, when on record."},"pricePerShare":{"type":["number","null"],"description":"Purchase price per share, in US dollars."},"exercisePrice":{"type":["number","null"],"description":"Exercise or strike price per share, in US dollars."},"optionType":{"type":["string","null"],"enum":["iso","nso","iso_nso",null],"description":"Tax type of an option. iso_nso is a grant split at the $100,000 ISO limit."},"expirationDate":{"type":["string","null"],"format":"date","description":"Date an option or warrant expires."},"vesting":{"type":["object","null"],"properties":{"id":{"type":"string","description":"Schedule id."},"name":{"type":"string","description":"Schedule name, such as 4-year monthly, 1-year cliff."},"description":{"type":"string","description":"The schedule in words."},"commencementDate":{"type":["string","null"],"format":"date","description":"Vesting start date, YYYY-MM-DD."}},"required":[],"description":"The vesting schedule, when the security has one."},"safeType":{"type":["string","null"],"enum":["post_money","pre_money","mfn","uncapped",null],"description":"Kind of SAFE."},"valuationCap":{"type":["number","null"],"description":"SAFE or note valuation cap, in US dollars."},"discountPercent":{"type":["number","null"],"description":"SAFE or note discount, as a percentage such as 20."},"interestRate":{"type":["number","null"],"description":"Convertible note interest rate, as a percentage."},"maturityDate":{"type":["string","null"],"format":"date","description":"Convertible note maturity date."}},"required":[]},"example":{"id":"sec_7tq0c2n5vz3d","certificateId":"OPT-9","type":"option","status":"outstanding","stakeholderId":"stk_4m8q2xw7ka1p","shareClassId":"cls_common01x9","equityPlanId":"pln_2024plan7b","quantity":48000,"outstanding":48000,"exercised":0,"cancelled":0,"vested":19000,"issueDate":"2025-03-20","boardApprovalDate":"2025-03-18","pricePerShare":null,"exercisePrice":0.42,"optionType":"iso","expirationDate":"2035-03-20","vesting":{"id":"vst_4y1c_month","name":"4-year monthly, 1-year cliff","description":"25% after 12 months, then 1/48 monthly over the next 36 months","commencementDate":"2025-03-03"},"safeType":null,"valuationCap":null,"discountPercent":null,"interestRate":null,"maturityDate":null}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the securities:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"404":{"description":"No security with this id belongs to the company.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}},"/transactions":{"get":{"operationId":"listTransactions","summary":"List transactions","description":"The full ledger: issuances, exercises, transfers, conversions, cancellations, repurchases and vesting changes.\n\nRequired scope: `securities:read`. Docs: https://capable.so/docs/api/list-transactions","tags":["Records"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Every transaction in one response, under data.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id."},"type":{"type":"string","enum":["issue","cancel","transfer","exercise","convert","repurchase","forfeit","settle","terminate","modify","reprice","reclassify","split","vesting_pause","vesting_resume","vesting_stop","accelerate"],"description":"What happened."},"date":{"type":"string","format":"date","description":"Effective date, YYYY-MM-DD."},"securityId":{"type":["string","null"],"description":"The security it applies to."},"quantity":{"type":["number","null"],"description":"Quantity involved."},"pricePerShare":{"type":["number","null"],"description":"Price per share, in US dollars."},"amount":{"type":["number","null"],"description":"Total amount, in US dollars."},"reason":{"type":["string","null"],"description":"The reason recorded with it."},"resultingSecurityId":{"type":["string","null"],"description":"The security it produced, such as the shares from an exercise or a conversion."},"undone":{"type":"boolean","description":"True if the transaction was undone in the app."},"createdAt":{"type":"string","format":"date-time","description":"When it was recorded, ISO 8601 in UTC."}},"required":[]},"description":"The transactions."}},"required":[]},"example":{"data":[{"id":"tx_r5k2m8w1qz0e","type":"exercise","date":"2026-02-16","securityId":"sec_1v9ha3opt004","quantity":2000,"pricePerShare":0.12,"amount":240,"reason":null,"resultingSecurityId":"sec_5c0x7cs00031","undone":false,"createdAt":"2026-02-16T19:02:44.000Z"}]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the securities:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}},"/documents":{"get":{"operationId":"listDocuments","summary":"List documents","description":"The data room index: every stored document, its folder and the security or stakeholder it belongs to.\n\nRequired scope: `documents:read`. Docs: https://capable.so/docs/api/list-documents","tags":["Records"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Document metadata under data. Files themselves are downloaded in the app.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique id."},"name":{"type":"string","description":"File name."},"folder":{"type":["string","null"],"description":"Data room folder."},"mimeType":{"type":["string","null"],"description":"File type, such as application/pdf."},"size":{"type":["number","null"],"description":"Size in bytes."},"securityId":{"type":["string","null"],"description":"The security it is attached to."},"stakeholderId":{"type":["string","null"],"description":"The stakeholder it is attached to."},"createdAt":{"type":"string","format":"date-time","description":"When it was added, ISO 8601 in UTC."}},"required":[]},"description":"The documents."}},"required":[]},"example":{"data":[{"id":"doc_e1n4s7p2l9xa","name":"Stock Option Grant - Priya Raman - OPT-9.pdf","folder":"Equity plans","mimeType":"application/pdf","size":184233,"securityId":"sec_7tq0c2n5vz3d","stakeholderId":"stk_4m8q2xw7ka1p","createdAt":"2025-03-21T00:14:02.000Z"}]}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the documents:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}},"/ocf":{"get":{"operationId":"ocf","summary":"Export Open Cap Table Format","description":"The whole cap table as an Open Cap Table Format (OCF 1.1.0) bundle, ready for another system or your own archive.\n\nRequired scope: `captable:read`. Docs: https://capable.so/docs/api/ocf","tags":["Records"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"One JSON object keyed by OCF file name. Each file holds its OCF file_type and items.","content":{"application/json":{"schema":{"type":"object","properties":{"Manifest.ocf.json":{"type":"object","additionalProperties":true,"description":"The OCF manifest: ocf_version 1.1.0, the issuer and the list of files."},"issuers.ocf.json":{"type":"object","additionalProperties":true,"description":"The company."},"stakeholders.ocf.json":{"type":"object","additionalProperties":true,"description":"Every stakeholder."},"stock_classes.ocf.json":{"type":"object","additionalProperties":true,"description":"Share classes with their preferred terms."},"stock_plans.ocf.json":{"type":"object","additionalProperties":true,"description":"Equity plans."},"vesting_terms.ocf.json":{"type":"object","additionalProperties":true,"description":"Vesting schedules."},"transactions.ocf.json":{"type":"object","additionalProperties":true,"description":"Issuances, exercises, cancellations and the rest of the ledger."},"valuations.ocf.json":{"type":"object","additionalProperties":true,"description":"Present for completeness. Its items are empty; read 409A valuations in the app."}},"required":[]},"example":{"Manifest.ocf.json":{"file_type":"OCF_MANIFEST_FILE","ocf_version":"1.1.0","issuer":{"id":"org_northwind8k2","object_type":"ISSUER","legal_name":"Northwind AI, Inc."}},"stakeholders.ocf.json":{"file_type":"OCF_STAKEHOLDERS_FILE","items":["…"]},"transactions.ocf.json":{"file_type":"OCF_TRANSACTIONS_FILE","items":["…"]}}}}},"401":{"description":"The key is missing, invalid or revoked, or its creator lost access.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"402":{"description":"The company has no active plan in good standing: its trial ended without one, a payment has failed for over 21 days, or its subscription is paused or has ended.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"403":{"description":"The key does not have the captable:read scope.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}},"429":{"description":"The key went over its rate limit. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}},"required":["error"]}}}}}}}}}