Skip to main content
Glama

Server Details

Hemrock financial modeling prompts: context primers, task prompts, checks, and best practices.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 48 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation4/5

The three compute tools target distinct financial domains, and the knowledge tools map to separate layers (context, prompts, checks, concepts). The main ambiguity is among access/pricing tools: get_access, get_account_access, and list_models overlap slightly on price/checkout information, though the descriptions clarify their different scopes.

Naming Consistency4/5

All names use snake_case, and most retrieval tools follow a clear get_/list_ pattern. The compute tools use noun_compute instead of verb_noun, creating two mild naming families, but the convention is still predictable and readable.

Tool Count5/5

With 13 tools, the set is well-scoped: three compute engines, three access/usage tools, and seven knowledge/context tools. Each tool appears to earn its place and the count stays within a reasonable range for the server's purpose.

Completeness5/5

The server covers its stated domain well: cap table, exit waterfall, and fund economics calculations, plus access checks, usage reporting, concepts, prompts, best practices, checks, and models. No obvious lifecycle gap or dead end is apparent for a calculation-and-guidance MCP.

Available Tools

13 tools
cap_table_computeCompute a cap tableA
Read-only
Inspect

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. Paid: 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
eventsYes
idempotency_keyNoOptional retry key; reuse only with identical input.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint=true the description discloses the monetization model ($20/yr), that the 6,000-calculation allowance is shared with exit_waterfall_compute, the action_required outcome (not signed in, no purchase, allowance used) and the required response to it ('relay it with its links and offer to retry; never skip silently'). These auth/quota behaviors cannot be inferred from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and the outcome, then supporting rationale, then payment/error handling. Dense but each sentence carries actionable information; only slight risk of over-length for a two-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still states the return shape (fully diluted ownership after each event plus the final cap table), the payment/quota context, and the action_required handling, so an agent has everything needed to call and act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; the description enumerates the event categories (founders, pools, rounds, SAFEs, notes, warrants) which maps to the discriminated event types and reinforces chronological ordering, but says nothing about idempotency_key and adds no field-level syntax beyond what the schema already carries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (computes the cap table / fully diluted ownership) and enumerates the exact financing constructs it handles: founder splits, option pools, priced rounds, SAFEs/notes, warrants, pro-rata, dilution. An agent can distinguish it from exit_waterfall_compute and fund_economics_compute without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use trigger ('whenever the user asks who owns what after a financing'), an explicit alternative to avoid ('prefer this over doing the arithmetic yourself'), and a reason (SAFE/note conversion math is error-prone). It also names the sibling whose quota it shares.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exit_waterfall_computeCompute an exit waterfallA
Read-only
Inspect

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. Account required: lifetime free credits or paid access; shares 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYes
exitValuationYes
idempotency_keyNoOptional retry key; reuse only with identical input.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, it discloses auth requirements (lifetime free credits or paid access), the shared allowance ($20/year, 6,000 calculations), and error-handling behavior (relay action_required with links, offer retry, never skip silently). This adds substantial operational context the annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The primary use case is front-loaded in the first sentence, followed by output, differentiation, and account/error handling. Every sentence earns its place, though the allowance/pricing detail is slightly verbose for a tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-input tool with no output schema, the description covers the trigger, the inputs conceptually, the shape of the return (proceeds by holder and class with convert decisions), and the auth/error path. It is nearly complete, with only field-level parameter detail left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 33% schema coverage the description must compensate, and it does map conceptually ("takes the cap stack and an exit value" → model/exitValuation, plus the field concepts like participation caps and seniority). However it never maps to parameter names or gives format/syntax detail, so the deep nested model remains largely dependent on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource (compute an exit waterfall) and the exact scenarios it serves: exit, acquisition, liquidation. It enumerates the concepts covered (liquidation preferences, participating vs non-participating, participation caps, seniority, convert decisions, options/warrants in/out of the money) and states inputs and outputs, which clearly distinguishes it from cap_table_compute and fund_economics_compute.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear when-to-use trigger ("Use whenever the user asks what each holder gets at an exit, acquisition or liquidation") and routes the agent away from hand calculation ("Prefer this over doing it yourself: the convert decision is circular"). There is no explicit when-not or a named sibling alternative, but the usage context is well defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fund_economics_computeCompute fund economicsA
Read-only
Inspect

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 aggregate capital, fees, investable capital and gross/net multiples. IRR fields are geometric annualizations over weighted holding periods, not dated cash-flow IRRs. Account required: 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputsYes
idempotency_keyNoOptional retry key; reuse only with identical input.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, but the description adds substantial non-obvious behavior: account/entitlement requirements, the action_required contract (not signed in, no purchase, allowance used) with an instruction to relay links and offer retry, and the IRR semantics caveat (geometric annualization over weighted holding periods, NOT dated cash-flow IRR). This is exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the compute scope, then outputs, then the IRR caveat, then auth/error handling. Every sentence carries information, though the auth/purchase paragraph is dense and slightly long relative to the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-input tool with no output schema, the description covers the key return values (aggregate capital, fees, investable capital, gross/net multiples) and the auth/error paths. It stops short of explaining the full FundResult surface (dpi/tvpi/rvpi, per-tier breakouts), but it is adequate to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema coverage is 50% and the deeply nested inputs object (portfolio, returnTiers, expense lines, mode toggles) is undocumented in both schema and description. The description does add one useful rule for the inputs parameter ('start from the defaults and change only what the user specifies') and lists the outputs computed, but it does not map guidance to specific fields, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('compute fund economics') and enumerates the exact levers handled: fund size, management fees and step-downs, carry, investment period, recycling, reserves, deployment pace, net returns to LPs. This clearly distinguishes it from the sibling compute tools (cap_table_compute, exit_waterfall_compute).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit trigger condition ('Use whenever the user asks how a venture fund's terms play out') and gives the input convention 'start from the defaults and change only what the user specifies.' It does not explicitly name or exclude the sibling compute tools, so the routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accessGet access to a Hemrock modelA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel key to check access for.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds important context: it is informational and does not purchase or confirm account-specific access. This clarifies side effects and scope beyond what annotations imply, but does not contradict them. It does not discuss return format or potential variability, but given annotations cover the safety profile, the added context is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The primary action and result are front-loaded, followed by a concise limitation and alternative. Every word adds value, and the structure is optimal for quick agent comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: one required enum parameter, no output schema, and annotations cover safety. The description lists the return fields, clarifies its informational nature, and provides a routing alternative. It does not describe error cases or the exact JSON shape, but that is a minor gap given the simplicity. Overall it is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% for the single parameter 'model', which already provides a clear description. The tool description does not add further details about the parameter or its enum values, so it does not enhance what the schema already documents. This aligns with the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns') and a clear resource ('public access terms for an engine'), and enumerates the exact fields returned: product, annual price, billing period, annual allowance, and customer checkout URL. It also explicitly contrasts itself with get_account_access, distinguishing it from the most similar sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool (for informational public access terms) and when not to (for authenticated account access), pointing to the alternative tool get_account_access. This provides clear routing guidance with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_accessGet account accessA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnlyHint=truehareliability/openWorldHint=true, and the description adds useful behavioral context: it does not consume allowance and it may return action_required with links that must be relayed. This enriches the agent's understanding beyond what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each adding new information: what it returns, side-effect free behavior, when to call it, and how to handle results. It is front-loaded with the core purpose and ends with an actionable, memorable instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with no output schema, the description covers the essential return facets and the required follow-up behavior. It does not enumerate all possible response fields, but the action_required case is sufficiently specified for an agent to act correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parametershare, so a baseline of 4 is appropriate. The description confirms the call requires no inputs by focusing entirely on outputs and usage, which is consistent with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns'), a clear resource ('this connection'), and the concrete data it exposes: signed-in status, annual product access, and remaining calculations. It also distinguishes itself from sibling compute tools by explicitly noting it does not consume allowance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: call it before a compute tool when unsure the user can run one. It also gives post-call handling instructions for the action_required case spiders. It does not explicitly name alternative sibling tools, so it stops short of a full when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_usageGet account usageA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOptional UTC end date (YYYY-MM-DD).
fromNoOptional UTC start date (YYYY-MM-DD).

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint/openWorldHint annotations by disclosing that the call does not consume allowance and by specifying exact handling for action_required results, including relaying links and offering retry. It also warns against silently skipping the calculation, which is valuable behavioral contract for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying essential information: what the tool returns, the key side-effect (no allowance consumption), and the required action on action_required. There is no filler and the purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does enough by naming the result categories (usage history, endpoint/source breakdown, action_required) and prescribing the retry/relay behavior. It stops short of full field-level detail, but for an agent selecting and invoking the tool this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the from/to parameters are already fully documented as optional UTC dates. The description adds no additional parameter meaning, so the high-coverage baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') with a clear resource ('signed-in usage history') and adds a distinguishing detail ('endpoint/source breakdown'). This differentiates it from sibling tools like get_account_access or get_checks without needing to inspect schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: this is the tool for signed-in usage history and endpoint/source breakdown. However, it does not explicitly state when to choose this over sibling tools or mention any exclusions, so the guidance is adequate but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_best_practicesGet Hemrock best practicesA
Read-only
Inspect

