Hemrock Cap Table API

The Cap Table API from Hemrock — 2 operation(s) for cap table.

GitHub OpenAPI

Operations 2

POST /cap-table/to-waterfall Map a retained cap-table result with explicit economic terms; zero calculations #
POST /cap-table/compute Compute a cap table #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hemrock-com:hemrock-com-cap-table-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hemrock-com-cap-table-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hemrock Com Cap Table API
  version: 0.1.0
  description: 'Operations tagged Cap Table across 2 of this provider''s published API definitions: hemrock-com-openapi.json, hemrock_com_openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.hemrock.com/v1
  description: Production
security:
- bearerAuth: []
tags:
- name: Cap Table
paths:
  /cap-table/to-waterfall:
    post:
      summary: Map a retained cap-table result with explicit economic terms; zero calculations
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                requestId:
                  type: string
                  format: uuid
                terms:
                  type: object
                  properties:
                    preferred:
                      type: object
                      additionalProperties:
                        type: object
                        properties:
                          multiple:
                            type: number
                            minimum: 0
                            maximum: 1000000000000000
                          participation:
                            type: string
                            enum:
                            - none
                            - full
                            - capped
                          participationCap:
                            type: number
                            minimum: 0
                            maximum: 1000000000000000
                            exclusiveMinimum: 0
                          seniority:
                            type: number
                          investedByHolder:
                            type: object
                            additionalProperties:
                              type: number
                              minimum: 0
                              maximum: 1000000000000000
                          dividendRate:
                            type: number
                            const: 0
                        required:
                        - multiple
                        - participation
                        - seniority
                        - investedByHolder
                        - dividendRate
                        additionalProperties: false
                    optionStrikes:
                      type: object
                      additionalProperties:
                        type: number
                        minimum: 0
                        maximum: 1000000000000000
                    optionVestedFractions:
                      type: object
                      additionalProperties:
                        type: number
                        minimum: 0
                        maximum: 1
                    debt:
                      type: number
                      minimum: 0
                      maximum: 1000000000000000
                    transactionExpenses:
                      type: number
                      minimum: 0
                      maximum: 1000000000000000
                    unissuedPoolTreatment:
                      type: string
                      const: cancel
                  required:
                  - preferred
                  - optionStrikes
                  - optionVestedFractions
                  - debt
                  - transactionExpenses
                  - unissuedPoolTreatment
                  additionalProperties: false
              required:
              - requestId
              - terms
              additionalProperties: false
              $schema: http://json-schema.org/draft-07/schema#
      responses:
        '200':
          description: Waterfall model and explicit assumptions
        '400':
          description: Unavailable result or unsupported terms
        '401':
          description: Authentication required
      tags:
      - Cap Table
      operationId: postCapTableToWaterfall
      x-operation-id-source: derived
    servers:
    - url: https://api.hemrock.com/v1
      description: Production
  /cap-table/compute:
    post:
      summary: Compute a cap table
      operationId: computeCapTable
      description: Fold a list of cap-table events into a sequence of snapshots and the final state. Stateless. Requires an active Cap Table & Exit Waterfall free allowance or paid compute period; exhausted free access returns 402.
      security:
      - bearerAuth: []
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        description: Retry key for one logical calculation. Reusing a key with a different payload returns 409.
        schema:
          type: string
          minLength: 1
          maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ComputeRequest'
            example:
              events:
              - type: common_issuance
                label: Founders
                grants:
                - id: founder
                  name: Founder
                  shares: 8000000
                  kind: founder
              - type: priced_round
                label: Seed
                preMoneyValuation: 6000000
                investments:
                - id: seed
                  name: Seed Fund
                  amount: 2000000
                pools:
                - pct: 0.1
                  mode: pre
      responses:
        '200':
          description: Computed cap table
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComputeResponse'
        '400':
          description: Validation failed (bad JSON or missing events array)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Cap Table entitlement required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Idempotency key was already used with a different payload
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Engine error (well-formed but invalid input)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded (paid quota exhaustion uses 403)
          headers:
            Retry-After:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Compute service temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Cap Table
    servers:
    - url: https://api.hemrock.com/v1
      description: Production
