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

# Collections Summary

`GET /accounts/collections-summary`

## Request

- Base URL: `https://dev.whispa.net` (the document declares no server; this is the origin it was published from)
- URL: `https://dev.whispa.net/accounts/collections-summary`
- Auth: one of:
  - OAuth 2
    - Password
    - Token URL: `auth/bearer/login`
  - API key in cookie `access_token`

Money outcomes of the filtered working set (admin only): original /
outstanding / collected totals and a per-collection-stage breakdown.

Takes the same filter params as ``/search`` and evaluates the same
predicate, so the summary cards always describe exactly the rows in the
table beneath them — including a single campaign via ``campaign_id``.

## Query parameters

- `demo_market` 'au' | 'us', nullable
- `q` string, nullable: Free-text search (case-insensitive) across display name, account number, email, external id and phone.
- `status` string[], nullable: Provider status values to include (case-insensitive, repeatable). Omit for every status.
- `campaign_id` string, uuid, nullable: Only accounts with a membership in this campaign.
- `campaign_assignment` 'assigned' | 'unassigned' | 'multiple' | 'review', nullable: Filter by current campaign assignment count, or 'review' for accounts waiting on an operator decision.
- `timezone_status` 'unknown' | 'manual', nullable: 'unknown': no timezone, so the gate will not call the account. 'manual': an operator set the timezone.
- `called` 'account' | 'customer' | 'never', nullable: 'account': a call is linked to this account. 'customer': a call is linked to this account or another account of the same customer. 'never': neither.
- `min_balance` number, nullable: Inclusive lower bound on outstanding amount.
- `max_balance` number, nullable: Inclusive upper bound on outstanding amount.
- `min_arrears` number, nullable: Inclusive lower bound on arrears amount.
- `max_arrears` number, nullable: Inclusive upper bound on arrears amount.

## Response `200`

Successful Response

- CollectionsSummaryRead: Money outcomes of the filtered working set, aggregated per stage. Evaluates the same :class:`AccountFilter` predicate as ``/accounts/search`` — the summary always describes exactly the rows the table shows. Amounts come from the provider's own figures (Collect's paid-to-date), not from original-minus-outstanding arithmetic, which would misread interest accrual and write-off adjustments as payments.
  - `total_accounts` integer, required
  - `original_balance_total` number, nullable: Sum of balances as originally listed, across the filter.
  - `outstanding_total` number, nullable: Sum of current outstanding balances, across the filter.
  - `amount_paid_total` number, nullable: Sum of amounts collected to date, across the filter — actual money received, including partial payments under arrangements.
  - `arrangement_accounts` integer, required: Accounts with a payment arrangement in place.
  - `arrangement_outstanding_total` number, nullable: Outstanding balance on arrangement-stage accounts: the money debtors have committed to pay but have not paid yet.
  - `resolved_accounts` integer, required: Accounts paid in full or settled (stages paid + settled).
  - `stages` CollectionStageBreakdown[]
    - `stage` string, required
    - `accounts` integer, required
    - `outstanding_total` number, nullable: Sum of outstanding balances in this stage.
    - `amount_paid_total` number, nullable: Sum of amounts collected to date in this stage.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/whispa/apis/whispa-api.md) - [All operations](https://skmtc.dev/whispa/apis/whispa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whispa/apis/whispa-api/revisions/12c2e4aca43c?raw)