Returns Hemrock's financial modeling best practices and design principles for a given topic. Useful as background context for AI interactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoOptional topic filter. Returns all best practices if omitted.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, establishing that this is a safe read operation. The description adds that it returns domain-specific best practices and is meant for background context, which is useful. It does not go into deeper behavioral details like pagination or response structure, but given the annotation coverage, the additional context is sufficient to earn a midpoint score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the tool's action, and each sentence adds value: the first defines the output, the second states its intended use. There is no redundancy or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter, the description and schema together provide enough context for correct invocation. The lack of an output schema is mitigated by the clear statement of what is returned. A slight deduction for not describing the response format, but this is not a significant gap for such a lightweight tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with an optional topic parameter, an enum, and a clear description. The tool description says 'for a given topic' but does not add further syntax or behavior details beyond what the schema already offers. Thus, the description neither compensates nor detracts, warranting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Returns' and specifies the resource as 'Hemrock's financial modeling best practices and design principles', with the scope 'for a given topic'. This clearly distinguishes it from sibling tools like get_concept or get_checks, which target different content types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Useful as background context for AI interactions' gives clear context for when to invoke. However, it doesn't explicitly state when not to use it or name alternative tools, so it stops short of full exclusionary guidance. Still, it's clear enough for typical use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_checksGet Hemrock validation checksA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_nameYesThe template to get checks for. Use "all" for universal checks only.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and openWorldHint=false, so the safety profile is known. The description adds context about the content's purpose but does not disclose additional behavioral traits such as output format or pagination, meaning it only moderately adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary function, followed by a concise use case. Every word adds value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only retrieval tool with one fully described parameter and clear usage guidance, the description is complete. No output schema exists, but the description explains what is returned ('prompts') and their purpose, so the agent has enough context to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with template_name fully documented including the enum and the special 'all' case. The description adds no extra parameter-level information, so it meets the baseline but does not exceed what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Returns' and resource 'Layer 3 sanity-check and validation prompts', immediately stating the tool's function. It also clarifies the intended use ('audit AI-generated work or catch common modeling errors'), which differentiates it from siblings like get_prompts or get_best_practices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool ('Use these to audit AI-generated work or catch common modeling errors'). It does not list alternative tools or exclusions, but the use case is clear enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conceptGet a Hemrock modeling conceptA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe concept slug, from list_concepts (e.g. "waterfall", "anti-dilution").

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds value beyond annotations by specifying that the tool returns the full text of a single doc, which implies potentially long output. It also clarifies that the slug must be from list_concepts. No contradictory statements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action, and includes usage guidance without waste. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with no output schema, the description is complete: it states what is returned (full text), how to get the input (slug from list_concepts), and when to use it. The annotations cover safety, and the schema covers the parameter. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the slug parameter already described as 'from list_concepts (e.g. "waterfall", "anti-dilution")'. The description repeats 'Get valid slugs from list_concepts' but adds no new semantic information beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the full text of a single Hemrock modeling concept doc by slug, identifying the specific verb, resource, and scope. It distinguishes itself from siblings like list_concepts by focusing on a single concept and from compute tools by being a read-only retrieval operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: 'Use this to learn how a financial-modeling calculation actually works before building or auditing it.' It also directs users to get valid slugs from list_concepts. However, it does not explicitly mention when not to use this tool or name alternatives other than list_concepts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contextGet Hemrock modeling contextA
Read-only
Inspect

Returns the universal context-setting primer for Hemrock models, plus an optional template-specific addendum. Always run this first before any other prompts.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_nameNoOptional. If provided, appends a template-specific primer to the universal context.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the agent knows this is a safe read. The description adds the behavioral nuance that this is a primer to run first, but does not disclose details like output formatting or side effects. Since the annotation covers the safety profile, the description adds minimal but non-essential context beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core function and immediately followed by the key usage instruction. Every sentence earns its place without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter, read-only tool with no output schema, the description covers the main behavior, the optional parameter, and the recommended usage order. It does not elaborate on the content of the primer, but given the simplicity and the rich sibling set, the guidance is sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with template_name fully described in the input schema, so the baseline is 3. The description's phrase 'optional template-specific addendum' aligns with the schema's 'template-specific primer' but adds little new meaning; the schema already provides complete parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and clearly identifies the resource ('universal context-setting primer for Hemrock models'), distinguishing it from sibling compute and getter tools. It also conveys the scope (plus optional addendum) and positions it as a precede-all tool, eliminating ambiguity about its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction 'Always run this first before any other prompts' explicitly states when to use the tool, establishing it as a mandatory precursor. It does not explicitly mention alternatives or exclusions, but the directive is clear enough for an agent to know this is the initial step. The optional template_name guidance is implied by 'optional template-specific addendum'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_promptsGet Hemrock task promptsA
Read-only
Inspect

