# HMRC AML Register Check

Is this business supervised by HMRC under the Money Laundering Regulations, for what, and has that changed.

Registered or not, sectors, status, since when, postcode district against the registered office, former registrations and when they went; plus a feed of every change on the register since a date.

Estate and letting agents, accountancy service providers, trust and company service providers, high value dealers, art market participants and money service businesses must be registered with HMRC under the Money Laundering Regulations before they trade, unless another body supervises them. HMRC publishes the register as one spreadsheet, refreshed roughly weekly, with no company numbers and no dates of change. We keep every file and record the differences, so this endpoint says whether a business is registered, for which sectors, with what status (Approved, Applied, Expired) and since when, with the postcode district checked against the registered office; and the changes feed lists every business added, removed, returned or re-statused since a date. HMRC supervises some sectors only, so a business not on its register may be supervised by the FCA, ICAEW, ACCA or another body: the reply says so rather than guessing. Registrations under a person's own name aren't loaded.

- Price: 1 credit
- Page: https://meetkatalis.com/apis/aml-register
- OpenAPI: https://meetkatalis.com/openapi.yaml

## Endpoints

- `GET /api/v1/aml-register?company=…` — A company number (registered and former names matched) or a business's name
- `GET /api/v1/aml-register/changes?since=…` — Every change since a date; filter by change (added, removed, returned, status)

## Call it

```bash
curl -H "x-api-key: $KATALIS_API_KEY" \
  "https://meetkatalis.com/api/v1/aml-register?company=Post%20Office"
```

```javascript
const res = await fetch("https://meetkatalis.com/api/v1/aml-register?company=Post%20Office", {
  headers: { "x-api-key": process.env.KATALIS_API_KEY },
});
if (!res.ok) throw new Error(`Katalis ${res.status}: ${await res.text()}`);
console.log(await res.json());
```

```python
import os, requests

r = requests.get(
    "https://meetkatalis.com/api/v1/aml-register?company=Post%20Office",
    headers={"x-api-key": os.environ["KATALIS_API_KEY"]},
    timeout=60,
)
r.raise_for_status()
print(r.json())
```

## Example response (a real reply)

```json
{
  "query": "Post Office",
  "matchedOn": ["post office"],
  "supervisedByHmrc": true,
  "summary": "On HMRC's register with an approved registration for currency exchange, money service business, 200 premises.",
  "registrations": [
    { "mlrNumber": "12137104", "name": "Post Office Limited", "businessName": "Post Office Limited", "status": "Approved", "sectors": ["Money service business", "Currency exchange"], "registeredSince": "2002-06-01", "seenSince": "2026-10-06", "premises": 200, "districts": ["DT10", "OX27", "TS11", "BT75", "PO8", "MK41", "SW4"] }
  ],
  "entries": [
    { "mlrNumber": "12137104", "name": "Post Office Limited", "businessName": "Post Office Limited", "tradingName": "Marnhull", "postcodeDistrict": "DT10", "status": "Approved", "sectors": ["Money service business", "Currency exchange"], "registeredSince": "2002-06-01", "seenSince": "2026-10-06", "lastSeen": "2026-10-06", "removedOn": null }
  ],
  "entriesTotal": 200,
  "history": [],
  "registerDate": "2026-10-06",
  "historySince": "2026-10-06"
}
```

## What you'd build with it

- **Regulated firms checking each other.** An agent, accountant or TCSP about to take on a counterparty: registered, approved, for the sector in question?
- **Onboarding and due diligence.** A money service business or high value dealer with an expired registration shows it on day one.
- **Compliance monitoring.** Approved to Expired, the week it happens, across a list of counterparties.

## Why this one

- **The history nobody else keeps.** HMRC's file has no dates of change; only someone keeping every file can say when a registration lapsed. We do, since 7 October 2026.
- **Matched to the company.** A company number brings its registered and former names, and the postcode district is checked against the registered office.
- **Honest about scope.** HMRC is one supervisor among several: a business not on its register is never called unsupervised.

## Conventions

- Auth: `x-api-key: kat_live_…` on every request (free key at https://meetkatalis.com/developers: a verified email and mobile, 100 credits a month, no card).
- One credit balance across every API; each endpoint's price is on its page and in `x-credits` in https://meetkatalis.com/openapi.yaml.
- Keys are camelCase everywhere. A registered company is `company: { name, number, status, statusDetail?, filingsOverdue? }` on the register endpoints; the enrichment family (enrich, score, assess, brand-kit, ai-visibility, tender-match) keeps `business` / `profile` with `companyNumber`.
- Every error has `code` and `requestId`; every reply an `x-request-id` header; a charged reply `x-credits-remaining`; a reply that gave credits back `x-credits-refunded`. Missing = 404 with `query`.
- Burst ceiling 60 requests a minute per key (429, `Retry-After`, no credits used). A failure on our side (5xx) gives the call's credits back.
- Company data contains public sector information licensed under the Open Government Licence v3.0.

Provided "as is"; results come from public sources and, in places, AI, and may be inaccurate or out of date; not legal, professional or credit advice. Terms: https://meetkatalis.com/apis/terms