Skip to main content
GET
cURL

Authorizations

X-Session-Token
string
header
required

Session token for authentication.

Query Parameters

filter
string
required

Selects the submissions the figures are computed over. Required, because it carries the organisation and the reporting window.

  • eq(organisation,<uuid>): Required. The organisation whose submissions the figures cover. Exactly one.
  • ge(created_at,<date-time>): Required. The start of the reporting window. Without it the figures would cover every submission the organisation has ever taken, which is not a question a dashboard asks.
  • le(created_at,<date-time>): the end of the window. Defaults to now.
  • any other term the submissions list accepts, for example eq(form,<uuid>) or in(workflow_instance.status,[completed,rejected]), to narrow the figures.

Terms are comma separated and combine with AND; an or(...) is refused with a 400 rather than answered, because the organisation is read out of the filter and the rest is applied as a conjunction, so an OR would be answered by a predicate other than the one asked for. The field names are the form submission resource's own, so a figure here and a page of submissions under the same filter describe the same set.

The window is bounded against the bucket width rather than in its own right: the series carries every bucket in the window, including the empty ones, so a narrow width over a wide window is a response far larger than the figures it holds. A combination producing more than 1000 buckets is refused with a 400 rather than served, so 1d reaches back about three years and 5m about three days. A consumer that widens its bucket as its window widens never approaches the limit.

The window and the other terms narrow totals.in_window, by_status and activity only. The four standing counts in totals are the organisation's whole holdings and are deliberately unaffected: they answer how much there is, which the reporting window does not change.

For more information on filtering, see the docs

Example:

"eq(organisation,7c3d5f11-95a6-4b2e-8f47-19d0c6ba4e83),ge(created_at,2026-08-19T00:00:00Z)"

bucket
enum<string>
default:1d

The bucket width for the activity series. The five widths are the ones an activity chart picks between as the reporting window widens, from five minutes over a few hours to a week over a year.

Available options:
5m,
1h,
6h,
1d,
1w

Response

The aggregate submission figures for the organisation.

JSON API response object

data
object
required

The aggregate view of an organisation's form submissions. A synthetic, read-only resource: it is computed from the submissions the caller can see, never stored, and its identifier is the organisation the figures were computed for.

Every figure is counted under the caller's own grants, so a principal whose grants reach part of an organisation is told about that part rather than the whole.

The windowed figures are derived from one grouping of one set of submissions, so totals.in_window, by_status and the activity series always agree with each other: each bucket's total is its own by_status summed, and the series sums to by_status, which sums to totals.in_window.

jsonapi
object
required