Skip to content

Analytics

Totals over time.

Endpoint What it does
GET /v1/analytics/summary Retrieve an analytics summary
GET /v1/analytics/time-series Retrieve an analytics time series

Try any of them in the API tester.

GET /v1/analytics/summary

Totals over a day window, broken down by currency, flow, channel and outcome.

Days are UTC. Ghana is UTC+0 year round, so a UTC day is also a local day.

Figures are NEVER summed across currencies: every row carries its own currency, and a total over two of them is a number with no meaning. Each transaction is counted exactly once, under its terminal outcome, so the counts across outcomes partition your terminal volume rather than overlapping.

A window is always applied: omitting one defaults to the last 30 days, and a window wider than 185 days is refused rather than silently truncated. The applied window is echoed back.

freshness is when this rollup was last written. These numbers come from a projection of the event stream, not from the transaction table, so a stalled projection would otherwise look like a quiet week.

Authentication: a secret key (server-side only) with the scope transaction.read.

Field Type Required Allowed values and limits What it is
from string no First UTC day to include, as YYYY-MM-DD, inclusive. Defaults to 29 days before to.
to string no Last UTC day to include, as YYYY-MM-DD, inclusive. Defaults to today in UTC.
currency string no Restrict to one ISO 4217 code, for example GHS. Figures are never summed across currencies whether this is set or not.
flow string no One of: collection, payout, refund Restrict to one flow. A refund is its own flow, not a payout, even though the underlying row is stored as one.
channel string no Restrict to one rail. unknown selects the rows whose terminal event did not carry a rail — currently every payout and refund.
Field Type What it is
data array
freshness object
freshness.buckets integer How many rollup buckets exist for this merchant, across all time. Zero means the projection has never written for you.
freshness.last_updated_at string (date-time) When this merchant’s rollup was last written, in UTC. Absent if it never has been.
object string
window object
window.days integer Inclusive day count.
window.from string First UTC day included.
window.to string Last UTC day included.
  • 401: the key is missing, wrong or revoked
  • 403: the key lacks the scope, or your account may not do this
  • 422: a field is invalid; errors names it
  • 429: too many requests; wait for Retry-After
  • 500: Internal Server Error
  • 503: the payment partner is unreachable; safe to retry

Every error is a JSON problem with a stable code. See Errors.


GET /v1/analytics/time-series

The same figures per UTC day, ascending.

channel is a filter here rather than a dimension: a series crossed by day, currency, flow, outcome and rail at once is a payload a chart cannot use. Ask for one rail if you want a per-rail series.

A day with no activity is an ABSENT point, not a zero one, so that no traffic stays distinguishable from a projection that wrote nothing. Use freshness to tell those apart, and draw the continuous axis client-side.

Authentication: a secret key (server-side only) with the scope transaction.read.

Field Type Required Allowed values and limits What it is
from string no First UTC day to include, as YYYY-MM-DD, inclusive. Defaults to 29 days before to.
to string no Last UTC day to include, as YYYY-MM-DD, inclusive. Defaults to today in UTC.
currency string no Restrict to one ISO 4217 code, for example GHS.
flow string no One of: collection, payout, refund Restrict to one flow.
channel string no Restrict to one rail.
Field Type What it is
data array Ascending by day. A day with no activity is absent rather than zero.
freshness object
freshness.buckets integer How many rollup buckets exist for this merchant, across all time. Zero means the projection has never written for you.
freshness.last_updated_at string (date-time) When this merchant’s rollup was last written, in UTC. Absent if it never has been.
object string
window object
window.days integer Inclusive day count.
window.from string First UTC day included.
window.to string Last UTC day included.
  • 401: the key is missing, wrong or revoked
  • 403: the key lacks the scope, or your account may not do this
  • 422: a field is invalid; errors names it
  • 429: too many requests; wait for Retry-After
  • 500: Internal Server Error
  • 503: the payment partner is unreachable; safe to retry

Every error is a JSON problem with a stable code. See Errors.