Skip to main content
Use GET /partner/exchange/trade-statistics to render an account’s exchange report. The API-key owner is always the report subject; there is no user_id parameter. The key must include trades:view.

Parameters

as_of is the start of the current UTC hour, which is also the end of the last completed hour. The current period is [as_of - interval, as_of). The previous period is the immediately preceding equal-duration window. Activity in the open hour is excluded so the two periods remain comparable.

Chart Shape

The server selects a fixed chart resolution. Clients do not choose a separate bucket interval. Buckets are anchored at current_period.from, ordered oldest-first, and always present. A bucket without activity contains zero-valued strings, so the client can render the returned array directly without inventing missing points.

Metric Definitions

traded_volume is executed quote notional. A fill counts once even when the account is both maker and taker. net_profit_loss is net execution cash flow in quote_currency:
It is not inventory-cost-basis realized P&L and is not mark-to-market portfolio P&L. For a self-trade, volume counts once while both participant cash-flow and fee legs apply. Executions and ordinary fees use fill time. Committed credit-fee effects and maker rebates use their commitment time. An unfiltered request returns one summary per quote currency. Values in unlike currencies are never added together. Every amount is a decimal string in major units of the summary’s quote_currency; do not parse monetary values as binary floating point. Fee conversions are rounded to the nearest quote minor unit per returned bucket, and both period summaries sum buckets using that same rule. For both summary metrics, change_pct is:
It is 0.0 when both periods are zero and null when the previous value is zero but the current value is not.

Response Example

The example shortens buckets for readability; a real 7d response always has seven points.

Freshness and Errors

Reporting data refreshes shortly after each hour closes. A newly completed hour can appear after a short delay, and successful responses can be cached for up to 15 seconds. Use the returned as_of, current_period, and previous_period as the authoritative boundaries instead of deriving them from response receipt time.