---
title: "Financial history and trends"
method: GET
path: "/financials/{number}/history"
tags: ["Financials"]
---

# Financial history and trends

`GET /financials/{number}/history`

## Request

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

Every parsed accounts period with ratios, per-metric trends (change on previous period, CAGR, direction: growing / declining / stable / volatile) and signals such as NET_ASSETS_TURNED_NEGATIVE, CASH_DECLINING, CURRENT_RATIO_BELOW_ONE and LIABILITIES_OUTPACING_ASSETS.

## Path parameters

- `number` string, required

## Response `200`

History

- FinancialHistory: Parsed iXBRL accounts, newest period first (routes/financials.ts).
  - `company_number` string, required
  - `company_name` string, nullable
  - `company_status` string, nullable
  - `accounts_category` string, nullable
  - `currency` string, required: Reporting currency of the money values, normally GBP
  - `periods_available` integer
  - `periods` AccountsPeriod[], required
    - `balance_sheet_date` string, date
    - `period_start` string, date, nullable
    - `accounts_type` string, nullable
    - `turnover` number, nullable: Turnover, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `gross_profit` number, nullable: Gross profit, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `operating_profit` number, nullable: Operating profit, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `profit_before_tax` number, nullable: Profit before tax, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `profit_after_tax` number, nullable: Profit after tax, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `total_assets` number, nullable: Total assets, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `current_assets` number, nullable: Current assets, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `cash_at_bank` number, nullable: Cash at bank, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `debtors` number, nullable: Debtors, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `current_liabilities` number, nullable: Current liabilities, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `total_liabilities` number, nullable: Total liabilities, in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `net_assets` number, nullable: Net assets (negative for net liabilities), in whole units of the reporting currency (normally GBP pounds, not pence); null when not published
    - `num_employees` integer, nullable
    - `ratios` object
      - `current_ratio` number, nullable
      - `cash_ratio` number, nullable
      - `gearing` number, nullable
      - `net_margin_pct` number, nullable
      - `turnover_per_employee` number, nullable
  - `trends` object
  - `signals` object[]
    - `code` string
    - `severity` 'positive' | 'negative' | 'neutral'
    - `message` string
  - `coverage_note` string

## 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`: Company not 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`.

---

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