---
title: "Officer history summary: counts only"
method: GET
path: "/officers/{officer_id}/appointments/summary"
tags: ["Officers"]
---

# Officer history summary: counts only

`GET /officers/{officer_id}/appointments/summary`

## Request

- Base URL: `https://api.companystack.co.uk`
- URL: `https://api.companystack.co.uk/officers/{officer_id}/appointments/summary`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`

The counts and summary sentence of GET /officers/{officer_id}/appointments ("12 appointments, 3 companies in insolvency in the last 5 years") without the appointments themselves.

## Path parameters

- `officer_id` string, required

## Response `200`

Counts and summary

- OfficerAppointmentSummary: One officer across companies: counts and the summary sentence. Appointments withheld at the request of the person named are left out of every count.
  - `officer_id` string, required
  - `name` string, nullable
  - `date_of_birth` object, nullable: Month and year only, as Companies House publishes; null when withheld
    - `month` integer
    - `year` integer
  - `is_corporate_officer` boolean
  - `total_appointments` integer, required
  - `active_appointments` integer
  - `resigned_appointments` integer
  - `companies` integer: Distinct companies
  - `failed_companies` integer: Companies that went into insolvency (liquidation, administration, receivership, or dissolved after a Gazette insolvency notice) or were dissolved with their accounts overdue, at any time
  - `recent_insolvencies` integer: Companies in insolvency in the last lookback_years while this officer was appointed or within 12 months of leaving
  - `recent_strike_offs` integer: Companies dissolved with accounts overdue (consistent with compulsory strike-off) in the last lookback_years, on the same terms
  - `lookback_years` integer
  - `summary` string, required
  - `truncated` boolean: true when the officer has more appointments than were read (500)
  - `_source` 'cache' | 'companies_house'
  - `_fetched_at` string
  - `_stale` boolean: Present (true) when Companies House was unavailable and an older copy was served

## Other responses

- `400`: Not a Companies House officer id
- `401`: API key missing, malformed or revoked
- `403`: The key's plan does not include this endpoint (`code: plan_upgrade_required`, with `upgrade_url`), the key may not call it, or the key is beyond the plan's key limit after a downgrade (`code: key_limit_exceeded`: the newest keys are paused until keys are deleted or the plan upgraded)
- `404`: No officer with this id
- `429`: Per-minute or per-day limit reached (`code: rate_limited`, `window: minute|day`). Wait `Retry-After` seconds; when both windows are full the day is reported. A refused request does not count against either limit. A bulk lookup (`POST /company/bulk`) counts each company number in it as one request, so one that is more than you have left is refused whole, and the body adds `requested` and `fits`.
- `503`: Companies House is busy or unavailable and nothing is cached

---

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