components:
  schemas:
    PricedRoundEvent:
      type: object
      description: 'A priced equity round: new money buys newly issued preferred.'
      required:
      - type
      - label
      - preMoneyValuation
      - investments
      properties:
        type:
          const: priced_round
        label:
          type: string
        preMoneyValuation:
          type: number
        investments:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - amount
            properties:
              id:
                type: string
              name:
                type: string
              amount:
                type: number
              antiDilution:
                enum:
                - weighted-average
                - full-ratchet
              antiDilutionMethod:
                enum:
                - conversion-ratio
                - new-shares
                description: Defaults to "conversion-ratio".
              proRata:
                type: boolean
                description: If true, amount is back-solved to hold pre-round ownership; match by id.
        pools:
          type: array
          description: Option pool top-ups for the round (preferred over the legacy targetPoolPct trio).
          items:
            type: object
            required:
            - mode
            properties:
              mode:
                enum:
                - pre
                - post
                description: '"pre" dilutes existing only; "post" dilutes new money too.'
              countMode:
                enum:
                - shares
                - percent
                description: Defaults to "percent".
              pct:
                type: number
                description: 0..1 of post-money fully diluted, when countMode="percent".
              shares:
                type: number
              label:
                type: string
              poolId:
                type: string
                description: Set to track this pool separately (its own cap-table row).
        targetPoolPct:
          type: number
          description: Legacy. Prefer pools[].
        poolMode:
          enum:
          - pre
          - post
          - custom
          description: Legacy. Prefer pools[].
        poolPostPct:
          type: number
          description: Legacy. Prefer pools[].
    OptionPoolEvent:
      type: object
      description: Create or expand an option pool (shares authorized, not granted).
      required:
      - type
      - label
      - shares
      properties:
        type:
          const: option_pool
        label:
          type: string
        id:
          type: string
          description: Pool id, so an option_grant can name which pool it draws from.
        countMode:
          enum:
          - shares
          - percent
          description: Defaults to "shares".
        shares:
          type: number
        targetPct:
          type: number
          description: 0..1 of post-event fully diluted, used when countMode="percent".
        strikePrice:
          type: number
    ConvertibleRoundEvent:
      type: object
      description: Issue SAFEs or notes; they convert to preferred at the next priced round.
      required:
      - type
      - label
      - convertibles
      properties:
        type:
          const: convertible_round
        label:
          type: string
        convertibles:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - kind
            - principal
            properties:
              id:
                type: string
              name:
                type: string
              kind:
                enum:
                - safe
                - note
              principal:
                type: number
              discount:
                type: number
                description: 0..1.
              valuationCap:
                type: number
              capType:
                enum:
                - pre-money
                - post-money
                - post-money-fixed
                - post-money-fixed-after
              mfn:
                type: boolean
              dilutionMode:
                enum:
                - existing-only
                - all
                description: Defaults to "existing-only".
              investmentDate:
                type: string
                description: ISO date. Notes only.
              conversionDate:
                type: string
                description: ISO date. Notes only.
              interestRate:
                type: number
                description: Annual fraction (0.05 = 5%). Notes only.
              accruedInterest:
                type: number
    WarrantRoundEvent:
      type: object
      description: Issue warrants (right to buy shares at a set price); counts toward fully diluted now.
      required:
      - type
      - label
      - warrants
      properties:
        type:
          const: warrant_round
        label:
          type: string
        warrants:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - purchaseClass
            - countMode
            properties:
              id:
                type: string
              name:
                type: string
              purchaseClass:
                enum:
                - common
                - preferred
              purchaseRound:
                type: string
                description: For a preferred warrant, the series it targets.
              purchasePrice:
                type: number
              priceFromRound:
                type: string
                description: Source round label to price off, when variable.
              priceDiscount:
                type: number
                description: 0..1 discount on the source round price.
              parValue:
                type: number
              countMode:
                enum:
                - shares
                - value
              shares:
                type: number
                description: When countMode="shares".
              totalValue:
                type: number
                description: 'When countMode="value": shares = totalValue / purchasePrice.'
    ManualIssuanceEvent:
      type: object
      description: 'Escape hatch: issue exact shares for custom arrangements.'
      required:
      - type
      - label
      - issuances
      properties:
        type:
          const: manual_issuance
        label:
          type: string
        issuances:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - kind
            - class
            - shares
            properties:
              id:
                type: string
              name:
                type: string
              kind:
                enum:
                - founder
                - employee
                - investor
                - pool
              class:
                enum:
                - common
                - preferred
                - option-pool
                - warrant
              countMode:
                enum:
                - shares
                - percent
                description: Defaults to "shares".
              shares:
                type: number
              targetPct:
                type: number
                description: 0..1, used when countMode="percent".
              pctBasis:
                enum:
                - fully-diluted
                - issued
                description: Defaults to "fully-diluted".
              issuePrice:
                type: number
    SecondarySaleEvent:
      type: object
      description: Transfer existing shares from one holder to another.
      required:
      - type
      - label
      - fromId
      - toId
      - toName
      - shares
      properties:
        type:
          const: secondary_sale
        label:
          type: string
        fromId:
          type: string
        toId:
          type: string
        toName:
          type: string
        shares:
          type: number
        class:
          enum:
          - common
          - preferred
          - option-pool
          - warrant
          description: Defaults to "common".
        round:
          type: string
          description: Which series the shares come from (e.g. "Series A").
    CommonIssuanceEvent:
      type: object
      description: Issue common stock (founders, employees).
      required:
      - type
      - label
      - grants
      properties:
        type:
          const: common_issuance
        label:
          type: string
        grants:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - kind
            - shares
            properties:
              id:
                type: string
              name:
                type: string
              kind:
                enum:
                - founder
                - employee
              shares:
                type: number
    ComputeRequest:
      type: object
      required:
      - events
      additionalProperties: false
      properties:
        events:
          type: array
          maxItems: 200
          items:
            oneOf:
            - $ref: '#/components/schemas/CommonIssuanceEvent'
            - $ref: '#/components/schemas/OptionPoolEvent'
            - $ref: '#/components/schemas/SecondarySaleEvent'
            - $ref: '#/components/schemas/OptionGrantEvent'
            - $ref: '#/components/schemas/ManualIssuanceEvent'
            - $ref: '#/components/schemas/ConvertibleRoundEvent'
            - $ref: '#/components/schemas/WarrantRoundEvent'
            - $ref: '#/components/schemas/PricedRoundEvent'
            discriminator:
              propertyName: type
              mapping:
                common_issuance: '#/components/schemas/CommonIssuanceEvent'
                option_pool: '#/components/schemas/OptionPoolEvent'
                secondary_sale: '#/components/schemas/SecondarySaleEvent'
                option_grant: '#/components/schemas/OptionGrantEvent'
                manual_issuance: '#/components/schemas/ManualIssuanceEvent'
                convertible_round: '#/components/schemas/ConvertibleRoundEvent'
                warrant_round: '#/components/schemas/WarrantRoundEvent'
                priced_round: '#/components/schemas/PricedRoundEvent'
            description: One cap-table event, discriminated by `type`. Pass events in chronological order.
    CapTableSnapshot:
      type: object
      required:
      - label
      - holdings
      - totalShares
      - ownership
      - outstandingConvertibles
      properties:
        label:
          type: string
        holdings:
          type: array
          items:
            type: object
        totalShares:
          type: number
        ownership:
          type: array
          items:
            type: object
        outstandingConvertibles:
          type: array
          items:
            type: object
        pricePerShare:
          type: number
        roundDetail:
          type: object
    ComputeResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            snapshots:
              type: array
              items:
                $ref: '#/components/schemas/CapTableSnapshot'
              description: One snapshot per event, in order.
            final:
              $ref: '#/components/schemas/CapTableSnapshot'
        meta:
          type: object
          properties:
            keyName:
              type: string
    OptionGrantEvent:
      type: object
      description: Grant options to people from one pool (fully-diluted-neutral).
      required:
      - type
      - label
      - grants
      properties:
        type:
          const: option_grant
        label:
          type: string
        poolId:
          type: string
          description: Pool id to grant from; omit to draw the common pool.
        grants:
          type: array
          items:
            type: object
            required:
            - id
            - name
            - shares
            properties:
              id:
                type: string
              name:
                type: string
              shares:
                type: number
    Error:
      type: object
      properties:
        error:
          type: object
          required:
          - code
          - message
          - retryable
          properties:
            code:
              type: string
              enum:
              - unauthorized
              - payment_required
              - validation_failed
              - engine_error
              - quota_exhausted
              - rate_limited
              - idempotency_conflict
              - service_unavailable
              - method_not_allowed
              - internal_error
            message:
              type: string
            retryable:
              type: boolean
            details: {}
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Your API key (`hk_live_…`), created in the Hemrock developer dashboard. Calls use that account’s product access: lifetime free credits or an active paid allowance.'
x-refined-from:
- hemrock-com-openapi.json


# --- truncated at 32 KB (75 KB total) ---
# Full source: https://artifacts.apis.io/hemrock-com/openapi/hemrock-com-cap-table-api-openapi.yml