---
title: "Creditor Pack"
method: GET
path: "/company/{number}/creditor-pack"
tags: ["Report series"]
---

# Creditor Pack

`GET /company/{number}/creditor-pack`

## Request

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

For a company with a strike-off proposal or an insolvency procedure on the record, what an unpaid creditor needs, from the register, the filing history, Companies House's insolvency record and The Gazette: what has happened with dates; the deadlines (objecting to a strike-off: at least 2 weeks before the strike-off date, which is 2 months from the first Gazette notice, or 28 days in some compulsory cases, as the notice says; a claim by the date in a notice to creditors; the last date for proving before a dividend), each computed only where the notice gives or implies it, with status check_notice otherwise; the insolvency practitioner as the notice and Companies House name them; the company's charges (who is entitled to each, its dates and what it secures, outstanding first, as at a date, or that they could not be read); the controllers' other current companies; and plain steps linking to GOV.UK and the Insolvency Service.

The Creditor Pack applies when the register shows a proposal to strike off, liquidation, administration, receivership, a voluntary arrangement or insolvency proceedings; or The Gazette published a petition to wind up (not since dismissed), a winding-up order, or the appointment of liquidators or administrators in the last 12 months, in a notice that gives the company number. Other companies get applies: false.

Controllers are the people and companies with significant control on the PSC register. Another company is listed when the same controller is a current PSC there: for a person, matched on the same name and the same month and year of birth, which is a possible match only (people share names and birth months, so it may be a different person); for a corporate controller, matched on its registration number. Companies incorporated from 6 months before the first event in this pack onwards are marked with their incorporation date.

General information from public records, not legal or financial advice. Deadlines are worked out from the notices and the registrar's published process; the notice itself and the official guidance linked here are what count. Take advice from a solicitor or an insolvency practitioner before relying on a date.

API Starter and above. The pack reads Companies House's filing history (gazette and dissolution categories) and insolvency record: up to 2 requests, cached for 5 minutes. The charges come from CompanyStack's copy when it is proved complete and otherwise from Companies House, every page (100 charges a page, at most 60 pages).

## Path parameters

- `number` string, required

## Response `200`

The pack (level full), or applies: false with the situation

- object
  - `applies` boolean
  - `level` 'full' | 'summary'
  - `company_number` string
  - `company_name` string
  - `company_status` string, nullable
  - `situation` object: Which report the company gets (the situation router) and why.
    - `situation` 'new_company' | 'in_trouble' | 'dormant' | 'trading' | 'closed'
    - `report` 'company_report' | 'new_company_report' | 'creditor_pack'
    - `reasons` object[]
      - `code` string
      - `label` string
      - `source` 'register' | 'gazette'
      - `date` string, date, nullable
      - `notice` object, nullable
    - `dormant` boolean
    - `can_they_pay` boolean
    - `accounts_quality` boolean
    - `why` string
  - `headline` string
  - `procedure` object
    - `code` string
    - `label` string
    - `meaning` string
  - `trouble_since` string, date, nullable
  - `events` object[]
    - `date` string, nullable
    - `label` string
    - `detail` string, nullable
    - `source` 'register' | 'companies_house_filing' | 'gazette' | 'companies_house_insolvency'
    - `url` string, nullable
    - `matched_by` 'number' | 'name': name: the notice gives no company number and the company's exact name matched
  - `deadlines` object[]
    - `code` 'strike_off_objection' | 'proof_of_debt' | 'last_date_for_proving'
    - `title` string
    - `date` string, date, nullable: The date to act by, only where the notice gives or implies it (strike-off: 2 weeks before the usual strike-off date, 2 months after the first Gazette notice, as Companies House asks objections to arrive at least 2 weeks ahead)
    - `earliest_date` string, date, nullable: Strike-off: the earliest date the company can be struck off (28 days after the first Gazette notice in some compulsory cases; for a voluntary strike-off, the 2-month date)
    - `latest_date` string, date, nullable: Strike-off: 2 months after the first Gazette notice, the later possible date
    - `act_now` boolean: Strike-off: act now (fewer than 2 weeks remain before the 2-month date, or the 28-day date has passed)
    - `status` 'upcoming' | 'passed' | 'suspended' | 'check_notice'
    - `text` string
    - `basis` string
    - `notice` object, nullable
      - `date` string, nullable
      - `url` string
      - `label` string
    - `guidance` object[]
      - `label` string
      - `url` string, uri
  - `practitioners` object[]
    - `name` string, nullable
    - `role` string, nullable
    - `office` string, nullable
    - `appointed_on` string, nullable
    - `source` 'gazette' | 'companies_house'
    - `published_text` string, nullable
    - `url` string, nullable
  - `controllers` object
    - `items` object[]
      - `name` string
      - `kind` 'individual' | 'corporate'
      - `match` 'confirmed' | 'possible'
      - `match_basis` string
      - `current_here` boolean
      - `other_current` object[]
      - `track` object, nullable
    - `other_current_total` integer
    - `since_trouble_total` integer: Other companies incorporated on or after marked_from
    - `marked_from` string, date, nullable: 6 months before the first event in the pack
    - `rule` string
  - `charges` object: The company's charges on the register as at `as_at` (added 2026-10-31). `available: false` (with `reason` and `message`): the charges could not be read when the pack was made, which is not a statement that the company has none. Counts cover every charge; `items` lists at most 50, outstanding first, then part satisfied, then satisfied, newest first. Only what the register holds: no total secured amount is worked out, because Companies House gives none, and `secured_details` is the filing's own wording, cut at 160 characters with an ellipsis. A lender who has asked to be withheld is "Name withheld".
    - `available` boolean, required
    - `as_at` string, date-time: When the list was last known to be current
    - `source` 'stored' | 'live'
    - `total` integer
    - `outstanding` integer
    - `part_satisfied` integer
    - `satisfied` integer
    - `other` integer: Charges with another status: total minus the three counts above
    - `shown` integer: How many are in `items`
    - `items` object[]
      - `charge_number` union
        - integer
        - string
      - `status` string: outstanding, part-satisfied, fully-satisfied or satisfied, as Companies House gives it
      - `status_label` string: Outstanding, Part satisfied or Satisfied
      - `persons_entitled` string[]: The lenders, as the register names them
      - `created_on` string, date, nullable
      - `delivered_on` string, date, nullable
      - `satisfied_on` string, date, nullable
      - `classification` string, nullable: A short classification such as "A registered charge" or "Debenture"
      - `secured_details` string, nullable: What it secures, in the filing's words
    - `reason` string: Why the charges could not be read (available: false): companies_house_unavailable, companies_house_not_configured, incomplete_answer, list_too_long, suppressions_unavailable or not_read
    - `message` string: available: false: "Charges could not be read when this pack was made."
  - `steps` object[]
    - `title` string
    - `text` string
    - `links` object[]
      - `label` string
      - `url` string, uri
  - `jurisdiction` 'england_wales' | 'scotland' | 'northern_ireland' | 'overseas': From the company number; overseas: FC, BR and OE numbers
  - `not_included` object[]
    - `section` string
    - `why` string
  - `disclaimer` string: General information, not legal advice
  - `sources` string[]
  - `notice` string
  - `plan` object
    - `name` string
    - `product` 'api' | 'app'
    - `level` 'summary' | 'full'

## Other responses

- `401`: API key missing, malformed or revoked
- `403`: API Free: the endpoint needs Starter (code plan_upgrade_required)
- `404`: Not on the register held, or the Creditor Pack is not switched on (code not_enabled)
- `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`.

---

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