get_analytics_timeseries

Read-only

Calls GET /api/analytics/timeseries as the signed-in person · REST reference

Daily donations, allocations and payouts over a range

Buckets real donation records and PAYOUT transactions by calendar day (UTC), with continuous buckets seeded across the whole window so the chart has an unbroken x-axis — a day with no activity is a zero row, not a gap. Money is integer CENTS throughout. Allocations are the voucher-pool credit RECORDED on each donation, which excludes any fee the donor covered; only a donation with no recorded split falls back to 70% of its gross. EVERY ROW IS READ. The DAL's donation and transaction lists take no date filter, so both are paged through in full (500 rows a page) and the window is cut here; the cost grows with the ledger, not with the range. A failed read of either fails the request with 500 — never a series of zero payouts.

Arguments

ArgumentTypeDescription
rangequery"7d" | "30d" | "90d" | "1y" | "365d"Anything unrecognised falls back to 30 days SILENTLY — there is no 400 for a bad range, and the echoed range is the raw string you sent, not the window applied.

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_timeseries",
    "arguments": {}
  }
}

Result

On success (HTTP 200) the tool returns one text item holding the API's JSON, pretty-printed.

One row per day, oldest first.

json
{
  "range": "string",
  "series": [
    {
      "allocations": 1,
      "date": "2026-01-15",
      "donations": 1,
      "payouts": 1
    }
  ]
}

Fields

FieldTypeDescription
rangestringThe raw range query value, echoed verbatim even when it was not recognised.
seriesarray of object
series[].allocationsintegerVoucher-pool credit that day, in CENTS, summed from the ledger.
series[].datestring (date)YYYY-MM-DD, UTC.
series[].donationsintegerGross gifts that day, in CENTS.
series[].payoutsintegerPAYOUT and VOUCHER_PAYOUT transaction amounts that day, in CENTS.

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_timeseries",
  "description": "GET /api/analytics/timeseries — Buckets real donation records and PAYOUT transactions by calendar day (UTC), with continuous buckets seeded across the whole window so the chart has an unbroken x-axis — a day with no activity is a zero row, not a gap. Money is integer CENTS throughout. Allocations are the voucher-pool credit RECORDED on each donation, which excludes any fee the donor covered; only a donation with no recorded split falls back to 70% of its gross. EVERY ROW IS READ. The DAL's donation and transaction lists take no date filter, so both are paged through in full (500 rows a page) and the window is cut here; the cost grows with the ledger, not with the range. A failed read of either fails the request with 500 — never a series of zero payouts.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "range": {
        "type": "string",
        "description": "Anything unrecognised falls back to 30 days SILENTLY — there is no 400 for a bad range, and the echoed `range` is the raw string you sent, not the window applied."
      }
    }
  },
  "annotations": {
    "readOnlyHint": true,
    "openWorldHint": false
  }
}