Skip to content

Jithox Labs · read-only · free

Verify a company in the official register before you pay or sign

Give your AI a registration number and the name and city you expect. It gets one closed answer from the official register — MATCH, MISMATCH, NOT FOUND or UNAVAILABLE — with the reasons, the moment it was checked, the source and a receipt. Nothing is written anywhere, no person is looked up, and an unavailable register never becomes a positive answer.

Labs, with synthetic examples

The examples below run on synthetic fixtures and describe no real company. The Dutch adapter was tested against KVK's official test environment (fictitious data) and answers from it once the owner sets KVK's public test key on the deployment; until then a Dutch lookup says "unavailable: provider not configured". The Belgian and British adapters are present, tested on fixtures, and say "not connected" until the owner registers with those registers. No price is published.

How it works

  1. 1. Number, name, city

    Your AI sends the country, the registration number and — if you have them — the name and city on the invoice or contract. E-mail addresses, phone numbers and bank accounts are refused: a register is searched by company, never by person.

  2. 2. The official register answers

    Jithox asks the register itself, read-only, with a timeout, one retry for a lost connection, a circuit breaker and no cache beyond a 60-second replay window. The Dutch check uses the free search first, so an unknown or deregistered number costs nothing.

  3. 3. One closed decision

    MATCH only when the entity exists, is still registered, carries no insolvency flag and every expectation you gave matches. Everything else is MISMATCH with the reason codes, NOT FOUND, or UNAVAILABLE with a retry hint. The answer carries the retrieval moment, the source, the register's own attribution sentence and an unsigned hash-bound receipt.

Worked examples (synthetic)

Each example runs on the fixture provider with a fixed clock, so everyone sees the same answer. None of these companies exists.

Fixed clock: 2026-09-06T12:00:00.000Z. Fixture provider; no register was contacted; nothing was charged.

NL · verify

A new Dutch supplier: number, name and city agree

matchMatch

entity_found · entity_registered · name_normalised_match · city_match · source_is_fixture · source_text_is_untrusted

Request →

NL · verify

The invoice names a company the number does not belong to

mismatchMismatch

entity_found · entity_registered · name_mismatch · city_not_checked · source_is_fixture · source_text_is_untrusted

Request →

NL · verify

The number exists but the company is deregistered

mismatchMismatch

entity_found · entity_deregistered · name_exact_match · city_not_checked · personal_data_minimised · source_is_fixture · source_text_is_untrusted

Request →

NL · verify

A sole trader: verified, personal details left out

matchMatch

entity_found · entity_registered · name_exact_match · city_not_checked · personal_data_minimised · source_is_fixture · source_text_is_untrusted

Request →

NL · verify

A number the register does not know

not foundNot found

entity_not_found · source_is_fixture · source_text_is_untrusted

Request →

BE · verify

A Belgian company in an insolvency situation

mismatchMismatch

entity_found · entity_registered · insolvency_flag · name_exact_match · city_not_checked · source_is_fixture · source_text_is_untrusted

Request →

GB · verify

A dissolved British company

mismatchMismatch

entity_found · entity_deregistered · dissolution_flag · name_normalised_match · city_not_checked · source_is_fixture · source_text_is_untrusted

Request

{
  "register": "GB",
  "registrationNumber": "SC999902",
  "expectedName": "Gone Ltd",
  "purpose": "contract_check"
}

Decision

{
  "decision": "MISMATCH",
  "reasonCodes": [
    "entity_found",
    "entity_deregistered",
    "dissolution_flag",
    "name_normalised_match",
    "city_not_checked",
    "source_is_fixture",
    "source_text_is_untrusted"
  ],
  "checkedAt": "2026-09-06T12:00:00.000Z",
  "sourceName": "Companies House Public Data API — FIXTURE",
  "sourceEnvironment": "fixture",
  "attribution": null,
  "unavailable": false,
  "retryable": false,
  "charged": false,
  "accepted": true,
  "receiptId": "crv_0afb128b73fadbcdaefe",
  "registration": {
    "register": "GB",
    "number": "SC999902",
    "status": "DEREGISTERED"
  },
  "evidence": {
    "registeredName": "GONE LIMITED",
    "tradeNames": [],
    "legalForm": "ltd",
    "entityKind": "legal_entity",
    "city": "Glasgow",
    "country": "Scotland",
    "registeredAt": "2009-11-02",
    "deregisteredAt": "2024-02-29",
    "nameMatch": {
      "level": "normalised",
      "expected": "Gone Ltd",
      "matched": "GONE LIMITED"
    },
    "cityMatch": "not_checked"
  }
}

