---
title: "Client Annual Review"
method: GET
path: "/api/adviser/clients/{user_id}/annual-review"
tags: ["Adviser"]
---

# Client Annual Review

`GET /api/adviser/clients/{user_id}/annual-review`

## Request

- Base URL: `https://api.earmarkiq.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.earmarkiq.app/api/adviser/clients/{user_id}/annual-review`
- Auth: HTTP bearer

Last twelve months against the previous twelve, with commentary.

Generated on demand and never stored: a pack is a view of the data at a
moment, and a cached one would quietly disagree with the client's own
app the first time a transaction was recategorised.

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `as_of` string, date, nullable: Produce the pack as at this date. Defaults to today. The window is the twelve COMPLETE calendar months before it, so a pack prepared for a meeting held last month still covers that meeting's year.

## Response `200`

Successful Response

- AnnualReviewPack
  - `user_id` string, required
  - `client_label` string, required
  - `firm_name` string, required
  - `generated_at` string, date-time, required
  - `as_of` string, date, required
  - `current_period` PeriodOut, required
    - `start` string, date, required
    - `end` string, date, required
    - `label` string, required
    - `months` integer, required
  - `prior_period` PeriodOut, required
    - `start` string, date, required
    - `end` string, date, required
    - `label` string, required
    - `months` integer, required
  - `comparison_available` boolean, required
  - `comparison_note` string, required
  - `history_starts` string, date, nullable, required
  - `scopes` string[], required
  - `omitted` OmittedSection[], required
    - `section` string, required
    - `reason` string, required
    - `scope_required` string, required
  - `total_expenditure` MovementOut, required
    - `key` string, required
    - `label` string, required
    - `current` number, required
    - `prior` number, nullable, required
    - `change_abs` number, nullable, required
    - `change_pct` number, nullable, required
    - `is_new` boolean, required
  - `by_pot` MovementOut[], required
    - `key` string, required
    - `label` string, required
    - `current` number, required
    - `prior` number, nullable, required
    - `change_abs` number, nullable, required
    - `change_pct` number, nullable, required
    - `is_new` boolean, required
  - `by_category` MovementOut[], required
    - `key` string, required
    - `label` string, required
    - `current` number, required
    - `prior` number, nullable, required
    - `change_abs` number, nullable, required
    - `change_pct` number, nullable, required
    - `is_new` boolean, required
  - `largest_movements_absolute` MovementOut[], required
    - `key` string, required
    - `label` string, required
    - `current` number, required
    - `prior` number, nullable, required
    - `change_abs` number, nullable, required
    - `change_pct` number, nullable, required
    - `is_new` boolean, required
  - `largest_movements_percentage` MovementOut[], required
    - `key` string, required
    - `label` string, required
    - `current` number, required
    - `prior` number, nullable, required
    - `change_abs` number, nullable, required
    - `change_pct` number, nullable, required
    - `is_new` boolean, required
  - `monthly` MonthPointOut[], required
    - `month` string, required
    - `expenditure` number, required
  - `income` IncomeOut, required
    - `received_current` number, nullable, required
    - `received_prior` number, nullable, required
    - `stated_monthly_income` number, nullable, required
    - `stated_annual_equivalent` number, nullable, required
    - `source` SourceNoteOut, required
      - `source` string, required
      - `label` string, required
      - `as_of` string, date, nullable, required
      - `is_estimate` boolean, required
      - `note` string, nullable
    - `stated_source` SourceNoteOut
      - `source` string, required
      - `label` string, required
      - `as_of` string, date, nullable, required
      - `is_estimate` boolean, required
      - `note` string, nullable
  - `net_worth` NetWorthOut, required
    - `closing` number, required
    - `total_assets` number, required
    - `total_debts` number, required
    - `opening` number, nullable, required
    - `opening_date` string, date, nullable, required
    - `movement` number, nullable, required
    - `comparison_note` string, required
    - `source` SourceNoteOut, required
      - `source` string, required
      - `label` string, required
      - `as_of` string, date, nullable, required
      - `is_estimate` boolean, required
      - `note` string, nullable
  - `property_position` PropertyOut, required
    - `properties` PropertyPositionOut[], required
      - `label` string, required
      - `postcode` string, required
      - `property_type` string, required
      - `purchase_price` number, required
      - `purchase_month` string, date, required
      - `estimated_value` number, nullable, required
      - `mortgage_balance` number, nullable, required
      - `equity` number, nullable, required
      - `valuation_source` string, nullable, required
      - `valuation_as_of` string, date, nullable, required
      - `valuation_confidence` string, nullable, required
      - `is_estimate` boolean, required
    - `combined_estimated_value` number, required
    - `combined_mortgage_balance` number, required
    - `combined_equity` number, required
    - `source` SourceNoteOut, required
      - `source` string, required
      - `label` string, required
      - `as_of` string, date, nullable, required
      - `is_estimate` boolean, required
      - `note` string, nullable
  - `commentary` CommentaryOut[], required
    - `rule` string, required
    - `text` string, required
  - `sources` SourceNoteOut[], required
    - `source` string, required
    - `label` string, required
    - `as_of` string, date, nullable, required
    - `is_estimate` boolean, required
    - `note` string, nullable
  - `disclaimer` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/earmarkiq/apis/earmark-api.md) · [All operations](https://skmtc.dev/earmarkiq/apis/earmark-api/llms.txt) · [OpenAPI document](https://skmtc.dev/earmarkiq/apis/earmark-api/revisions/4a2c41907105?raw)
