Skip to content

Find out whether the company is still a company.

One POST request reads a Legal Entity Identifier or a UK company number against register files synced onto this server: the legal name, whether the entity is still live in the register’s own wording, where it was formed, whether the LEI registration is current — and, where two registers hold the same entity, exactly what they disagree about, with both sides quoted.

Free credits every month. No credit card required. An identifier no register here can answer for costs nothing.

$ curl https://spaw.co/api/v1/entity \
    -H "Authorization: Bearer sk_live_…" \
    -H "Content-Type: application/json" \
    -d '{"identifier": "213800QILIUD4ROSUO03", "type": "lei"}'

{
  "success": true,
  "data": {
    "identifier": "213800QILIUD4ROSUO03",
    "identifier_type": "lei",
    "found": true,
    "reason": null,
    "name": "ACME HOLDINGS LIMITED",
    "status": "active",
    "status_detail": "ACTIVE",
    "country": "GB",
    "jurisdiction": "GB",
    "legal_form": "H0PO",
    "registered_at": "2016-04-21",
    "checksum_valid": true,
    "registration_status": "ISSUED",
    "other_register": "uk-companies-house",
    "other_identifier": "01234567",
    "flags": [],
    "agreements": [
      { "field": "name", "lei": "ACME HOLDINGS LIMITED", "national_register": "ACME HOLDINGS LIMITED", "result": "agree" },
      { "field": "status", "lei": "active", "national_register": "active", "result": "agree" }
    ],
    "sources": [
      { "dataset": "gleif-lei-level-1", "version": "2026-09-08" },
      { "dataset": "uk-companies-house-entities", "version": "2026-09-01" }
    ],
    …
  },
  "meta": { "credits_used": 1, "credits_remaining": 499, "cache_hit": false }
}
two open registers, synced locallyno third party in the request pathno registered address, everboth sides of every disagreement quotedidentifiers no register carries cost nothing

Every response field, documented.

This is the actual contract of POST /api/v1/entity — 20 fields in a fixed order, then sources naming each register behind the answer with the date of the copy this server holds, and meta with your credit usage. Every field a caller would branch on is present even when the answer is no, so the shape never varies.

Field What it tells you
identifierThe identifier as the register writes it: a LEI uppercased, a UK company number zero-padded to eight characters, so 1234567 and 01234567 are the same company.
identifier_typelei or company_number, echoing what was asked for.
foundWhether a register carried it. False is free, and never means the entity does not exist — only that this server could not answer.
reasonWhy not: unknown_identifier, malformed_identifier, unsupported_register or register_unavailable. Null when found is true.
nameThe legal name the register carries.
status / status_detailWhether the entity is still live, folded to active, inactive, dissolved or unknown — and the register’s own wording beside it, which is what distinguishes a voluntary strike-off from a liquidation.
country / jurisdictionThe country of registration, and the jurisdiction of formation, which can be a subdivision such as US-DE.
category / legal_formThe register’s entity category, and the ISO 20275 entity legal form code where one is carried.
registered_at / record_updated_atWhen the entity was formed or incorporated, and when the register last updated this record.
checksum_validLEI only: whether the ISO 7064 MOD 97-10 check digit is right. A typing check, not proof the identifier was ever issued. Null where the identifier carries no check digit.
registration_statusLEI only: ISSUED, LAPSED, RETIRED, ANNULLED, MERGED or DUPLICATE. An entity can be perfectly alive while its LEI is not.
next_renewal_atLEI only: when the registration was last due for renewal.
other_register / other_identifierThe national register this record names, and this entity’s identifier there — which is what makes the cross-register comparison possible.
flagsWhat the registers disagree about, or what one of them warns. The four below, each with its own reference page.
agreementsEach cross-register comparison with both sides quoted, so a disagreement is something you can read rather than take on trust. Empty where there is no counterpart record.
sourcesEvery register behind the answer, with the date of the copy this server holds.

Two registers, and a disagreement you can read.

When a LEI record names a UK company number and both registers are installed, the two records are compared field by field, and agreements quotes both sides. Nothing is corrected behind your back and nothing is asserted you cannot see the working for.

Where there is no counterpart record, agreements is empty and no flag is raised. An absent register is not a disagreement.

  • Send an identifier and its type; a company number also takes the country whose register it belongs to
  • Lookups read register files synced onto this server — no upstream API in the request path
  • Saved lists of up to 500 identifiers, re-checked weekly or monthly
  • Malformed, unknown, unsupported and not-yet-synced answers are free
  • Repeats of a charged lookup are free for seven days
Flag What it says
dissolved_in_national_registerThe national register records the company as dissolved. That is the strongest signal the product carries: a dissolved company is no longer a legal person and cannot enter a contract.
status_differs_across_registersThe two registers disagree about whether the entity is live. The national register is the authority on that; the LEI record reflects what was last reported, so a disagreement usually means the LEI record is stale.
name_differs_across_registersThe legal names differ on their letters and digits once the company-form words are removed — so “ACME HOLDINGS LTD.” and “Acme Holdings Limited” agree, and a real difference is reported rather than corrected.
lei_registration_not_currentThe LEI is not in a current registration state. A LEI must be reconfirmed each year and a great many are not, so this means the reference data has not been rechecked recently — not that the company has gone.

Open registers, named and licensed.

Both registers are bulk files synced into a local table, so a lookup reads data this server already holds: nothing about the identifier you sent leaves it, and an answer takes milliseconds. Every response names the registers it read with the date of each copy.

