addrbookFor publishers
← The evidence ledger

Evidence row 1779925

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint a3865ac5-7c95-4881-a4f4-42a1cc40d7af
Recorded
Previous row
#778260
Body SHA-256
fc7357f4d5ea4f0997e485939f3627f8e8c094ffa4a4cecd76e755dfa2b845f9
Leaf
0x313704695f94545439ec6be1b1d33a3e977bfe6112255a5fdc7b7045d1db1c3a

What was observed

{
  "count": 20,
  "tools": [
    {
      "description": "Use whenever the user asks who owns what after a financing: founder splits, option pools, priced rounds, SAFEs and convertible notes converting, warrants, pro-rata, or dilution across several rounds. Takes the financing events in order and returns fully diluted ownership after each event plus the final cap table. Prefer this over doing the arithmetic yourself: SAFE and note conversion (pre- vs post-money caps, discounts, pool shuffles) is where model-written math most often goes wrong, and this runs the same tested engine as Hemrock's cap table models. Free without an account for a few runs a day (the result comes with a link that saves it to Hemrock); signed in, 10 free calculations, then the Cap Table & Exit Waterfall product, $20/year for 6,000 calculations shared with exit_waterfall_compute. If the result contains action_required (not signed in, no purchase, allowance used), relay it to the user with its links and offer to retry. Never skip the calculation silently.",
      "inputSchema": {
        "additionalProperties": false,
        "definitions": {
          "AccessResponse": {
            "properties": {
              "data": {
                "properties": {
                  "daily": {
                    "items": {
                      "$ref": "#/definitions/DailyUsage"
                    },
                    "type": "array"
                  },
                  "monthly": {
                    "items": {
                      "$ref": "#/definitions/MonthlyUsage"
                    },
                    "type": "array"
                  },
                  "periods": {
                    "items": {
                      "allOf": [
                        {
                          "$ref": "#/definitions/UsagePeriod"
                        },
                        {
                          "properties": {
                            "product": {
                              "enum": [
                                "cap-table",
                                "fund-economics"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "product"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "products": {
                    "items": {
                      "$ref": "#/definitions/ProductAccess"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "products",
                  "daily"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "CapTableSnapshot": {
            "properties": {
              "holdings": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "outstandingConvertibles": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "ownership": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "pricePerShare": {
                "type": "number"
              },
              "roundDetail": {
                "type": "object"
              },
              "totalShares": {
                "type": "number"
              }
            },
            "required": [
              "label",
              "holdings",
              "totalShares",
              "ownership",
              "outstandingConvertibles"
            ],
            "type": "object"
          },
          "CommonIssuanceEvent": {
            "description": "Issue common stock (founders, employees).",
            "properties": {
              "grants": {
                "items": {
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "founder",
                        "employee"
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "common_issuance"
              }
            },
            "required": [
              "type",
              "label",
              "grants"
            ],
            "type": "object"
          },
          "ComputeRequest": {
            "additionalProperties": false,
            "properties": {
              "events": {
                "items": {
                  "description": "One cap-table event, discriminated by `type`. Pass events in chronological order.",
                  "discriminator": {
                    "mapping": {
                      "common_issuance": "#/components/schemas/CommonIssuanceEvent",
                      "convertible_round": "#/components/schemas/ConvertibleRoundEvent",
                      "manual_issuance": "#/components/schemas/ManualIssuanceEvent",
                      "option_grant": "#/components/schemas/OptionGrantEvent",
                      "option_pool": "#/components/schemas/OptionPoolEvent",
                      "priced_round": "#/components/schemas/PricedRoundEvent",
                      "secondary_sale": "#/components/schemas/SecondarySaleEvent",
                      "warrant_round": "#/components/schemas/WarrantRoundEvent"
                    },
                    "propertyName": "type"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/definitions/CommonIssuanceEvent"
                    },
                    {
                      "$ref": "#/definitions/OptionPoolEvent"
                    },
                    {
                      "$ref": "#/definitions/SecondarySaleEvent"
                    },
                    {
                      "$ref": "#/definitions/OptionGrantEvent"
                    },
                    {
                      "$ref": "#/definitions/ManualIssuanceEvent"
                    },
                    {
                      "$ref": "#/definitions/ConvertibleRoundEvent"
                    },
                    {
                      "$ref": "#/definitions/WarrantRoundEvent"
                    },
                    {
                      "$ref": "#/definitions/PricedRoundEvent"
                    }
                  ]
                },
                "maxItems": 200,
                "type": "array"
              }
            },
            "required": [
              "events"
            ],
            "type": "object"
          },
          "ComputeResponse": {
            "properties": {
              "data": {
                "properties": {
                  "final": {
                    "$ref": "#/definitions/CapTableSnapshot"
                  },
                  "snapshots": {
                    "description": "One snapshot per event, in order.",
                    "items": {
                      "$ref": "#/definitions/CapTableSnapshot"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "ConvertibleRoundEvent": {
            "description": "Issue SAFEs or notes; they convert to preferred at the next priced round.",
            "properties": {
              "convertibles": {
                "items": {
                  "properties": {
                    "accruedInterest": {
                      "type": "number"
                    },
                    "capType": {
                      "enum": [
                        "pre-money",
                        "post-money",
                        "post-money-fixed",
                        "post-money-fixed-after"
                      ]
                    },
                    "conversionDate": {
                      "description": "ISO date. Notes only.",
                      "type": "string"
                    },
                    "dilutionMode": {
                      "description": "Defaults to \"existing-only\".",
                      "enum": [
                        "existing-only",
                        "all"
                      ]
                    },
                    "discount": {
                      "description": "0..1.",
                      "type": "number"
                    },
                    "id": {
                      "type": "string"
                    },
                    "interestRate": {
                      "description": "Annual fraction (0.05 = 5%). Notes only.",
                      "type": "number"
                    },
                    "investmentDate": {
                      "description": "ISO date. Notes only.",
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "safe",
                        "note"
                      ]
                    },
                    "mfn": {
                      "type": "boolean"
                    },
                    "name": {
                      "type": "string"
                    },
                    "principal": {
                      "type": "number"
                    },
                    "valuationCap": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "principal"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "convertible_round"
              }
            },
            "required": [
              "type",
              "label",
              "convertibles"
            ],
            "type": "object"
          },
          "DailyUsage": {
            "properties": {
              "day": {
                "format": "date",
                "type": "string"
              },
              "endpoint": {
                "type": "string"
              },
              "failed": {
                "type": "integer"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "succeeded": {
                "type": "integer"
              }
            },
            "required": [
              "day",
              "product",
              "endpoint",
              "source",
              "succeeded",
              "failed"
            ],
            "type": "object"
          },
          "Error": {
            "properties": {
              "error": {
                "properties": {
                  "code": {
                    "enum": [
                      "unauthorized",
                      "payment_required",
                      "validation_failed",
                      "engine_error",
                      "quota_exhausted",
                      "rate_limited",
                      "idempotency_conflict",
                      "service_unavailable",
                      "method_not_allowed",
                      "internal_error"
                    ],
                    "type": "string"
                  },
                  "details": {},
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "code",
                  "message",
                  "retryable"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "FundComputeRequest": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "features": {
                "additionalProperties": false,
                "properties": {
                  "capTable": {
                    "additionalProperties": false,
                    "properties": {
                      "bridge": {
                        "additionalProperties": false,
                        "properties": {
                          "expectedAgeAtRound": {
                            "items": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "numInvestmentsTarget": {
                            "maximum": 10000,
                            "minimum": 0,
                            "type": "number"
                          },
                          "stageName": {
                            "maxLength": 200,
                            "type": "string"
                          },
                          "writeoffHoldYears": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "yearsBetweenRounds": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "numInvestmentsTarget"
                        ],
                        "type": "object"
                      },
                      "inputs": {
                        "additionalProperties": false,
                        "properties": {
                          "defaultExitMultiple": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultGraduationRate": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultValuationIncrease": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultWriteoffRate": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "dilutionFromOptionPoolsPerRound": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "dilutionPerRound": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "exitMultipleOnLastRound": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "followOnRounds": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "dilutionFromRound": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "newOptionPoolInRound": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "pctCompaniesFollowOn": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "valuationIncrease": {
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "type": "object"
                            },
                            "maxItems": 20,
                            "type": "array"
                          },
                          "newInvestmentCheckSize": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "numFollowOnRounds": {
                            "maximum": 20,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "numRoundsFollowOn": {
                            "maximum": 20,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "ownershipOutsideInvestment": {
                            "items": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "pctCompaniesFollowOn": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "postmoneyValuation": {
                            "exclusiveMinimum": 0,
                            "type": "number"
                          },
                          "roundLabels": {
                            "items": {
                              "maxLength": 200,
                              "type": "string"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "roundOutcomes": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "exitMultiple": {
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "graduationRate": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "writeoffRate": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "type": "object"
                            },
                            "maxItems": 21,
                            "type": "array"
                          }
                        },
                        "required": [
                          "newInvestmentCheckSize",
                          "postmoneyValuation",
                          "numFollowOnRounds",
                          "numRoundsFollowOn",
                          "defaultValuationIncrease",
                          "dilutionPerRound",
                          "dilutionFromOptionPoolsPerRound",
                          "pctCompaniesFollowOn",
                          "defaultGraduationRate",
                          "defaultWriteoffRate",
                          "defaultExitMultiple"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "inputs",
                      "bridge"
                    ],
                    "type": "object"
                  },
                  "deals": {
                    "description": "Build the portfolio from specific deals instead of entry stages and return tiers (and instead of capTable when both are sent). Each deal has its checks, each in a quarter from first close (1-based), and one exit in a quarter, at a multiple of everything invested in the deal (0 is a write-off) or for proceeds in money. Invested capital is the sum of the checks and called capital is solved from it; the fund life runs to the last exit, capped by maxFundLifeYears; each deal comes back as a row of result.tiers. Recycling keeps back the earliest proceeds, up to recycledCapitalPct of committed, only while later checks can use them. Send dealsMix true to mix the methods instead.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "exit": {
                          "additionalProperties": false,
                          "properties": {
                            "multiple": {
                              "description": "Of everything invested in the deal. 0 is a write-off.",
                              "maximum": 10000,
                              "minimum": 0,
                              "type": "number"
                            },
                            "proceeds": {
                              "description": "Exit proceeds in money, instead of a multiple.",
                              "minimum": 0,
                              "type": "number"
                            },
                            "quarter": {
                              "maximum": 400,
                              "minimum": 1,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "quarter"
                          ],
                          "type": "object"
                        },
                        "investments": {
                          "description": "The checks the fund writes into the deal: the initial check, then any follow-ons.",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "amount": {
                                "minimum": 0,
                                "type": "number"
                              },
                              "quarter": {
                                "description": "Quarter from first close, 1-based.",
                                "maximum": 400,
                                "minimum": 1,
                                "type": "integer"
                              }
                            },
                            "required": [
                              "quarter",
                              "amount"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "minItems": 1,
                          "type": "array"
                        },
                        "name": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "investments",
                        "exit"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "minItems": 1,
                    "type": "array"
                  },
                  "dealsMix": {
                    "description": "With deals: the deals come first, and the capital they leave (committed less fees and expenses, plus recycling, less the checks) is invested through the entry stages and return tiers, or capTable when sent, as it would be without deals. Recycling then goes to the stages, the fund life is the later of the deals' and the stages', and result.tiers lists the deals and then the tiers.",
                    "type": "boolean"
                  },
                  "fees": {
                    "additionalProperties": false,
                    "properties": {
                      "base": {
                        "enum": [
                          "committed",
                          "nav",
                          "aum",
                          "step-down"
                        ],
                        "type": "string"
                      },
                      "basesByYear": {
                        "items": {
                          "enum": [
                            "committed",
                            "nav",
                            "aum",
                            "step-down"
                          ],
                          "type": "string"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "feeYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "ratePct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "schedule": {
                        "additionalProperties": false,
                        "description": "The fee as an LPA states it, on the dated schedule: each rate from a point in fund years (0 = first close; 5.5 starts halfway through year 6 and cuts the period it lands in), charged on committed capital, invested cost not yet realized, or NAV, with organizational expenses above organizationalExpenseCap offsetting the fee. Runs for feeYears; base, ratePct, yearlyRateSchedule and basesByYear are ignored when it is set.",
                        "properties": {
                          "frequency": {
                            "enum": [
                              "quarterly",
                              "semiannual",
                              "annual"
                            ],
                            "type": "string"
                          },
                          "organizationalExpenseCap": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "steps": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "basis": {
                                  "enum": [
                                    "committed",
                                    "invested",
                                    "nav"
                                  ],
                                  "type": "string"
                                },
                                "fromYear": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "rate": {
                                  "maximum": 1,
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "required": [
                                "fromYear",
                                "rate",
                                "basis"
                              ],
                              "type": "object"
                            },
                            "maxItems": 20,
                            "minItems": 1,
                            "type": "array"
                          }
                        },
                        "required": [
                          "steps"
                        ],
                        "type": "object"
                      },
                      "stepDownAfterYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "yearlyRateSchedule": {
                        "items": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "maxItems": 100,
                        "type": "array"
                      }
                    },
                    "required": [
                      "base"
                    ],
                    "type": "object"
                  },
                  "followOn": {
                    "additionalProperties": false,
                    "properties": {
                      "offsetQuarters": {
                        "maximum": 40,
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "offsetQuarters"
                    ],
                    "type": "object"
                  },
                  "lpClasses": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "callSchedule": {
                          "additionalProperties": false,
                          "description": "Call this class on its own schedule instead of as the fund needs cash. pct is a share of the class commitment per fund year (called in the year's first quarter) or per quarter. Whatever the entries leave is called when the fund needs it.",
                          "properties": {
                            "frequency": {
                              "enum": [
                                "year",
                                "quarter"
                              ],
                              "type": "string"
                            },
                            "pct": {
                              "items": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "maxItems": 80,
                              "type": "array"
                            }
                          },
                          "required": [
                            "frequency",
                            "pct"
                          ],
                          "type": "object"
                        },
                        "commitment": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "feeOverrides": {
                          "additionalProperties": false,
                          "properties": {
                            "basesByYear": {
                              "items": {
                                "enum": [
                                  "committed",
                                  "nav",
                                  "aum",
                                  "step-down"
                                ],
                                "type": "string"
                              },
                              "maxItems": 100,
                              "type": "array"
                            },
                            "ratePct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "yearlyRateSchedule": {
                              "items": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "maxItems": 100,
                              "type": "array"
                            }
                          },
                          "type": "object"
                        },
                        "isFirstLoss": {
                          "type": "boolean"
                        },
                        "isRemainder": {
                          "type": "boolean"
                        },
                        "name": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "overrides": {
                          "additionalProperties": false,
                          "properties": {
                            "carryPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "carryTiers": {
                              "items": {
                                "additionalProperties": false,
                                "properties": {
                                  "carryPct": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "catchup": {
                                    "type": "boolean"
                                  },
                                  "irrThreshold": {
                                    "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "moicThreshold": {
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "moicThreshold",
                                  "carryPct"
                                ],
                                "type": "object"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "catchupGpShare": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "catchupPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "preferredReturnMode": {
                              "enum": [
                                "none",
                                "irr",
                                "multiple"
                              ],
                              "type": "string"
                            },
                            "preferredReturnMultiple": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "preferredReturnRate": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "type": "object"
                        }
                      },
                      "required": [
                        "name",
                        "commitment"
                      ],
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "mgmtCo": {
                    "additionalProperties": false,
                    "properties": {
                      "expenses": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "annualCost": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "growthRatePerYear": {
                              "maximum": 10,
                              "minimum": -1,
                              "type": "number"
                            },
                            "label": {
                              "maxLength": 200,
                              "type": "string"
                            },
                            "yearsActive": {
                              "items": {
                                "maximum": 100,
                                "minimum": 1,
                                "type": "integer"
                              },
                              "maxItems": 100,
                              "type": "array"
                            }
                          },
                          "required": [
                            "label",
                            "annualCost"
                          ],
                          "type": "object"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "oneTimeFormationCost": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "startingCash": {
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "expenses"
                    ],
                    "type": "object"
                  },
                  "recycling": {
                    "additionalProperties": false,
                    "properties": {
                      "defaultTreatment": {
                        "enum": [
                          "retained",
                          "deemed"
                        ],
                        "type": "string"
                      },
                      "schedule": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "amount": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "quarter": {
                              "maximum": 400,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "treatment": {
                              "enum": [
                                "retained",
                                "deemed"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "quarter"
                          ],
                          "type": "object"
                        },
                        "maxItems": 400,
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "waterfall": {
                    "additionalProperties": false,
                    "properties": {
                      "basis": {
                        "description": "Whole fund (the default, European) or deal by deal (American): return of capital owes only the capital in deals exited or written off so far, so carry can be paid before the fund returns all capital. The clawback settles on the whole fund.",
                        "enum": [
                          "whole-fund",
                          "deal-by-deal"
                        ],
                        "type": "string"
                      },
                      "carryTiers": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "carryPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "catchup": {
                              "type": "boolean"
                            },
                            "irrThreshold": {
                              "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "moicThreshold": {
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "moicThreshold",
                            "carryPct"
                          ],
                          "type": "object"
                        },
                        "maxItems": 20,
                        "type": "array"
                      },
                      "catchupGpShare": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "catchupMeasure": {
                        "description": "GP catchup: to the carry share of the pref paid (the default), or until the GP holds the carry share of all profit paid. They differ when the GP shares the catchup with LPs.",
                        "enum": [
                          "preferred",
                          "profit"
                        ],
                        "type": "string"
                      },
                      "catchupPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "clawback": {
                        "type": "boolean"
                      },
                      "preferredReturnBase": {
                        "description": "IRR pref: accrue on capital not yet returned plus unpaid pref (the default), or on each contribution from its date whatever comes back.",
                        "enum": [
                          "unreturned",
                          "contributed"
                        ],
                        "type": "string"
                      },
                      "preferredReturnCompounding": {
                        "description": "IRR pref: compound annually (the default) or simple interest.",
                        "enum": [
                          "annual",
                          "none"
                        ],
                        "type": "string"
                      },
                      "preferredReturnMode": {
                        "enum": [
                          "none",
                          "irr",
                          "multiple"
                        ],
                        "type": "string"
                      },
                      "preferredReturnMultiple": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "preferredReturnRate": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "firstCloseDate": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "format": {
                "enum": [
                  "json",
                  "xlsx",
                  "xlsx_url"
                ],
                "type": "string"
              },
              "fundName": {
                "maxLength": 200,
                "type": "string"
              },
              "granularity": {
                "enum": [
                  "year",
                  "quarter",
                  "none"
                ],
                "type": "string"
              },
              "inputs": {
                "additionalProperties": false,
                "properties": {
                  "carryPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "committedCapital": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "fundOperationsYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "gpCommitBearsCarry": {
                    "type": "boolean"
                  },
                  "gpCommitCountedTowardInvested": {
                    "type": "boolean"
                  },
                  "gpCommitPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "maxFundLifeYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "mgmtFeePct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "mgmtFeeSchedule": {
                    "items": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "mgmtFeesPeriodYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "navMarkupYears": {
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                  },
                  "newInvestmentPeriodYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "operationalExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        },
                        "quarterly": {
                          "items": [
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            }
                          ],
                          "maxItems": 4,
                          "minItems": 4,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "operationalExpensesAnnual": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "operationalExpensesBreakout": {
                    "additionalProperties": false,
                    "properties": {
                      "audit": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "fundAdmin": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "other": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "tax": {
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "fundAdmin",
                      "tax",
                      "audit",
                      "other"
                    ],
                    "type": "object"
                  },
                  "organizationalExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "organizationalExpenses": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "partnershipExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        },
                        "quarterly": {
                          "items": [
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            }
                          ],
                          "maxItems": 4,
                          "minItems": 4,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "partnershipExpensesAnnual": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "portfolio": {
                    "additionalProperties": false,
                    "properties": {
                      "avgCheckSizeFollow": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "avgCheckSizeNew": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "entryStages": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "avgCheckSize": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "followOnChecks": {
                              "items": {
                                "additionalProperties": false,
                                "properties": {
                                  "avgCheckSize": {
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  },
                                  "pctOfReserve": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "avgCheckSize"
                                ],
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "initialCheckLabel": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "numInvestments": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "pctAllocation": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "reserveRatio": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "name",
                            "numInvestments",
                            "avgCheckSize"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "followPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "newPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "newPct",
                      "followPct",
                      "avgCheckSizeNew",
                      "avgCheckSizeFollow"
                    ],
                    "type": "object"
                  },
                  "recycledCapitalPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "returnTiers": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "holdingPeriodYears": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "multiple": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "numCompanies": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "pctOfCapital": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "name",
                        "pctOfCapital",
                        "multiple",
                        "holdingPeriodYears"
                      ],
                      "type": "object"
                    },
                    "minItems": 1,
                    "type": "array"
                  },
                  "solveCalledFromDeployment": {
                    "type": "boolean"
                  },
                  "stageInputMode": {
                    "enum": [
                      "pct-capital",
                      "num-companies"
                    ],
                    "type": "string"
                  },
                  "targetTotalInvestments": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "tierFractional": {
                    "type": "boolean"
                  },
                  "tierInputMode": {
                    "enum": [
                      "pct-capital",
                      "num-companies"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "committedCapital",
                  "gpCommitPct",
                  "gpCommitCountedTowardInvested",
                  "organizationalExpenses",
                  "operationalExpensesAnnual",
                  "mgmtFeePct",
                  "recycledCapitalPct",
                  "carryPct",
                  "newInvestmentPeriodYears",
                  "mgmtFeesPeriodYears",
                  "portfolio",
                  "returnTiers"
                ],
                "type": "object"
              }
            },
            "required": [
              "inputs"
            ],
            "type": "object"
          },
          "FundDetail": {
            "description": "The fund over time. Returned unless the request sets granularity to \"none\". Every array in periods has one entry per label. waterfall, lpClasses and mgmtCo appear only when the request sent that feature block.",
            "properties": {
              "granularity": {
                "enum": [
                  "year",
                  "quarter"
                ],
                "type": "string"
              },
              "irr": {
                "description": "IRRs solved from the dated quarterly cash flows, with terminal NAV.",
                "properties": {
                  "grossIRR": {
                    "type": "number"
                  },
                  "netIRR": {
                    "properties": {
                      "lp": {
                        "type": "number"
                      },
                      "total": {
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "lpClasses": {
                "description": "LP economics split by class. Each class carries its lifetime totals, datedNetIRR (solved from its own dated calls and distributions) and periods: calledCapital, unscheduledCalls, distributions and netIRR (the class's IRR through each period, with its share of LP NAV as the terminal value), one entry per label. A class with a callSchedule is called on it; the others are called as the fund needs cash.",
                "type": "object"
              },
              "mgmtCo": {
                "type": "object"
              },
              "periods": {
                "properties": {
                  "calledCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "carriedInterest": {
                    "description": "GP carry paid each period, catchups included, net of the clawback.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "distributions": {
                    "$ref": "#/definitions/FundSeries",
                    "description": "Distributions after carry. The LP line runs through the waterfall period by period."
                  },
                  "dpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "gpCatchup": {
                    "description": "GP catchup paid each period. Only with a waterfall block.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "gpClawback": {
                    "description": "Carry the GP returns to the LPs, in the quarter the fund ends (or its year). Return of capital covers only capital called so far, so early carry is possible; the clawback brings the GP back to its whole-fund share. Off with features.waterfall.clawback: false.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "investedCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "jCurveLp": {
                    "description": "Cumulative LP net cash flow at the end of each period.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "labels": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "managementFees": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "nav": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "partnershipExpenses": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "preferredReturn": {
                    "description": "Preferred return paid to LPs each period. Only with a waterfall block.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "proceeds": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "recycledCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "recycledDeemed": {
                    "$ref": "#/definitions/FundSeries",
                    "description": "The part of recycledCapital booked as distributed and recontributed (features.recycling treatment \"deemed\"). It is also in calledCapital and distributions; recycling that is never distributed is in neither."
                  },
                  "rvpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "tvpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "labels"
                ],
                "type": "object"
              },
              "statements": {
                "properties": {
                  "currency": {
                    "type": "string"
                  },
                  "periods": {
                    "items": {
                      "properties": {
                        "balanceSheet": {
                          "properties": {
                            "carriedInterestDistributed": {
                              "description": "Carried interest distributed",
                              "type": "number"
                            },
                            "cash": {
                              "description": "Cash",
                              "type": "number"
                            },
                            "checkBalances": {
                              "description": "Check: assets less liabilities and capital. Zero when the balance sheet balances.",
                              "type": "number"
                            },
                            "contributedCapitalGp": {
                              "description": "Contributed capital, GP",
                              "type": "number"
                            },
                            "contributedCapitalLp": {
                              "description": "Contributed capital, LPs",
                              "type": "number"
                            },
                            "cumulativeNetInvestmentIncome": {
                              "description": "Cumulative net investment income (loss)",
                              "type": "number"
                            },
                            "cumulativeNetRealizedGain": {
                              "description": "Cumulative net realized gain (loss)",
                              "type": "number"
                            },
                            "cumulativeNetUnrealized": {
                              "description": "Cumulative net unrealized appreciation (depreciation)",
                              "type": "number"
                            },
                            "distributionsGpCommit": {
                              "description": "Distributions to the GP commit",
                              "type": "number"
                            },
                            "distributionsLp": {
                              "description": "Distributions to LPs",
                              "type": "number"
                            },
                            "investmentsAtCost": {
                              "description": "Investments, at cost. AUM.",
                              "type": "number"
                            },
                            "investmentsAtFairValue": {
                              "description": "Investments, at fair value. NAV.",
                              "type": "number"
                            },
                            "totalAssets": {
                              "description": "Total assets",
                              "type": "number"
                            },
                            "totalLiabilities": {
                              "description": "Total liabilities. Expenses are paid when incurred, so nothing is accrued.",
                              "type": "number"
                            },
                            "totalLiabilitiesAndCapital": {
                              "description": "Total liabilities and partners' capital",
                              "type": "number"
                            },
                            "totalPartnersCapital": {
                              "description": "Total partners' capital",
                              "type": "number"
                            },
                            "unfundedCommitments": {
                              "description": "Memo: unfunded commitments",
                              "type": "number"
                            },
                            "unrealizedAppreciation": {
                              "description": "Unrealized appreciation (depreciation)",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "cashFlow": {
                          "properties": {
                            "carriedInterestPaid": {
                              "description": "Carried interest paid",
                              "type": "number"
                            },
                            "cashBeginning": {
                              "description": "Cash, beginning of period",
                              "type": "number"
                            },
                            "cashEnd": {
                              "description": "Cash, end of period",
                              "type": "number"
                            },
                            "checkTiesToBalanceSheet": {
                              "description": "Check: cash less balance sheet cash. Zero when the cash flow ties to the balance sheet.",
                              "type": "number"
                            },
                            "contributionsGp": {
                              "description": "Capital contributions, GP",
                              "type": "number"
                            },
                            "contributionsLp": {
                              "description": "Capital contributions, LPs",
                              "type": "number"
                            },
                            "distributionsGpCommit": {
                              "description": "Distributions to the GP commit",
                              "type": "number"
                            },
                            "distributionsLp": {
                              "description": "Distributions to LPs",
                              "type": "number"
                            },
                            "lessNetChangeInUnrealized": {
                              "description": "Net change in unrealized (appreciation) depreciation",
                              "type": "number"
                            },
                            "lessNetRealizedGain": {
                              "description": "Net realized (gain) loss on investments",
                              "type": "number"
                            },
                            "netCashFromFinancing": {
                              "description": "Net cash from financing activities",
                              "type": "number"
                            },
                            "netCashFromOperating": {
                              "description": "Net cash from operating activities",
                              "type": "number"
                            },
                            "netChangeInCash": {
                              "description": "Net change in cash",
                              "type": "number"
                            },
                            "netIncreaseFromOperations": {
                              "description": "Net increase (decrease) in partners' capital from operations",
                              "type": "number"
                            },
                            "proceedsFromExits": {
                              "description": "Proceeds from exits",
                              "type": "number"
                            },
                            "purchasesOfInvestments": {
                              "description": "Purchases of investments. Includes recycled proceeds.",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "label": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operations": {
                          "properties": {
                            "managementFees": {
                              "description": "Management fees",
                              "type": "number"
                            },
                            "netChangeInUnrealized": {
                              "description": "Net change in unrealized appreciation (depreciation). Change in NAV less change in cost held.",
                              "type": "number"
                            },
                            "netGainOnInvestments": {
                              "description": "Net gain (loss) on investments",
                              "type": "number"
                            },
                            "netIncreaseFromOperations": {
                              "description": "Net increase (decrease) in partners' capital from operations",
                              "type": "number"
                            },
                            "netInvestmentIncome": {
                              "description": "Net investment income (loss). No interest or dividend income is modeled.",
                              "type": "number"
                            },
                            "netRealizedGain": {
                              "description": "Net realized gain (loss)",
                              "type": "number"
                            },
                            "operationalExpenseLines": {
                              "description": "The operational expense lines, when the model itemizes them.",
                              "items": {
                                "properties": {
                                  "amount": {
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "operationalExpenses": {
                              "description": "Operational expenses. Run through Q1 of the fund year after the fund life ends.",
                              "type": "number"
                            },
                            "organizationalExpenses": {
                              "description": "Organizational expenses",
                              "type": "number"
                            },
                            "partnershipExpenseLines": {
                              "description": "The partnership expense lines, when the model itemizes them.",
                              "items": {
                                "properties": {
                                  "amount": {
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "partnershipExpenses": {
                              "description": "Partnership expenses",
                              "type": "number"
                            },
                            "realizedGainOnExits": {
                              "description": "Realized gain on exits. Proceeds less the cost they release.",
                              "type": "number"
                            },
                            "realizedLossOnWriteoffs": {
                              "description": "Realized loss on writeoffs",
                              "type": "number"
                            },
                            "totalExpenses": {
                              "description": "Total expenses",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "periodEnd": {
                          "type": "string"
                        },
                        "periodStart": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "waterfall": {
                "description": "Lifetime totals of the waterfall as run through the periods: return of capital, preferred return (accrued on the dates capital was called), catchup, carry by tier.",
                "type": "object"
              }
            },
            "required": [
              "granularity",
              "irr",
              "periods",
              "statements"
            ],
            "type": "object"
          },
          "FundResult": {
            "properties": {
              "calledCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "committedCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "distributions": {
                "$ref": "#/definitions/LineTotals"
              },
              "dpi": {
                "type": "number"
              },
              "grossIRR": {
                "$ref": "#/definitions/LineTotals"
              },
              "grossMultiple": {
                "$ref": "#/definitions/LineTotals"
              },
              "investedCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "managementFees": {
                "$ref": "#/definitions/LineTotals"
              },
              "netIRR": {
                "$ref": "#/definitions/LineTotals"
              },
              "netMultiple": {
                "$ref": "#/definitions/LineTotals"
              },
              "partnershipExpenses": {
                "$ref": "#/definitions/LineTotals"
              },
              "pic": {
                "type": "number"
              },
              "proceeds": {
                "$ref": "#/definitions/LineTotals"
              },
              "rvpi": {
                "type": "number"
              },
              "tiers": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "tvpi": {
                "type": "number"
              },
              "weightedHoldPeriodYears": {
                "type": "number"
              }
            },
            "required": [
              "committedCapital",
              "calledCapital",
              "managementFees",
              "partnershipExpenses",
              "investedCapital",
              "proceeds",
              "distributions",
              "grossMultiple",
              "netMultiple",
              "grossIRR",
              "netIRR",
              "pic",
              "dpi",
              "rvpi",
              "tvpi",
              "weightedHoldPeriodYears"
            ],
            "type": "object"
          },
          "FundResultResponse": {
            "properties": {
              "data": {
                "properties": {
                  "detail": {
                    "$ref": "#/definitions/FundDetail"
                  },
                  "result": {
                    "$ref": "#/definitions/FundResult"
                  },
                  "workbook": {
                    "description": "Returned when the request sets format to \"xlsx\" or \"xlsx_url\": the live Excel workbook the web tool exports, with every number a formula back to its Get Started inputs. For \"xlsx\", decode data from base64 and save it as filename. For \"xlsx_url\", download it from url before expiresAt (24 hours).",
                    "properties": {
                      "contentType": {
                        "type": "string"
                      },
                      "data": {
                        "type": "string"
                      },
                      "encoding": {
                        "enum": [
                          "base64"
                        ],
                        "type": "string"
                      },
                      "expiresAt": {
                        "format": "date-time",
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "url": {
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "filename",
                      "contentType"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "FundSeries": {
            "properties": {
              "gp": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "lp": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "total": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              }
            },
            "required": [
              "total",
              "lp",
              "gp"
            ],
            "type": "object"
          },
          "LineTotals": {
            "properties": {
              "gp": {
                "type": "number"
              },
              "lp": {
                "type": "number"
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "total",
              "lp",
              "gp"
            ],
            "type": "object"
          },
          "ManualIssuanceEvent": {
            "description": "Escape hatch: issue exact shares for custom arrangements.",
            "properties": {
              "issuances": {
                "items": {
                  "properties": {
                    "class": {
                      "enum": [
                        "common",
                        "preferred",
                        "option-pool",
                        "warrant"
                      ]
                    },
                    "countMode": {
                      "description": "Defaults to \"shares\".",
                      "enum": [
                        "shares",
                        "percent"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "issuePrice": {
                      "type": "number"
                    },
                    "kind": {
                      "enum": [
                        "founder",
                        "employee",
                        "investor",
                        "pool"
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "pctBasis": {
                      "description": "Defaults to \"fully-diluted\".",
                      "enum": [
                        "fully-diluted",
                        "issued"
                      ]
                    },
                    "shares": {
                      "type": "number"
                    },
                    "targetPct": {
                      "description": "0..1, used when countMode=\"percent\".",
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "class",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "manual_issuance"
              }
            },
            "required": [
              "type",
              "label",
              "issuances"
            ],
            "type": "object"
          },
          "MonthlyUsage": {
            "properties": {
              "failed": {
                "type": "integer"
              },
              "month": {
                "pattern": "^[0-9]{4}-[0-9]{2}$",
                "type": "string"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "succeeded": {
                "type": "integer"
              }
            },
            "required": [
              "month",
              "product",
              "succeeded",
              "failed"
            ],
            "type": "object"
          },
          "OptionGrantEvent": {
            "description": "Grant options to people from one pool (fully-diluted-neutral).",
            "properties": {
              "grants": {
                "items": {
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "poolId": {
                "description": "Pool id to grant from; omit to draw the common pool.",
                "type": "string"
              },
              "type": {
                "const": "option_grant"
              }
            },
            "required": [
              "type",
              "label",
              "grants"
            ],
            "type": "object"
          },
          "OptionPoolEvent": {
            "description": "Create or expand an option pool (shares authorized, not granted).",
            "properties": {
              "countMode": {
                "description": "Defaults to \"shares\".",
                "enum": [
                  "shares",
                  "percent"
                ]
              },
              "id": {
                "description": "Pool id, so an option_grant can name which pool it draws from.",
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "shares": {
                "type": "number"
              },
              "strikePrice": {
                "type": "number"
              },
              "targetPct": {
                "description": "0..1 of post-event fully diluted, used when countMode=\"percent\".",
                "type": "number"
              },
              "type": {
                "const": "option_pool"
              }
            },
            "required": [
              "type",
              "label",
              "shares"
            ],
            "type": "object"
          },
          "PricedRoundEvent": {
            "description": "A priced equity round: new money buys newly issued preferred.",
            "properties": {
              "investments": {
                "items": {
                  "properties": {
                    "amount": {
                      "type": "number"
                    },
                    "antiDilution": {
                      "enum": [
                        "weighted-average",
                        "full-ratchet"
                      ]
                    },
                    "antiDilutionMethod": {
                      "description": "Defaults to \"conversion-ratio\".",
                      "enum": [
                        "conversion-ratio",
                        "new-shares"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "proRata": {
                      "description": "If true, amount is back-solved to hold pre-round ownership; match by id.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "amount"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "poolMode": {
                "description": "Legacy. Prefer pools[].",
                "enum": [
                  "pre",
                  "post",
                  "custom"
                ]
              },
              "poolPostPct": {
                "description": "Legacy. Prefer pools[].",
                "type": "number"
              },
              "pools": {
                "description": "Option pool top-ups for the round (preferred over the legacy targetPoolPct trio).",
                "items": {
                  "properties": {
                    "countMode": {
                      "description": "Defaults to \"percent\".",
                      "enum": [
                        "shares",
                        "percent"
                      ]
                    },
                    "label": {
                      "type": "string"
                    },
                    "mode": {
                      "description": "\"pre\" dilutes existing only; \"post\" dilutes new money too.",
                      "enum": [
                        "pre",
                        "post"
                      ]
                    },
                    "pct": {
                      "description": "0..1 of post-money fully diluted, when countMode=\"percent\".",
                      "type": "number"
                    },
                    "poolId": {
                      "description": "Set to track this pool separately (its own cap-table row).",
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "mode"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "preMoneyValuation": {
                "type": "number"
              },
              "targetPoolPct": {
                "description": "Legacy. Prefer pools[].",
                "type": "number"
              },
              "type": {
                "const": "priced_round"
              }
            },
            "required": [
              "type",
              "label",
              "preMoneyValuation",
              "investments"
            ],
            "type": "object"
          },
          "ProductAccess": {
            "properties": {
              "active": {
                "description": "Active paid term; use state/freeRemaining for trial access.",
                "type": "boolean"
              },
              "allowance": {
                "const": 6000,
                "type": "integer"
              },
              "freeRemaining": {
                "minimum": 0,
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "nextAction": {
                "type": "string"
              },
              "paidExpiration": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "paidRemaining": {
                "minimum": 0,
                "type": "integer"
              },
              "period": {
                "anyOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/definitions/UsagePeriod"
                  }
                ]
              },
              "priceUsd": {
                "const": 20,
                "type": "number"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "remaining": {
                "description": "Calculations this account can run now: the paid balance while a paid period is active, otherwise the lifetime free balance.",
                "minimum": 0,
                "type": "integer"
              },
              "source": {
                "enum": [
                  "free",
                  "paid"
                ],
                "type": "string"
              },
              "state": {
                "enum": [
                  "free_available",
                  "free_exhausted",
                  "paid_active",
                  "paid_expired",
                  "paid_quota_exhausted"
                ],
                "type": "string"
              }
            },
            "required": [
              "product",
              "name",
              "priceUsd",
              "allowance",
              "period",
              "remaining",
              "active"
            ],
            "type": "object"
          },
          "ResultResponse": {
            "properties": {
              "data": {
                "properties": {
                  "result": {
                    "oneOf": [
                      {
                        "$ref": "#/definitions/WaterfallResult"
                      },
                      {
                        "$ref": "#/definitions/FundResult"
                      }
                    ]
                  }
                },
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "SecondarySaleEvent": {
            "description": "Transfer existing shares from one holder to another.",
            "properties": {
              "class": {
                "description": "Defaults to \"common\".",
                "enum": [
                  "common",
                  "preferred",
                  "option-pool",
                  "warrant"
                ]
              },
              "fromId": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "round": {
                "description": "Which series the shares come from (e.g. \"Series A\").",
                "type": "string"
              },
              "shares": {
                "type": "number"
              },
              "toId": {
                "type": "string"
              },
              "toName": {
                "type": "string"
              },
              "type": {
                "const": "secondary_sale"
              }
            },
            "required": [
              "type",
              "label",
              "fromId",
              "toId",
              "toName",
              "shares"
            ],
            "type": "object"
          },
          "UsagePeriod": {
            "properties": {
              "allowance": {
                "type": "integer"
              },
              "consumed": {
                "type": "integer"
              },
              "enabled": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "period_end": {
                "format": "date-time",
                "type": "string"
              },
              "period_start": {
                "format": "date-time",
                "type": "string"
              },
              "reserved": {
                "type": "integer"
              }
            },
            "required": [
              "id",
              "period_start",
              "period_end",
              "allowance",
              "consumed",
              "reserved",
              "enabled"
            ],
            "type": "object"
          },
          "WarrantRoundEvent": {
            "description": "Issue warrants (right to buy shares at a set price); counts toward fully diluted now.",
            "properties": {
              "label": {
                "type": "string"
              },
              "type": {
                "const": "warrant_round"
              },
              "warrants": {
                "items": {
                  "properties": {
                    "countMode": {
                      "enum": [
                        "shares",
                        "value"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parValue": {
                      "type": "number"
                    },
                    "priceDiscount": {
                      "description": "0..1 discount on the source round price.",
                      "type": "number"
                    },
                    "priceFromRound": {
                      "description": "Source round label to price off, when variable.",
                      "type": "string"
                    },
                    "purchaseClass": {
                      "enum": [
                        "common",
                        "preferred"
                      ]
                    },
                    "purchasePrice": {
                      "type": "number"
                    },
                    "purchaseRound": {
                      "description": "For a preferred warrant, the series it targets.",
                      "type": "string"
                    },
                    "shares": {
                      "description": "When countMode=\"shares\".",
                      "type": "number"
                    },
                    "totalValue": {
                      "description": "When countMode=\"value\": shares = totalValue / purchasePrice.",
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "purchaseClass",
                    "countMode"
                  ],
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "type",
              "label",
              "warrants"
            ],
            "type": "object"
          },
          "WaterfallComputeRequest": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "exitValuation": {
                "maximum": 1000000000000000,
                "minimum": 0,
                "type": "number"
              },
              "model": {
                "additionalProperties": false,
                "properties": {
                  "common": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "invested": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  },
                  "convertibles": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "accruedInterest": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "cap": {
                          "exclusiveMinimum": 0,
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "cashOutAs": {
                          "enum": [
                            "debt",
                            "equity"
                          ],
                          "type": "string"
                        },
                        "cashOutSeniority": {
                          "enum": [
                            "senior",
                            "pari-passu"
                          ],
                          "type": "string"
                        },
                        "discount": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "kind": {
                          "enum": [
                            "pre-safe",
                            "post-safe",
                            "note"
                          ],
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "premiumMultiple": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "principal": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seniority": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "kind",
                        "principal"
                      ],
                      "type": "object"
                    },
                    "maxItems": 100,
                    "type": "array"
                  },
                  "debt": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "options": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "strike": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "vestedFraction": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares",
                        "strike"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  },
                  "preferred": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "conversionRatio": {
                          "exclusiveMinimum": 0,
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "dividendCumulative": {
                          "type": "boolean"
                        },
                        "dividendRate": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "dividendStart": {
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                          "type": "string"
                        },
                        "holders": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "id": {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              },
                              "invested": {
                                "maximum": 1000000000000000,
                                "minimum": 0,
                                "type": "number"
                              },
                              "name": {
                                "maxLength": 200,
                                "type": "string"
                              },
                              "shares": {
                                "maximum": 1000000000000000,
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "shares",
                              "invested"
                            ],
                            "type": "object"
                          },
                          "maxItems": 500,
                          "type": "array"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "investmentDate": {
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                          "type": "string"
                        },
                        "multiple": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "participation": {
                          "enum": [
                            "none",
                            "full",
                            "capped"
                          ],
                          "type": "string"
                        },
                        "participationCap": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seniority": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "holders",
                        "seniority"
                      ],
                      "type": "object"
                    },
                    "maxItems": 20,
                    "type": "array"
                  },
                  "transactionExpenses": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "unissuedPool": {
                    "additionalProperties": false,
                    "properties": {
                      "shares": {
                        "maximum": 1000000000000000,
                        "minimum": 0,
                        "type": "number"
                      },
                      "treatment": {
                        "const": "cancel",
                        "type": "string"
                      }
                    },
                    "required": [
                      "shares"
                    ],
                    "type": "object"
                  },
                  "warrants": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "strike": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares",
                        "strike"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  }
                },
                "required": [
                  "common",
                  "preferred"
                ],
                "type": "object"
              }
            },
            "required": [
              "exitValuation",
              "model"
            ],
            "type": "object"
          },
          "WaterfallResult": {
            "properties": {
              "classes": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "converged": {
                "type": "boolean"
              },
              "convertibles": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "distributable": {
                "type": "number"
              },
              "exitValuation": {
                "type": "number"
              },
              "holders": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "iterations": {
                "type": "integer"
              },
              "perShare": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "series": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "exitValuation",
              "distributable",
              "classes",
              "series",
              "convertibles",
              "holders",
              "perShare",
              "iterations",
              "converged"
            ],
            "type": "object"
          }
        },
        "properties": {
          "events": {
            "items": {
              "description": "One cap-table event, discriminated by `type`. Pass events in chronological order.",
              "discriminator": {
                "mapping": {
                  "common_issuance": "#/components/schemas/CommonIssuanceEvent",
                  "convertible_round": "#/components/schemas/ConvertibleRoundEvent",
                  "manual_issuance": "#/components/schemas/ManualIssuanceEvent",
                  "option_grant": "#/components/schemas/OptionGrantEvent",
                  "option_pool": "#/components/schemas/OptionPoolEvent",
                  "priced_round": "#/components/schemas/PricedRoundEvent",
                  "secondary_sale": "#/components/schemas/SecondarySaleEvent",
                  "warrant_round": "#/components/schemas/WarrantRoundEvent"
                },
                "propertyName": "type"
              },
              "oneOf": [
                {
                  "$ref": "#/definitions/CommonIssuanceEvent"
                },
                {
                  "$ref": "#/definitions/OptionPoolEvent"
                },
                {
                  "$ref": "#/definitions/SecondarySaleEvent"
                },
                {
                  "$ref": "#/definitions/OptionGrantEvent"
                },
                {
                  "$ref": "#/definitions/ManualIssuanceEvent"
                },
                {
                  "$ref": "#/definitions/ConvertibleRoundEvent"
                },
                {
                  "$ref": "#/definitions/WarrantRoundEvent"
                },
                {
                  "$ref": "#/definitions/PricedRoundEvent"
                }
              ]
            },
            "maxItems": 200,
            "type": "array"
          },
          "idempotency_key": {
            "description": "Optional retry key; reuse only with identical input.",
            "type": "string"
          }
        },
        "required": [
          "events"
        ],
        "type": "object"
      },
      "name": "cap_table_compute"
    },
    {
      "description": "Reports what's worth knowing today about the models saved to the user's Hemrock account: for each of the ten most recently edited cap tables, exit waterfalls and fund models, notes where a number has crossed a line worth a look (a thin option pool, unconverted SAFEs, preferences taking most of an exit, a heavy fee load, a fund life past 12 years, a model untouched for 90 days), each with the number in it. Also lists live workshops in the next few weeks and the services that fit what's saved. Call it when the user asks how their models look, or on a scheduled check-in or morning brief. Lead with flagged notes; if nothing is flagged, say little or nothing. Free and read-only. Needs a signed-in connection.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "check_in"
    },
    {
      "description": "Saves a new model to the user's account so they can open it in the browser builder and keep working on it. A fund starts from Hemrock's defaults with your inputs merged on; a cap table needs events; a waterfall needs a model and options.exitValuation. Use it when the user wants to keep a model you built in chat, and give them the url. Free: uses no calculations. Needs a signed-in connection.",
      "inputSchema": {
        "properties": {
          "cashFlows": {
            "description": "Fund only: show the Forecast and Statements tabs in the builder.",
            "type": "boolean"
          },
          "events": {
            "description": "Cap table only: the full list of financing events, in order, the same shape cap_table_compute takes. Replaces the saved list, so read the model first and send back the whole list with your change.",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "features": {
            "description": "Fund only: features to switch on or off, keyed capTable, fees, waterfall, recycling, lpClasses, mgmtCo or followOn, with the same shapes as fund_economics_compute features. An object switches the feature on with that config; false switches it off and keeps its config. The user switches these on deliberately, so only change one they asked about.",
            "type": "object"
          },
          "fundName": {
            "description": "Fund only: the fund name used in the model and its workbook.",
            "type": "string"
          },
          "inputs": {
            "description": "Fund only: fund inputs to change, the same fields as fund_economics_compute inputs. Merged onto the saved inputs, so send only what changes.",
            "type": "object"
          },
          "kind": {
            "description": "\"cap-table\" (Cap Table builder), \"waterfall\" (Exit Waterfall builder) or \"fund\" (the web Venture Capital Model).",
            "enum": [
              "cap-table",
              "waterfall",
              "fund"
            ],
            "type": "string"
          },
          "model": {
            "description": "Waterfall only: the cap stack, the same shape as exit_waterfall_compute's model. Replaces the saved one.",
            "type": "object"
          },
          "name": {
            "description": "The model name shown in the builder. Owner only.",
            "type": "string"
          },
          "options": {
            "description": "Cap table: { wholeShares, pricePrecision }. Waterfall: { exitValuation, exitDate, wholeShares, pricePrecision }. Merged onto the saved options.",
            "type": "object"
          }
        },
        "required": [
          "kind"
        ],
        "type": "object"
      },
      "name": "create_saved_model"
    },
    {
      "description": "Use whenever the user asks what each holder gets at an exit, acquisition or liquidation: liquidation preferences, participating vs non-participating preferred, participation caps, seniority, whether a series converts, options and warrants in or out of the money. Takes the cap stack and an exit value and returns proceeds by holder and class, with each series' convert-or-take-preference decision. Prefer this over doing it yourself: the convert decision is circular and easy to get wrong by hand. Free without an account for a few runs a day; signed in, lifetime free credits or paid access, sharing the Cap Table & Exit Waterfall allowance ($20/year, 6,000 calculations). If the result contains action_required (not signed in, no purchase, allowance used), relay it to the user with its links and offer to retry. Never skip the calculation silently.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "definitions": {
          "AccessResponse": {
            "properties": {
              "data": {
                "properties": {
                  "daily": {
                    "items": {
                      "$ref": "#/definitions/DailyUsage"
                    },
                    "type": "array"
                  },
                  "monthly": {
                    "items": {
                      "$ref": "#/definitions/MonthlyUsage"
                    },
                    "type": "array"
                  },
                  "periods": {
                    "items": {
                      "allOf": [
                        {
                          "$ref": "#/definitions/UsagePeriod"
                        },
                        {
                          "properties": {
                            "product": {
                              "enum": [
                                "cap-table",
                                "fund-economics"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "product"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "products": {
                    "items": {
                      "$ref": "#/definitions/ProductAccess"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "products",
                  "daily"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "CapTableSnapshot": {
            "properties": {
              "holdings": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "outstandingConvertibles": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "ownership": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "pricePerShare": {
                "type": "number"
              },
              "roundDetail": {
                "type": "object"
              },
              "totalShares": {
                "type": "number"
              }
            },
            "required": [
              "label",
              "holdings",
              "totalShares",
              "ownership",
              "outstandingConvertibles"
            ],
            "type": "object"
          },
          "CommonIssuanceEvent": {
            "description": "Issue common stock (founders, employees).",
            "properties": {
              "grants": {
                "items": {
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "founder",
                        "employee"
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "common_issuance"
              }
            },
            "required": [
              "type",
              "label",
              "grants"
            ],
            "type": "object"
          },
          "ComputeRequest": {
            "additionalProperties": false,
            "properties": {
              "events": {
                "items": {
                  "description": "One cap-table event, discriminated by `type`. Pass events in chronological order.",
                  "discriminator": {
                    "mapping": {
                      "common_issuance": "#/components/schemas/CommonIssuanceEvent",
                      "convertible_round": "#/components/schemas/ConvertibleRoundEvent",
                      "manual_issuance": "#/components/schemas/ManualIssuanceEvent",
                      "option_grant": "#/components/schemas/OptionGrantEvent",
                      "option_pool": "#/components/schemas/OptionPoolEvent",
                      "priced_round": "#/components/schemas/PricedRoundEvent",
                      "secondary_sale": "#/components/schemas/SecondarySaleEvent",
                      "warrant_round": "#/components/schemas/WarrantRoundEvent"
                    },
                    "propertyName": "type"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/definitions/CommonIssuanceEvent"
                    },
                    {
                      "$ref": "#/definitions/OptionPoolEvent"
                    },
                    {
                      "$ref": "#/definitions/SecondarySaleEvent"
                    },
                    {
                      "$ref": "#/definitions/OptionGrantEvent"
                    },
                    {
                      "$ref": "#/definitions/ManualIssuanceEvent"
                    },
                    {
                      "$ref": "#/definitions/ConvertibleRoundEvent"
                    },
                    {
                      "$ref": "#/definitions/WarrantRoundEvent"
                    },
                    {
                      "$ref": "#/definitions/PricedRoundEvent"
                    }
                  ]
                },
                "maxItems": 200,
                "type": "array"
              }
            },
            "required": [
              "events"
            ],
            "type": "object"
          },
          "ComputeResponse": {
            "properties": {
              "data": {
                "properties": {
                  "final": {
                    "$ref": "#/definitions/CapTableSnapshot"
                  },
                  "snapshots": {
                    "description": "One snapshot per event, in order.",
                    "items": {
                      "$ref": "#/definitions/CapTableSnapshot"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "ConvertibleRoundEvent": {
            "description": "Issue SAFEs or notes; they convert to preferred at the next priced round.",
            "properties": {
              "convertibles": {
                "items": {
                  "properties": {
                    "accruedInterest": {
                      "type": "number"
                    },
                    "capType": {
                      "enum": [
                        "pre-money",
                        "post-money",
                        "post-money-fixed",
                        "post-money-fixed-after"
                      ]
                    },
                    "conversionDate": {
                      "description": "ISO date. Notes only.",
                      "type": "string"
                    },
                    "dilutionMode": {
                      "description": "Defaults to \"existing-only\".",
                      "enum": [
                        "existing-only",
                        "all"
                      ]
                    },
                    "discount": {
                      "description": "0..1.",
                      "type": "number"
                    },
                    "id": {
                      "type": "string"
                    },
                    "interestRate": {
                      "description": "Annual fraction (0.05 = 5%). Notes only.",
                      "type": "number"
                    },
                    "investmentDate": {
                      "description": "ISO date. Notes only.",
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "safe",
                        "note"
                      ]
                    },
                    "mfn": {
                      "type": "boolean"
                    },
                    "name": {
                      "type": "string"
                    },
                    "principal": {
                      "type": "number"
                    },
                    "valuationCap": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "principal"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "convertible_round"
              }
            },
            "required": [
              "type",
              "label",
              "convertibles"
            ],
            "type": "object"
          },
          "DailyUsage": {
            "properties": {
              "day": {
                "format": "date",
                "type": "string"
              },
              "endpoint": {
                "type": "string"
              },
              "failed": {
                "type": "integer"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "succeeded": {
                "type": "integer"
              }
            },
            "required": [
              "day",
              "product",
              "endpoint",
              "source",
              "succeeded",
              "failed"
            ],
            "type": "object"
          },
          "Error": {
            "properties": {
              "error": {
                "properties": {
                  "code": {
                    "enum": [
                      "unauthorized",
                      "payment_required",
                      "validation_failed",
                      "engine_error",
                      "quota_exhausted",
                      "rate_limited",
                      "idempotency_conflict",
                      "service_unavailable",
                      "method_not_allowed",
                      "internal_error"
                    ],
                    "type": "string"
                  },
                  "details": {},
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "code",
                  "message",
                  "retryable"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "FundComputeRequest": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "features": {
                "additionalProperties": false,
                "properties": {
                  "capTable": {
                    "additionalProperties": false,
                    "properties": {
                      "bridge": {
                        "additionalProperties": false,
                        "properties": {
                          "expectedAgeAtRound": {
                            "items": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "numInvestmentsTarget": {
                            "maximum": 10000,
                            "minimum": 0,
                            "type": "number"
                          },
                          "stageName": {
                            "maxLength": 200,
                            "type": "string"
                          },
                          "writeoffHoldYears": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "yearsBetweenRounds": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "numInvestmentsTarget"
                        ],
                        "type": "object"
                      },
                      "inputs": {
                        "additionalProperties": false,
                        "properties": {
                          "defaultExitMultiple": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultGraduationRate": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultValuationIncrease": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultWriteoffRate": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "dilutionFromOptionPoolsPerRound": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "dilutionPerRound": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "exitMultipleOnLastRound": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "followOnRounds": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "dilutionFromRound": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "newOptionPoolInRound": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "pctCompaniesFollowOn": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "valuationIncrease": {
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "type": "object"
                            },
                            "maxItems": 20,
                            "type": "array"
                          },
                          "newInvestmentCheckSize": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "numFollowOnRounds": {
                            "maximum": 20,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "numRoundsFollowOn": {
                            "maximum": 20,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "ownershipOutsideInvestment": {
                            "items": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "pctCompaniesFollowOn": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "postmoneyValuation": {
                            "exclusiveMinimum": 0,
                            "type": "number"
                          },
                          "roundLabels": {
                            "items": {
                              "maxLength": 200,
                              "type": "string"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "roundOutcomes": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "exitMultiple": {
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "graduationRate": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "writeoffRate": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "type": "object"
                            },
                            "maxItems": 21,
                            "type": "array"
                          }
                        },
                        "required": [
                          "newInvestmentCheckSize",
                          "postmoneyValuation",
                          "numFollowOnRounds",
                          "numRoundsFollowOn",
                          "defaultValuationIncrease",
                          "dilutionPerRound",
                          "dilutionFromOptionPoolsPerRound",
                          "pctCompaniesFollowOn",
                          "defaultGraduationRate",
                          "defaultWriteoffRate",
                          "defaultExitMultiple"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "inputs",
                      "bridge"
                    ],
                    "type": "object"
                  },
                  "deals": {
                    "description": "Build the portfolio from specific deals instead of entry stages and return tiers (and instead of capTable when both are sent). Each deal has its checks, each in a quarter from first close (1-based), and one exit in a quarter, at a multiple of everything invested in the deal (0 is a write-off) or for proceeds in money. Invested capital is the sum of the checks and called capital is solved from it; the fund life runs to the last exit, capped by maxFundLifeYears; each deal comes back as a row of result.tiers. Recycling keeps back the earliest proceeds, up to recycledCapitalPct of committed, only while later checks can use them. Send dealsMix true to mix the methods instead.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "exit": {
                          "additionalProperties": false,
                          "properties": {
                            "multiple": {
                              "description": "Of everything invested in the deal. 0 is a write-off.",
                              "maximum": 10000,
                              "minimum": 0,
                              "type": "number"
                            },
                            "proceeds": {
                              "description": "Exit proceeds in money, instead of a multiple.",
                              "minimum": 0,
                              "type": "number"
                            },
                            "quarter": {
                              "maximum": 400,
                              "minimum": 1,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "quarter"
                          ],
                          "type": "object"
                        },
                        "investments": {
                          "description": "The checks the fund writes into the deal: the initial check, then any follow-ons.",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "amount": {
                                "minimum": 0,
                                "type": "number"
                              },
                              "quarter": {
                                "description": "Quarter from first close, 1-based.",
                                "maximum": 400,
                                "minimum": 1,
                                "type": "integer"
                              }
                            },
                            "required": [
                              "quarter",
                              "amount"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "minItems": 1,
                          "type": "array"
                        },
                        "name": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "investments",
                        "exit"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "minItems": 1,
                    "type": "array"
                  },
                  "dealsMix": {
                    "description": "With deals: the deals come first, and the capital they leave (committed less fees and expenses, plus recycling, less the checks) is invested through the entry stages and return tiers, or capTable when sent, as it would be without deals. Recycling then goes to the stages, the fund life is the later of the deals' and the stages', and result.tiers lists the deals and then the tiers.",
                    "type": "boolean"
                  },
                  "fees": {
                    "additionalProperties": false,
                    "properties": {
                      "base": {
                        "enum": [
                          "committed",
                          "nav",
                          "aum",
                          "step-down"
                        ],
                        "type": "string"
                      },
                      "basesByYear": {
                        "items": {
                          "enum": [
                            "committed",
                            "nav",
                            "aum",
                            "step-down"
                          ],
                          "type": "string"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "feeYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "ratePct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "schedule": {
                        "additionalProperties": false,
                        "description": "The fee as an LPA states it, on the dated schedule: each rate from a point in fund years (0 = first close; 5.5 starts halfway through year 6 and cuts the period it lands in), charged on committed capital, invested cost not yet realized, or NAV, with organizational expenses above organizationalExpenseCap offsetting the fee. Runs for feeYears; base, ratePct, yearlyRateSchedule and basesByYear are ignored when it is set.",
                        "properties": {
                          "frequency": {
                            "enum": [
                              "quarterly",
                              "semiannual",
                              "annual"
                            ],
                            "type": "string"
                          },
                          "organizationalExpenseCap": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "steps": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "basis": {
                                  "enum": [
                                    "committed",
                                    "invested",
                                    "nav"
                                  ],
                                  "type": "string"
                                },
                                "fromYear": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "rate": {
                                  "maximum": 1,
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "required": [
                                "fromYear",
                                "rate",
                                "basis"
                              ],
                              "type": "object"
                            },
                            "maxItems": 20,
                            "minItems": 1,
                            "type": "array"
                          }
                        },
                        "required": [
                          "steps"
                        ],
                        "type": "object"
                      },
                      "stepDownAfterYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "yearlyRateSchedule": {
                        "items": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "maxItems": 100,
                        "type": "array"
                      }
                    },
                    "required": [
                      "base"
                    ],
                    "type": "object"
                  },
                  "followOn": {
                    "additionalProperties": false,
                    "properties": {
                      "offsetQuarters": {
                        "maximum": 40,
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "offsetQuarters"
                    ],
                    "type": "object"
                  },
                  "lpClasses": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "callSchedule": {
                          "additionalProperties": false,
                          "description": "Call this class on its own schedule instead of as the fund needs cash. pct is a share of the class commitment per fund year (called in the year's first quarter) or per quarter. Whatever the entries leave is called when the fund needs it.",
                          "properties": {
                            "frequency": {
                              "enum": [
                                "year",
                                "quarter"
                              ],
                              "type": "string"
                            },
                            "pct": {
                              "items": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "maxItems": 80,
                              "type": "array"
                            }
                          },
                          "required": [
                            "frequency",
                            "pct"
                          ],
                          "type": "object"
                        },
                        "commitment": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "feeOverrides": {
                          "additionalProperties": false,
                          "properties": {
                            "basesByYear": {
                              "items": {
                                "enum": [
                                  "committed",
                                  "nav",
                                  "aum",
                                  "step-down"
                                ],
                                "type": "string"
                              },
                              "maxItems": 100,
                              "type": "array"
                            },
                            "ratePct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "yearlyRateSchedule": {
                              "items": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "maxItems": 100,
                              "type": "array"
                            }
                          },
                          "type": "object"
                        },
                        "isFirstLoss": {
                          "type": "boolean"
                        },
                        "isRemainder": {
                          "type": "boolean"
                        },
                        "name": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "overrides": {
                          "additionalProperties": false,
                          "properties": {
                            "carryPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "carryTiers": {
                              "items": {
                                "additionalProperties": false,
                                "properties": {
                                  "carryPct": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "catchup": {
                                    "type": "boolean"
                                  },
                                  "irrThreshold": {
                                    "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "moicThreshold": {
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "moicThreshold",
                                  "carryPct"
                                ],
                                "type": "object"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "catchupGpShare": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "catchupPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "preferredReturnMode": {
                              "enum": [
                                "none",
                                "irr",
                                "multiple"
                              ],
                              "type": "string"
                            },
                            "preferredReturnMultiple": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "preferredReturnRate": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "type": "object"
                        }
                      },
                      "required": [
                        "name",
                        "commitment"
                      ],
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "mgmtCo": {
                    "additionalProperties": false,
                    "properties": {
                      "expenses": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "annualCost": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "growthRatePerYear": {
                              "maximum": 10,
                              "minimum": -1,
                              "type": "number"
                            },
                            "label": {
                              "maxLength": 200,
                              "type": "string"
                            },
                            "yearsActive": {
                              "items": {
                                "maximum": 100,
                                "minimum": 1,
                                "type": "integer"
                              },
                              "maxItems": 100,
                              "type": "array"
                            }
                          },
                          "required": [
                            "label",
                            "annualCost"
                          ],
                          "type": "object"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "oneTimeFormationCost": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "startingCash": {
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "expenses"
                    ],
                    "type": "object"
                  },
                  "recycling": {
                    "additionalProperties": false,
                    "properties": {
                      "defaultTreatment": {
                        "enum": [
                          "retained",
                          "deemed"
                        ],
                        "type": "string"
                      },
                      "schedule": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "amount": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "quarter": {
                              "maximum": 400,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "treatment": {
                              "enum": [
                                "retained",
                                "deemed"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "quarter"
                          ],
                          "type": "object"
                        },
                        "maxItems": 400,
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "waterfall": {
                    "additionalProperties": false,
                    "properties": {
                      "basis": {
                        "description": "Whole fund (the default, European) or deal by deal (American): return of capital owes only the capital in deals exited or written off so far, so carry can be paid before the fund returns all capital. The clawback settles on the whole fund.",
                        "enum": [
                          "whole-fund",
                          "deal-by-deal"
                        ],
                        "type": "string"
                      },
                      "carryTiers": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "carryPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "catchup": {
                              "type": "boolean"
                            },
                            "irrThreshold": {
                              "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "moicThreshold": {
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "moicThreshold",
                            "carryPct"
                          ],
                          "type": "object"
                        },
                        "maxItems": 20,
                        "type": "array"
                      },
                      "catchupGpShare": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "catchupMeasure": {
                        "description": "GP catchup: to the carry share of the pref paid (the default), or until the GP holds the carry share of all profit paid. They differ when the GP shares the catchup with LPs.",
                        "enum": [
                          "preferred",
                          "profit"
                        ],
                        "type": "string"
                      },
                      "catchupPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "clawback": {
                        "type": "boolean"
                      },
                      "preferredReturnBase": {
                        "description": "IRR pref: accrue on capital not yet returned plus unpaid pref (the default), or on each contribution from its date whatever comes back.",
                        "enum": [
                          "unreturned",
                          "contributed"
                        ],
                        "type": "string"
                      },
                      "preferredReturnCompounding": {
                        "description": "IRR pref: compound annually (the default) or simple interest.",
                        "enum": [
                          "annual",
                          "none"
                        ],
                        "type": "string"
                      },
                      "preferredReturnMode": {
                        "enum": [
                          "none",
                          "irr",
                          "multiple"
                        ],
                        "type": "string"
                      },
                      "preferredReturnMultiple": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "preferredReturnRate": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "firstCloseDate": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "format": {
                "enum": [
                  "json",
                  "xlsx",
                  "xlsx_url"
                ],
                "type": "string"
              },
              "fundName": {
                "maxLength": 200,
                "type": "string"
              },
              "granularity": {
                "enum": [
                  "year",
                  "quarter",
                  "none"
                ],
                "type": "string"
              },
              "inputs": {
                "additionalProperties": false,
                "properties": {
                  "carryPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "committedCapital": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "fundOperationsYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "gpCommitBearsCarry": {
                    "type": "boolean"
                  },
                  "gpCommitCountedTowardInvested": {
                    "type": "boolean"
                  },
                  "gpCommitPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "maxFundLifeYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "mgmtFeePct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "mgmtFeeSchedule": {
                    "items": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "mgmtFeesPeriodYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "navMarkupYears": {
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                  },
                  "newInvestmentPeriodYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "operationalExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        },
                        "quarterly": {
                          "items": [
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            }
                          ],
                          "maxItems": 4,
                          "minItems": 4,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "operationalExpensesAnnual": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "operationalExpensesBreakout": {
                    "additionalProperties": false,
                    "properties": {
                      "audit": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "fundAdmin": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "other": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "tax": {
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "fundAdmin",
                      "tax",
                      "audit",
                      "other"
                    ],
                    "type": "object"
                  },
                  "organizationalExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "organizationalExpenses": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "partnershipExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        },
                        "quarterly": {
                          "items": [
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            }
                          ],
                          "maxItems": 4,
                          "minItems": 4,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "partnershipExpensesAnnual": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "portfolio": {
                    "additionalProperties": false,
                    "properties": {
                      "avgCheckSizeFollow": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "avgCheckSizeNew": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "entryStages": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "avgCheckSize": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "followOnChecks": {
                              "items": {
                                "additionalProperties": false,
                                "properties": {
                                  "avgCheckSize": {
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  },
                                  "pctOfReserve": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "avgCheckSize"
                                ],
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "initialCheckLabel": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "numInvestments": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "pctAllocation": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "reserveRatio": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "name",
                            "numInvestments",
                            "avgCheckSize"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "followPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "newPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "newPct",
                      "followPct",
                      "avgCheckSizeNew",
                      "avgCheckSizeFollow"
                    ],
                    "type": "object"
                  },
                  "recycledCapitalPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "returnTiers": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "holdingPeriodYears": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "multiple": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "numCompanies": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "pctOfCapital": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "name",
                        "pctOfCapital",
                        "multiple",
                        "holdingPeriodYears"
                      ],
                      "type": "object"
                    },
                    "minItems": 1,
                    "type": "array"
                  },
                  "solveCalledFromDeployment": {
                    "type": "boolean"
                  },
                  "stageInputMode": {
                    "enum": [
                      "pct-capital",
                      "num-companies"
                    ],
                    "type": "string"
                  },
                  "targetTotalInvestments": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "tierFractional": {
                    "type": "boolean"
                  },
                  "tierInputMode": {
                    "enum": [
                      "pct-capital",
                      "num-companies"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "committedCapital",
                  "gpCommitPct",
                  "gpCommitCountedTowardInvested",
                  "organizationalExpenses",
                  "operationalExpensesAnnual",
                  "mgmtFeePct",
                  "recycledCapitalPct",
                  "carryPct",
                  "newInvestmentPeriodYears",
                  "mgmtFeesPeriodYears",
                  "portfolio",
                  "returnTiers"
                ],
                "type": "object"
              }
            },
            "required": [
              "inputs"
            ],
            "type": "object"
          },
          "FundDetail": {
            "description": "The fund over time. Returned unless the request sets granularity to \"none\". Every array in periods has one entry per label. waterfall, lpClasses and mgmtCo appear only when the request sent that feature block.",
            "properties": {
              "granularity": {
                "enum": [
                  "year",
                  "quarter"
                ],
                "type": "string"
              },
              "irr": {
                "description": "IRRs solved from the dated quarterly cash flows, with terminal NAV.",
                "properties": {
                  "grossIRR": {
                    "type": "number"
                  },
                  "netIRR": {
                    "properties": {
                      "lp": {
                        "type": "number"
                      },
                      "total": {
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "lpClasses": {
                "description": "LP economics split by class. Each class carries its lifetime totals, datedNetIRR (solved from its own dated calls and distributions) and periods: calledCapital, unscheduledCalls, distributions and netIRR (the class's IRR through each period, with its share of LP NAV as the terminal value), one entry per label. A class with a callSchedule is called on it; the others are called as the fund needs cash.",
                "type": "object"
              },
              "mgmtCo": {
                "type": "object"
              },
              "periods": {
                "properties": {
                  "calledCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "carriedInterest": {
                    "description": "GP carry paid each period, catchups included, net of the clawback.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "distributions": {
                    "$ref": "#/definitions/FundSeries",
                    "description": "Distributions after carry. The LP line runs through the waterfall period by period."
                  },
                  "dpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "gpCatchup": {
                    "description": "GP catchup paid each period. Only with a waterfall block.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "gpClawback": {
                    "description": "Carry the GP returns to the LPs, in the quarter the fund ends (or its year). Return of capital covers only capital called so far, so early carry is possible; the clawback brings the GP back to its whole-fund share. Off with features.waterfall.clawback: false.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "investedCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "jCurveLp": {
                    "description": "Cumulative LP net cash flow at the end of each period.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "labels": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "managementFees": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "nav": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "partnershipExpenses": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "preferredReturn": {
                    "description": "Preferred return paid to LPs each period. Only with a waterfall block.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "proceeds": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "recycledCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "recycledDeemed": {
                    "$ref": "#/definitions/FundSeries",
                    "description": "The part of recycledCapital booked as distributed and recontributed (features.recycling treatment \"deemed\"). It is also in calledCapital and distributions; recycling that is never distributed is in neither."
                  },
                  "rvpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "tvpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "labels"
                ],
                "type": "object"
              },
              "statements": {
                "properties": {
                  "currency": {
                    "type": "string"
                  },
                  "periods": {
                    "items": {
                      "properties": {
                        "balanceSheet": {
                          "properties": {
                            "carriedInterestDistributed": {
                              "description": "Carried interest distributed",
                              "type": "number"
                            },
                            "cash": {
                              "description": "Cash",
                              "type": "number"
                            },
                            "checkBalances": {
                              "description": "Check: assets less liabilities and capital. Zero when the balance sheet balances.",
                              "type": "number"
                            },
                            "contributedCapitalGp": {
                              "description": "Contributed capital, GP",
                              "type": "number"
                            },
                            "contributedCapitalLp": {
                              "description": "Contributed capital, LPs",
                              "type": "number"
                            },
                            "cumulativeNetInvestmentIncome": {
                              "description": "Cumulative net investment income (loss)",
                              "type": "number"
                            },
                            "cumulativeNetRealizedGain": {
                              "description": "Cumulative net realized gain (loss)",
                              "type": "number"
                            },
                            "cumulativeNetUnrealized": {
                              "description": "Cumulative net unrealized appreciation (depreciation)",
                              "type": "number"
                            },
                            "distributionsGpCommit": {
                              "description": "Distributions to the GP commit",
                              "type": "number"
                            },
                            "distributionsLp": {
                              "description": "Distributions to LPs",
                              "type": "number"
                            },
                            "investmentsAtCost": {
                              "description": "Investments, at cost. AUM.",
                              "type": "number"
                            },
                            "investmentsAtFairValue": {
                              "description": "Investments, at fair value. NAV.",
                              "type": "number"
                            },
                            "totalAssets": {
                              "description": "Total assets",
                              "type": "number"
                            },
                            "totalLiabilities": {
                              "description": "Total liabilities. Expenses are paid when incurred, so nothing is accrued.",
                              "type": "number"
                            },
                            "totalLiabilitiesAndCapital": {
                              "description": "Total liabilities and partners' capital",
                              "type": "number"
                            },
                            "totalPartnersCapital": {
                              "description": "Total partners' capital",
                              "type": "number"
                            },
                            "unfundedCommitments": {
                              "description": "Memo: unfunded commitments",
                              "type": "number"
                            },
                            "unrealizedAppreciation": {
                              "description": "Unrealized appreciation (depreciation)",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "cashFlow": {
                          "properties": {
                            "carriedInterestPaid": {
                              "description": "Carried interest paid",
                              "type": "number"
                            },
                            "cashBeginning": {
                              "description": "Cash, beginning of period",
                              "type": "number"
                            },
                            "cashEnd": {
                              "description": "Cash, end of period",
                              "type": "number"
                            },
                            "checkTiesToBalanceSheet": {
                              "description": "Check: cash less balance sheet cash. Zero when the cash flow ties to the balance sheet.",
                              "type": "number"
                            },
                            "contributionsGp": {
                              "description": "Capital contributions, GP",
                              "type": "number"
                            },
                            "contributionsLp": {
                              "description": "Capital contributions, LPs",
                              "type": "number"
                            },
                            "distributionsGpCommit": {
                              "description": "Distributions to the GP commit",
                              "type": "number"
                            },
                            "distributionsLp": {
                              "description": "Distributions to LPs",
                              "type": "number"
                            },
                            "lessNetChangeInUnrealized": {
                              "description": "Net change in unrealized (appreciation) depreciation",
                              "type": "number"
                            },
                            "lessNetRealizedGain": {
                              "description": "Net realized (gain) loss on investments",
                              "type": "number"
                            },
                            "netCashFromFinancing": {
                              "description": "Net cash from financing activities",
                              "type": "number"
                            },
                            "netCashFromOperating": {
                              "description": "Net cash from operating activities",
                              "type": "number"
                            },
                            "netChangeInCash": {
                              "description": "Net change in cash",
                              "type": "number"
                            },
                            "netIncreaseFromOperations": {
                              "description": "Net increase (decrease) in partners' capital from operations",
                              "type": "number"
                            },
                            "proceedsFromExits": {
                              "description": "Proceeds from exits",
                              "type": "number"
                            },
                            "purchasesOfInvestments": {
                              "description": "Purchases of investments. Includes recycled proceeds.",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "label": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operations": {
                          "properties": {
                            "managementFees": {
                              "description": "Management fees",
                              "type": "number"
                            },
                            "netChangeInUnrealized": {
                              "description": "Net change in unrealized appreciation (depreciation). Change in NAV less change in cost held.",
                              "type": "number"
                            },
                            "netGainOnInvestments": {
                              "description": "Net gain (loss) on investments",
                              "type": "number"
                            },
                            "netIncreaseFromOperations": {
                              "description": "Net increase (decrease) in partners' capital from operations",
                              "type": "number"
                            },
                            "netInvestmentIncome": {
                              "description": "Net investment income (loss). No interest or dividend income is modeled.",
                              "type": "number"
                            },
                            "netRealizedGain": {
                              "description": "Net realized gain (loss)",
                              "type": "number"
                            },
                            "operationalExpenseLines": {
                              "description": "The operational expense lines, when the model itemizes them.",
                              "items": {
                                "properties": {
                                  "amount": {
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "operationalExpenses": {
                              "description": "Operational expenses. Run through Q1 of the fund year after the fund life ends.",
                              "type": "number"
                            },
                            "organizationalExpenses": {
                              "description": "Organizational expenses",
                              "type": "number"
                            },
                            "partnershipExpenseLines": {
                              "description": "The partnership expense lines, when the model itemizes them.",
                              "items": {
                                "properties": {
                                  "amount": {
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "partnershipExpenses": {
                              "description": "Partnership expenses",
                              "type": "number"
                            },
                            "realizedGainOnExits": {
                              "description": "Realized gain on exits. Proceeds less the cost they release.",
                              "type": "number"
                            },
                            "realizedLossOnWriteoffs": {
                              "description": "Realized loss on writeoffs",
                              "type": "number"
                            },
                            "totalExpenses": {
                              "description": "Total expenses",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "periodEnd": {
                          "type": "string"
                        },
                        "periodStart": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "waterfall": {
                "description": "Lifetime totals of the waterfall as run through the periods: return of capital, preferred return (accrued on the dates capital was called), catchup, carry by tier.",
                "type": "object"
              }
            },
            "required": [
              "granularity",
              "irr",
              "periods",
              "statements"
            ],
            "type": "object"
          },
          "FundResult": {
            "properties": {
              "calledCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "committedCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "distributions": {
                "$ref": "#/definitions/LineTotals"
              },
              "dpi": {
                "type": "number"
              },
              "grossIRR": {
                "$ref": "#/definitions/LineTotals"
              },
              "grossMultiple": {
                "$ref": "#/definitions/LineTotals"
              },
              "investedCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "managementFees": {
                "$ref": "#/definitions/LineTotals"
              },
              "netIRR": {
                "$ref": "#/definitions/LineTotals"
              },
              "netMultiple": {
                "$ref": "#/definitions/LineTotals"
              },
              "partnershipExpenses": {
                "$ref": "#/definitions/LineTotals"
              },
              "pic": {
                "type": "number"
              },
              "proceeds": {
                "$ref": "#/definitions/LineTotals"
              },
              "rvpi": {
                "type": "number"
              },
              "tiers": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "tvpi": {
                "type": "number"
              },
              "weightedHoldPeriodYears": {
                "type": "number"
              }
            },
            "required": [
              "committedCapital",
              "calledCapital",
              "managementFees",
              "partnershipExpenses",
              "investedCapital",
              "proceeds",
              "distributions",
              "grossMultiple",
              "netMultiple",
              "grossIRR",
              "netIRR",
              "pic",
              "dpi",
              "rvpi",
              "tvpi",
              "weightedHoldPeriodYears"
            ],
            "type": "object"
          },
          "FundResultResponse": {
            "properties": {
              "data": {
                "properties": {
                  "detail": {
                    "$ref": "#/definitions/FundDetail"
                  },
                  "result": {
                    "$ref": "#/definitions/FundResult"
                  },
                  "workbook": {
                    "description": "Returned when the request sets format to \"xlsx\" or \"xlsx_url\": the live Excel workbook the web tool exports, with every number a formula back to its Get Started inputs. For \"xlsx\", decode data from base64 and save it as filename. For \"xlsx_url\", download it from url before expiresAt (24 hours).",
                    "properties": {
                      "contentType": {
                        "type": "string"
                      },
                      "data": {
                        "type": "string"
                      },
                      "encoding": {
                        "enum": [
                          "base64"
                        ],
                        "type": "string"
                      },
                      "expiresAt": {
                        "format": "date-time",
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "url": {
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "filename",
                      "contentType"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "FundSeries": {
            "properties": {
              "gp": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "lp": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "total": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              }
            },
            "required": [
              "total",
              "lp",
              "gp"
            ],
            "type": "object"
          },
          "LineTotals": {
            "properties": {
              "gp": {
                "type": "number"
              },
              "lp": {
                "type": "number"
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "total",
              "lp",
              "gp"
            ],
            "type": "object"
          },
          "ManualIssuanceEvent": {
            "description": "Escape hatch: issue exact shares for custom arrangements.",
            "properties": {
              "issuances": {
                "items": {
                  "properties": {
                    "class": {
                      "enum": [
                        "common",
                        "preferred",
                        "option-pool",
                        "warrant"
                      ]
                    },
                    "countMode": {
                      "description": "Defaults to \"shares\".",
                      "enum": [
                        "shares",
                        "percent"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "issuePrice": {
                      "type": "number"
                    },
                    "kind": {
                      "enum": [
                        "founder",
                        "employee",
                        "investor",
                        "pool"
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "pctBasis": {
                      "description": "Defaults to \"fully-diluted\".",
                      "enum": [
                        "fully-diluted",
                        "issued"
                      ]
                    },
                    "shares": {
                      "type": "number"
                    },
                    "targetPct": {
                      "description": "0..1, used when countMode=\"percent\".",
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "class",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "manual_issuance"
              }
            },
            "required": [
              "type",
              "label",
              "issuances"
            ],
            "type": "object"
          },
          "MonthlyUsage": {
            "properties": {
              "failed": {
                "type": "integer"
              },
              "month": {
                "pattern": "^[0-9]{4}-[0-9]{2}$",
                "type": "string"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "succeeded": {
                "type": "integer"
              }
            },
            "required": [
              "month",
              "product",
              "succeeded",
              "failed"
            ],
            "type": "object"
          },
          "OptionGrantEvent": {
            "description": "Grant options to people from one pool (fully-diluted-neutral).",
            "properties": {
              "grants": {
                "items": {
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "poolId": {
                "description": "Pool id to grant from; omit to draw the common pool.",
                "type": "string"
              },
              "type": {
                "const": "option_grant"
              }
            },
            "required": [
              "type",
              "label",
              "grants"
            ],
            "type": "object"
          },
          "OptionPoolEvent": {
            "description": "Create or expand an option pool (shares authorized, not granted).",
            "properties": {
              "countMode": {
                "description": "Defaults to \"shares\".",
                "enum": [
                  "shares",
                  "percent"
                ]
              },
              "id": {
                "description": "Pool id, so an option_grant can name which pool it draws from.",
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "shares": {
                "type": "number"
              },
              "strikePrice": {
                "type": "number"
              },
              "targetPct": {
                "description": "0..1 of post-event fully diluted, used when countMode=\"percent\".",
                "type": "number"
              },
              "type": {
                "const": "option_pool"
              }
            },
            "required": [
              "type",
              "label",
              "shares"
            ],
            "type": "object"
          },
          "PricedRoundEvent": {
            "description": "A priced equity round: new money buys newly issued preferred.",
            "properties": {
              "investments": {
                "items": {
                  "properties": {
                    "amount": {
                      "type": "number"
                    },
                    "antiDilution": {
                      "enum": [
                        "weighted-average",
                        "full-ratchet"
                      ]
                    },
                    "antiDilutionMethod": {
                      "description": "Defaults to \"conversion-ratio\".",
                      "enum": [
                        "conversion-ratio",
                        "new-shares"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "proRata": {
                      "description": "If true, amount is back-solved to hold pre-round ownership; match by id.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "amount"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "poolMode": {
                "description": "Legacy. Prefer pools[].",
                "enum": [
                  "pre",
                  "post",
                  "custom"
                ]
              },
              "poolPostPct": {
                "description": "Legacy. Prefer pools[].",
                "type": "number"
              },
              "pools": {
                "description": "Option pool top-ups for the round (preferred over the legacy targetPoolPct trio).",
                "items": {
                  "properties": {
                    "countMode": {
                      "description": "Defaults to \"percent\".",
                      "enum": [
                        "shares",
                        "percent"
                      ]
                    },
                    "label": {
                      "type": "string"
                    },
                    "mode": {
                      "description": "\"pre\" dilutes existing only; \"post\" dilutes new money too.",
                      "enum": [
                        "pre",
                        "post"
                      ]
                    },
                    "pct": {
                      "description": "0..1 of post-money fully diluted, when countMode=\"percent\".",
                      "type": "number"
                    },
                    "poolId": {
                      "description": "Set to track this pool separately (its own cap-table row).",
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "mode"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "preMoneyValuation": {
                "type": "number"
              },
              "targetPoolPct": {
                "description": "Legacy. Prefer pools[].",
                "type": "number"
              },
              "type": {
                "const": "priced_round"
              }
            },
            "required": [
              "type",
              "label",
              "preMoneyValuation",
              "investments"
            ],
            "type": "object"
          },
          "ProductAccess": {
            "properties": {
              "active": {
                "description": "Active paid term; use state/freeRemaining for trial access.",
                "type": "boolean"
              },
              "allowance": {
                "const": 6000,
                "type": "integer"
              },
              "freeRemaining": {
                "minimum": 0,
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "nextAction": {
                "type": "string"
              },
              "paidExpiration": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "paidRemaining": {
                "minimum": 0,
                "type": "integer"
              },
              "period": {
                "anyOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/definitions/UsagePeriod"
                  }
                ]
              },
              "priceUsd": {
                "const": 20,
                "type": "number"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "remaining": {
                "description": "Calculations this account can run now: the paid balance while a paid period is active, otherwise the lifetime free balance.",
                "minimum": 0,
                "type": "integer"
              },
              "source": {
                "enum": [
                  "free",
                  "paid"
                ],
                "type": "string"
              },
              "state": {
                "enum": [
                  "free_available",
                  "free_exhausted",
                  "paid_active",
                  "paid_expired",
                  "paid_quota_exhausted"
                ],
                "type": "string"
              }
            },
            "required": [
              "product",
              "name",
              "priceUsd",
              "allowance",
              "period",
              "remaining",
              "active"
            ],
            "type": "object"
          },
          "ResultResponse": {
            "properties": {
              "data": {
                "properties": {
                  "result": {
                    "oneOf": [
                      {
                        "$ref": "#/definitions/WaterfallResult"
                      },
                      {
                        "$ref": "#/definitions/FundResult"
                      }
                    ]
                  }
                },
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "SecondarySaleEvent": {
            "description": "Transfer existing shares from one holder to another.",
            "properties": {
              "class": {
                "description": "Defaults to \"common\".",
                "enum": [
                  "common",
                  "preferred",
                  "option-pool",
                  "warrant"
                ]
              },
              "fromId": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "round": {
                "description": "Which series the shares come from (e.g. \"Series A\").",
                "type": "string"
              },
              "shares": {
                "type": "number"
              },
              "toId": {
                "type": "string"
              },
              "toName": {
                "type": "string"
              },
              "type": {
                "const": "secondary_sale"
              }
            },
            "required": [
              "type",
              "label",
              "fromId",
              "toId",
              "toName",
              "shares"
            ],
            "type": "object"
          },
          "UsagePeriod": {
            "properties": {
              "allowance": {
                "type": "integer"
              },
              "consumed": {
                "type": "integer"
              },
              "enabled": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "period_end": {
                "format": "date-time",
                "type": "string"
              },
              "period_start": {
                "format": "date-time",
                "type": "string"
              },
              "reserved": {
                "type": "integer"
              }
            },
            "required": [
              "id",
              "period_start",
              "period_end",
              "allowance",
              "consumed",
              "reserved",
              "enabled"
            ],
            "type": "object"
          },
          "WarrantRoundEvent": {
            "description": "Issue warrants (right to buy shares at a set price); counts toward fully diluted now.",
            "properties": {
              "label": {
                "type": "string"
              },
              "type": {
                "const": "warrant_round"
              },
              "warrants": {
                "items": {
                  "properties": {
                    "countMode": {
                      "enum": [
                        "shares",
                        "value"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parValue": {
                      "type": "number"
                    },
                    "priceDiscount": {
                      "description": "0..1 discount on the source round price.",
                      "type": "number"
                    },
                    "priceFromRound": {
                      "description": "Source round label to price off, when variable.",
                      "type": "string"
                    },
                    "purchaseClass": {
                      "enum": [
                        "common",
                        "preferred"
                      ]
                    },
                    "purchasePrice": {
                      "type": "number"
                    },
                    "purchaseRound": {
                      "description": "For a preferred warrant, the series it targets.",
                      "type": "string"
                    },
                    "shares": {
                      "description": "When countMode=\"shares\".",
                      "type": "number"
                    },
                    "totalValue": {
                      "description": "When countMode=\"value\": shares = totalValue / purchasePrice.",
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "purchaseClass",
                    "countMode"
                  ],
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "type",
              "label",
              "warrants"
            ],
            "type": "object"
          },
          "WaterfallComputeRequest": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "exitValuation": {
                "maximum": 1000000000000000,
                "minimum": 0,
                "type": "number"
              },
              "model": {
                "additionalProperties": false,
                "properties": {
                  "common": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "invested": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  },
                  "convertibles": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "accruedInterest": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "cap": {
                          "exclusiveMinimum": 0,
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "cashOutAs": {
                          "enum": [
                            "debt",
                            "equity"
                          ],
                          "type": "string"
                        },
                        "cashOutSeniority": {
                          "enum": [
                            "senior",
                            "pari-passu"
                          ],
                          "type": "string"
                        },
                        "discount": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "kind": {
                          "enum": [
                            "pre-safe",
                            "post-safe",
                            "note"
                          ],
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "premiumMultiple": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "principal": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seniority": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "kind",
                        "principal"
                      ],
                      "type": "object"
                    },
                    "maxItems": 100,
                    "type": "array"
                  },
                  "debt": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "options": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "strike": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "vestedFraction": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares",
                        "strike"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  },
                  "preferred": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "conversionRatio": {
                          "exclusiveMinimum": 0,
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "dividendCumulative": {
                          "type": "boolean"
                        },
                        "dividendRate": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "dividendStart": {
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                          "type": "string"
                        },
                        "holders": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "id": {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              },
                              "invested": {
                                "maximum": 1000000000000000,
                                "minimum": 0,
                                "type": "number"
                              },
                              "name": {
                                "maxLength": 200,
                                "type": "string"
                              },
                              "shares": {
                                "maximum": 1000000000000000,
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "shares",
                              "invested"
                            ],
                            "type": "object"
                          },
                          "maxItems": 500,
                          "type": "array"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "investmentDate": {
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                          "type": "string"
                        },
                        "multiple": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "participation": {
                          "enum": [
                            "none",
                            "full",
                            "capped"
                          ],
                          "type": "string"
                        },
                        "participationCap": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seniority": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "holders",
                        "seniority"
                      ],
                      "type": "object"
                    },
                    "maxItems": 20,
                    "type": "array"
                  },
                  "transactionExpenses": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "unissuedPool": {
                    "additionalProperties": false,
                    "properties": {
                      "shares": {
                        "maximum": 1000000000000000,
                        "minimum": 0,
                        "type": "number"
                      },
                      "treatment": {
                        "const": "cancel",
                        "type": "string"
                      }
                    },
                    "required": [
                      "shares"
                    ],
                    "type": "object"
                  },
                  "warrants": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "strike": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares",
                        "strike"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  }
                },
                "required": [
                  "common",
                  "preferred"
                ],
                "type": "object"
              }
            },
            "required": [
              "exitValuation",
              "model"
            ],
            "type": "object"
          },
          "WaterfallResult": {
            "properties": {
              "classes": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "converged": {
                "type": "boolean"
              },
              "convertibles": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "distributable": {
                "type": "number"
              },
              "exitValuation": {
                "type": "number"
              },
              "holders": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "iterations": {
                "type": "integer"
              },
              "perShare": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "series": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "exitValuation",
              "distributable",
              "classes",
              "series",
              "convertibles",
              "holders",
              "perShare",
              "iterations",
              "converged"
            ],
            "type": "object"
          }
        },
        "properties": {
          "exitValuation": {
            "maximum": 1000000000000000,
            "minimum": 0,
            "type": "number"
          },
          "idempotency_key": {
            "description": "Optional retry key; reuse only with identical input.",
            "type": "string"
          },
          "model": {
            "additionalProperties": false,
            "properties": {
              "common": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "id": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "invested": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "name": {
                      "maxLength": 200,
                      "type": "string"
                    },
                    "shares": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "shares"
                  ],
                  "type": "object"
                },
                "maxItems": 500,
                "type": "array"
              },
              "convertibles": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "accruedInterest": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "cap": {
                      "exclusiveMinimum": 0,
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "cashOutAs": {
                      "enum": [
                        "debt",
                        "equity"
                      ],
                      "type": "string"
                    },
                    "cashOutSeniority": {
                      "enum": [
                        "senior",
                        "pari-passu"
                      ],
                      "type": "string"
                    },
                    "discount": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "id": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "pre-safe",
                        "post-safe",
                        "note"
                      ],
                      "type": "string"
                    },
                    "name": {
                      "maxLength": 200,
                      "type": "string"
                    },
                    "premiumMultiple": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "principal": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "seniority": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "principal"
                  ],
                  "type": "object"
                },
                "maxItems": 100,
                "type": "array"
              },
              "debt": {
                "maximum": 1000000000000000,
                "minimum": 0,
                "type": "number"
              },
              "options": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "id": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "name": {
                      "maxLength": 200,
                      "type": "string"
                    },
                    "shares": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "strike": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "vestedFraction": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "shares",
                    "strike"
                  ],
                  "type": "object"
                },
                "maxItems": 500,
                "type": "array"
              },
              "preferred": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "conversionRatio": {
                      "exclusiveMinimum": 0,
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "dividendCumulative": {
                      "type": "boolean"
                    },
                    "dividendRate": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "dividendStart": {
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                      "type": "string"
                    },
                    "holders": {
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "id": {
                            "maxLength": 200,
                            "minLength": 1,
                            "type": "string"
                          },
                          "invested": {
                            "maximum": 1000000000000000,
                            "minimum": 0,
                            "type": "number"
                          },
                          "name": {
                            "maxLength": 200,
                            "type": "string"
                          },
                          "shares": {
                            "maximum": 1000000000000000,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "id",
                          "name",
                          "shares",
                          "invested"
                        ],
                        "type": "object"
                      },
                      "maxItems": 500,
                      "type": "array"
                    },
                    "id": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "investmentDate": {
                      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                      "type": "string"
                    },
                    "multiple": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "name": {
                      "maxLength": 200,
                      "type": "string"
                    },
                    "participation": {
                      "enum": [
                        "none",
                        "full",
                        "capped"
                      ],
                      "type": "string"
                    },
                    "participationCap": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "seniority": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "holders",
                    "seniority"
                  ],
                  "type": "object"
                },
                "maxItems": 20,
                "type": "array"
              },
              "transactionExpenses": {
                "maximum": 1000000000000000,
                "minimum": 0,
                "type": "number"
              },
              "unissuedPool": {
                "additionalProperties": false,
                "properties": {
                  "shares": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "treatment": {
                    "const": "cancel",
                    "type": "string"
                  }
                },
                "required": [
                  "shares"
                ],
                "type": "object"
              },
              "warrants": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "id": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "name": {
                      "maxLength": 200,
                      "type": "string"
                    },
                    "shares": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    },
                    "strike": {
                      "maximum": 1000000000000000,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "shares",
                    "strike"
                  ],
                  "type": "object"
                },
                "maxItems": 500,
                "type": "array"
              }
            },
            "required": [
              "common",
              "preferred"
            ],
            "type": "object"
          }
        },
        "required": [
          "exitValuation",
          "model"
        ],
        "type": "object"
      },
      "name": "exit_waterfall_compute"
    },
    {
      "description": "Use whenever the user asks how a venture fund's terms play out: fund size, management fees and step-downs, carry, investment period, recycling, reserves, deployment pace, and resulting net returns to LPs. Takes fund inputs (start from the defaults and change only what the user specifies) and returns lifetime capital, fees, investable capital and gross/net multiples (result), plus the fund over time by default (detail): capital calls, fees, investments, distributions and NAV by year, DPI/RVPI/TVPI by year, the LP J-curve, IRRs solved from those dated cash flows, and financial statements (statement of operations, balance sheet and cash flow, the same lines as the Excel Statements sheet, with check lines that are zero when they tie out). Pass granularity \"quarter\" for quarters or \"none\" for totals only. Optional features apply when their block is sent: preferred return, catch-up and tiered carry (features.waterfall; return of capital covers capital called so far, so carry can be paid on early exits, and a GP clawback, on by default and off with features.waterfall.clawback false, trues the GP back to its share on a fund-end view, reported as gpClawback by period and waterfall.clawback in total; the pref compounds annually or is simple, preferredReturnCompounding \"annual\" or \"none\", on unreturned or contributed capital, preferredReturnBase; catchupMeasure \"preferred\" catches the GP up to its share of the pref paid and \"profit\" to its share of all profit; a carry tier steps up at an LP multiple, moicThreshold, or an LP IRR, irrThreshold, and with catchup true it first brings the GP to the new rate on all profit; basis \"deal-by-deal\" runs American terms, returning only the capital in deals exited or written off before carry, with the clawback still on the whole fund; the Excel workbook carries every one of these terms, deal by deal on a Deals sheet), NAV/AUM/step-down fee bases (features.fees; features.fees.schedule states the fee as an LPA dates it: frequency, steps of {fromYear, rate, basis \"committed\", \"invested\" or \"nav\"}, and an optional organizationalExpenseCap above which org expenses come off the fee), recycling by quarter (features.recycling: defaultTreatment \"retained\", never distributed, or \"deemed\", distributed and recontributed, plus a schedule of {quarter, amount, treatment} to pin, skip with amount 0, or rebook a quarter; deemed recycling is in calledCapital and distributions and reported as recycledDeemed), LP classes (features.lpClasses, each called as the fund needs cash or on its own callSchedule; each class returns its calls, distributions and net IRR by period and a datedNetIRR), portfolio construction from specific deals (features.deals: a list of {name, investments: [{quarter, amount}], exit: {quarter, multiple or proceeds}}, quarters 1-based from first close, a multiple of 0 a write-off; it replaces stages and return tiers, the fund life runs to the last exit, and it wins over capTable; add dealsMix true to mix the methods, so the deals come first and the capital they leave goes through the stages and return tiers or capTable, and result.tiers lists the deals, flagged deal, then the tiers), cap-table portfolio construction, follow-on timing, and a management company budget. result.grossIRR and result.netIRR are geometric annualizations over weighted holding periods; quote detail.irr when the user asks for an IRR from cash flows. When the user wants the Excel model, pass format \"xlsx_url\" (and fundName to name the file): the response adds workbook.url, a download link to the live workbook that lasts 24 hours, with every number a formula back to the inputs. Give the user that link. Free without an account for a few runs a day; signed in, lifetime free credits or paid access. Fund Economics, a separate $20/year product with 6,000 calculations. If the result contains action_required (not signed in, no purchase, allowance used), relay it to the user with its links and offer to retry. Never skip the calculation silently.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "definitions": {
          "AccessResponse": {
            "properties": {
              "data": {
                "properties": {
                  "daily": {
                    "items": {
                      "$ref": "#/definitions/DailyUsage"
                    },
                    "type": "array"
                  },
                  "monthly": {
                    "items": {
                      "$ref": "#/definitions/MonthlyUsage"
                    },
                    "type": "array"
                  },
                  "periods": {
                    "items": {
                      "allOf": [
                        {
                          "$ref": "#/definitions/UsagePeriod"
                        },
                        {
                          "properties": {
                            "product": {
                              "enum": [
                                "cap-table",
                                "fund-economics"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "product"
                          ],
                          "type": "object"
                        }
                      ]
                    },
                    "type": "array"
                  },
                  "products": {
                    "items": {
                      "$ref": "#/definitions/ProductAccess"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "products",
                  "daily"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "CapTableSnapshot": {
            "properties": {
              "holdings": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "outstandingConvertibles": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "ownership": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "pricePerShare": {
                "type": "number"
              },
              "roundDetail": {
                "type": "object"
              },
              "totalShares": {
                "type": "number"
              }
            },
            "required": [
              "label",
              "holdings",
              "totalShares",
              "ownership",
              "outstandingConvertibles"
            ],
            "type": "object"
          },
          "CommonIssuanceEvent": {
            "description": "Issue common stock (founders, employees).",
            "properties": {
              "grants": {
                "items": {
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "founder",
                        "employee"
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "common_issuance"
              }
            },
            "required": [
              "type",
              "label",
              "grants"
            ],
            "type": "object"
          },
          "ComputeRequest": {
            "additionalProperties": false,
            "properties": {
              "events": {
                "items": {
                  "description": "One cap-table event, discriminated by `type`. Pass events in chronological order.",
                  "discriminator": {
                    "mapping": {
                      "common_issuance": "#/components/schemas/CommonIssuanceEvent",
                      "convertible_round": "#/components/schemas/ConvertibleRoundEvent",
                      "manual_issuance": "#/components/schemas/ManualIssuanceEvent",
                      "option_grant": "#/components/schemas/OptionGrantEvent",
                      "option_pool": "#/components/schemas/OptionPoolEvent",
                      "priced_round": "#/components/schemas/PricedRoundEvent",
                      "secondary_sale": "#/components/schemas/SecondarySaleEvent",
                      "warrant_round": "#/components/schemas/WarrantRoundEvent"
                    },
                    "propertyName": "type"
                  },
                  "oneOf": [
                    {
                      "$ref": "#/definitions/CommonIssuanceEvent"
                    },
                    {
                      "$ref": "#/definitions/OptionPoolEvent"
                    },
                    {
                      "$ref": "#/definitions/SecondarySaleEvent"
                    },
                    {
                      "$ref": "#/definitions/OptionGrantEvent"
                    },
                    {
                      "$ref": "#/definitions/ManualIssuanceEvent"
                    },
                    {
                      "$ref": "#/definitions/ConvertibleRoundEvent"
                    },
                    {
                      "$ref": "#/definitions/WarrantRoundEvent"
                    },
                    {
                      "$ref": "#/definitions/PricedRoundEvent"
                    }
                  ]
                },
                "maxItems": 200,
                "type": "array"
              }
            },
            "required": [
              "events"
            ],
            "type": "object"
          },
          "ComputeResponse": {
            "properties": {
              "data": {
                "properties": {
                  "final": {
                    "$ref": "#/definitions/CapTableSnapshot"
                  },
                  "snapshots": {
                    "description": "One snapshot per event, in order.",
                    "items": {
                      "$ref": "#/definitions/CapTableSnapshot"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "ConvertibleRoundEvent": {
            "description": "Issue SAFEs or notes; they convert to preferred at the next priced round.",
            "properties": {
              "convertibles": {
                "items": {
                  "properties": {
                    "accruedInterest": {
                      "type": "number"
                    },
                    "capType": {
                      "enum": [
                        "pre-money",
                        "post-money",
                        "post-money-fixed",
                        "post-money-fixed-after"
                      ]
                    },
                    "conversionDate": {
                      "description": "ISO date. Notes only.",
                      "type": "string"
                    },
                    "dilutionMode": {
                      "description": "Defaults to \"existing-only\".",
                      "enum": [
                        "existing-only",
                        "all"
                      ]
                    },
                    "discount": {
                      "description": "0..1.",
                      "type": "number"
                    },
                    "id": {
                      "type": "string"
                    },
                    "interestRate": {
                      "description": "Annual fraction (0.05 = 5%). Notes only.",
                      "type": "number"
                    },
                    "investmentDate": {
                      "description": "ISO date. Notes only.",
                      "type": "string"
                    },
                    "kind": {
                      "enum": [
                        "safe",
                        "note"
                      ]
                    },
                    "mfn": {
                      "type": "boolean"
                    },
                    "name": {
                      "type": "string"
                    },
                    "principal": {
                      "type": "number"
                    },
                    "valuationCap": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "principal"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "convertible_round"
              }
            },
            "required": [
              "type",
              "label",
              "convertibles"
            ],
            "type": "object"
          },
          "DailyUsage": {
            "properties": {
              "day": {
                "format": "date",
                "type": "string"
              },
              "endpoint": {
                "type": "string"
              },
              "failed": {
                "type": "integer"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "source": {
                "type": "string"
              },
              "succeeded": {
                "type": "integer"
              }
            },
            "required": [
              "day",
              "product",
              "endpoint",
              "source",
              "succeeded",
              "failed"
            ],
            "type": "object"
          },
          "Error": {
            "properties": {
              "error": {
                "properties": {
                  "code": {
                    "enum": [
                      "unauthorized",
                      "payment_required",
                      "validation_failed",
                      "engine_error",
                      "quota_exhausted",
                      "rate_limited",
                      "idempotency_conflict",
                      "service_unavailable",
                      "method_not_allowed",
                      "internal_error"
                    ],
                    "type": "string"
                  },
                  "details": {},
                  "message": {
                    "type": "string"
                  },
                  "retryable": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "code",
                  "message",
                  "retryable"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "FundComputeRequest": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "features": {
                "additionalProperties": false,
                "properties": {
                  "capTable": {
                    "additionalProperties": false,
                    "properties": {
                      "bridge": {
                        "additionalProperties": false,
                        "properties": {
                          "expectedAgeAtRound": {
                            "items": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "numInvestmentsTarget": {
                            "maximum": 10000,
                            "minimum": 0,
                            "type": "number"
                          },
                          "stageName": {
                            "maxLength": 200,
                            "type": "string"
                          },
                          "writeoffHoldYears": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "yearsBetweenRounds": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          }
                        },
                        "required": [
                          "numInvestmentsTarget"
                        ],
                        "type": "object"
                      },
                      "inputs": {
                        "additionalProperties": false,
                        "properties": {
                          "defaultExitMultiple": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultGraduationRate": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultValuationIncrease": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "defaultWriteoffRate": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "dilutionFromOptionPoolsPerRound": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "dilutionPerRound": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "exitMultipleOnLastRound": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "followOnRounds": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "dilutionFromRound": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "newOptionPoolInRound": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "pctCompaniesFollowOn": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "valuationIncrease": {
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "type": "object"
                            },
                            "maxItems": 20,
                            "type": "array"
                          },
                          "newInvestmentCheckSize": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "numFollowOnRounds": {
                            "maximum": 20,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "numRoundsFollowOn": {
                            "maximum": 20,
                            "minimum": 0,
                            "type": "integer"
                          },
                          "ownershipOutsideInvestment": {
                            "items": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "pctCompaniesFollowOn": {
                            "maximum": 100,
                            "minimum": 0,
                            "type": "number"
                          },
                          "postmoneyValuation": {
                            "exclusiveMinimum": 0,
                            "type": "number"
                          },
                          "roundLabels": {
                            "items": {
                              "maxLength": 200,
                              "type": "string"
                            },
                            "maxItems": 21,
                            "type": "array"
                          },
                          "roundOutcomes": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "exitMultiple": {
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "graduationRate": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "writeoffRate": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "type": "object"
                            },
                            "maxItems": 21,
                            "type": "array"
                          }
                        },
                        "required": [
                          "newInvestmentCheckSize",
                          "postmoneyValuation",
                          "numFollowOnRounds",
                          "numRoundsFollowOn",
                          "defaultValuationIncrease",
                          "dilutionPerRound",
                          "dilutionFromOptionPoolsPerRound",
                          "pctCompaniesFollowOn",
                          "defaultGraduationRate",
                          "defaultWriteoffRate",
                          "defaultExitMultiple"
                        ],
                        "type": "object"
                      }
                    },
                    "required": [
                      "inputs",
                      "bridge"
                    ],
                    "type": "object"
                  },
                  "deals": {
                    "description": "Build the portfolio from specific deals instead of entry stages and return tiers (and instead of capTable when both are sent). Each deal has its checks, each in a quarter from first close (1-based), and one exit in a quarter, at a multiple of everything invested in the deal (0 is a write-off) or for proceeds in money. Invested capital is the sum of the checks and called capital is solved from it; the fund life runs to the last exit, capped by maxFundLifeYears; each deal comes back as a row of result.tiers. Recycling keeps back the earliest proceeds, up to recycledCapitalPct of committed, only while later checks can use them. Send dealsMix true to mix the methods instead.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "exit": {
                          "additionalProperties": false,
                          "properties": {
                            "multiple": {
                              "description": "Of everything invested in the deal. 0 is a write-off.",
                              "maximum": 10000,
                              "minimum": 0,
                              "type": "number"
                            },
                            "proceeds": {
                              "description": "Exit proceeds in money, instead of a multiple.",
                              "minimum": 0,
                              "type": "number"
                            },
                            "quarter": {
                              "maximum": 400,
                              "minimum": 1,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "quarter"
                          ],
                          "type": "object"
                        },
                        "investments": {
                          "description": "The checks the fund writes into the deal: the initial check, then any follow-ons.",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "amount": {
                                "minimum": 0,
                                "type": "number"
                              },
                              "quarter": {
                                "description": "Quarter from first close, 1-based.",
                                "maximum": 400,
                                "minimum": 1,
                                "type": "integer"
                              }
                            },
                            "required": [
                              "quarter",
                              "amount"
                            ],
                            "type": "object"
                          },
                          "maxItems": 40,
                          "minItems": 1,
                          "type": "array"
                        },
                        "name": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "investments",
                        "exit"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "minItems": 1,
                    "type": "array"
                  },
                  "dealsMix": {
                    "description": "With deals: the deals come first, and the capital they leave (committed less fees and expenses, plus recycling, less the checks) is invested through the entry stages and return tiers, or capTable when sent, as it would be without deals. Recycling then goes to the stages, the fund life is the later of the deals' and the stages', and result.tiers lists the deals and then the tiers.",
                    "type": "boolean"
                  },
                  "fees": {
                    "additionalProperties": false,
                    "properties": {
                      "base": {
                        "enum": [
                          "committed",
                          "nav",
                          "aum",
                          "step-down"
                        ],
                        "type": "string"
                      },
                      "basesByYear": {
                        "items": {
                          "enum": [
                            "committed",
                            "nav",
                            "aum",
                            "step-down"
                          ],
                          "type": "string"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "feeYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "ratePct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "schedule": {
                        "additionalProperties": false,
                        "description": "The fee as an LPA states it, on the dated schedule: each rate from a point in fund years (0 = first close; 5.5 starts halfway through year 6 and cuts the period it lands in), charged on committed capital, invested cost not yet realized, or NAV, with organizational expenses above organizationalExpenseCap offsetting the fee. Runs for feeYears; base, ratePct, yearlyRateSchedule and basesByYear are ignored when it is set.",
                        "properties": {
                          "frequency": {
                            "enum": [
                              "quarterly",
                              "semiannual",
                              "annual"
                            ],
                            "type": "string"
                          },
                          "organizationalExpenseCap": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "steps": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "basis": {
                                  "enum": [
                                    "committed",
                                    "invested",
                                    "nav"
                                  ],
                                  "type": "string"
                                },
                                "fromYear": {
                                  "maximum": 100,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                "rate": {
                                  "maximum": 1,
                                  "minimum": 0,
                                  "type": "number"
                                }
                              },
                              "required": [
                                "fromYear",
                                "rate",
                                "basis"
                              ],
                              "type": "object"
                            },
                            "maxItems": 20,
                            "minItems": 1,
                            "type": "array"
                          }
                        },
                        "required": [
                          "steps"
                        ],
                        "type": "object"
                      },
                      "stepDownAfterYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "yearlyRateSchedule": {
                        "items": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "maxItems": 100,
                        "type": "array"
                      }
                    },
                    "required": [
                      "base"
                    ],
                    "type": "object"
                  },
                  "followOn": {
                    "additionalProperties": false,
                    "properties": {
                      "offsetQuarters": {
                        "maximum": 40,
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "offsetQuarters"
                    ],
                    "type": "object"
                  },
                  "lpClasses": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "callSchedule": {
                          "additionalProperties": false,
                          "description": "Call this class on its own schedule instead of as the fund needs cash. pct is a share of the class commitment per fund year (called in the year's first quarter) or per quarter. Whatever the entries leave is called when the fund needs it.",
                          "properties": {
                            "frequency": {
                              "enum": [
                                "year",
                                "quarter"
                              ],
                              "type": "string"
                            },
                            "pct": {
                              "items": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "maxItems": 80,
                              "type": "array"
                            }
                          },
                          "required": [
                            "frequency",
                            "pct"
                          ],
                          "type": "object"
                        },
                        "commitment": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "feeOverrides": {
                          "additionalProperties": false,
                          "properties": {
                            "basesByYear": {
                              "items": {
                                "enum": [
                                  "committed",
                                  "nav",
                                  "aum",
                                  "step-down"
                                ],
                                "type": "string"
                              },
                              "maxItems": 100,
                              "type": "array"
                            },
                            "ratePct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "yearlyRateSchedule": {
                              "items": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "maxItems": 100,
                              "type": "array"
                            }
                          },
                          "type": "object"
                        },
                        "isFirstLoss": {
                          "type": "boolean"
                        },
                        "isRemainder": {
                          "type": "boolean"
                        },
                        "name": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "overrides": {
                          "additionalProperties": false,
                          "properties": {
                            "carryPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "carryTiers": {
                              "items": {
                                "additionalProperties": false,
                                "properties": {
                                  "carryPct": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "catchup": {
                                    "type": "boolean"
                                  },
                                  "irrThreshold": {
                                    "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "moicThreshold": {
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "moicThreshold",
                                  "carryPct"
                                ],
                                "type": "object"
                              },
                              "maxItems": 20,
                              "type": "array"
                            },
                            "catchupGpShare": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "catchupPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "preferredReturnMode": {
                              "enum": [
                                "none",
                                "irr",
                                "multiple"
                              ],
                              "type": "string"
                            },
                            "preferredReturnMultiple": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "preferredReturnRate": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "type": "object"
                        }
                      },
                      "required": [
                        "name",
                        "commitment"
                      ],
                      "type": "object"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "mgmtCo": {
                    "additionalProperties": false,
                    "properties": {
                      "expenses": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "annualCost": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "growthRatePerYear": {
                              "maximum": 10,
                              "minimum": -1,
                              "type": "number"
                            },
                            "label": {
                              "maxLength": 200,
                              "type": "string"
                            },
                            "yearsActive": {
                              "items": {
                                "maximum": 100,
                                "minimum": 1,
                                "type": "integer"
                              },
                              "maxItems": 100,
                              "type": "array"
                            }
                          },
                          "required": [
                            "label",
                            "annualCost"
                          ],
                          "type": "object"
                        },
                        "maxItems": 100,
                        "type": "array"
                      },
                      "oneTimeFormationCost": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "startingCash": {
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "expenses"
                    ],
                    "type": "object"
                  },
                  "recycling": {
                    "additionalProperties": false,
                    "properties": {
                      "defaultTreatment": {
                        "enum": [
                          "retained",
                          "deemed"
                        ],
                        "type": "string"
                      },
                      "schedule": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "amount": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "quarter": {
                              "maximum": 400,
                              "minimum": 1,
                              "type": "integer"
                            },
                            "treatment": {
                              "enum": [
                                "retained",
                                "deemed"
                              ],
                              "type": "string"
                            }
                          },
                          "required": [
                            "quarter"
                          ],
                          "type": "object"
                        },
                        "maxItems": 400,
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "waterfall": {
                    "additionalProperties": false,
                    "properties": {
                      "basis": {
                        "description": "Whole fund (the default, European) or deal by deal (American): return of capital owes only the capital in deals exited or written off so far, so carry can be paid before the fund returns all capital. The clawback settles on the whole fund.",
                        "enum": [
                          "whole-fund",
                          "deal-by-deal"
                        ],
                        "type": "string"
                      },
                      "carryTiers": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "carryPct": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "catchup": {
                              "type": "boolean"
                            },
                            "irrThreshold": {
                              "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "moicThreshold": {
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "moicThreshold",
                            "carryPct"
                          ],
                          "type": "object"
                        },
                        "maxItems": 20,
                        "type": "array"
                      },
                      "catchupGpShare": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "catchupMeasure": {
                        "description": "GP catchup: to the carry share of the pref paid (the default), or until the GP holds the carry share of all profit paid. They differ when the GP shares the catchup with LPs.",
                        "enum": [
                          "preferred",
                          "profit"
                        ],
                        "type": "string"
                      },
                      "catchupPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "clawback": {
                        "type": "boolean"
                      },
                      "preferredReturnBase": {
                        "description": "IRR pref: accrue on capital not yet returned plus unpaid pref (the default), or on each contribution from its date whatever comes back.",
                        "enum": [
                          "unreturned",
                          "contributed"
                        ],
                        "type": "string"
                      },
                      "preferredReturnCompounding": {
                        "description": "IRR pref: compound annually (the default) or simple interest.",
                        "enum": [
                          "annual",
                          "none"
                        ],
                        "type": "string"
                      },
                      "preferredReturnMode": {
                        "enum": [
                          "none",
                          "irr",
                          "multiple"
                        ],
                        "type": "string"
                      },
                      "preferredReturnMultiple": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "preferredReturnRate": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "firstCloseDate": {
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                "type": "string"
              },
              "format": {
                "enum": [
                  "json",
                  "xlsx",
                  "xlsx_url"
                ],
                "type": "string"
              },
              "fundName": {
                "maxLength": 200,
                "type": "string"
              },
              "granularity": {
                "enum": [
                  "year",
                  "quarter",
                  "none"
                ],
                "type": "string"
              },
              "inputs": {
                "additionalProperties": false,
                "properties": {
                  "carryPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "committedCapital": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "fundOperationsYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "gpCommitBearsCarry": {
                    "type": "boolean"
                  },
                  "gpCommitCountedTowardInvested": {
                    "type": "boolean"
                  },
                  "gpCommitPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "maxFundLifeYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "mgmtFeePct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "mgmtFeeSchedule": {
                    "items": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "mgmtFeesPeriodYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "navMarkupYears": {
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                  },
                  "newInvestmentPeriodYears": {
                    "exclusiveMinimum": 0,
                    "type": "number"
                  },
                  "operationalExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        },
                        "quarterly": {
                          "items": [
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            }
                          ],
                          "maxItems": 4,
                          "minItems": 4,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "operationalExpensesAnnual": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "operationalExpensesBreakout": {
                    "additionalProperties": false,
                    "properties": {
                      "audit": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "fundAdmin": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "other": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "tax": {
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "fundAdmin",
                      "tax",
                      "audit",
                      "other"
                    ],
                    "type": "object"
                  },
                  "organizationalExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "organizationalExpenses": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "partnershipExpenseLines": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "label": {
                          "type": "string"
                        },
                        "quarterly": {
                          "items": [
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            },
                            {
                              "minimum": 0,
                              "type": "number"
                            }
                          ],
                          "maxItems": 4,
                          "minItems": 4,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "amount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "partnershipExpensesAnnual": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "portfolio": {
                    "additionalProperties": false,
                    "properties": {
                      "avgCheckSizeFollow": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "avgCheckSizeNew": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "entryStages": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "avgCheckSize": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "followOnChecks": {
                              "items": {
                                "additionalProperties": false,
                                "properties": {
                                  "avgCheckSize": {
                                    "minimum": 0,
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  },
                                  "pctOfReserve": {
                                    "maximum": 1,
                                    "minimum": 0,
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "avgCheckSize"
                                ],
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "initialCheckLabel": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "numInvestments": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "pctAllocation": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            },
                            "reserveRatio": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "name",
                            "numInvestments",
                            "avgCheckSize"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "followPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "newPct": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "newPct",
                      "followPct",
                      "avgCheckSizeNew",
                      "avgCheckSizeFollow"
                    ],
                    "type": "object"
                  },
                  "recycledCapitalPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "returnTiers": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "holdingPeriodYears": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "multiple": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "minLength": 1,
                          "type": "string"
                        },
                        "numCompanies": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "pctOfCapital": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "name",
                        "pctOfCapital",
                        "multiple",
                        "holdingPeriodYears"
                      ],
                      "type": "object"
                    },
                    "minItems": 1,
                    "type": "array"
                  },
                  "solveCalledFromDeployment": {
                    "type": "boolean"
                  },
                  "stageInputMode": {
                    "enum": [
                      "pct-capital",
                      "num-companies"
                    ],
                    "type": "string"
                  },
                  "targetTotalInvestments": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "tierFractional": {
                    "type": "boolean"
                  },
                  "tierInputMode": {
                    "enum": [
                      "pct-capital",
                      "num-companies"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "committedCapital",
                  "gpCommitPct",
                  "gpCommitCountedTowardInvested",
                  "organizationalExpenses",
                  "operationalExpensesAnnual",
                  "mgmtFeePct",
                  "recycledCapitalPct",
                  "carryPct",
                  "newInvestmentPeriodYears",
                  "mgmtFeesPeriodYears",
                  "portfolio",
                  "returnTiers"
                ],
                "type": "object"
              }
            },
            "required": [
              "inputs"
            ],
            "type": "object"
          },
          "FundDetail": {
            "description": "The fund over time. Returned unless the request sets granularity to \"none\". Every array in periods has one entry per label. waterfall, lpClasses and mgmtCo appear only when the request sent that feature block.",
            "properties": {
              "granularity": {
                "enum": [
                  "year",
                  "quarter"
                ],
                "type": "string"
              },
              "irr": {
                "description": "IRRs solved from the dated quarterly cash flows, with terminal NAV.",
                "properties": {
                  "grossIRR": {
                    "type": "number"
                  },
                  "netIRR": {
                    "properties": {
                      "lp": {
                        "type": "number"
                      },
                      "total": {
                        "type": "number"
                      }
                    },
                    "type": "object"
                  }
                },
                "type": "object"
              },
              "lpClasses": {
                "description": "LP economics split by class. Each class carries its lifetime totals, datedNetIRR (solved from its own dated calls and distributions) and periods: calledCapital, unscheduledCalls, distributions and netIRR (the class's IRR through each period, with its share of LP NAV as the terminal value), one entry per label. A class with a callSchedule is called on it; the others are called as the fund needs cash.",
                "type": "object"
              },
              "mgmtCo": {
                "type": "object"
              },
              "periods": {
                "properties": {
                  "calledCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "carriedInterest": {
                    "description": "GP carry paid each period, catchups included, net of the clawback.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "distributions": {
                    "$ref": "#/definitions/FundSeries",
                    "description": "Distributions after carry. The LP line runs through the waterfall period by period."
                  },
                  "dpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "gpCatchup": {
                    "description": "GP catchup paid each period. Only with a waterfall block.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "gpClawback": {
                    "description": "Carry the GP returns to the LPs, in the quarter the fund ends (or its year). Return of capital covers only capital called so far, so early carry is possible; the clawback brings the GP back to its whole-fund share. Off with features.waterfall.clawback: false.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "investedCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "jCurveLp": {
                    "description": "Cumulative LP net cash flow at the end of each period.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "labels": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "managementFees": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "nav": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "partnershipExpenses": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "preferredReturn": {
                    "description": "Preferred return paid to LPs each period. Only with a waterfall block.",
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "proceeds": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "recycledCapital": {
                    "$ref": "#/definitions/FundSeries"
                  },
                  "recycledDeemed": {
                    "$ref": "#/definitions/FundSeries",
                    "description": "The part of recycledCapital booked as distributed and recontributed (features.recycling treatment \"deemed\"). It is also in calledCapital and distributions; recycling that is never distributed is in neither."
                  },
                  "rvpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  "tvpi": {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "labels"
                ],
                "type": "object"
              },
              "statements": {
                "properties": {
                  "currency": {
                    "type": "string"
                  },
                  "periods": {
                    "items": {
                      "properties": {
                        "balanceSheet": {
                          "properties": {
                            "carriedInterestDistributed": {
                              "description": "Carried interest distributed",
                              "type": "number"
                            },
                            "cash": {
                              "description": "Cash",
                              "type": "number"
                            },
                            "checkBalances": {
                              "description": "Check: assets less liabilities and capital. Zero when the balance sheet balances.",
                              "type": "number"
                            },
                            "contributedCapitalGp": {
                              "description": "Contributed capital, GP",
                              "type": "number"
                            },
                            "contributedCapitalLp": {
                              "description": "Contributed capital, LPs",
                              "type": "number"
                            },
                            "cumulativeNetInvestmentIncome": {
                              "description": "Cumulative net investment income (loss)",
                              "type": "number"
                            },
                            "cumulativeNetRealizedGain": {
                              "description": "Cumulative net realized gain (loss)",
                              "type": "number"
                            },
                            "cumulativeNetUnrealized": {
                              "description": "Cumulative net unrealized appreciation (depreciation)",
                              "type": "number"
                            },
                            "distributionsGpCommit": {
                              "description": "Distributions to the GP commit",
                              "type": "number"
                            },
                            "distributionsLp": {
                              "description": "Distributions to LPs",
                              "type": "number"
                            },
                            "investmentsAtCost": {
                              "description": "Investments, at cost. AUM.",
                              "type": "number"
                            },
                            "investmentsAtFairValue": {
                              "description": "Investments, at fair value. NAV.",
                              "type": "number"
                            },
                            "totalAssets": {
                              "description": "Total assets",
                              "type": "number"
                            },
                            "totalLiabilities": {
                              "description": "Total liabilities. Expenses are paid when incurred, so nothing is accrued.",
                              "type": "number"
                            },
                            "totalLiabilitiesAndCapital": {
                              "description": "Total liabilities and partners' capital",
                              "type": "number"
                            },
                            "totalPartnersCapital": {
                              "description": "Total partners' capital",
                              "type": "number"
                            },
                            "unfundedCommitments": {
                              "description": "Memo: unfunded commitments",
                              "type": "number"
                            },
                            "unrealizedAppreciation": {
                              "description": "Unrealized appreciation (depreciation)",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "cashFlow": {
                          "properties": {
                            "carriedInterestPaid": {
                              "description": "Carried interest paid",
                              "type": "number"
                            },
                            "cashBeginning": {
                              "description": "Cash, beginning of period",
                              "type": "number"
                            },
                            "cashEnd": {
                              "description": "Cash, end of period",
                              "type": "number"
                            },
                            "checkTiesToBalanceSheet": {
                              "description": "Check: cash less balance sheet cash. Zero when the cash flow ties to the balance sheet.",
                              "type": "number"
                            },
                            "contributionsGp": {
                              "description": "Capital contributions, GP",
                              "type": "number"
                            },
                            "contributionsLp": {
                              "description": "Capital contributions, LPs",
                              "type": "number"
                            },
                            "distributionsGpCommit": {
                              "description": "Distributions to the GP commit",
                              "type": "number"
                            },
                            "distributionsLp": {
                              "description": "Distributions to LPs",
                              "type": "number"
                            },
                            "lessNetChangeInUnrealized": {
                              "description": "Net change in unrealized (appreciation) depreciation",
                              "type": "number"
                            },
                            "lessNetRealizedGain": {
                              "description": "Net realized (gain) loss on investments",
                              "type": "number"
                            },
                            "netCashFromFinancing": {
                              "description": "Net cash from financing activities",
                              "type": "number"
                            },
                            "netCashFromOperating": {
                              "description": "Net cash from operating activities",
                              "type": "number"
                            },
                            "netChangeInCash": {
                              "description": "Net change in cash",
                              "type": "number"
                            },
                            "netIncreaseFromOperations": {
                              "description": "Net increase (decrease) in partners' capital from operations",
                              "type": "number"
                            },
                            "proceedsFromExits": {
                              "description": "Proceeds from exits",
                              "type": "number"
                            },
                            "purchasesOfInvestments": {
                              "description": "Purchases of investments. Includes recycled proceeds.",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "label": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "operations": {
                          "properties": {
                            "managementFees": {
                              "description": "Management fees",
                              "type": "number"
                            },
                            "netChangeInUnrealized": {
                              "description": "Net change in unrealized appreciation (depreciation). Change in NAV less change in cost held.",
                              "type": "number"
                            },
                            "netGainOnInvestments": {
                              "description": "Net gain (loss) on investments",
                              "type": "number"
                            },
                            "netIncreaseFromOperations": {
                              "description": "Net increase (decrease) in partners' capital from operations",
                              "type": "number"
                            },
                            "netInvestmentIncome": {
                              "description": "Net investment income (loss). No interest or dividend income is modeled.",
                              "type": "number"
                            },
                            "netRealizedGain": {
                              "description": "Net realized gain (loss)",
                              "type": "number"
                            },
                            "operationalExpenseLines": {
                              "description": "The operational expense lines, when the model itemizes them.",
                              "items": {
                                "properties": {
                                  "amount": {
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "operationalExpenses": {
                              "description": "Operational expenses. Run through Q1 of the fund year after the fund life ends.",
                              "type": "number"
                            },
                            "organizationalExpenses": {
                              "description": "Organizational expenses",
                              "type": "number"
                            },
                            "partnershipExpenseLines": {
                              "description": "The partnership expense lines, when the model itemizes them.",
                              "items": {
                                "properties": {
                                  "amount": {
                                    "type": "number"
                                  },
                                  "label": {
                                    "type": "string"
                                  }
                                },
                                "type": "object"
                              },
                              "type": "array"
                            },
                            "partnershipExpenses": {
                              "description": "Partnership expenses",
                              "type": "number"
                            },
                            "realizedGainOnExits": {
                              "description": "Realized gain on exits. Proceeds less the cost they release.",
                              "type": "number"
                            },
                            "realizedLossOnWriteoffs": {
                              "description": "Realized loss on writeoffs",
                              "type": "number"
                            },
                            "totalExpenses": {
                              "description": "Total expenses",
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "periodEnd": {
                          "type": "string"
                        },
                        "periodStart": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "waterfall": {
                "description": "Lifetime totals of the waterfall as run through the periods: return of capital, preferred return (accrued on the dates capital was called), catchup, carry by tier.",
                "type": "object"
              }
            },
            "required": [
              "granularity",
              "irr",
              "periods",
              "statements"
            ],
            "type": "object"
          },
          "FundResult": {
            "properties": {
              "calledCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "committedCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "distributions": {
                "$ref": "#/definitions/LineTotals"
              },
              "dpi": {
                "type": "number"
              },
              "grossIRR": {
                "$ref": "#/definitions/LineTotals"
              },
              "grossMultiple": {
                "$ref": "#/definitions/LineTotals"
              },
              "investedCapital": {
                "$ref": "#/definitions/LineTotals"
              },
              "managementFees": {
                "$ref": "#/definitions/LineTotals"
              },
              "netIRR": {
                "$ref": "#/definitions/LineTotals"
              },
              "netMultiple": {
                "$ref": "#/definitions/LineTotals"
              },
              "partnershipExpenses": {
                "$ref": "#/definitions/LineTotals"
              },
              "pic": {
                "type": "number"
              },
              "proceeds": {
                "$ref": "#/definitions/LineTotals"
              },
              "rvpi": {
                "type": "number"
              },
              "tiers": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "tvpi": {
                "type": "number"
              },
              "weightedHoldPeriodYears": {
                "type": "number"
              }
            },
            "required": [
              "committedCapital",
              "calledCapital",
              "managementFees",
              "partnershipExpenses",
              "investedCapital",
              "proceeds",
              "distributions",
              "grossMultiple",
              "netMultiple",
              "grossIRR",
              "netIRR",
              "pic",
              "dpi",
              "rvpi",
              "tvpi",
              "weightedHoldPeriodYears"
            ],
            "type": "object"
          },
          "FundResultResponse": {
            "properties": {
              "data": {
                "properties": {
                  "detail": {
                    "$ref": "#/definitions/FundDetail"
                  },
                  "result": {
                    "$ref": "#/definitions/FundResult"
                  },
                  "workbook": {
                    "description": "Returned when the request sets format to \"xlsx\" or \"xlsx_url\": the live Excel workbook the web tool exports, with every number a formula back to its Get Started inputs. For \"xlsx\", decode data from base64 and save it as filename. For \"xlsx_url\", download it from url before expiresAt (24 hours).",
                    "properties": {
                      "contentType": {
                        "type": "string"
                      },
                      "data": {
                        "type": "string"
                      },
                      "encoding": {
                        "enum": [
                          "base64"
                        ],
                        "type": "string"
                      },
                      "expiresAt": {
                        "format": "date-time",
                        "type": "string"
                      },
                      "filename": {
                        "type": "string"
                      },
                      "url": {
                        "format": "uri",
                        "type": "string"
                      }
                    },
                    "required": [
                      "filename",
                      "contentType"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "result"
                ],
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "FundSeries": {
            "properties": {
              "gp": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "lp": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "total": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              }
            },
            "required": [
              "total",
              "lp",
              "gp"
            ],
            "type": "object"
          },
          "LineTotals": {
            "properties": {
              "gp": {
                "type": "number"
              },
              "lp": {
                "type": "number"
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "total",
              "lp",
              "gp"
            ],
            "type": "object"
          },
          "ManualIssuanceEvent": {
            "description": "Escape hatch: issue exact shares for custom arrangements.",
            "properties": {
              "issuances": {
                "items": {
                  "properties": {
                    "class": {
                      "enum": [
                        "common",
                        "preferred",
                        "option-pool",
                        "warrant"
                      ]
                    },
                    "countMode": {
                      "description": "Defaults to \"shares\".",
                      "enum": [
                        "shares",
                        "percent"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "issuePrice": {
                      "type": "number"
                    },
                    "kind": {
                      "enum": [
                        "founder",
                        "employee",
                        "investor",
                        "pool"
                      ]
                    },
                    "name": {
                      "type": "string"
                    },
                    "pctBasis": {
                      "description": "Defaults to \"fully-diluted\".",
                      "enum": [
                        "fully-diluted",
                        "issued"
                      ]
                    },
                    "shares": {
                      "type": "number"
                    },
                    "targetPct": {
                      "description": "0..1, used when countMode=\"percent\".",
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "kind",
                    "class",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "type": {
                "const": "manual_issuance"
              }
            },
            "required": [
              "type",
              "label",
              "issuances"
            ],
            "type": "object"
          },
          "MonthlyUsage": {
            "properties": {
              "failed": {
                "type": "integer"
              },
              "month": {
                "pattern": "^[0-9]{4}-[0-9]{2}$",
                "type": "string"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "succeeded": {
                "type": "integer"
              }
            },
            "required": [
              "month",
              "product",
              "succeeded",
              "failed"
            ],
            "type": "object"
          },
          "OptionGrantEvent": {
            "description": "Grant options to people from one pool (fully-diluted-neutral).",
            "properties": {
              "grants": {
                "items": {
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "shares"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "poolId": {
                "description": "Pool id to grant from; omit to draw the common pool.",
                "type": "string"
              },
              "type": {
                "const": "option_grant"
              }
            },
            "required": [
              "type",
              "label",
              "grants"
            ],
            "type": "object"
          },
          "OptionPoolEvent": {
            "description": "Create or expand an option pool (shares authorized, not granted).",
            "properties": {
              "countMode": {
                "description": "Defaults to \"shares\".",
                "enum": [
                  "shares",
                  "percent"
                ]
              },
              "id": {
                "description": "Pool id, so an option_grant can name which pool it draws from.",
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "shares": {
                "type": "number"
              },
              "strikePrice": {
                "type": "number"
              },
              "targetPct": {
                "description": "0..1 of post-event fully diluted, used when countMode=\"percent\".",
                "type": "number"
              },
              "type": {
                "const": "option_pool"
              }
            },
            "required": [
              "type",
              "label",
              "shares"
            ],
            "type": "object"
          },
          "PricedRoundEvent": {
            "description": "A priced equity round: new money buys newly issued preferred.",
            "properties": {
              "investments": {
                "items": {
                  "properties": {
                    "amount": {
                      "type": "number"
                    },
                    "antiDilution": {
                      "enum": [
                        "weighted-average",
                        "full-ratchet"
                      ]
                    },
                    "antiDilutionMethod": {
                      "description": "Defaults to \"conversion-ratio\".",
                      "enum": [
                        "conversion-ratio",
                        "new-shares"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "proRata": {
                      "description": "If true, amount is back-solved to hold pre-round ownership; match by id.",
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "amount"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "label": {
                "type": "string"
              },
              "poolMode": {
                "description": "Legacy. Prefer pools[].",
                "enum": [
                  "pre",
                  "post",
                  "custom"
                ]
              },
              "poolPostPct": {
                "description": "Legacy. Prefer pools[].",
                "type": "number"
              },
              "pools": {
                "description": "Option pool top-ups for the round (preferred over the legacy targetPoolPct trio).",
                "items": {
                  "properties": {
                    "countMode": {
                      "description": "Defaults to \"percent\".",
                      "enum": [
                        "shares",
                        "percent"
                      ]
                    },
                    "label": {
                      "type": "string"
                    },
                    "mode": {
                      "description": "\"pre\" dilutes existing only; \"post\" dilutes new money too.",
                      "enum": [
                        "pre",
                        "post"
                      ]
                    },
                    "pct": {
                      "description": "0..1 of post-money fully diluted, when countMode=\"percent\".",
                      "type": "number"
                    },
                    "poolId": {
                      "description": "Set to track this pool separately (its own cap-table row).",
                      "type": "string"
                    },
                    "shares": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "mode"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "preMoneyValuation": {
                "type": "number"
              },
              "targetPoolPct": {
                "description": "Legacy. Prefer pools[].",
                "type": "number"
              },
              "type": {
                "const": "priced_round"
              }
            },
            "required": [
              "type",
              "label",
              "preMoneyValuation",
              "investments"
            ],
            "type": "object"
          },
          "ProductAccess": {
            "properties": {
              "active": {
                "description": "Active paid term; use state/freeRemaining for trial access.",
                "type": "boolean"
              },
              "allowance": {
                "const": 6000,
                "type": "integer"
              },
              "freeRemaining": {
                "minimum": 0,
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "nextAction": {
                "type": "string"
              },
              "paidExpiration": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "paidRemaining": {
                "minimum": 0,
                "type": "integer"
              },
              "period": {
                "anyOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/definitions/UsagePeriod"
                  }
                ]
              },
              "priceUsd": {
                "const": 20,
                "type": "number"
              },
              "product": {
                "enum": [
                  "cap-table",
                  "fund-economics"
                ],
                "type": "string"
              },
              "remaining": {
                "description": "Calculations this account can run now: the paid balance while a paid period is active, otherwise the lifetime free balance.",
                "minimum": 0,
                "type": "integer"
              },
              "source": {
                "enum": [
                  "free",
                  "paid"
                ],
                "type": "string"
              },
              "state": {
                "enum": [
                  "free_available",
                  "free_exhausted",
                  "paid_active",
                  "paid_expired",
                  "paid_quota_exhausted"
                ],
                "type": "string"
              }
            },
            "required": [
              "product",
              "name",
              "priceUsd",
              "allowance",
              "period",
              "remaining",
              "active"
            ],
            "type": "object"
          },
          "ResultResponse": {
            "properties": {
              "data": {
                "properties": {
                  "result": {
                    "oneOf": [
                      {
                        "$ref": "#/definitions/WaterfallResult"
                      },
                      {
                        "$ref": "#/definitions/FundResult"
                      }
                    ]
                  }
                },
                "type": "object"
              },
              "meta": {
                "properties": {
                  "keyName": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "SecondarySaleEvent": {
            "description": "Transfer existing shares from one holder to another.",
            "properties": {
              "class": {
                "description": "Defaults to \"common\".",
                "enum": [
                  "common",
                  "preferred",
                  "option-pool",
                  "warrant"
                ]
              },
              "fromId": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "round": {
                "description": "Which series the shares come from (e.g. \"Series A\").",
                "type": "string"
              },
              "shares": {
                "type": "number"
              },
              "toId": {
                "type": "string"
              },
              "toName": {
                "type": "string"
              },
              "type": {
                "const": "secondary_sale"
              }
            },
            "required": [
              "type",
              "label",
              "fromId",
              "toId",
              "toName",
              "shares"
            ],
            "type": "object"
          },
          "UsagePeriod": {
            "properties": {
              "allowance": {
                "type": "integer"
              },
              "consumed": {
                "type": "integer"
              },
              "enabled": {
                "type": "boolean"
              },
              "id": {
                "type": "string"
              },
              "period_end": {
                "format": "date-time",
                "type": "string"
              },
              "period_start": {
                "format": "date-time",
                "type": "string"
              },
              "reserved": {
                "type": "integer"
              }
            },
            "required": [
              "id",
              "period_start",
              "period_end",
              "allowance",
              "consumed",
              "reserved",
              "enabled"
            ],
            "type": "object"
          },
          "WarrantRoundEvent": {
            "description": "Issue warrants (right to buy shares at a set price); counts toward fully diluted now.",
            "properties": {
              "label": {
                "type": "string"
              },
              "type": {
                "const": "warrant_round"
              },
              "warrants": {
                "items": {
                  "properties": {
                    "countMode": {
                      "enum": [
                        "shares",
                        "value"
                      ]
                    },
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parValue": {
                      "type": "number"
                    },
                    "priceDiscount": {
                      "description": "0..1 discount on the source round price.",
                      "type": "number"
                    },
                    "priceFromRound": {
                      "description": "Source round label to price off, when variable.",
                      "type": "string"
                    },
                    "purchaseClass": {
                      "enum": [
                        "common",
                        "preferred"
                      ]
                    },
                    "purchasePrice": {
                      "type": "number"
                    },
                    "purchaseRound": {
                      "description": "For a preferred warrant, the series it targets.",
                      "type": "string"
                    },
                    "shares": {
                      "description": "When countMode=\"shares\".",
                      "type": "number"
                    },
                    "totalValue": {
                      "description": "When countMode=\"value\": shares = totalValue / purchasePrice.",
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "purchaseClass",
                    "countMode"
                  ],
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "type",
              "label",
              "warrants"
            ],
            "type": "object"
          },
          "WaterfallComputeRequest": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "additionalProperties": false,
            "properties": {
              "exitValuation": {
                "maximum": 1000000000000000,
                "minimum": 0,
                "type": "number"
              },
              "model": {
                "additionalProperties": false,
                "properties": {
                  "common": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "invested": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  },
                  "convertibles": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "accruedInterest": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "cap": {
                          "exclusiveMinimum": 0,
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "cashOutAs": {
                          "enum": [
                            "debt",
                            "equity"
                          ],
                          "type": "string"
                        },
                        "cashOutSeniority": {
                          "enum": [
                            "senior",
                            "pari-passu"
                          ],
                          "type": "string"
                        },
                        "discount": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "kind": {
                          "enum": [
                            "pre-safe",
                            "post-safe",
                            "note"
                          ],
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "premiumMultiple": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "principal": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seniority": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "kind",
                        "principal"
                      ],
                      "type": "object"
                    },
                    "maxItems": 100,
                    "type": "array"
                  },
                  "debt": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "options": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "strike": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "vestedFraction": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares",
                        "strike"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  },
                  "preferred": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "conversionRatio": {
                          "exclusiveMinimum": 0,
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "dividendCumulative": {
                          "type": "boolean"
                        },
                        "dividendRate": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "dividendStart": {
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                          "type": "string"
                        },
                        "holders": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "id": {
                                "maxLength": 200,
                                "minLength": 1,
                                "type": "string"
                              },
                              "invested": {
                                "maximum": 1000000000000000,
                                "minimum": 0,
                                "type": "number"
                              },
                              "name": {
                                "maxLength": 200,
                                "type": "string"
                              },
                              "shares": {
                                "maximum": 1000000000000000,
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "shares",
                              "invested"
                            ],
                            "type": "object"
                          },
                          "maxItems": 500,
                          "type": "array"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "investmentDate": {
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                          "type": "string"
                        },
                        "multiple": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "participation": {
                          "enum": [
                            "none",
                            "full",
                            "capped"
                          ],
                          "type": "string"
                        },
                        "participationCap": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "seniority": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "holders",
                        "seniority"
                      ],
                      "type": "object"
                    },
                    "maxItems": 20,
                    "type": "array"
                  },
                  "transactionExpenses": {
                    "maximum": 1000000000000000,
                    "minimum": 0,
                    "type": "number"
                  },
                  "unissuedPool": {
                    "additionalProperties": false,
                    "properties": {
                      "shares": {
                        "maximum": 1000000000000000,
                        "minimum": 0,
                        "type": "number"
                      },
                      "treatment": {
                        "const": "cancel",
                        "type": "string"
                      }
                    },
                    "required": [
                      "shares"
                    ],
                    "type": "object"
                  },
                  "warrants": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "type": "string"
                        },
                        "name": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "shares": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "strike": {
                          "maximum": 1000000000000000,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "shares",
                        "strike"
                      ],
                      "type": "object"
                    },
                    "maxItems": 500,
                    "type": "array"
                  }
                },
                "required": [
                  "common",
                  "preferred"
                ],
                "type": "object"
              }
            },
            "required": [
              "exitValuation",
              "model"
            ],
            "type": "object"
          },
          "WaterfallResult": {
            "properties": {
              "classes": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "converged": {
                "type": "boolean"
              },
              "convertibles": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "distributable": {
                "type": "number"
              },
              "exitValuation": {
                "type": "number"
              },
              "holders": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "iterations": {
                "type": "integer"
              },
              "perShare": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              },
              "series": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              }
            },
            "required": [
              "exitValuation",
              "distributable",
              "classes",
              "series",
              "convertibles",
              "holders",
              "perShare",
              "iterations",
              "converged"
            ],
            "type": "object"
          }
        },
        "properties": {
          "features": {
            "additionalProperties": false,
            "properties": {
              "capTable": {
                "additionalProperties": false,
                "properties": {
                  "bridge": {
                    "additionalProperties": false,
                    "properties": {
                      "expectedAgeAtRound": {
                        "items": {
                          "maximum": 100,
                          "minimum": 0,
                          "type": "number"
                        },
                        "maxItems": 21,
                        "type": "array"
                      },
                      "numInvestmentsTarget": {
                        "maximum": 10000,
                        "minimum": 0,
                        "type": "number"
                      },
                      "stageName": {
                        "maxLength": 200,
                        "type": "string"
                      },
                      "writeoffHoldYears": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "yearsBetweenRounds": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "numInvestmentsTarget"
                    ],
                    "type": "object"
                  },
                  "inputs": {
                    "additionalProperties": false,
                    "properties": {
                      "defaultExitMultiple": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "defaultGraduationRate": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "defaultValuationIncrease": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "defaultWriteoffRate": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "dilutionFromOptionPoolsPerRound": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "dilutionPerRound": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "exitMultipleOnLastRound": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "followOnRounds": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "dilutionFromRound": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "newOptionPoolInRound": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "pctCompaniesFollowOn": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "valuationIncrease": {
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "maxItems": 20,
                        "type": "array"
                      },
                      "newInvestmentCheckSize": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "numFollowOnRounds": {
                        "maximum": 20,
                        "minimum": 0,
                        "type": "integer"
                      },
                      "numRoundsFollowOn": {
                        "maximum": 20,
                        "minimum": 0,
                        "type": "integer"
                      },
                      "ownershipOutsideInvestment": {
                        "items": {
                          "maximum": 100,
                          "minimum": 0,
                          "type": "number"
                        },
                        "maxItems": 21,
                        "type": "array"
                      },
                      "pctCompaniesFollowOn": {
                        "maximum": 100,
                        "minimum": 0,
                        "type": "number"
                      },
                      "postmoneyValuation": {
                        "exclusiveMinimum": 0,
                        "type": "number"
                      },
                      "roundLabels": {
                        "items": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "maxItems": 21,
                        "type": "array"
                      },
                      "roundOutcomes": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "exitMultiple": {
                              "minimum": 0,
                              "type": "number"
                            },
                            "graduationRate": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "writeoffRate": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "type": "object"
                        },
                        "maxItems": 21,
                        "type": "array"
                      }
                    },
                    "required": [
                      "newInvestmentCheckSize",
                      "postmoneyValuation",
                      "numFollowOnRounds",
                      "numRoundsFollowOn",
                      "defaultValuationIncrease",
                      "dilutionPerRound",
                      "dilutionFromOptionPoolsPerRound",
                      "pctCompaniesFollowOn",
                      "defaultGraduationRate",
                      "defaultWriteoffRate",
                      "defaultExitMultiple"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "inputs",
                  "bridge"
                ],
                "type": "object"
              },
              "deals": {
                "description": "Build the portfolio from specific deals instead of entry stages and return tiers (and instead of capTable when both are sent). Each deal has its checks, each in a quarter from first close (1-based), and one exit in a quarter, at a multiple of everything invested in the deal (0 is a write-off) or for proceeds in money. Invested capital is the sum of the checks and called capital is solved from it; the fund life runs to the last exit, capped by maxFundLifeYears; each deal comes back as a row of result.tiers. Recycling keeps back the earliest proceeds, up to recycledCapitalPct of committed, only while later checks can use them. Send dealsMix true to mix the methods instead.",
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "exit": {
                      "additionalProperties": false,
                      "properties": {
                        "multiple": {
                          "description": "Of everything invested in the deal. 0 is a write-off.",
                          "maximum": 10000,
                          "minimum": 0,
                          "type": "number"
                        },
                        "proceeds": {
                          "description": "Exit proceeds in money, instead of a multiple.",
                          "minimum": 0,
                          "type": "number"
                        },
                        "quarter": {
                          "maximum": 400,
                          "minimum": 1,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "quarter"
                      ],
                      "type": "object"
                    },
                    "investments": {
                      "description": "The checks the fund writes into the deal: the initial check, then any follow-ons.",
                      "items": {
                        "additionalProperties": false,
                        "properties": {
                          "amount": {
                            "minimum": 0,
                            "type": "number"
                          },
                          "quarter": {
                            "description": "Quarter from first close, 1-based.",
                            "maximum": 400,
                            "minimum": 1,
                            "type": "integer"
                          }
                        },
                        "required": [
                          "quarter",
                          "amount"
                        ],
                        "type": "object"
                      },
                      "maxItems": 40,
                      "minItems": 1,
                      "type": "array"
                    },
                    "name": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "name",
                    "investments",
                    "exit"
                  ],
                  "type": "object"
                },
                "maxItems": 500,
                "minItems": 1,
                "type": "array"
              },
              "dealsMix": {
                "description": "With deals: the deals come first, and the capital they leave (committed less fees and expenses, plus recycling, less the checks) is invested through the entry stages and return tiers, or capTable when sent, as it would be without deals. Recycling then goes to the stages, the fund life is the later of the deals' and the stages', and result.tiers lists the deals and then the tiers.",
                "type": "boolean"
              },
              "fees": {
                "additionalProperties": false,
                "properties": {
                  "base": {
                    "enum": [
                      "committed",
                      "nav",
                      "aum",
                      "step-down"
                    ],
                    "type": "string"
                  },
                  "basesByYear": {
                    "items": {
                      "enum": [
                        "committed",
                        "nav",
                        "aum",
                        "step-down"
                      ],
                      "type": "string"
                    },
                    "maxItems": 100,
                    "type": "array"
                  },
                  "feeYears": {
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                  },
                  "ratePct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "schedule": {
                    "additionalProperties": false,
                    "description": "The fee as an LPA states it, on the dated schedule: each rate from a point in fund years (0 = first close; 5.5 starts halfway through year 6 and cuts the period it lands in), charged on committed capital, invested cost not yet realized, or NAV, with organizational expenses above organizationalExpenseCap offsetting the fee. Runs for feeYears; base, ratePct, yearlyRateSchedule and basesByYear are ignored when it is set.",
                    "properties": {
                      "frequency": {
                        "enum": [
                          "quarterly",
                          "semiannual",
                          "annual"
                        ],
                        "type": "string"
                      },
                      "organizationalExpenseCap": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "steps": {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "basis": {
                              "enum": [
                                "committed",
                                "invested",
                                "nav"
                              ],
                              "type": "string"
                            },
                            "fromYear": {
                              "maximum": 100,
                              "minimum": 0,
                              "type": "number"
                            },
                            "rate": {
                              "maximum": 1,
                              "minimum": 0,
                              "type": "number"
                            }
                          },
                          "required": [
                            "fromYear",
                            "rate",
                            "basis"
                          ],
                          "type": "object"
                        },
                        "maxItems": 20,
                        "minItems": 1,
                        "type": "array"
                      }
                    },
                    "required": [
                      "steps"
                    ],
                    "type": "object"
                  },
                  "stepDownAfterYears": {
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                  },
                  "yearlyRateSchedule": {
                    "items": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    },
                    "maxItems": 100,
                    "type": "array"
                  }
                },
                "required": [
                  "base"
                ],
                "type": "object"
              },
              "followOn": {
                "additionalProperties": false,
                "properties": {
                  "offsetQuarters": {
                    "maximum": 40,
                    "minimum": 0,
                    "type": "integer"
                  }
                },
                "required": [
                  "offsetQuarters"
                ],
                "type": "object"
              },
              "lpClasses": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "callSchedule": {
                      "additionalProperties": false,
                      "description": "Call this class on its own schedule instead of as the fund needs cash. pct is a share of the class commitment per fund year (called in the year's first quarter) or per quarter. Whatever the entries leave is called when the fund needs it.",
                      "properties": {
                        "frequency": {
                          "enum": [
                            "year",
                            "quarter"
                          ],
                          "type": "string"
                        },
                        "pct": {
                          "items": {
                            "maximum": 1,
                            "minimum": 0,
                            "type": "number"
                          },
                          "maxItems": 80,
                          "type": "array"
                        }
                      },
                      "required": [
                        "frequency",
                        "pct"
                      ],
                      "type": "object"
                    },
                    "commitment": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "feeOverrides": {
                      "additionalProperties": false,
                      "properties": {
                        "basesByYear": {
                          "items": {
                            "enum": [
                              "committed",
                              "nav",
                              "aum",
                              "step-down"
                            ],
                            "type": "string"
                          },
                          "maxItems": 100,
                          "type": "array"
                        },
                        "ratePct": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "yearlyRateSchedule": {
                          "items": {
                            "maximum": 1,
                            "minimum": 0,
                            "type": "number"
                          },
                          "maxItems": 100,
                          "type": "array"
                        }
                      },
                      "type": "object"
                    },
                    "isFirstLoss": {
                      "type": "boolean"
                    },
                    "isRemainder": {
                      "type": "boolean"
                    },
                    "name": {
                      "maxLength": 200,
                      "minLength": 1,
                      "type": "string"
                    },
                    "overrides": {
                      "additionalProperties": false,
                      "properties": {
                        "carryPct": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "carryTiers": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "carryPct": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "catchup": {
                                "type": "boolean"
                              },
                              "irrThreshold": {
                                "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              },
                              "moicThreshold": {
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "moicThreshold",
                              "carryPct"
                            ],
                            "type": "object"
                          },
                          "maxItems": 20,
                          "type": "array"
                        },
                        "catchupGpShare": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "catchupPct": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "preferredReturnMode": {
                          "enum": [
                            "none",
                            "irr",
                            "multiple"
                          ],
                          "type": "string"
                        },
                        "preferredReturnMultiple": {
                          "maximum": 100,
                          "minimum": 0,
                          "type": "number"
                        },
                        "preferredReturnRate": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "type": "object"
                    }
                  },
                  "required": [
                    "name",
                    "commitment"
                  ],
                  "type": "object"
                },
                "maxItems": 50,
                "minItems": 1,
                "type": "array"
              },
              "mgmtCo": {
                "additionalProperties": false,
                "properties": {
                  "expenses": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "annualCost": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "growthRatePerYear": {
                          "maximum": 10,
                          "minimum": -1,
                          "type": "number"
                        },
                        "label": {
                          "maxLength": 200,
                          "type": "string"
                        },
                        "yearsActive": {
                          "items": {
                            "maximum": 100,
                            "minimum": 1,
                            "type": "integer"
                          },
                          "maxItems": 100,
                          "type": "array"
                        }
                      },
                      "required": [
                        "label",
                        "annualCost"
                      ],
                      "type": "object"
                    },
                    "maxItems": 100,
                    "type": "array"
                  },
                  "oneTimeFormationCost": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "startingCash": {
                    "minimum": 0,
                    "type": "number"
                  }
                },
                "required": [
                  "expenses"
                ],
                "type": "object"
              },
              "recycling": {
                "additionalProperties": false,
                "properties": {
                  "defaultTreatment": {
                    "enum": [
                      "retained",
                      "deemed"
                    ],
                    "type": "string"
                  },
                  "schedule": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "amount": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "quarter": {
                          "maximum": 400,
                          "minimum": 1,
                          "type": "integer"
                        },
                        "treatment": {
                          "enum": [
                            "retained",
                            "deemed"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "quarter"
                      ],
                      "type": "object"
                    },
                    "maxItems": 400,
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "waterfall": {
                "additionalProperties": false,
                "properties": {
                  "basis": {
                    "description": "Whole fund (the default, European) or deal by deal (American): return of capital owes only the capital in deals exited or written off so far, so carry can be paid before the fund returns all capital. The clawback settles on the whole fund.",
                    "enum": [
                      "whole-fund",
                      "deal-by-deal"
                    ],
                    "type": "string"
                  },
                  "carryTiers": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "carryPct": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "catchup": {
                          "type": "boolean"
                        },
                        "irrThreshold": {
                          "description": "Instead of moicThreshold: the band below this tier ends when the LP IRR reaches this rate. With one of these, tiers run in the order given.",
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "moicThreshold": {
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "moicThreshold",
                        "carryPct"
                      ],
                      "type": "object"
                    },
                    "maxItems": 20,
                    "type": "array"
                  },
                  "catchupGpShare": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "catchupMeasure": {
                    "description": "GP catchup: to the carry share of the pref paid (the default), or until the GP holds the carry share of all profit paid. They differ when the GP shares the catchup with LPs.",
                    "enum": [
                      "preferred",
                      "profit"
                    ],
                    "type": "string"
                  },
                  "catchupPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "clawback": {
                    "type": "boolean"
                  },
                  "preferredReturnBase": {
                    "description": "IRR pref: accrue on capital not yet returned plus unpaid pref (the default), or on each contribution from its date whatever comes back.",
                    "enum": [
                      "unreturned",
                      "contributed"
                    ],
                    "type": "string"
                  },
                  "preferredReturnCompounding": {
                    "description": "IRR pref: compound annually (the default) or simple interest.",
                    "enum": [
                      "annual",
                      "none"
                    ],
                    "type": "string"
                  },
                  "preferredReturnMode": {
                    "enum": [
                      "none",
                      "irr",
                      "multiple"
                    ],
                    "type": "string"
                  },
                  "preferredReturnMultiple": {
                    "maximum": 100,
                    "minimum": 0,
                    "type": "number"
                  },
                  "preferredReturnRate": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  }
                },
                "type": "object"
              }
            },
            "type": "object"
          },
          "firstCloseDate": {
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string"
          },
          "format": {
            "enum": [
              "json",
              "xlsx",
              "xlsx_url"
            ],
            "type": "string"
          },
          "fundName": {
            "maxLength": 200,
            "type": "string"
          },
          "granularity": {
            "enum": [
              "year",
              "quarter",
              "none"
            ],
            "type": "string"
          },
          "idempotency_key": {
            "description": "Optional retry key; reuse only with identical input.",
            "type": "string"
          },
          "inputs": {
            "additionalProperties": false,
            "properties": {
              "carryPct": {
                "maximum": 1,
                "minimum": 0,
                "type": "number"
              },
              "committedCapital": {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              "fundOperationsYears": {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              "gpCommitBearsCarry": {
                "type": "boolean"
              },
              "gpCommitCountedTowardInvested": {
                "type": "boolean"
              },
              "gpCommitPct": {
                "maximum": 1,
                "minimum": 0,
                "type": "number"
              },
              "maxFundLifeYears": {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              "mgmtFeePct": {
                "maximum": 1,
                "minimum": 0,
                "type": "number"
              },
              "mgmtFeeSchedule": {
                "items": {
                  "maximum": 1,
                  "minimum": 0,
                  "type": "number"
                },
                "type": "array"
              },
              "mgmtFeesPeriodYears": {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              "navMarkupYears": {
                "maximum": 100,
                "minimum": 0,
                "type": "number"
              },
              "newInvestmentPeriodYears": {
                "exclusiveMinimum": 0,
                "type": "number"
              },
              "operationalExpenseLines": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "amount": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "label": {
                      "type": "string"
                    },
                    "quarterly": {
                      "items": [
                        {
                          "minimum": 0,
                          "type": "number"
                        },
                        {
                          "minimum": 0,
                          "type": "number"
                        },
                        {
                          "minimum": 0,
                          "type": "number"
                        },
                        {
                          "minimum": 0,
                          "type": "number"
                        }
                      ],
                      "maxItems": 4,
                      "minItems": 4,
                      "type": "array"
                    }
                  },
                  "required": [
                    "label",
                    "amount"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "operationalExpensesAnnual": {
                "minimum": 0,
                "type": "number"
              },
              "operationalExpensesBreakout": {
                "additionalProperties": false,
                "properties": {
                  "audit": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "fundAdmin": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "other": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "tax": {
                    "minimum": 0,
                    "type": "number"
                  }
                },
                "required": [
                  "fundAdmin",
                  "tax",
                  "audit",
                  "other"
                ],
                "type": "object"
              },
              "organizationalExpenseLines": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "amount": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "label": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "amount"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "organizationalExpenses": {
                "minimum": 0,
                "type": "number"
              },
              "partnershipExpenseLines": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "amount": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "label": {
                      "type": "string"
                    },
                    "quarterly": {
                      "items": [
                        {
                          "minimum": 0,
                          "type": "number"
                        },
                        {
                          "minimum": 0,
                          "type": "number"
                        },
                        {
                          "minimum": 0,
                          "type": "number"
                        },
                        {
                          "minimum": 0,
                          "type": "number"
                        }
                      ],
                      "maxItems": 4,
                      "minItems": 4,
                      "type": "array"
                    }
                  },
                  "required": [
                    "label",
                    "amount"
                  ],
                  "type": "object"
                },
                "type": "array"
              },
              "partnershipExpensesAnnual": {
                "minimum": 0,
                "type": "number"
              },
              "portfolio": {
                "additionalProperties": false,
                "properties": {
                  "avgCheckSizeFollow": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "avgCheckSizeNew": {
                    "minimum": 0,
                    "type": "number"
                  },
                  "entryStages": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "avgCheckSize": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "followOnChecks": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "avgCheckSize": {
                                "minimum": 0,
                                "type": "number"
                              },
                              "label": {
                                "type": "string"
                              },
                              "pctOfReserve": {
                                "maximum": 1,
                                "minimum": 0,
                                "type": "number"
                              }
                            },
                            "required": [
                              "avgCheckSize"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "initialCheckLabel": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "numInvestments": {
                          "minimum": 0,
                          "type": "number"
                        },
                        "pctAllocation": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        },
                        "reserveRatio": {
                          "maximum": 1,
                          "minimum": 0,
                          "type": "number"
                        }
                      },
                      "required": [
                        "name",
                        "numInvestments",
                        "avgCheckSize"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "followPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  "newPct": {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  }
                },
                "required": [
                  "newPct",
                  "followPct",
                  "avgCheckSizeNew",
                  "avgCheckSizeFollow"
                ],
                "type": "object"
              },
              "recycledCapitalPct": {
                "maximum": 1,
                "minimum": 0,
                "type": "number"
              },
              "returnTiers": {
                "items": {
                  "additionalProperties": false,
                  "properties": {
                    "holdingPeriodYears": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "multiple": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "name": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "numCompanies": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "pctOfCapital": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "name",
                    "pctOfCapital",
                    "multiple",
                    "holdingPeriodYears"
                  ],
                  "type": "object"
                },
                "minItems": 1,
                "type": "array"
              },
              "solveCalledFromDeployment": {
                "type": "boolean"
              },
              "stageInputMode": {
                "enum": [
                  "pct-capital",
                  "num-companies"
                ],
                "type": "string"
              },
              "targetTotalInvestments": {
                "minimum": 0,
                "type": "number"
              },
              "tierFractional": {
                "type": "boolean"
              },
              "tierInputMode": {
                "enum": [
                  "pct-capital",
                  "num-companies"
                ],
                "type": "string"
              }
            },
            "required": [
              "committedCapital",
              "gpCommitPct",
              "gpCommitCountedTowardInvested",
              "organizationalExpenses",
              "operationalExpensesAnnual",
              "mgmtFeePct",
              "recycledCapitalPct",
              "carryPct",
              "newInvestmentPeriodYears",
              "mgmtFeesPeriodYears",
              "portfolio",
              "returnTiers"
            ],
            "type": "object"
          }
        },
        "required": [
          "inputs"
        ],
        "type": "object"
      },
      "name": "fund_economics_compute"
    },
    {
      "description": "Returns public access terms for an engine: product, annual price, billing period, annual allowance, and a customer checkout URL. This is informational and does not purchase or confirm account-specific access; use get_account_access for the authenticated account.",
      "inputSchema": {
        "properties": {
          "model": {
            "description": "Model key to check access for.",
            "enum": [
              "cap-table",
              "exit-waterfall",
              "fund-economics"
            ],
            "type": "string"
          }
        },
        "required": [
          "model"
        ],
        "type": "object"
      },
      "name": "get_access"
    },
    {
      "description": "Returns whether this connection is signed in, its annual product access and remaining calculations. Does not consume allowance. Call it before a compute tool if you are unsure the user can run one. If the result contains action_required (not signed in, no purchase, allowance used), relay it to the user with its links and offer to retry. Never skip the calculation silently.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_account_access"
    },
    {
      "description": "Returns signed-in usage history and endpoint/source breakdown. Does not consume allowance. If the result contains action_required (not signed in, no purchase, allowance used), relay it to the user with its links and offer to retry. Never skip the calculation silently.",
      "inputSchema": {
        "properties": {
          "from": {
            "description": "Optional UTC start date (YYYY-MM-DD).",
            "type": "string"
          },
          "to": {
            "description": "Optional UTC end date (YYYY-MM-DD).",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_account_usage"
    },
    {
      "description": "Returns Hemrock's financial modeling best practices and design principles for a given topic. Useful as background context for AI interactions.",
      "inputSchema": {
        "properties": {
          "topic": {
            "description": "Optional topic filter. Returns all best practices if omitted.",
            "enum": [
              "formatting",
              "structure",
              "inputs",
              "assumptions",
              "review",
              "sharing",
              "all"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_best_practices"
    },
    {
      "description": "Returns Layer 3 sanity-check and validation prompts — the 'where AI gets financial modeling wrong' guidance. Use these to audit AI-generated work or catch common modeling errors.",
      "inputSchema": {
        "properties": {
          "template_name": {
            "description": "The template to get checks for. Use \"all\" for universal checks only.",
            "enum": [
              "standard",
              "cap_table",
              "venture_fund",
              "venture_fund_quarterly",
              "runway",
              "saas",
              "ecommerce",
              "unit_economics",
              "fund_economics",
              "fund_economics_tool_web",
              "venture_valuation",
              "all"
            ],
            "type": "string"
          }
        },
        "required": [
          "template_name"
        ],
        "type": "object"
      },
      "name": "get_checks"
    },
    {
      "description": "Returns the full text of a single Hemrock concept doc by slug. Use this to learn how a financial-modeling calculation actually works before building or auditing it. Get valid slugs from list_concepts.",
      "inputSchema": {
        "properties": {
          "slug": {
            "description": "The concept slug, from list_concepts (e.g. \"waterfall\", \"anti-dilution\").",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "get_concept"
    },
    {
      "description": "Returns the universal context-setting primer for Hemrock models, plus an optional template-specific addendum. Always run this first before any other prompts.",
      "inputSchema": {
        "properties": {
          "template_name": {
            "description": "Optional. If provided, appends a template-specific primer to the universal context.",
            "enum": [
              "standard",
              "cap_table",
              "venture_fund",
              "venture_fund_quarterly",
              "runway",
              "saas",
              "ecommerce",
              "unit_economics",
              "fund_economics",
              "fund_economics_tool_web",
              "venture_valuation"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_context"
    },
    {
      "description": "Returns task-specific Layer 2 prompts for a given template and task type. These are ready-to-use prompts for common modeling tasks.",
      "inputSchema": {
        "properties": {
          "task_type": {
            "description": "Optional task type filter.",
            "type": "string"
          },
          "template_name": {
            "description": "The Hemrock template being used.",
            "enum": [
              "standard",
              "cap_table",
              "venture_fund",
              "venture_fund_quarterly",
              "runway",
              "saas",
              "ecommerce",
              "unit_economics",
              "fund_economics",
              "fund_economics_tool_web",
              "venture_valuation"
            ],
            "type": "string"
          }
        },
        "required": [
          "template_name"
        ],
        "type": "object"
      },
      "name": "get_prompts"
    },
    {
      "description": "Returns a saved model's contents in the shape the compute tools take: a cap table's events and options, a waterfall's model and saved exit, or a fund's inputs, the features switched on, and featuresSavedButOff (configured but switched off). Free: uses no calculations. Needs a signed-in connection.",
      "inputSchema": {
        "properties": {
          "id": {
            "description": "The model id from list_saved_models.",
            "type": "string"
          },
          "kind": {
            "description": "\"cap-table\" (Cap Table builder), \"waterfall\" (Exit Waterfall builder) or \"fund\" (the web Venture Capital Model).",
            "enum": [
              "cap-table",
              "waterfall",
              "fund"
            ],
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id"
        ],
        "type": "object"
      },
      "name": "get_saved_model"
    },
    {
      "description": "Lists Hemrock financial-modeling concept docs — the methodology behind the math (exit waterfalls, anti-dilution, convertibles, cohorts, circular references, unit economics, and more). Returns a compact index of slugs, titles, and descriptions. Optionally filter by template_name or tag. Call get_concept to read the full text of any entry.",
      "inputSchema": {
        "properties": {
          "tag": {
            "description": "Optional. Filter to concepts whose tags contain this string (e.g. \"cap tables\").",
            "type": "string"
          },
          "template_name": {
            "description": "Optional. Filter to concepts relevant to a specific Hemrock template.",
            "enum": [
              "standard",
              "cap_table",
              "venture_fund",
              "venture_fund_quarterly",
              "runway",
              "saas",
              "ecommerce",
              "unit_economics",
              "fund_economics",
              "fund_economics_tool_web",
              "venture_valuation"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_concepts"
    },
    {
      "description": "Lists the hosted Hemrock calculation engines (cap table, exit waterfall, fund economics), what each computes, and its price and checkout link. Free and needs no sign-in, so call it when the user asks what Hemrock can calculate or what it costs.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "list_models"
    },
    {
      "description": "Lists the cap tables, exit waterfalls and fund models saved to the user's Hemrock account, plus fund models others have shared with them, newest first. Each has its kind, id, name, the user's role (owner, editor, viewer) and a url that opens it in the browser builder. Call this when the user mentions \"my cap table\", \"my fund model\" or a model by name, before building one from scratch. Free: uses no calculations. Needs a signed-in connection.",
      "inputSchema": {
        "properties": {
          "kind": {
            "description": "\"cap-table\" (Cap Table builder), \"waterfall\" (Exit Waterfall builder) or \"fund\" (the web Venture Capital Model).",
            "enum": [
              "cap-table",
              "waterfall",
              "fund"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_saved_models"
    },
    {
      "description": "Returns how to get a person on the user's model: a one-hour working session with the person who built Hemrock's models (also the way to get a model or workflow built with AI reviewed), custom model work, or fractional CFO for venture funds. Each comes with its live price and booking link. Use it when the user asks for a human review, is stuck after a check fails, or a check_in note needs judgement. Offer it; don't push it. Pass the saved model's url so the user can bring it to the session. Free and needs no sign-in. It books nothing: the user books and pays on hemrock.com.",
      "inputSchema": {
        "properties": {
          "model_url": {
            "description": "Optional. The saved model's url from list_saved_models, for the user to bring along.",
            "type": "string"
          },
          "need": {
            "description": "\"review\" for an hour on an existing model (the default), \"custom\" for a model built to order, \"cfo\" for ongoing fund finance.",
            "enum": [
              "review",
              "custom",
              "cfo"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "request_review"
    },
    {
      "description": "Calculates a saved model as it stands, with the same engine as the browser builder: ownership after every event for a cap table, proceeds by holder for a waterfall (at the saved exit, or up to 10 exitValuations you pass), or a fund's lifetime totals plus the fund by year (granularity \"quarter\" or \"none\" to change that). For a fund, workbook true adds a 24-hour link to the live Excel workbook; that needs the Venture Capital Model, the same as the browser's Excel export. Free: uses no calculations. Needs a signed-in connection.",
      "inputSchema": {
        "properties": {
          "exitValuations": {
            "description": "Waterfall only: sale prices to run, up to 10.",
            "items": {
              "type": "number"
            },
            "type": "array"
          },
          "granularity": {
            "description": "Fund only.",
            "enum": [
              "year",
              "quarter",
              "none"
            ],
            "type": "string"
          },
          "id": {
            "description": "The model id from list_saved_models.",
            "type": "string"
          },
          "kind": {
            "description": "\"cap-table\" (Cap Table builder), \"waterfall\" (Exit Waterfall builder) or \"fund\" (the web Venture Capital Model).",
            "enum": [
              "cap-table",
              "waterfall",
              "fund"
            ],
            "type": "string"
          },
          "workbook": {
            "description": "Fund only: add a link to the live Excel workbook.",
            "type": "boolean"
          }
        },
        "required": [
          "kind",
          "id"
        ],
        "type": "object"
      },
      "name": "run_saved_model"
    },
    {
      "description": "Saves a change to a model in the user's account; the browser builder shows it the next time it opens. Send only the fields that change. Owners can change anything; invited editors of a fund model can change its inputs while the owner has access; viewers can't change anything. Tell the user what you changed, run the model to show the effect, and give them the url. Free: uses no calculations. Needs a signed-in connection.",
      "inputSchema": {
        "properties": {
          "cashFlows": {
            "description": "Fund only: show the Forecast and Statements tabs in the builder.",
            "type": "boolean"
          },
          "events": {
            "description": "Cap table only: the full list of financing events, in order, the same shape cap_table_compute takes. Replaces the saved list, so read the model first and send back the whole list with your change.",
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "features": {
            "description": "Fund only: features to switch on or off, keyed capTable, fees, waterfall, recycling, lpClasses, mgmtCo or followOn, with the same shapes as fund_economics_compute features. An object switches the feature on with that config; false switches it off and keeps its config. The user switches these on deliberately, so only change one they asked about.",
            "type": "object"
          },
          "fundName": {
            "description": "Fund only: the fund name used in the model and its workbook.",
            "type": "string"
          },
          "id": {
            "description": "The model id from list_saved_models.",
            "type": "string"
          },
          "inputs": {
            "description": "Fund only: fund inputs to change, the same fields as fund_economics_compute inputs. Merged onto the saved inputs, so send only what changes.",
            "type": "object"
          },
          "kind": {
            "description": "\"cap-table\" (Cap Table builder), \"waterfall\" (Exit Waterfall builder) or \"fund\" (the web Venture Capital Model).",
            "enum": [
              "cap-table",
              "waterfall",
              "fund"
            ],
            "type": "string"
          },
          "model": {
            "description": "Waterfall only: the cap stack, the same shape as exit_waterfall_compute's model. Replaces the saved one.",
            "type": "object"
          },
          "name": {
            "description": "The model name shown in the builder. Owner only.",
            "type": "string"
          },
          "options": {
            "description": "Cap table: { wholeShares, pricePrecision }. Waterfall: { exitValuation, exitDate, wholeShares, pricePrecision }. Merged onto the saved options.",
            "type": "object"
          }
        },
        "required": [
          "kind",
          "id"
        ],
        "type": "object"
      },
      "name": "update_saved_model"
    }
  ]
}

What the leaf hashes

{"body":"fc7357f4d5ea4f0997e485939f3627f8e8c094ffa4a4cecd76e755dfa2b845f9","id":1779925,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793554750611491,"prev":778260,"subject":"a3865ac5-7c95-4881-a4f4-42a1cc40d7af","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (302406 rows).

  1. 0x31374c1a67623e072703f09f4fde5dc17ff11b90e9befb57e77656fe02b0f8e4
  2. 0xd9b9b1dfafbe7aa035aab6c14ef2859d2af93329349b5ca1368e6570e9252eea
  3. 0xf2020e4b13d0c703c16c85be26ea3ca76e274fa9dced244daea77698f94c886e
  4. 0x7ff1a9700ed1915a5834bf112fcd09efaffe35f3f4ac0626aed25bc0613c2016
  5. 0x3cc1fda8d7461b575495420a4a7bed7f8d0d7a6e9bce5e0e957cf7f0a0d19350
  6. 0xfb71b4b023a0da2c45efade39fa7684040daa1e46237e2ab7f8fe7e5aff39da9
  7. 0x8ba76102cc3e426b75ac51f97df9443636ed041a36ff0495df06b42645d22685
  8. 0x3a6a2cb6a855ef40f242b1f87646b1c0b9db073400b898c9109218179b339ff8
  9. 0x88a1e032a98b353ec0d06a8c840e1635648cff4c2195e3176b78f72a97852997
  10. 0xc1e042003bb896af8b0b7a16de822d67902b63a0dbdf183aeef148c458f5b9f8
  11. 0x18b56b162c67c641fb2861dd34e81cf94df62cd9356c19850e2706480628ab69
  12. 0x099087dc7fd6ec5a9024ef0581bebaa3e7a2663361b34456018c7e26cacdc019
  13. 0xc392c192bf0854a262ff9bab5c87785855c8eadc29dc2a6a018670b7fb0b5d3b
  14. 0x770f20a6b76206ceacb50b86f521e555bd27a1f27e7156c64591601c5b119595
  15. 0x80b1e578d986f759ca01ea02c7a922e757a26a65318f9844ac72c5c1d4fe339e
  16. 0xa856ad79e6f29a2b5516257f0d4817172cca11251fe2e7e8f3911b105fe2b622
  17. 0x02b3554752e71a19b12d7a76dbff436e85387226ceec89fdebdcdaf0122c2932
  18. 0x1973893697931b7512ae5dc1a3c92ef92f633ae3574dce9029a35b5e94d2d364
  19. 0x3315fd2757fdd435852cc277377234a3f3909a6d2a089d0e36f6d59aacfda910
Day root
0x7fa2cba1cf3d6b35630896f5fe1a650adb307ea2c376e80a5f2d9276b7cb5ab3
Chained
0x577ff89ba012beeff3197bcff7fa86752074bdf54205a24359cc437be2a952a4
Published
On Arc Testnet, block 70262758: 0x435bc1b9331471d72e1998f2e420983b5189d4da65ffbd6f27ef40daf5e1ea90

How to check it · This row as JSON