Budgets and reserves

budgets.scenarios.run

Test whether the company can afford founder or staff pay hourly (hours per week required), biweekly (every 14 days) or monthly for a chosen number of weeks or months. Uses the same dated cash-flow calculation as Budgets > Scenarios and the terminal, protects accrued tax reserves, includes recurring and one-off costs, employer burden, a cash buffer, an optional pay ramp, and explicit monthly revenue assumptions. Returns the proposal, no-pay baseline, smaller/delayed/ramp alternatives, first cash shortfall, affordable duration, maximum rate, earliest feasible start within a bounded search and required monthly revenue. Scenario-only cash and source overrides do not edit books; source IDs must come from budgets.scenarios.context. Missing data remains incomplete. Rerun this action for every follow-up comparison instead of inventing calculations. Does not create payroll, approve pay, pay tax or transfer funds.

GETPOST/api/v1/accounting/budgets.scenarios.run

Permissions

accounting:read

Who can call it

admin, finance

Retries

Safe to retry: it only reads

MCP

accounting_budgets_scenarios_run

Fields

  • currencystringRequired

    Three-letter currency code, such as CAD or USD.

  • personNamestring

    1–160 characters

  • rateobjectRequired

    No other fields

  • startsOnstring (date)Required

    A date, as YYYY-MM-DD.

  • durationobjectRequired

    No other fields

  • employerBurdenBpsinteger

    0 to 10000

  • minimumCashMinorstring

    An amount in cents (the currency's smallest unit), written as a whole-number string such as "1250" for $12.50.

    Matches ^\d{1,15}$

  • monthlyRevenueMinorstring

    An amount in cents (the currency's smallest unit), written as a whole-number string such as "1250" for $12.50.

    Matches ^\d{1,15}$

  • monthlyExpenseMinorstring

    An amount in cents (the currency's smallest unit), written as a whole-number string such as "1250" for $12.50.

    Matches ^\d{1,15}$

  • cashOverrideMinorstring

    An amount in cents (the currency's smallest unit), written as a whole-number string such as "1250" for $12.50.

    Matches ^\d{1,15}$

  • obligationOverridesarray of objects

    at most 100 items

  • extraExpensesarray of objects

    at most 100 items

  • rampobject

    No other fields

Example

curl https://app.getoatmilk.com/api/v1/accounting/budgets.scenarios.run \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "currency": "CAD",
  "rate": {
    "basis": "hourly",
    "amountMinor": "1250",
    "hoursPerWeek": 1
  },
  "startsOn": "2026-09-01",
  "duration": {
    "value": 1,
    "unit": "weeks"
  }
}'
Response
{
  "data": { … }
}

Try it

Try it

Checks your input with this action’s real schema and answers like the API, with synthetic data. No key needed, and nothing changes.

POST/api/v1/accounting/budgets.scenarios.run
curl https://app.getoatmilk.com/api/v1/accounting/budgets.scenarios.run \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "currency": "CAD",
  "rate": {
    "basis": "hourly",
    "amountMinor": "1250",
    "hoursPerWeek": 1
  },
  "startsOn": "2026-09-01",
  "duration": {
    "value": 1,
    "unit": "weeks"
  }
}'

More in Budgets and reserves.