DatasetCovers
gleif-lei-level-1Legal Entity Identifier Level 1 reference data for every entity that holds a LEI, worldwide: the legal name, the entity status, the country and jurisdiction of formation, the entity category and legal form, the registration status and the renewal date, and the national register entry the record names.
uk-companies-house-entitiesEvery company on the live UK register: the company number, the legal name, the register’s own status wording, the jurisdiction and the incorporation date. A company struck off is removed from the file rather than marked dissolved, which is why a monitor reports a disappearance as left_register.

The Legal Entity Identifier reference data is published by the Global Legal Entity Identifier Foundation under a CC0 1.0 public-domain dedication, and Spaw answers from its own copy of it. Spaw is not affiliated with, endorsed by or connected to that foundation in any way, and an answer here is Spaw’s, not theirs. UK company data is the Companies House free company data product, used under the Open Government Licence v3.0.

Where one credit pays for itself.

Vet a counterparty before you sign

The legal name, whether the entity is still live in the register’s own wording, where it was formed and when — enough to answer whether the company on the form is a company at all, in milliseconds and without a portal login.

Check that a LEI is current

status is about the entity and registration_status is about the identifier. If a counterparty needs a current LEI for a regulatory reason, lei_registration_not_current is the flag that says they do not have one.

Watch a supplier list

Save up to 500 identifiers and have them re-checked weekly or monthly. The first run only sets the baseline, so saving a list never emails you about what was already true; from then on you hear about a dissolution, a lapse, a disagreement or an identifier that left the register.

What we won’t pretend to know.

A company-data API is easy to sell as an oracle. This one answers from two published files, says which one answered and when it was copied, and says nothing at all where they are silent.

A no from us is not a no from the register

found: false means this server could not answer, and never that the entity does not exist. A malformed identifier, one the installed registers do not carry, a register we do not hold for that country, and a register that has not been synced yet each answer with their own reason — a register that is not installed reads as not installed here, never as not found. All four are free, and register_unavailable is never cached, so the next lookup answers as soon as the file lands.

An answer can be five weeks behind

The UK company file is republished monthly, within five working days of the previous month end, so a company that changed yesterday can still read as it was last month. Every answer names the date of the copy it was read from in sources, and /status lists both registers with the date each was last synced. Nothing here is a live query against a register.

No registered addresses, on purpose

Nothing in the response is a registered address, and nothing will be. A registered address is very often somebody’s home — that is why protected-address regimes exist — and an identifier on its own does not say whether a limited company or a sole trader stands behind it. The product carries country and jurisdiction, which answer whether this is a real, live entity without holding a register of where people live.

Common questions about business identifiers.

What does found: false actually mean?

That no register this server holds could answer for the identifier — never that the entity does not exist. The reason says which case it was: malformed_identifier for something that cannot be an identifier at all, unknown_identifier for one the installed register does not carry, unsupported_register for a country whose register is not part of the product, and register_unavailable when the register is declared but has not been synced here. A register that is not installed reads as not installed here, and all four answers are free.

Which identifiers can I check?

A Legal Entity Identifier, which is global by construction and needs no country, and a UK company number, which needs country: GB because company numbers are only unique inside their own register. GB is the national register installed today. A UK company number is zero-padded to eight characters before it is looked up, so 1234567 and 01234567 are the same company.

Is a valid check digit proof the LEI was issued?

No. checksum_valid reports the ISO 7064 MOD 97-10 check digit, the same arithmetic an IBAN uses: it catches a mistyped or transposed character and nothing more. A perfectly formed LEI can never have been issued, which is what the register lookup answers. Measured against the published register on 8 September 2026, of 45,515 consecutive real LEIs 45,512 satisfy the checksum, and all three that do not are annulled registrations — LEIs issued in error and withdrawn. A record can therefore exist with a failing checksum, which is why the two facts are reported side by side rather than one standing in for the other.

How fresh is the data?

The LEI reference data is published daily and synced here weekly, so a copy is at most a week behind. The UK company file is republished monthly, within five working days of the previous month end, so an answer can be up to five weeks behind the live register. Every response names both registers with the date of the copy in sources, and /status lists them with the date each was last synced. No lookup calls a third party, so nothing about the identifier you sent leaves this server.

How does a UK dissolution show up?

The free UK company file is a snapshot of the live register, so a company that is struck off is removed from the file rather than marked dissolved — the statuses it carries are “Active”, “Active - Proposal to Strike off”, “Liquidation”, “In Administration” and similar, never “Dissolved”. A dissolution therefore reaches a monitor as the identifier disappearing between runs, which is reported as left_register and alerted on rather than passing silently as unverifiable. The earlier warning is the register’s own wording in status_detail: “Active - Proposal to Strike off” folds to a status of active, because it is still on the register, so read status_detail if you want to act before the company goes.

Why is there no address in the response?

Because a registered address is very often a home address, and an identifier alone does not tell you whether a limited company or a sole trader stands behind it — a sole trader’s registered details are personal data in a way a company’s are not. So no street address is stored or returned. Monitors here prune themselves for the same reason: a list nobody re-checks any more is deleted along with the identifiers and results it held, and prunes_after_days on every monitor payload says when.

What costs a credit?

One credit when a register answers. A malformed identifier, one no installed register carries, an unsupported register and a register that is not installed are all free, because none of them told you anything you could not have worked out. A repeat of the same identifier on the same account inside seven days is free too, which is why a weekly monitor over a monthly register costs almost nothing after the first run.

Check your first identifier in minutes.

Create a key, send one POST request, and keep free lookups every month on us.

Get your API key