GET /api/distributions
The public run of distribution rounds. Each row carries what it credited, to how many nodes, when, and where the money came from.
Request
GET /api/distributions
GET /api/distributions?limit=200| Parameter | In | Rules |
|---|---|---|
limit | Query | Rows to return. Default 50, maximum 200. Out of range is a 400. |
Response
[
{
"id": 613,
"mode": "treasury",
"totalWei": "768000000000000",
"nodeCount": 128,
"createdAt": "2026-08-24T11:02:41.008Z"
},
{
"id": 612,
"mode": "treasury",
"totalWei": "742000000000000",
"nodeCount": 128,
"createdAt": "2026-08-24T11:00:12.771Z"
}
]| Field | Type | Meaning |
|---|---|---|
id | number | Round id. Matches distributionId on a credit from GET /api/node/:id. |
mode | string or null | treasury means Sitowise funded this round. swaps means it came from hook revenue. The hook is not deployed, so no round carries swaps today. |
totalWei | string | Credited across the whole round, in wei |
nodeCount | number | Nodes included in the round |
createdAt | string or null | ISO 8601 UTC, when the round was recorded |
The mode field is the honest part of this response and the reason it is public per row rather than described once in prose. While it reads treasury, that round’s value was funded by Sitowise, not by swap flow, and that funding can be reduced or stopped at any time.
Do not read this history as a rate. It is a record of what happened, not a projection of what will. See Risks.
Plotted
The chart below calls this endpoint and buckets the rounds it gets back, hourly across a day or daily across a week.
Ordering and paging
Newest first, ordered by creation time then id. There is no cursor and no offset parameter: raise limit to widen the window, up to 200. A client that needs the complete history should keep its own copy and poll for rows newer than the highest id it has seen.
The response is an array, not an envelope, so there is no total count in the payload. The protocol-wide totals live on GET /api/stats.
Caching and limits
| Property | Value |
|---|---|
| Cache-Control | public, max-age=0, s-maxage=10, stale-while-revalidate=30 |
| Rate limit | 60 requests per minute per IP |
Errors
| Status | Body | When |
|---|---|---|
| 400 | { "error": "…" } | limit is not a whole number between 1 and 200 |
| 429 | { "error": "Too many requests…" } | Over the per-IP limit |
| 503 | { "error": "This service is not available right now." } | The service is misconfigured |
Example
# how many recent rounds were funded by Sitowise rather than by swaps
curl -s "https://sitowise.xyz/api/distributions?limit=200" \
| jq 'group_by(.mode) | map({mode: .[0].mode, rounds: length})'
# total credited across the rounds returned
curl -s "https://sitowise.xyz/api/distributions?limit=200" \
| jq '[.[].totalWei | tonumber] | add'As everywhere, tonumber is fine for a glance and wrong for accounting. Use a big-integer type when the figure matters.