Welcome to the new site. Problems, use store.hemrock.com
Developers

Hemrock API

The same engines that power the tools on hemrock.com, callable from your code, scripts, or agents via API and MCP.

Version 0.1.0 (v0.x). The wire format may change while the contract settles.

Authentication

Create a key under Settings → API keys. You see the raw token (hk_live_…) once. Send it on every request:

Authorization: Bearer hk_live_...

Each call runs against your account’s product entitlements. A valid key without the required product gets a 402. Treat a key like a password; revoke it from the same page if it leaks.

Base URL

https://api.hemrock.com/v1

Until the api.hemrock.com alias is live, the same routes are reachable on the main domain at https://www.hemrock.com/v1.

Models & pricing

ModelEndpointAccess
Cap Table/v1/cap-table/computeFrom $20 · Buy access
Exit Waterfall/v1/exit-waterfall/computeFrom $20 · Buy access
Fund Economics/v1/fund-economics/computeFree

Machine-readable at /api/v1/catalog. A gated call without access returns 402 with a checkoutUrl in the error details, so an agent can resolve the block and retry.

Quickstart

curl -X POST https://api.hemrock.com/v1/cap-table/compute \
  -H "Authorization: Bearer hk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      { "type": "common_issuance", "label": "Founders",
        "grants": [{ "id": "f", "name": "Founder", "shares": 8000000, "kind": "founder" }] }
    ]
  }'

Endpoints

post/cap-table/compute

Compute a cap table

Fold a list of cap-table events into a sequence of snapshots and the final state. Stateless. Requires the Cap Table & Exit Waterfall entitlement on the calling account (free with the product); a valid key without it returns 402.

Example request body
{
  "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"
        }
      ]
    }
  ]
}
StatusMeaning
200Computed cap table
400Validation failed (bad JSON or missing events array)
401Missing or invalid API key
402Cap Table entitlement required
422Engine error (well-formed but invalid input)
post/exit-waterfall/compute

Compute an exit waterfall

Distribute exit proceeds across the cap stack: preferences, participation, conversions, and in-the-money options/warrants. Requires the Cap Table & Exit Waterfall entitlement (a valid key without it returns 402).

Example request body
{
  "model": {
    "common": [
      {
        "id": "founder",
        "name": "Founder",
        "shares": 8000000
      }
    ],
    "preferred": [
      {
        "id": "seed",
        "name": "Seed",
        "seniority": 1,
        "holders": [
          {
            "id": "seed-fund",
            "name": "Seed Fund",
            "shares": 2500000,
            "invested": 2000000
          }
        ]
      }
    ]
  },
  "exitValuation": 50000000
}
StatusMeaning
200Computed waterfall
400Validation failed (bad JSON or missing model / exitValuation)
401Missing or invalid API key
402Cap Table & Exit Waterfall entitlement required
422Engine error (well-formed but invalid input)
post/fund-economics/compute

Compute fund economics

Forecast a venture fund: capital calls, fees, deployment, NAV, and gross/net returns. The Fund Economics Tool is free, so any valid key works, no entitlement.

Example request body
{
  "inputs": {
    "committedCapital": 25000000,
    "gpCommitPct": 0.02,
    "gpCommitCountedTowardInvested": true,
    "organizationalExpenses": 150000,
    "operationalExpensesAnnual": 100000,
    "partnershipExpensesAnnual": 0,
    "mgmtFeePct": 0.02,
    "recycledCapitalPct": 0.1,
    "carryPct": 0.2,
    "newInvestmentPeriodYears": 4,
    "mgmtFeesPeriodYears": 10,
    "fundOperationsYears": 10,
    "portfolio": {
      "newPct": 1,
      "followPct": 0,
      "avgCheckSizeNew": 750000,
      "avgCheckSizeFollow": 0,
      "entryStages": [
        {
          "name": "Average Investment",
          "numInvestments": 0,
          "avgCheckSize": 750000,
          "pctAllocation": 1,
          "reserveRatio": 0
        }
      ]
    },
    "returnTiers": [
      {
        "name": "writeoff",
        "pctOfCapital": 0.6,
        "multiple": 0,
        "holdingPeriodYears": 2
      },
      {
        "name": "small",
        "pctOfCapital": 0.2,
        "multiple": 1.5,
        "holdingPeriodYears": 3
      },
      {
        "name": "medium",
        "pctOfCapital": 0.1,
        "multiple": 5,
        "holdingPeriodYears": 4
      },
      {
        "name": "large",
        "pctOfCapital": 0.1,
        "multiple": 32,
        "holdingPeriodYears": 6
      }
    ]
  }
}
StatusMeaning
200Computed fund economics
400Validation failed (bad JSON or invalid inputs)
401Missing or invalid API key
422Engine error (well-formed but invalid input)
get/keys

List your API keys

List the calling account's keys (prefixes only, raw tokens are never returned).

StatusMeaning
200Your keys
401Missing or invalid API key
post/keys

Create an API key

Mint a new key for the calling account. The raw token is returned once in data.key.token. This is the programmatic alternative to Settings → API keys.

Example request body
{
  "name": "agent-key"
}
StatusMeaning
200Created key (includes the raw token, once)
401Missing or invalid API key
delete/keys/{id}

Revoke an API key

Revoke one of the calling account's keys. Scoped to the owner; a no-op if already revoked.

StatusMeaning
200Revoked
401Missing or invalid API key

Errors

Every failure is the same shape, with a stable code:

{
  "error": {
    "code": "payment_required",
    "message": "This API needs the Cap Table & Exit Waterfall product.",
    "retryable": false
  }
}

From an agent (MCP)

The same engines are available as MCP tools, so an agent calls them as native tools instead of writing HTTP. Add the connector:

https://mcp.hemrock.com/mcp

The discovery tools (list_models, get_access) are open. The compute tools (cap_table_compute, exit_waterfall_compute, fund_economics_compute) use your API key: add your hk_live_… key to the connector and it is forwarded as the bearer token. Full guide at hemrock.com/mcp.

Spec and what's next

The machine-readable OpenAPI spec is at /api/v1/openapi.json.

The MCP server is live (see above). A CLI that wraps these same routes is next.