API

The waterfall engine, inside your systems.

Send a cap table from your fund administration, portfolio monitoring or cap table platform. Get back who receives what, every breakpoint, and plain-language explanations: the same engine as the tool, exact to the cent.

1. Get a key

On a Firm plan, or any paid plan with the API add-on, open your account and press Create a key. Copy it: it is shown once.

2. Send a cap table

POST JSON to an endpoint below with Authorization: Bearer wiq_.... Keep the key on your server, never in a web page.

3. Use the result

Every class's payout, per-share value, multiple and a sentence explaining it. The classes always add up to the equity value.

Endpoints

POSTWhat it returns
/api/v1/waterfallWho receives what at one or more exit values (with debt, expenses and stock consideration per scenario).
/api/v1/breakpointsEvery exit value where the split of the next dollar changes, with the reason.
/api/v1/curveEach class's payout across a range of exit values, for charts.
/api/v1/explainA plain-language explanation of each class's result at one exit value.
/api/v1/offersOffers with escrow and earnouts compared by cash at close, expected value and present value.
/api/v1/checkAnother party's allocation checked, with the most likely reasons for any difference.
GET /api/v1/usageCalls used and left this month (free).

Full field-by-field reference, with a "try it" button: /api/v1/docs.

Example: one investor, one sale

Series A invested $10M for 2,000,000 shares with a 1x participating preference; founders hold 8,000,000 shares. The company sells for $40M.

curl -X POST https://waterfalliq.com/api/v1/waterfall \
  -H "Authorization: Bearer $WATERFALLIQ_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "cap_table": {
      "company": "Acme Robotics",
      "securities": [
        {"id": "common", "name": "Founders", "kind": "common", "shares": 8000000},
        {"id": "series_a", "name": "Series A", "kind": "preferred", "invested": 10000000,
         "price": 5.0, "seniority": 1, "lp_multiple": 1, "participation": "participating"}
      ]
    },
    "scenarios": [{"exit_value": 40000000}]
  }'

The answer (shortened):

{
  "scenarios": [{
    "exit_value": 40000000.0,
    "equity_value": 40000000.0,
    "sentence": "At a $40.00M exit, $40.00M reaches equity holders: Founders $24.00M (60%), Investors $16.00M (40%).",
    "classes": [
      {"id": "common",   "name": "Founders", "total": 24000000.0, "pct_of_proceeds": 0.6, ...},
      {"id": "series_a", "name": "Series A", "total": 16000000.0, "pct_of_proceeds": 0.4, ...}
    ]
  }]
}

The same in Python

import os, requests

r = requests.post("https://waterfalliq.com/api/v1/waterfall",
                  headers={"Authorization": f"Bearer {os.environ['WATERFALLIQ_KEY']}"},
                  json=payload, timeout=30)
r.raise_for_status()
for c in r.json()["scenarios"][0]["classes"]:
    print(c["name"], round(c["total"], 2))
print("Calls left this month:", r.headers["X-Quota-Remaining"])

Cap table fields

Each security has an id, a name and a kind (preferred, common, option, warrant, safe or note), plus the terms that apply: shares, invested, price (issue price, or strike for options), seniority (1 is paid first; equal numbers share), lp_multiple, participation (non_participating, participating, participating_capped with cap_multiple), dividends, SAFE valuation_cap and discount, and note interest_rate. Anything left out takes the standard value. The reference lists every field.

Limits and errors

StatusMeaning
200Done. X-Quota-Remaining says how many calls are left this month.
401Missing, wrong or deleted key.
402The account's plan does not include the API.
422The cap table could not be calculated; the message says why (for example a post-money SAFE cap above 100%).
429This month's calls are used up, or more than 120 calls in a minute.

Pricing

Firm includes 5,000 calls a month. On any other paid plan, the API add-on is $499 a month for 2,000 calls, then $199 for each extra 1,000. Enterprise plans set their own volume. Calls renew on the 1st of each month. Talk to us about volumes or a trial key.

Your cap tables are calculated and returned; the API does not keep them. See the privacy notice and how the engine is tested.