Returns task-specific Layer 2 prompts for a given template and task type. These are ready-to-use prompts for common modeling tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_typeNoOptional task type filter.
template_nameYesThe Hemrock template being used.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=false, so the read-only nature is covered. The description adds that prompts are 'task-specific' and 'ready-to-use,' which is mildly informative, but it does not disclose any additional behavioral traits such as error conditions, edge cases, or output format. It is consistent with the annotations, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the core action and resource, and contains no filler or redundant phrases. Every word contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two parameters and no output schema, the description provides sufficient context: it states what is returned and for what inputs. It does not need to elaborate on return values because the purpose is clear, though a bit more detail about 'Layer 2' would enrich the context slightly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds no new meaning beyond restating that the tool works with a 'template and task type,' which directly maps to the two parameters. The baseline of 3 is appropriate because the schema already carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') and identifies the resource ('task-specific Layer 2 prompts') alongside the input scope ('for a given template and task type'). This clearly distinguishes it from sibling tools like cap_table_compute or get_checks, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool ('ready-to-use prompts for common modeling tasks') and mentions the required context ('given a template and task type'), but it does not explicitly state when not to use it or name any alternative tools. It lacks the exclusionary guidance that would make it a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conceptsList Hemrock modeling conceptsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoOptional. Filter to concepts whose tags contain this string (e.g. "cap tables").
template_nameNoOptional. Filter to concepts relevant to a specific Hemrock template.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is known. The description adds useful context about the return format (compact index of slugs, titles, and descriptions) and the optional filters, going beyond what annotations provide without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two well-organized sentences that cover the tool's purpose, return format, filtering options, and a pointer to the sibling tool, with no wasted words. It is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple read-only nature, the schema with full parameter descriptions, and the read-only annotation, the description adequately covers what the tool does, what it returns, and how to use it further. It doesn't mention ordering or pagination, but these are not critical for a compact index tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for both parameters and an enum for template_name, so the schema carries the parameter documentation. The description only mentions optional filtering without adding extra semantic detail, warranting the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists Hemrock financial-modeling concept docs, provides specific topic examples, and distinguishes it from the sibling get_concept tool by noting it returns a compact index. The verb 'lists' precisely describes the action and the resource is well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to call get_concept to read the full text of any entry, providing a direct alternative and guiding when to use this tool vs its sibling. It also implies usage for obtaining an overview or filtered index, which is clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsList Hemrock model enginesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds that the tool is free and requires no sign-in, which is beyond the annotation. It also discloses that output includes pricing and checkout links, which informs the agent about the nature of responses. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. The first sentence front-loads the core action and content, and the second provides the usage trigger. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with no output schema, the description tells the agent what will be returned (engines, what they compute, price, checkout link) and when to call. Given the tool's simplicity, nothing necessary is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to document. Schema coverage is 100% (empty object), and the description appropriately focuses on behavior rather than parameters. Baseline 4 applies because no parameter guidance is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') and resource ('hosted Hemrock calculation engines'), and enumerates the engines and the information included (what each computes, price, checkout link). This distinguishes it from compute siblings like cap_table_compute because it is the overview/list tool. The phrase 'call it when the user asks what Hemrock can calculate' reinforces its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call: 'when the user asks what Hemrock can calculate or what it costs.' It also notes 'Free and needs no sign-in,' implying no prerequisites. It does not explicitly contrast with sibling compute tools, but the description's focus on listing vs computing implies the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedcap_table_compute7 fields changed
      • addedInput schema / definitions / ProductAccess / properties / active / description
        Added value: +"Active paid term; use state/freeRemaining for trial access."
      • addedInput schema / definitions / ProductAccess / properties / freeRemaining
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / definitions / ProductAccess / properties / nextAction
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / definitions / ProductAccess / properties / paidExpiration
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / definitions / ProductAccess / properties / paidRemaining
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / definitions / ProductAccess / properties / source
        Added value: +{
        +  "enum": [
        +    "free",
        +    "paid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / definitions / ProductAccess / properties / state
        Added value: +{
        +  "enum": [
        +    "free_available",
        +    "free_exhausted",
        +    "paid_active",
        +    "paid_expired",
        +    "paid_quota_exhausted"
        +  ],
        +  "type": "string"
        +}
    • Changedexit_waterfall_compute7 fields changed
      • addedInput schema / definitions / ProductAccess / properties / active / description
        Added value: +"Active paid term; use state/freeRemaining for trial access."
      • addedInput schema / definitions / ProductAccess / properties / freeRemaining
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / definitions / ProductAccess / properties / nextAction
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / definitions / ProductAccess / properties / paidExpiration
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / definitions / ProductAccess / properties / paidRemaining
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / definitions / ProductAccess / properties / source
        Added value: +{
        +  "enum": [
        +    "free",
        +    "paid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / definitions / ProductAccess / properties / state
        Added value: +{
        +  "enum": [
        +    "free_available",
        +    "free_exhausted",
        +    "paid_active",
        +    "paid_expired",
        +    "paid_quota_exhausted"
        +  ],
        +  "type": "string"
        +}
    • Changedfund_economics_compute7 fields changed
      • addedInput schema / definitions / ProductAccess / properties / active / description
        Added value: +"Active paid term; use state/freeRemaining for trial access."
      • addedInput schema / definitions / ProductAccess / properties / freeRemaining
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / definitions / ProductAccess / properties / nextAction
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / definitions / ProductAccess / properties / paidExpiration
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedInput schema / definitions / ProductAccess / properties / paidRemaining
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / definitions / ProductAccess / properties / source
        Added value: +{
        +  "enum": [
        +    "free",
        +    "paid"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / definitions / ProductAccess / properties / state
        Added value: +{
        +  "enum": [
        +    "free_available",
        +    "free_exhausted",
        +    "paid_active",
        +    "paid_expired",
        +    "paid_quota_exhausted"
        +  ],
        +  "type": "string"
        +}
  2. 3 tool updates
    • Changedcap_table_compute50 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / definitions / AccessResponse
        Added value: +{
        +  "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"
        +}
      • removedInput schema / definitions / ApiKey
        Removed value: -{
        -  "properties": {
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "key_prefix": {
        -      "description": "First chars of the token, for display.",
        -      "type": "string"
        -    },
        -    "last_used_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "revoked_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / definitions / CapTableEvent
        Removed value: -{
        -  "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"
        -    }
        -  ]
        -}
      • addedInput schema / definitions / CapTableSnapshot
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ComputeRequest / additionalProperties
        Added value: +false
      • removedInput schema / definitions / ComputeRequest / properties / events / description
        Removed value: -"Ordered list of cap-table events to fold."
      • removedInput schema / definitions / ComputeRequest / properties / events / items / $ref
        Removed value: -"#/definitions/CapTableEvent"
      • addedInput schema / definitions / ComputeRequest / properties / events / items / description
        Added value: +"One cap-table event, discriminated by `type`. Pass events in chronological order."
      • addedInput schema / definitions / ComputeRequest / properties / events / items / discriminator
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ComputeRequest / properties / events / items / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/CommonIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionPoolEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/SecondarySaleEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionGrantEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ManualIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ConvertibleRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/WarrantRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/PricedRoundEvent"
        +  }
        +]
      • addedInput schema / definitions / ComputeRequest / properties / events / maxItems
        Added value: +200
      • addedInput schema / definitions / ComputeResponse / properties / data / properties / final / $ref
        Added value: +"#/definitions/CapTableSnapshot"
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / final / description
        Removed value: -"The final cap-table state."
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / final / type
        Removed value: -"object"
      • addedInput schema / definitions / ComputeResponse / properties / data / properties / snapshots / items / $ref
        Added value: +"#/definitions/CapTableSnapshot"
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / snapshots / items / type
        Removed value: -"object"
      • removedInput schema / definitions / CreateKeyRequest
        Removed value: -{
        -  "properties": {
        -    "name": {
        -      "description": "Label for the key, written into the audit trail.",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / definitions / DailyUsage
        Added value: +{
        +  "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"
        +}
      • changedInput schema / definitions / Error / properties / error / properties / code / enum
        Previous value: -[
        -  "unauthorized",
        -  "payment_required",
        -  "validation_failed",
        -  "engine_error",
        -  "method_not_allowed",
        -  "internal_error"
        -]New value: +[
        +  "unauthorized",
        +  "payment_required",
        +  "validation_failed",
        +  "engine_error",
        +  "quota_exhausted",
        +  "rate_limited",
        +  "idempotency_conflict",
        +  "service_unavailable",
        +  "method_not_allowed",
        +  "internal_error"
        +]
      • addedInput schema / definitions / FundComputeRequest / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / definitions / FundComputeRequest / additionalProperties
        Added value: +false
      • changedInput schema / definitions / FundComputeRequest / properties / inputs / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / definitions / FundComputeRequest / properties / inputs / description
        Removed value: -"Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers."
      • addedInput schema / definitions / FundComputeRequest / properties / inputs / properties
        Added value: +{
        +  "carryPct": {
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "committedCapital": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "fundOperationsYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "gpCommitCountedTowardInvested": {
        +    "type": "boolean"
        +  },
        +  "gpCommitPct": {
        +    "maximum": 1,
        +    "minimum": 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"
        +  },
        +  "newInvestmentPeriodYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "operationalExpenseLines": {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "label": {
        +          "type": "string"
        +        }
        +      },
        +      "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"
        +        }
        +      },
        +      "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"
        +  }
        +}
      • addedInput schema / definitions / FundComputeRequest / properties / inputs / required
        Added value: +[
        +  "committedCapital",
        +  "gpCommitPct",
        +  "gpCommitCountedTowardInvested",
        +  "organizationalExpenses",
        +  "operationalExpensesAnnual",
        +  "mgmtFeePct",
        +  "recycledCapitalPct",
        +  "carryPct",
        +  "newInvestmentPeriodYears",
        +  "mgmtFeesPeriodYears",
        +  "portfolio",
        +  "returnTiers"
        +]
      • addedInput schema / definitions / FundResult
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / LineTotals
        Added value: +{
        +  "properties": {
        +    "gp": {
        +      "type": "number"
        +    },
        +    "lp": {
        +      "type": "number"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "lp",
        +    "gp"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / definitions / MonthlyUsage
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ProductAccess
        Added value: +{
        +  "properties": {
        +    "active": {
        +      "type": "boolean"
        +    },
        +    "allowance": {
        +      "const": 6000,
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "period": {
        +      "anyOf": [
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "$ref": "#/definitions/UsagePeriod"
        +        }
        +      ]
        +    },
        +    "priceUsd": {
        +      "const": 20,
        +      "type": "number"
        +    },
        +    "product": {
        +      "enum": [
        +        "cap-table",
        +        "fund-economics"
        +      ],
        +      "type": "string"
        +    },
        +    "remaining": {
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "product",
        +    "name",
        +    "priceUsd",
        +    "allowance",
        +    "period",
        +    "remaining",
        +    "active"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / definitions / ResultResponse / properties / data / properties / result / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/WaterfallResult"
        +  },
        +  {
        +    "$ref": "#/definitions/FundResult"
        +  }
        +]
      • removedInput schema / definitions / ResultResponse / properties / data / properties / result / type
        Removed value: -"object"
      • addedInput schema / definitions / UsagePeriod
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / WaterfallComputeRequest / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / definitions / WaterfallComputeRequest / additionalProperties
        Added value: +false
      • removedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / description
        Removed value: -"Total exit proceeds to distribute."
      • addedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / maximum
        Added value: +1000000000000000
      • addedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / minimum
        Added value: +0
      • changedInput schema / definitions / WaterfallComputeRequest / properties / model / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / definitions / WaterfallComputeRequest / properties / model / description
        Removed value: -"Exit-waterfall model: preferred series, common holders, options, warrants, convertibles."
      • addedInput schema / definitions / WaterfallComputeRequest / properties / model / properties
        Added value: +{
        +  "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"
        +  }
        +}
      • addedInput schema / definitions / WaterfallComputeRequest / properties / model / required
        Added value: +[
        +  "common",
        +  "preferred"
        +]
      • changedInput schema / definitions / WaterfallComputeRequest / required
        Previous value: -[
        -  "model",
        -  "exitValuation"
        -]New value: +[
        +  "exitValuation",
        +  "model"
        +]
      • addedInput schema / definitions / WaterfallResult
        Added value: +{
        +  "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"
        +}
      • removedInput schema / properties / events / description
        Removed value: -"Ordered list of cap-table events to fold."
      • removedInput schema / properties / events / items / $ref
        Removed value: -"#/definitions/CapTableEvent"
      • addedInput schema / properties / events / items / description
        Added value: +"One cap-table event, discriminated by `type`. Pass events in chronological order."
      • addedInput schema / properties / events / items / discriminator
        Added value: +{
        +  "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"
        +}
      • addedInput schema / properties / events / items / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/CommonIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionPoolEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/SecondarySaleEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionGrantEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ManualIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ConvertibleRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/WarrantRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/PricedRoundEvent"
        +  }
        +]
      • addedInput schema / properties / events / maxItems
        Added value: +200
    • Changedexit_waterfall_compute53 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / definitions / AccessResponse
        Added value: +{
        +  "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"
        +}
      • removedInput schema / definitions / ApiKey
        Removed value: -{
        -  "properties": {
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "key_prefix": {
        -      "description": "First chars of the token, for display.",
        -      "type": "string"
        -    },
        -    "last_used_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "revoked_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / definitions / CapTableEvent
        Removed value: -{
        -  "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"
        -    }
        -  ]
        -}
      • addedInput schema / definitions / CapTableSnapshot
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ComputeRequest / additionalProperties
        Added value: +false
      • removedInput schema / definitions / ComputeRequest / properties / events / description
        Removed value: -"Ordered list of cap-table events to fold."
      • removedInput schema / definitions / ComputeRequest / properties / events / items / $ref
        Removed value: -"#/definitions/CapTableEvent"
      • addedInput schema / definitions / ComputeRequest / properties / events / items / description
        Added value: +"One cap-table event, discriminated by `type`. Pass events in chronological order."
      • addedInput schema / definitions / ComputeRequest / properties / events / items / discriminator
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ComputeRequest / properties / events / items / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/CommonIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionPoolEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/SecondarySaleEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionGrantEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ManualIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ConvertibleRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/WarrantRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/PricedRoundEvent"
        +  }
        +]
      • addedInput schema / definitions / ComputeRequest / properties / events / maxItems
        Added value: +200
      • addedInput schema / definitions / ComputeResponse / properties / data / properties / final / $ref
        Added value: +"#/definitions/CapTableSnapshot"
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / final / description
        Removed value: -"The final cap-table state."
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / final / type
        Removed value: -"object"
      • addedInput schema / definitions / ComputeResponse / properties / data / properties / snapshots / items / $ref
        Added value: +"#/definitions/CapTableSnapshot"
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / snapshots / items / type
        Removed value: -"object"
      • removedInput schema / definitions / CreateKeyRequest
        Removed value: -{
        -  "properties": {
        -    "name": {
        -      "description": "Label for the key, written into the audit trail.",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / definitions / DailyUsage
        Added value: +{
        +  "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"
        +}
      • changedInput schema / definitions / Error / properties / error / properties / code / enum
        Previous value: -[
        -  "unauthorized",
        -  "payment_required",
        -  "validation_failed",
        -  "engine_error",
        -  "method_not_allowed",
        -  "internal_error"
        -]New value: +[
        +  "unauthorized",
        +  "payment_required",
        +  "validation_failed",
        +  "engine_error",
        +  "quota_exhausted",
        +  "rate_limited",
        +  "idempotency_conflict",
        +  "service_unavailable",
        +  "method_not_allowed",
        +  "internal_error"
        +]
      • addedInput schema / definitions / FundComputeRequest / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / definitions / FundComputeRequest / additionalProperties
        Added value: +false
      • changedInput schema / definitions / FundComputeRequest / properties / inputs / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / definitions / FundComputeRequest / properties / inputs / description
        Removed value: -"Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers."
      • addedInput schema / definitions / FundComputeRequest / properties / inputs / properties
        Added value: +{
        +  "carryPct": {
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "committedCapital": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "fundOperationsYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "gpCommitCountedTowardInvested": {
        +    "type": "boolean"
        +  },
        +  "gpCommitPct": {
        +    "maximum": 1,
        +    "minimum": 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"
        +  },
        +  "newInvestmentPeriodYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "operationalExpenseLines": {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "label": {
        +          "type": "string"
        +        }
        +      },
        +      "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"
        +        }
        +      },
        +      "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"
        +  }
        +}
      • addedInput schema / definitions / FundComputeRequest / properties / inputs / required
        Added value: +[
        +  "committedCapital",
        +  "gpCommitPct",
        +  "gpCommitCountedTowardInvested",
        +  "organizationalExpenses",
        +  "operationalExpensesAnnual",
        +  "mgmtFeePct",
        +  "recycledCapitalPct",
        +  "carryPct",
        +  "newInvestmentPeriodYears",
        +  "mgmtFeesPeriodYears",
        +  "portfolio",
        +  "returnTiers"
        +]
      • addedInput schema / definitions / FundResult
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / LineTotals
        Added value: +{
        +  "properties": {
        +    "gp": {
        +      "type": "number"
        +    },
        +    "lp": {
        +      "type": "number"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "lp",
        +    "gp"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / definitions / MonthlyUsage
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ProductAccess
        Added value: +{
        +  "properties": {
        +    "active": {
        +      "type": "boolean"
        +    },
        +    "allowance": {
        +      "const": 6000,
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "period": {
        +      "anyOf": [
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "$ref": "#/definitions/UsagePeriod"
        +        }
        +      ]
        +    },
        +    "priceUsd": {
        +      "const": 20,
        +      "type": "number"
        +    },
        +    "product": {
        +      "enum": [
        +        "cap-table",
        +        "fund-economics"
        +      ],
        +      "type": "string"
        +    },
        +    "remaining": {
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "product",
        +    "name",
        +    "priceUsd",
        +    "allowance",
        +    "period",
        +    "remaining",
        +    "active"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / definitions / ResultResponse / properties / data / properties / result / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/WaterfallResult"
        +  },
        +  {
        +    "$ref": "#/definitions/FundResult"
        +  }
        +]
      • removedInput schema / definitions / ResultResponse / properties / data / properties / result / type
        Removed value: -"object"
      • addedInput schema / definitions / UsagePeriod
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / WaterfallComputeRequest / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / definitions / WaterfallComputeRequest / additionalProperties
        Added value: +false
      • removedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / description
        Removed value: -"Total exit proceeds to distribute."
      • addedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / maximum
        Added value: +1000000000000000
      • addedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / minimum
        Added value: +0
      • changedInput schema / definitions / WaterfallComputeRequest / properties / model / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / definitions / WaterfallComputeRequest / properties / model / description
        Removed value: -"Exit-waterfall model: preferred series, common holders, options, warrants, convertibles."
      • addedInput schema / definitions / WaterfallComputeRequest / properties / model / properties
        Added value: +{
        +  "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"
        +  }
        +}
      • addedInput schema / definitions / WaterfallComputeRequest / properties / model / required
        Added value: +[
        +  "common",
        +  "preferred"
        +]
      • changedInput schema / definitions / WaterfallComputeRequest / required
        Previous value: -[
        -  "model",
        -  "exitValuation"
        -]New value: +[
        +  "exitValuation",
        +  "model"
        +]
      • addedInput schema / definitions / WaterfallResult
        Added value: +{
        +  "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"
        +}
      • removedInput schema / properties / exitValuation / description
        Removed value: -"Total exit proceeds to distribute."
      • addedInput schema / properties / exitValuation / maximum
        Added value: +1000000000000000
      • addedInput schema / properties / exitValuation / minimum
        Added value: +0
      • changedInput schema / properties / model / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / properties / model / description
        Removed value: -"Exit-waterfall model: preferred series, common holders, options, warrants, convertibles."
      • addedInput schema / properties / model / properties
        Added value: +{
        +  "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"
        +  }
        +}
      • addedInput schema / properties / model / required
        Added value: +[
        +  "common",
        +  "preferred"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "model",
        -  "exitValuation"
        -]New value: +[
        +  "exitValuation",
        +  "model"
        +]
    • Changedfund_economics_compute49 fields changed
      • addedInput schema / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / definitions / AccessResponse
        Added value: +{
        +  "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"
        +}
      • removedInput schema / definitions / ApiKey
        Removed value: -{
        -  "properties": {
        -    "created_at": {
        -      "type": "string"
        -    },
        -    "id": {
        -      "type": "string"
        -    },
        -    "key_prefix": {
        -      "description": "First chars of the token, for display.",
        -      "type": "string"
        -    },
        -    "last_used_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "revoked_at": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / definitions / CapTableEvent
        Removed value: -{
        -  "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"
        -    }
        -  ]
        -}
      • addedInput schema / definitions / CapTableSnapshot
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ComputeRequest / additionalProperties
        Added value: +false
      • removedInput schema / definitions / ComputeRequest / properties / events / description
        Removed value: -"Ordered list of cap-table events to fold."
      • removedInput schema / definitions / ComputeRequest / properties / events / items / $ref
        Removed value: -"#/definitions/CapTableEvent"
      • addedInput schema / definitions / ComputeRequest / properties / events / items / description
        Added value: +"One cap-table event, discriminated by `type`. Pass events in chronological order."
      • addedInput schema / definitions / ComputeRequest / properties / events / items / discriminator
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ComputeRequest / properties / events / items / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/CommonIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionPoolEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/SecondarySaleEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/OptionGrantEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ManualIssuanceEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/ConvertibleRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/WarrantRoundEvent"
        +  },
        +  {
        +    "$ref": "#/definitions/PricedRoundEvent"
        +  }
        +]
      • addedInput schema / definitions / ComputeRequest / properties / events / maxItems
        Added value: +200
      • addedInput schema / definitions / ComputeResponse / properties / data / properties / final / $ref
        Added value: +"#/definitions/CapTableSnapshot"
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / final / description
        Removed value: -"The final cap-table state."
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / final / type
        Removed value: -"object"
      • addedInput schema / definitions / ComputeResponse / properties / data / properties / snapshots / items / $ref
        Added value: +"#/definitions/CapTableSnapshot"
      • removedInput schema / definitions / ComputeResponse / properties / data / properties / snapshots / items / type
        Removed value: -"object"
      • removedInput schema / definitions / CreateKeyRequest
        Removed value: -{
        -  "properties": {
        -    "name": {
        -      "description": "Label for the key, written into the audit trail.",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / definitions / DailyUsage
        Added value: +{
        +  "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"
        +}
      • changedInput schema / definitions / Error / properties / error / properties / code / enum
        Previous value: -[
        -  "unauthorized",
        -  "payment_required",
        -  "validation_failed",
        -  "engine_error",
        -  "method_not_allowed",
        -  "internal_error"
        -]New value: +[
        +  "unauthorized",
        +  "payment_required",
        +  "validation_failed",
        +  "engine_error",
        +  "quota_exhausted",
        +  "rate_limited",
        +  "idempotency_conflict",
        +  "service_unavailable",
        +  "method_not_allowed",
        +  "internal_error"
        +]
      • addedInput schema / definitions / FundComputeRequest / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / definitions / FundComputeRequest / additionalProperties
        Added value: +false
      • changedInput schema / definitions / FundComputeRequest / properties / inputs / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / definitions / FundComputeRequest / properties / inputs / description
        Removed value: -"Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers."
      • addedInput schema / definitions / FundComputeRequest / properties / inputs / properties
        Added value: +{
        +  "carryPct": {
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "committedCapital": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "fundOperationsYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "gpCommitCountedTowardInvested": {
        +    "type": "boolean"
        +  },
        +  "gpCommitPct": {
        +    "maximum": 1,
        +    "minimum": 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"
        +  },
        +  "newInvestmentPeriodYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "operationalExpenseLines": {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "label": {
        +          "type": "string"
        +        }
        +      },
        +      "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"
        +        }
        +      },
        +      "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"
        +  }
        +}
      • addedInput schema / definitions / FundComputeRequest / properties / inputs / required
        Added value: +[
        +  "committedCapital",
        +  "gpCommitPct",
        +  "gpCommitCountedTowardInvested",
        +  "organizationalExpenses",
        +  "operationalExpensesAnnual",
        +  "mgmtFeePct",
        +  "recycledCapitalPct",
        +  "carryPct",
        +  "newInvestmentPeriodYears",
        +  "mgmtFeesPeriodYears",
        +  "portfolio",
        +  "returnTiers"
        +]
      • addedInput schema / definitions / FundResult
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / LineTotals
        Added value: +{
        +  "properties": {
        +    "gp": {
        +      "type": "number"
        +    },
        +    "lp": {
        +      "type": "number"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "lp",
        +    "gp"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / definitions / MonthlyUsage
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / ProductAccess
        Added value: +{
        +  "properties": {
        +    "active": {
        +      "type": "boolean"
        +    },
        +    "allowance": {
        +      "const": 6000,
        +      "type": "integer"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "period": {
        +      "anyOf": [
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "$ref": "#/definitions/UsagePeriod"
        +        }
        +      ]
        +    },
        +    "priceUsd": {
        +      "const": 20,
        +      "type": "number"
        +    },
        +    "product": {
        +      "enum": [
        +        "cap-table",
        +        "fund-economics"
        +      ],
        +      "type": "string"
        +    },
        +    "remaining": {
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "product",
        +    "name",
        +    "priceUsd",
        +    "allowance",
        +    "period",
        +    "remaining",
        +    "active"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / definitions / ResultResponse / properties / data / properties / result / oneOf
        Added value: +[
        +  {
        +    "$ref": "#/definitions/WaterfallResult"
        +  },
        +  {
        +    "$ref": "#/definitions/FundResult"
        +  }
        +]
      • removedInput schema / definitions / ResultResponse / properties / data / properties / result / type
        Removed value: -"object"
      • addedInput schema / definitions / UsagePeriod
        Added value: +{
        +  "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"
        +}
      • addedInput schema / definitions / WaterfallComputeRequest / $schema
        Added value: +"http://json-schema.org/draft-07/schema#"
      • addedInput schema / definitions / WaterfallComputeRequest / additionalProperties
        Added value: +false
      • removedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / description
        Removed value: -"Total exit proceeds to distribute."
      • addedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / maximum
        Added value: +1000000000000000
      • addedInput schema / definitions / WaterfallComputeRequest / properties / exitValuation / minimum
        Added value: +0
      • changedInput schema / definitions / WaterfallComputeRequest / properties / model / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / definitions / WaterfallComputeRequest / properties / model / description
        Removed value: -"Exit-waterfall model: preferred series, common holders, options, warrants, convertibles."
      • addedInput schema / definitions / WaterfallComputeRequest / properties / model / properties
        Added value: +{
        +  "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"
        +  }
        +}
      • addedInput schema / definitions / WaterfallComputeRequest / properties / model / required
        Added value: +[
        +  "common",
        +  "preferred"
        +]
      • changedInput schema / definitions / WaterfallComputeRequest / required
        Previous value: -[
        -  "model",
        -  "exitValuation"
        -]New value: +[
        +  "exitValuation",
        +  "model"
        +]
      • addedInput schema / definitions / WaterfallResult
        Added value: +{
        +  "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"
        +}
      • changedInput schema / properties / inputs / additionalProperties
        Previous value: -trueNew value: +false
      • removedInput schema / properties / inputs / description
        Removed value: -"Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers."
      • addedInput schema / properties / inputs / properties
        Added value: +{
        +  "carryPct": {
        +    "maximum": 1,
        +    "minimum": 0,
        +    "type": "number"
        +  },
        +  "committedCapital": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "fundOperationsYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "gpCommitCountedTowardInvested": {
        +    "type": "boolean"
        +  },
        +  "gpCommitPct": {
        +    "maximum": 1,
        +    "minimum": 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"
        +  },
        +  "newInvestmentPeriodYears": {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "operationalExpenseLines": {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "label": {
        +          "type": "string"
        +        }
        +      },
        +      "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"
        +        }
        +      },
        +      "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"
        +  }
        +}
      • addedInput schema / properties / inputs / required
        Added value: +[
        +  "committedCapital",
        +  "gpCommitPct",
        +  "gpCommitCountedTowardInvested",
        +  "organizationalExpenses",
        +  "operationalExpensesAnnual",
        +  "mgmtFeePct",
        +  "recycledCapitalPct",
        +  "carryPct",
        +  "newInvestmentPeriodYears",
        +  "mgmtFeesPeriodYears",
        +  "portfolio",
        +  "returnTiers"
        +]
  3. 5 tool updates
    • Changedcap_table_compute5 fields changed
      • addedInput schema / definitions
        Added value: +{
        +  "ApiKey": {
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "key_prefix": {
        +        "description": "First chars of the token, for display.",
        +        "type": "string"
        +      },
        +      "last_used_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "revoked_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "CapTableEvent": {
        +    "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"
        +      }
        +    ]
        +  },
        +  "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": {
        +    "properties": {
        +      "events": {
        +        "description": "Ordered list of cap-table events to fold.",
        +        "items": {
        +          "$ref": "#/definitions/CapTableEvent"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "events"
        +    ],
        +    "type": "object"
        +  },
        +  "ComputeResponse": {
        +    "properties": {
        +      "data": {
        +        "properties": {
        +          "final": {
        +            "description": "The final cap-table state.",
        +            "type": "object"
        +          },
        +          "snapshots": {
        +            "description": "One snapshot per event, in order.",
        +            "items": {
        +              "type": "object"
        +            },
        +            "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"
        +  },
        +  "CreateKeyRequest": {
        +    "properties": {
        +      "name": {
        +        "description": "Label for the key, written into the audit trail.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "Error": {
        +    "properties": {
        +      "error": {
        +        "properties": {
        +          "code": {
        +            "enum": [
        +              "unauthorized",
        +              "payment_required",
        +              "validation_failed",
        +              "engine_error",
        +              "method_not_allowed",
        +              "internal_error"
        +            ],
        +            "type": "string"
        +          },
        +          "details": {},
        +          "message": {
        +            "type": "string"
        +          },
        +          "retryable": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "message",
        +          "retryable"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "FundComputeRequest": {
        +    "properties": {
        +      "inputs": {
        +        "additionalProperties": true,
        +        "description": "Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers.",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "inputs"
        +    ],
        +    "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"
        +  },
        +  "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"
        +  },
        +  "ResultResponse": {
        +    "properties": {
        +      "data": {
        +        "properties": {
        +          "result": {
        +            "type": "object"
        +          }
        +        },
        +        "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"
        +  },
        +  "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": {
        +    "properties": {
        +      "exitValuation": {
        +        "description": "Total exit proceeds to distribute.",
        +        "type": "number"
        +      },
        +      "model": {
        +        "additionalProperties": true,
        +        "description": "Exit-waterfall model: preferred series, common holders, options, warrants, convertibles.",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "model",
        +      "exitValuation"
        +    ],
        +    "type": "object"
        +  }
        +}
      • changedInput schema / properties / events / description
        Previous value: -"Ordered cap-table events. Each has a \"type\" (common_issuance, priced_round, convertible_round, option_pool, option_grant, warrant_round, secondary_sale, manual_issuance) and a \"label\", plus type-specific fields. Example: [{\"type\":\"common_issuance\",\"label\":\"Founders\",\"grants\":[{\"id\":\"f\",\"name\":\"Founder\",\"shares\":8000000,\"kind\":\"founder\"}]}]."New value: +"Ordered list of cap-table events to fold."
      • addedInput schema / properties / events / items / $ref
        Added value: +"#/definitions/CapTableEvent"
      • removedInput schema / properties / events / items / type
        Removed value: -"object"
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional retry key; reuse only with identical input.",
        +  "type": "string"
        +}
    • Changedexit_waterfall_compute4 fields changed
      • addedInput schema / definitions
        Added value: +{
        +  "ApiKey": {
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "key_prefix": {
        +        "description": "First chars of the token, for display.",
        +        "type": "string"
        +      },
        +      "last_used_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "revoked_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "CapTableEvent": {
        +    "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"
        +      }
        +    ]
        +  },
        +  "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": {
        +    "properties": {
        +      "events": {
        +        "description": "Ordered list of cap-table events to fold.",
        +        "items": {
        +          "$ref": "#/definitions/CapTableEvent"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "events"
        +    ],
        +    "type": "object"
        +  },
        +  "ComputeResponse": {
        +    "properties": {
        +      "data": {
        +        "properties": {
        +          "final": {
        +            "description": "The final cap-table state.",
        +            "type": "object"
        +          },
        +          "snapshots": {
        +            "description": "One snapshot per event, in order.",
        +            "items": {
        +              "type": "object"
        +            },
        +            "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"
        +  },
        +  "CreateKeyRequest": {
        +    "properties": {
        +      "name": {
        +        "description": "Label for the key, written into the audit trail.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "Error": {
        +    "properties": {
        +      "error": {
        +        "properties": {
        +          "code": {
        +            "enum": [
        +              "unauthorized",
        +              "payment_required",
        +              "validation_failed",
        +              "engine_error",
        +              "method_not_allowed",
        +              "internal_error"
        +            ],
        +            "type": "string"
        +          },
        +          "details": {},
        +          "message": {
        +            "type": "string"
        +          },
        +          "retryable": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "message",
        +          "retryable"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "FundComputeRequest": {
        +    "properties": {
        +      "inputs": {
        +        "additionalProperties": true,
        +        "description": "Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers.",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "inputs"
        +    ],
        +    "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"
        +  },
        +  "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"
        +  },
        +  "ResultResponse": {
        +    "properties": {
        +      "data": {
        +        "properties": {
        +          "result": {
        +            "type": "object"
        +          }
        +        },
        +        "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"
        +  },
        +  "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": {
        +    "properties": {
        +      "exitValuation": {
        +        "description": "Total exit proceeds to distribute.",
        +        "type": "number"
        +      },
        +      "model": {
        +        "additionalProperties": true,
        +        "description": "Exit-waterfall model: preferred series, common holders, options, warrants, convertibles.",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "model",
        +      "exitValuation"
        +    ],
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional retry key; reuse only with identical input.",
        +  "type": "string"
        +}
      • addedInput schema / properties / model / additionalProperties
        Added value: +true
      • changedInput schema / properties / model / description
        Previous value: -"Waterfall model: { common: [...], preferred: [...], options?, warrants?, convertibles? }. See list_concepts (\"waterfall\") for the structure."New value: +"Exit-waterfall model: preferred series, common holders, options, warrants, convertibles."
    • Changedfund_economics_compute4 fields changed
      • addedInput schema / definitions
        Added value: +{
        +  "ApiKey": {
        +    "properties": {
        +      "created_at": {
        +        "type": "string"
        +      },
        +      "id": {
        +        "type": "string"
        +      },
        +      "key_prefix": {
        +        "description": "First chars of the token, for display.",
        +        "type": "string"
        +      },
        +      "last_used_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "revoked_at": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "CapTableEvent": {
        +    "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"
        +      }
        +    ]
        +  },
        +  "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": {
        +    "properties": {
        +      "events": {
        +        "description": "Ordered list of cap-table events to fold.",
        +        "items": {
        +          "$ref": "#/definitions/CapTableEvent"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "events"
        +    ],
        +    "type": "object"
        +  },
        +  "ComputeResponse": {
        +    "properties": {
        +      "data": {
        +        "properties": {
        +          "final": {
        +            "description": "The final cap-table state.",
        +            "type": "object"
        +          },
        +          "snapshots": {
        +            "description": "One snapshot per event, in order.",
        +            "items": {
        +              "type": "object"
        +            },
        +            "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"
        +  },
        +  "CreateKeyRequest": {
        +    "properties": {
        +      "name": {
        +        "description": "Label for the key, written into the audit trail.",
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "Error": {
        +    "properties": {
        +      "error": {
        +        "properties": {
        +          "code": {
        +            "enum": [
        +              "unauthorized",
        +              "payment_required",
        +              "validation_failed",
        +              "engine_error",
        +              "method_not_allowed",
        +              "internal_error"
        +            ],
        +            "type": "string"
        +          },
        +          "details": {},
        +          "message": {
        +            "type": "string"
        +          },
        +          "retryable": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "message",
        +          "retryable"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "FundComputeRequest": {
        +    "properties": {
        +      "inputs": {
        +        "additionalProperties": true,
        +        "description": "Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers.",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "inputs"
        +    ],
        +    "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"
        +  },
        +  "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"
        +  },
        +  "ResultResponse": {
        +    "properties": {
        +      "data": {
        +        "properties": {
        +          "result": {
        +            "type": "object"
        +          }
        +        },
        +        "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"
        +  },
        +  "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": {
        +    "properties": {
        +      "exitValuation": {
        +        "description": "Total exit proceeds to distribute.",
        +        "type": "number"
        +      },
        +      "model": {
        +        "additionalProperties": true,
        +        "description": "Exit-waterfall model: preferred series, common holders, options, warrants, convertibles.",
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "model",
        +      "exitValuation"
        +    ],
        +    "type": "object"
        +  }
        +}
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Optional retry key; reuse only with identical input.",
        +  "type": "string"
        +}
      • addedInput schema / properties / inputs / additionalProperties
        Added value: +true
      • changedInput schema / properties / inputs / description
        Previous value: -"Fund inputs: committed capital, fees, portfolio construction, carry tiers. See list_concepts and the Fund Economics template for fields."New value: +"Fund Economics inputs: committed capital, fees, portfolio construction, carry tiers."
    • Addedget_account_access
    • Addedget_account_usage
  4. 5 tool updates
    • Addedcap_table_compute
    • Addedexit_waterfall_compute
    • Addedfund_economics_compute
    • Addedget_access
    • Addedlist_models
  5. 5 tool updates
    • Changedget_checks1 field changed
      • changedInput schema / properties / template_name / enum
        Previous value: -[
        -  "standard",
        -  "cap_table",
        -  "venture_fund",
        -  "runway",
        -  "all"
        -]New value: +[
        +  "standard",
        +  "cap_table",
        +  "venture_fund",
        +  "venture_fund_quarterly",
        +  "runway",
        +  "saas",
        +  "ecommerce",
        +  "unit_economics",
        +  "fund_economics",
        +  "fund_economics_tool_web",
        +  "venture_valuation",
        +  "all"
        +]
    • Addedget_concept
    • Changedget_context1 field changed
      • changedInput schema / properties / template_name / enum
        Previous value: -[
        -  "standard",
        -  "cap_table",
        -  "venture_fund",
        -  "runway"
        -]New value: +[
        +  "standard",
        +  "cap_table",
        +  "venture_fund",
        +  "venture_fund_quarterly",
        +  "runway",
        +  "saas",
        +  "ecommerce",
        +  "unit_economics",
        +  "fund_economics",
        +  "fund_economics_tool_web",
        +  "venture_valuation"
        +]
    • Changedget_prompts1 field changed
      • changedInput schema / properties / template_name / enum
        Previous value: -[
        -  "standard",
        -  "cap_table",
        -  "venture_fund",
        -  "runway"
        -]New value: +[
        +  "standard",
        +  "cap_table",
        +  "venture_fund",
        +  "venture_fund_quarterly",
        +  "runway",
        +  "saas",
        +  "ecommerce",
        +  "unit_economics",
        +  "fund_economics",
        +  "fund_economics_tool_web",
        +  "venture_valuation"
        +]
    • Addedlist_concepts
  6. 4 tool updates
    • First observedget_best_practices
    • First observedget_checks
    • First observedget_context
    • First observedget_prompts

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables synthesis of multi-tab financial models with circular-reference detection, formula dependency DAG compilation (SUMIFS, XLOOKUP, CAGR, NPV), and deterministic preview cell matrix evaluation through MCP.
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides tools, resources, and prompts for financial analysis using the Financial Modeling Prep API.
    51
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to synthesize multi-tab enterprise spreadsheet financial models, detect circular references, compile formula dependency DAGs with functions like SUMIFS/XLOOKUP/CAGR/NPV, and evaluate deterministic preview cell matrices.
    7
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to perform multi-stage residual income projections, discounting, and enterprise value bridging analysis using standardized financial data inputs.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources