Forecast
const url = 'https://example.com/forecast?account=example&days=30';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/forecast?account=example&days=30'Deterministic daily balance projection with annotated events —
‘checking goes negative on the 19th’ is answerable in this one call.
Instances beyond the materialized horizon are expanded from the rules
(projected), so days is honoured up to 365; coverage says what the
line is made of. Every event names its basis; an estimated one carries
a range band (min/max of its schedule’s newest settled amounts and its
own), and then each day carries low/high — the balance with every
ranged event at its worst / best — and pessimistic_low/optimistic_low
their minimums. first_shortfall stays on the point series.
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Account id or path
Account id or path
Responses
Section titled “Responses”Successful Response
object
What the projection is made of (#235) — zero active schedules means a line that is flat by construction, not a calm month.
object
Instances left out of the line as paid: an open match proposal names a live bank row already in the opening balance (decision 76)
object
object
Dated before today and still due
Expanded from the rule; no instance row exists yet
An estimated amount’s band (#247, decision 85), in this account’s sign: min/max of the schedule’s newest settled amounts and this one.
object
object
object
Example
{ "coverage": { "matches_pending": 0 }, "days": [ { "events": [ { "basis": "fixed", "overdue": false, "projected": false } ] } ]}Validation Error
object
object
object
Example generated
{ "detail": [ { "ctx": {}, "input": "example", "loc": [ "example" ], "msg": "example", "type": "example" } ]}