Get Purchase Volume
Returns the purchase volume time series of a node and all its descendants: a parent's figures include its children's. The volume is quantity × price of the subtree's settled purchases, across every market, and the count is the number of purchases. The figures come from statistics the platform refreshes periodically, so the newest purchases can take a while to appear.
The series is bucketed by time and split per currency token. Volumes are decimal strings. Unlike most responses, this one uses camelCase field names.
Required permission: node:summary:view
Request
GET /v2/admin/nodes/{node_id}/analytics/purchase-volume?start_time={start_time}&end_time={end_time}
Parameters
| Name | Type | In | Description |
|---|---|---|---|
node_id | string | path | Required. The node at the top of the subtree to aggregate |
start_time | string | query | Start of the window, RFC 3339 (2026-01-01T00:00:00Z). Default: twelve months before now. |
end_time | string | query | End of the window, RFC 3339. Default: now. |
The bucket size follows the window length: hourly up to 2 days, weekly up to 40 days, monthly up to 400 days, yearly beyond.
Headers
| Name | Description |
|---|---|
Authorization | Required. Bearer <access_token> |
Example
curl --request GET \
--url '{{baseUrl}}/v2/admin/nodes/6901350deb7ed8c1c38de4e9/analytics/purchase-volume?start_time=2026-08-01T00:00:00Z&end_time=2026-10-31T23:59:59Z' \
--header 'Authorization: Bearer <access_token>'
Response
{
"data": [
{
"volume": "185000",
"totalVolume": "1240000",
"count": 37,
"totalCount": 212,
"createdAt": "2026-09-30T23:00:00Z",
"currencyTokenId": "68fe8c129367fd414b227c7a",
"currencySymbol": "TRYC"
},
{
"volume": "4200.5",
"totalVolume": "4200.5",
"count": 3,
"totalCount": 3,
"createdAt": "2026-10-28T16:00:00Z",
"currencyTokenId": "6901a7c2e4b5d6f708a9b0c1",
"currencySymbol": "USDC"
}
],
"baselineVolume": "1055000",
"baselineCount": 175,
"summary": {
"totalVolume": "1244200.5",
"volume": "189200.5",
"totalCount": 215,
"count": 40
},
"currencySummaries": [
{
"currencyTokenId": "68fe8c129367fd414b227c7a",
"currencySymbol": "TRYC",
"volume": "185000",
"count": 37,
"totalVolume": "1240000",
"totalCount": 212
},
{
"currencyTokenId": "6901a7c2e4b5d6f708a9b0c1",
"currencySymbol": "USDC",
"volume": "4200.5",
"count": 3,
"totalVolume": "4200.5",
"totalCount": 3
}
]
}
The example shows why summary must not be read as one amount when several currencies appear: it adds TRYC and USDC together. Use currencySummaries, or convert with Get Exchange Rates.
Response Fields
| Field | Type | Description |
|---|---|---|
data | array | One item per (time bucket, currency token), oldest first. [] when the window has no data. |
data[].volume | string | Purchase volume in this bucket |
data[].totalVolume | string | All-time cumulative purchase volume at the end of this bucket |
data[].count | integer | Number of purchases in this bucket |
data[].totalCount | integer | All-time cumulative number of purchases at the end of this bucket |
data[].createdAt | string | Time of the newest statistics row in the bucket (ISO 8601) |
data[].currencyTokenId | string | Currency token the purchases were paid in |
data[].currencySymbol | string | Symbol of that currency token |
baselineVolume | string | Cumulative volume before start_time. "0" when start_time is not sent. |
baselineCount | integer | Cumulative count before start_time. 0 when start_time is not sent. |
summary.volume | string | Sum of data[].volume: the window's volume |
summary.count | integer | Sum of data[].count |
summary.totalVolume | string | baselineVolume + summary.volume |
summary.totalCount | integer | baselineCount + summary.count |
currencySummaries | array | The window's figures per currency token. Omitted when data is empty. |
currencySummaries[].currencyTokenId | string | Currency token |
currencySummaries[].currencySymbol | string | Its symbol |
currencySummaries[].volume | string | Window volume in this currency |
currencySummaries[].count | integer | Window count in this currency |
currencySummaries[].totalVolume | string | Highest cumulative volume reached in this currency during the window |
currencySummaries[].totalCount | integer | Highest cumulative count reached in this currency during the window |
summary and the baseline add every currency together. Without start_time the baseline is zero, so summary.totalVolume then covers only the default twelve-month window.
Errors
| Status | Code | Description |
|---|---|---|
| 400 | 10015 | start_time or end_time is not an RFC 3339 time |
| 400 | 10016 | node_id is not a valid id |
| 400 | 10001 | Node not found |
| 403 | 10005 | The node is outside the API key's node hierarchy |
See Errors for the error format and common codes.