get_analytics_money_position
Calls GET /api/analytics/money-position as the signed-in person · REST reference
Where the money is — the voucher pool over time, clawbacks, operations transfers and Stripe
One read for the Finance → Analytics "where the money is" section. Money is integer CENTS. pool is the VOUCHER_POOL account as the DAL serves it (balance, what is committed to vouchers and outstanding on allocations, and the grantable remainder) beside ledgerBalance, the same balance re-derived from every ledger edge — the two differ only when the ledger is inconsistent, which the panel shows as a warning. series has one row per UTC day of the range, oldest first: end-of-day running balances (poolBalance, operationsTransferredToDate, accumulated from the FIRST ledger row so the window opens on the real balance, and a quiet day repeating the day before) and that day's movements. A clawbackRecoveries figure is confirmed cash credited back to the pool (a CLAWBACK_RECOVERY leg carries a ledger line only once it is cash), never a booked reversal; claimsPaid is CLAIM debits; poolIn/poolOut are every pool credit and debit. operationsTransferred is the share moved INTO the operations Stripe account that day, negative when a refund or dispute brought it back. clawbacks is the whole queue folded by status (lifecycle order, every status present), read up to the DAL's 500-row cap — queueCapped says when that cap was hit. stripe.platform and stripe.operations are what Stripe holds in the view's currency; either is null when no key is configured or Stripe refused the read (the ledger figures stand), and operations is also null when no operations account is configured. inFlight names the ledger movements Stripe has not confirmed, which explain a platform balance above the pool. EVERY LEDGER ROW IS READ, 1000 a page; the cost grows with the ledger, not the range.
Arguments
| Argument | Type | Description | |
|---|---|---|---|
rangequery | "7d" | "30d" | "90d" | "1y" | "365d" | Anything unrecognised falls back to 30 days silently, as the time-series does. |
Example call
A client sends this over the MCP session; Claude and other agents build it for you. The values are placeholders — the shape is real.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_analytics_money_position",
"arguments": {}
}
}Result
On success (HTTP 200) the tool returns one text item holding the API's JSON, pretty-printed.
The position.
{
"asOf": "2026-01-15T12:00:00Z",
"clawbacks": {
"byStatus": [
{}
],
"filed": 1,
"outstanding": 1,
"queueCapped": true,
"recovered": 1,
"writtenOff": 1
},
"currency": "string",
"inFlight": {
"operationsAwaitingTransfer": 1,
"payoutsAwaitingTransfer": 1
},
"period": {
"claimsPaid": 1,
"clawbackRecoveries": 1,
"operationsCredited": 1,
"operationsTransferred": 1,
"poolIn": 1,
"poolOut": 1
},
"pool": {
"balance": 1,
"committed": 1,
"grantable": 1,
"ledgerBalance": 1,
"outstanding": 1
},
"range": "string",
"series": [
{
"claimsPaid": 1,
"clawbackRecoveries": 1,
"date": "2026-01-15",
"operationsCredited": 1,
"operationsTransferred": 1,
"operationsTransferredToDate": 1,
"poolBalance": 1,
"poolIn": 1,
"poolOut": 1
}
],
"stripe": {
"operations": {
"available": 1,
"pending": 1
},
"operationsAccountConfigured": true,
"platform": {
"available": 1,
"pending": 1
}
}
}Fields
| Field | Type | Description |
|---|---|---|
asOf | string (date-time) | |
clawbacks | object | |
clawbacks.byStatus | array of object | Every status, in lifecycle order. |
clawbacks.byStatus[].amount | integer | CENTS asked back. |
clawbacks.byStatus[].count | integer | |
clawbacks.byStatus[].outstanding | integer | CENTS still owed. |
clawbacks.byStatus[].recovered | integer | CENTS confirmed back. |
clawbacks.byStatus[].status | "REQUESTED" | "APPROVED" | "EXECUTING" | "RECOVERED" | "PARTIALLY_RECOVERED" | "WRITTEN_OFF" | … (7 values) | |
clawbacks.filed | integer | CENTS. Every filing, denied ones included. |
clawbacks.outstanding | integer | CENTS still owed across the clawbacks being collected. |
clawbacks.queueCapped | boolean | The queue read answered its 500-row cap; older clawbacks may be missing from these sums. |
clawbacks.recovered | integer | CENTS confirmed back across every clawback — what clawbacks have returned to the pool. |
clawbacks.writtenOff | integer | CENTS asked back and never recovered on the clawbacks closed short. |
currency | string | |
inFlight | object | |
inFlight.operationsAwaitingTransfer | integer | CENTS. Operations share of gifts whose transfer is PENDING or FAILED, gross of Stripe's fee. |
inFlight.payoutsAwaitingTransfer | integer | CENTS. Payouts the ledger settled whose transfer is PENDING or FAILED. |
period | object | The range's movements, summed. CENTS throughout. |
period.claimsPaid | integer | CLAIM debits from the pool. |
period.clawbackRecoveries | integer | Confirmed clawback cash credited back to the pool. |
period.operationsCredited | integer | Net credited to the OPERATING account on the ledger. |
period.operationsTransferred | integer | Net moved into the operations Stripe account; negative when money came back. |
period.poolIn | integer | Every credit to the pool. |
period.poolOut | integer | Every debit from the pool. |
pool | object | |
pool.balance | integer | CENTS. The VOUCHER_POOL account's balance. |
pool.committed | integer | CENTS. Face value of vouchers still reserving pool funds. |
pool.grantable | integer | CENTS. balance - committed - outstanding. |
pool.ledgerBalance | integer | CENTS. The same balance summed from every ledger edge. |
pool.outstanding | integer | CENTS. Every organization's un-spent allocation. |
range | string | The raw range query value, echoed verbatim. |
series | array of object | One row per UTC day of the range, oldest first. |
series[].claimsPaid | integer | CENTS of CLAIM debits that day. |
series[].clawbackRecoveries | integer | CENTS of confirmed clawback cash credited back that day. |
series[].date | string (date) | YYYY-MM-DD, UTC. |
series[].operationsCredited | integer | CENTS net credited to OPERATING that day. |
series[].operationsTransferred | integer | CENTS net moved into the operations account that day. |
series[].operationsTransferredToDate | integer | CENTS. Net moved into the operations account, from the first ledger row to the end of that day. |
series[].poolBalance | integer | CENTS. The pool at the end of that day. |
series[].poolIn | integer | CENTS credited to the pool that day. |
series[].poolOut | integer | CENTS debited from the pool that day. |
stripe | object | |
stripe.operations | object | null | The operations connected account. Null when none is configured or Stripe could not be read. |
stripe.operations.available | integer | CENTS. |
stripe.operations.pending | integer | CENTS. |
stripe.operationsAccountConfigured | boolean | |
stripe.platform | object | null | The platform account, which holds the pool. Null when Stripe could not be read. |
stripe.platform.available | integer | CENTS. |
stripe.platform.pending | integer | CENTS. |
When it fails
A failed call returns isError: true with the API's message as text.
403Authenticated, but the caller holds none of the required permissions.
What the model is shown
This is the tool exactly as the server lists it in tools/list. The description starts with the REST call it makes.
{
"name": "get_analytics_money_position",
"description": "GET /api/analytics/money-position — One read for the Finance → Analytics \"where the money is\" section. Money is integer CENTS. `pool` is the VOUCHER_POOL account as the DAL serves it (`balance`, what is `committed` to vouchers and `outstanding` on allocations, and the `grantable` remainder) beside `ledgerBalance`, the same balance re-derived from every ledger edge — the two differ only when the ledger is inconsistent, which the panel shows as a warning. `series` has one row per UTC day of the range, oldest first: end-of-day running balances (`poolBalance`, `operationsTransferredToDate`, accumulated from the FIRST ledger row so the window opens on the real balance, and a quiet day repeating the day before) and that day's movements. A `clawbackRecoveries` figure is confirmed cash credited back to the pool (a CLAWBACK_RECOVERY leg carries a ledger line only once it is cash), never a booked reversal; `claimsPaid` is CLAIM debits; `poolIn`/`poolOut` are every pool credit and debit. `operationsTransferred` is the share moved INTO the operations Stripe account that day, negative when a refund or dispute brought it back. `clawbacks` is the whole queue folded by status (lifecycle order, every status present), read up to the DAL's 500-row cap — `queueCapped` says when that cap was hit. `stripe.platform` and `stripe.operations` are what Stripe holds in the view's currency; either is `null` when no key is configured or Stripe refused the read (the ledger figures stand), and `operations` is also null when no operations account is configured. `inFlight` names the ledger movements Stripe has not confirmed, which explain a platform balance above the pool. EVERY LEDGER ROW IS READ, 1000 a page; the cost grows with the ledger, not the range.",
"inputSchema": {
"type": "object",
"properties": {
"range": {
"type": "string",
"description": "Anything unrecognised falls back to 30 days silently, as the time-series does."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false
}
}