---
title: "List Company Merges"
method: GET
path: "/companies/merges/"
tags: ["Companies"]
---

# List Company Merges

`GET /companies/merges/`

## Request

- Base URL: `https://api.financialreports.eu`
- URL: `https://api.financialreports.eu/companies/merges/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

**Access Level Required:** Requires **Standard Access (Level 1)**.

---
Duplicate-company merges, oldest first.

When two records turn out to describe the same issuer we retire one and keep the other. The retired id disappears from the company list, so a warehouse built by incremental sync would otherwise keep the stale row forever. Poll this feed to reconcile.

**Poll `updated_at_from`, not `merged_at_from`.** Merges can be reversed, and a reversal edits the existing record in place rather than adding a new one — it moves `updated_at` but never `merged_at`. A `reversed_at` on a record you already ingested means the merge no longer holds and `shell_id` is a live company again.

Results are ordered by `merged_at` then `id`, so paging is stable even when a bulk merge writes several records in the same instant. Records are never deleted from this feed.

Covers merges recorded since 2026-06-29. Earlier cleanups predate this log and are not represented; companies removed by hard deletion rather than merge do not appear here either.

## Response `200`

Success.

- PaginatedCompanyMergeList
  - `count` integer, required: Total matching results. Exact for cheap queries, an estimate on broad or expensive ones. Do not use it to decide when to stop: follow `next` until it is null.
  - `next` string, uri, nullable
  - `previous` string, uri, nullable
  - `results` CompanyMerge[], required
    - `id` integer, required
    - `shell_id` integer, required: Id of the retired duplicate. Stop using this id; it will not appear in the company list.
    - `canonical_id` integer, required: Id of the surviving canonical company. Repoint references here.
    - `shell_name` string
    - `canonical_name` string
    - `pattern` string, required: Why the pair matched, e.g. exact_duplicate, suffix_variant, gb_us_adr.
    - `confidence` number, double, nullable, required: Matcher confidence 0-1, or null for an operator hand-merge.
    - `merged_at` string, date-time, required: When the merge was applied (ISO 8601, UTC). Never changes.
    - `reversed_at` string, date-time, nullable, required: Set when a merge was undone: the shell is live again and the canonical pointer no longer holds. Null for an active merge.
    - `updated_at` string, date-time, required: When this record last changed, by merge OR reversal. Poll `updated_at_from` to receive reversals; `merged_at` alone cannot surface them because a reversal edits the existing record in place.

## Other responses

- `401`: Unauthorized
- `403`: Missing or invalid API key, or the plan does not include this endpoint.
- `429`: Rate limit, plan quota or spend cap reached.

---

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