---
title: "Get company officers (cached)"
method: GET
path: "/officers/company/{number}"
tags: ["Officers"]
---

# Get company officers (cached)

`GET /officers/company/{number}`

## Request

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

Every appointment at a company, current and resigned, read from Companies House (every page) and cached; served from the cache while it is under 24 hours old. A person re-appointed to the same role has a row for each appointment. When Companies House cannot be reached, the cached copy is served however old (`_stale: true`, with `_cached_at`); with no copy held the response is 503 with code companies_house_unavailable and Retry-After.

## Path parameters

- `number` string, required

## Response `200`

Officers list with active/resigned counts

- OfficerList
  - `company_number` string, required
  - `total_results` integer
  - `active_count` integer
  - `resigned_count` integer
  - `items` Officer[], required
    - `officer_id` string, nullable
    - `name` string
    - `officer_role` string: e.g. director, secretary, llp-member
    - `appointed_on` string, date, nullable
    - `resigned_on` string, date, nullable: null while the appointment is current
    - `nationality` string, nullable
    - `country_of_residence` string, nullable
    - `occupation` string, nullable
    - `date_of_birth` object, nullable: Month and year only, as Companies House publishes
      - `month` integer
      - `year` integer
    - `address` Address
      - `line1` string, nullable
      - `line2` string, nullable
      - `locality` string, nullable
      - `region` string, nullable
      - `postal_code` string, nullable
      - `country` string, nullable
  - `_source` 'cache' | 'companies_house'
  - `_cached_at` string, nullable

## Other responses

- `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 officers found
- `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 could not be reached and no copy of the officers is held (code companies_house_unavailable); retry after the Retry-After seconds

---

[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)
