get_analytics_money_position

Read-only

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

ArgumentTypeDescription
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.

json
{
  "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.

json
{
  "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

FieldTypeDescription
asOfstring (date-time)
clawbacksobject
clawbacks.byStatusarray of objectEvery status, in lifecycle order.
clawbacks.byStatus[].amountintegerCENTS asked back.
clawbacks.byStatus[].countinteger
clawbacks.byStatus[].outstandingintegerCENTS still owed.
clawbacks.byStatus[].recoveredintegerCENTS confirmed back.
clawbacks.byStatus[].status"REQUESTED" | "APPROVED" | "EXECUTING" | "RECOVERED" | "PARTIALLY_RECOVERED" | "WRITTEN_OFF" | … (7 values)
clawbacks.filedintegerCENTS. Every filing, denied ones included.
clawbacks.outstandingintegerCENTS still owed across the clawbacks being collected.
clawbacks.queueCappedbooleanThe queue read answered its 500-row cap; older clawbacks may be missing from these sums.
clawbacks.recoveredintegerCENTS confirmed back across every clawback — what clawbacks have returned to the pool.
clawbacks.writtenOffintegerCENTS asked back and never recovered on the clawbacks closed short.
currencystring
inFlightobject
inFlight.operationsAwaitingTransferintegerCENTS. Operations share of gifts whose transfer is PENDING or FAILED, gross of Stripe's fee.
inFlight.payoutsAwaitingTransferintegerCENTS. Payouts the ledger settled whose transfer is PENDING or FAILED.
periodobjectThe range's movements, summed. CENTS throughout.
period.claimsPaidintegerCLAIM debits from the pool.
period.clawbackRecoveriesintegerConfirmed clawback cash credited back to the pool.
period.operationsCreditedintegerNet credited to the OPERATING account on the ledger.
period.operationsTransferredintegerNet moved into the operations Stripe account; negative when money came back.
period.poolInintegerEvery credit to the pool.
period.poolOutintegerEvery debit from the pool.
poolobject
pool.balanceintegerCENTS. The VOUCHER_POOL account's balance.
pool.committedintegerCENTS. Face value of vouchers still reserving pool funds.
pool.grantableintegerCENTS. balance - committed - outstanding.
pool.ledgerBalanceintegerCENTS. The same balance summed from every ledger edge.
pool.outstandingintegerCENTS. Every organization's un-spent allocation.
rangestringThe raw range query value, echoed verbatim.
seriesarray of objectOne row per UTC day of the range, oldest first.
series[].claimsPaidintegerCENTS of CLAIM debits that day.
series[].clawbackRecoveriesintegerCENTS of confirmed clawback cash credited back that day.
series[].datestring (date)YYYY-MM-DD, UTC.
series[].operationsCreditedintegerCENTS net credited to OPERATING that day.
series[].operationsTransferredintegerCENTS net moved into the operations account that day.
series[].operationsTransferredToDateintegerCENTS. Net moved into the operations account, from the first ledger row to the end of that day.
series[].poolBalanceintegerCENTS. The pool at the end of that day.
series[].poolInintegerCENTS credited to the pool that day.
series[].poolOutintegerCENTS debited from the pool that day.
stripeobject
stripe.operationsobject | nullThe operations connected account. Null when none is configured or Stripe could not be read.
stripe.operations.availableintegerCENTS.
stripe.operations.pendingintegerCENTS.
stripe.operationsAccountConfiguredboolean
stripe.platformobject | nullThe platform account, which holds the pool. Null when Stripe could not be read.
stripe.platform.availableintegerCENTS.
stripe.platform.pendingintegerCENTS.

When it fails

A failed call returns isError: true with the API's message as text.

403

Authenticated, 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.

json
{
  "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
  }
}