Skip to main content
Global hourly volume aggregation across every v2 outcome token. Each bucket emits total fills, USDC notional traded, and USDC fees paid for that hour. Newest-first. Backed by v2.fill bucketed on ts_unix - (ts_unix % 3600).

Request

GET /clobv2/volume/hourly

Authentication

Paid tier required. See /clobv2/trades for auth formats.

Query parameters

ParameterTypeRequiredDescription
start / start_timeintegerNoUnix seconds — only include fills at or after this time.
end / end_timeintegerNoUnix seconds — only include fills at or before this time.
limitintegerNoMax buckets returned (1-1000, default 168 — one week of hours).

Parameter validation

  • Timestamps: non-negative i64.
  • limit: 1-1000.
Bad input → 400 Bad Request.

Response

{
  "count": 3,
  "source": "onchain-v2",
  "buckets": [
    {
      "bucket": "2026-04-20T06:00:00+00:00",
      "time_unix": 1776664800,
      "trades": 2,
      "volume_usdc": "5.6000000000000000",
      "fee_usdc": "0.073540000000000000000000"
    },
    {
      "bucket": "2026-04-20T05:00:00+00:00",
      "time_unix": 1776661200,
      "trades": 24,
      "volume_usdc": "72.06666500000000000000",
      "fee_usdc": "0.795730000000000000000000"
    }
  ]
}

Response fields

FieldTypeDescription
countintegerNumber of buckets returned.
sourcestringAlways "onchain-v2".
buckets[].bucketstringISO-8601 UTC of the bucket’s start (on-the-hour).
buckets[].time_unixintegerUnix seconds of the bucket’s start.
buckets[].tradesintegerNumber of fills in the bucket.
buckets[].volume_usdcstring (numeric)USDC notional (from the maker side of each fill) summed over the bucket.
buckets[].fee_usdcstring (numeric)Total protocol fees paid on fills in the bucket.
Empty buckets (no fills) are not emitted. Callers that want a dense hourly series should fill gaps client-side.

Rate-limit headers

Standard: x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset.

Examples

# Last 7 days (168 hours) of global v2 volume
curl "https://api.polynode.dev/clobv2/volume/hourly?limit=168" \
  -H "x-api-key: pn_live_..."

# Last 24h only
curl "https://api.polynode.dev/clobv2/volume/hourly?start=$(( $(date +%s) - 86400 ))&end=$(date +%s)" \
  -H "x-api-key: pn_live_..."

# Quarterly volume (last 2160 hours ≈ 90 days)
curl "https://api.polynode.dev/clobv2/volume/hourly?limit=1000" \
  -H "x-api-key: pn_live_..."

Error responses

StatusBodyWhen
400{"error": "invalid integer limit ..."} or {"error": "invalid timestamp ..."}Bad limit or timestamp.
401{"error": "missing API key ..."}No key or bad key.
402{"error": "paid plan required ..."}Free tier.
429{"error": "rate limit exceeded", "reset_at": <unix>}Rate limit hit.
5xx{"error": "temporary_data_provider_error"}Temporary data provider issue. Retry with backoff.

Notes

  • Sorted by bucket DESC (newest first). Reverse client-side for left-to-right charting.
  • Empty hours (no v2 fills) are omitted from the response — if you need a dense hourly time series for charting, scaffold the expected hour slots yourself and overlay what this returns.
  • volume_usdc uses the maker-side USDC; in pair-mint fills both sides can be outcome tokens and no USDC is present — those fills are excluded from the bucket sum.
  • fee_usdc is the protocol fee paid at settlement, not the builder rev share (which is off-chain weekly). See /clobv2/builders for builder attribution.
  • The endpoint bucket size is fixed at 1 hour. For per-token OHLCV at arbitrary resolution use /clobv2/candles/{token_id}.