NL · verify

The register is down: UNAVAILABLE, never a verdict

unavailableUnavailable

provider_error · source_is_fixture · source_text_is_untrusted

Request →

NL · find

Find the number from a company name first

candidates foundCandidates found

entity_found · source_is_fixture · source_text_is_untrusted

Request →

The registers behind the one answer

One contract, four official sources. The status says honestly how each adapter was tested in this build.

RegisterNumberFreshnessTested
Netherlands — KVK Handelsregister8 digitsliveOfficial test environment tested (fictitious data)
Belgium — KBO / CBE10 digits starting with 0 or 1, two check digits (mod 97)daily snapshotFixtures only — not connected
United Kingdom — Companies House8 characters: 8 digits, or a 2-letter prefix (e.g. SC, NI, OC) and 6 digitsliveFixtures only — not connected
France — SIRENE (Registre national des entreprises)9 digits with a valid Luhn check digit (a 14-digit SIRET is accepted; its first 9 digits are used as the SIREN)daily snapshotReal source tested

What is true about every answer

  • Read-only. The register is asked; nothing is written, filed, sent or paid.
  • The moment of retrieval, the source and — for the Dutch register — its own sentence "Voor actuele informatie met juridische derdenwerking dient u altijd het Handelsregister te raadplegen" travel with the answer.
  • Only the fields a verification needs travel: registered name, trade names, legal form, city, dates, status. For sole traders and partnerships the address and owner details are left out.
  • Names from a register are data, never instructions: bounded, stripped of markup, never sent to a model.
  • The receipt is unsigned and hash-bound; anyone can recompute it. It is not a register extract and has no legal third-party effect.
  • An unavailable register, a timeout, a corrupt answer or a changed schema is UNAVAILABLE with a retry hint — never a positive or negative verdict about a company.

What it never does

  • Never searches by a person's name, e-mail, phone number or bank account.
  • Never stores register data beyond the 60-second replay window in process memory; never builds its own copy of a register.
  • Never claims a legal, fiscal or compliance conclusion; never reports UBO, officer, credit or sanctions information.
  • Never creates a register account, accepts terms or spends money on the owner's behalf.
  • Never charges for an unavailable, refused or malformed request.

No price is published. In this build the three tools are free Labs tools through your Jithox connection and this page's API; a paid, receipted verification is a proposal for the owner. Release status: preview local build.

Developer details

Three JSON endpoints and three connection tools with the same closed schemas. The register adapters, their terms and their test status are listed in the schema document.

Developer details
Schema:
GET https://jithox.com/api/company-register/v1/schema
Verify:
POST https://jithox.com/api/company-register/v1/verify
Find:
POST https://jithox.com/api/company-register/v1/find
Number shape:
POST https://jithox.com/api/company-register/v1/format
Fixtures:
GET https://jithox.com/api/company-register/v1/fixtures
Policy:
company-register-policy/2026-09-06 · 30/min · LABS
MCP:
verify_company_registration, find_company_registration, check_registration_number_format @ https://jithox.com/api/agent-connection/v1/mcp · actions:prepare:company-register-verification · CONFIG_READY
Decisions:
MATCH · MISMATCH · NOT_FOUND · UNAVAILABLE

Through the Jithox connection: verify_company_registration, find_company_registration and check_registration_number_format are listed by tools/list under one scope; every accepted answer carries _meta.receipt.receiptId. No separate key, no separate login.

Connect your AI