---
title: "Summary"
method: GET
path: "/accounts/summary"
tags: ["accounts"]
---

# Summary

`GET /accounts/summary`

## Request

- Base URL: `https://api.instruxi.dev/api/v1/enforcer`
- URL: `https://api.instruxi.dev/api/v1/enforcer/accounts/summary`
- Auth: one of:
  - API key in header `Authorization`
  - API key in header `X-API-Key`

Aggregate counts over the SAME compiled row filter GET /accounts uses, so a tenant admin's summary counts only their tenant and a user's counts only themselves — never a number the list endpoint would refuse to show as rows. group_by buckets into a closed, documented dimension set (an unknown group_by is a 400, not a silent no-op); interval instead (or alongside) produces a time-bucketed data.series over the same since/until window GET /accounts filters on. Service accounts are excluded by default like GET /accounts; kind=service|all needs tenant admin.

## Query parameters

- `group_by` 'role' | 'active' | 'email_verified' | 'profile_complete' | 'verification_status' | 'has_wallet' | 'invited' | 'tenant' | 'verified_provider' | 'group'
- `since` string, date-time
- `until` string, date-time
- `interval` 'hour' | 'day' | 'week' | 'month'
- `tz` string
- `q` string
- `email` string
- `active` boolean
- `email_verified` boolean
- `profile_incomplete` boolean
- `profile_completed` boolean
- `verified_provider` string
- `verification_status` 'verified' | 'pending' | 'failed' | 'none'
- `role` 'admin' | 'tenant_admin' | 'developer' | 'user'
- `has_wallet` boolean
- `has_phone` boolean
- `invited` boolean
- `invited_by` string, uuid
- `invited_by_me` boolean
- `group_id` string, uuid
- `exclude_group_id` string, uuid
- `last_active_since` string, date-time
- `tenant_id` string, uuid
- `all_tenants` boolean
- `kind` 'human' | 'service' | 'all'

## Response `200`

OK

- EnforcerV3InternalDomainSummaryResponse
  - `data` EnforcerV3InternalDomainSummaryData
    - `buckets` EnforcerV3InternalDomainSummaryBucket[]
      - `count` integer
      - `key` string
      - `label` string
      - `pct` number
    - `dimension` string
    - `multi_valued` boolean
    - `series` EnforcerV3InternalDomainSummaryPoint[]
      - `by` object
      - `count` integer
      - `ts` string
    - `total` integer
    - `truncated` boolean
  - `success` boolean
  - `window` EnforcerV3InternalDomainSummaryWindow
    - `interval` string
    - `since` string
    - `tz` string
    - `until` string

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: forbidden: tenant_id/all_tenants beyond your own tenant without the cross_tenant grant
- `404`: group_not_found

---

[API](https://skmtc.dev/instruxi/apis/enforcer-api.md) · [All operations](https://skmtc.dev/instruxi/apis/enforcer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/instruxi/apis/enforcer-api/revisions/fa82bc1becc0?raw)
