BizCheck works over MCP, CLI and HTTP. Agents: read /agents.md

API reference

Everything an agent or developer needs to call BizCheck. The same content is available as markdown at /llms-full.txt and as OpenAPI 3.1 at /openapi.json.

Overview

BizCheck verifies companies from official sources: national company registers, EU VIES for VAT, GLEIF for LEI, and the EU, UN, US (OFAC) and UK sanctions lists. Every fact carries a source with its URL and fetched_at time.

  • HTTP API base: https://bizcheck.app/api/v1 (JSON in, JSON out)
  • MCP server: https://bizcheck.app/mcp (streamable HTTP, POST)
  • CLI: npx bizcheck (Node, no runtime dependencies)

Authentication

Send the key as a bearer token: Authorization: Bearer bc_live_.... Demo deployments issue bc_test_... keys. signup and coverage need no key.

Get a key with POST /api/v1/signup. No human is involved. The full key is returned once; BizCheck stores only a SHA-256 hash and the key prefix, so a lost key cannot be recovered. Store it where your agent keeps secrets, for example the BIZCHECK_API_KEY environment variable or ~/.config/bizcheck/config.json. Each IP address can create 5 keys per 24 hours.

Checks and plans

A check is one call to check, company, search or sanctions. vat, iban, account, checkout and coverage cost nothing but are rate limited.

  • Free: 25 checks per key, once. No card.
  • Pro: EUR 5 per month, 2,000 checks per month (fair use). Premium paid-source lookups, when available, count 10 checks each.

To upgrade, call POST /api/v1/checkout (or read upgrade_url from /account or from a 402 error) and give the link to a human. After payment the same key is Pro. The human lands on a page that says so; the agent just retries.

HTTP endpoints

Base URL https://bizcheck.app/api/v1. Billable responses include checks_left.

POST/api/v1/signup

Cost: free. No key needed. MCP: signup. CLI: bizcheck signup.

Create an API key. No human, form or card needed. The key is shown once: store it. Limited to 5 signups per IP per 24 hours.

ParameterInTypeNotes
label?bodystringA name for the key, e.g. your agent's name.
Request
curl -X POST https://bizcheck.app/api/v1/signup \
  -H "Content-Type: application/json" \
  -d '{"label":"my-agent"}'
Response (example)
{
  "api_key": "bc_live_7Hq2...redacted",
  "key_prefix": "bc_live_7Hq2",
  "label": "my-agent",
  "plan": "free",
  "checks_left": 25,
  "upgrade_url": "https://checkout.example/c/9f2e...",
  "message": "Save this key now; it is shown only once. It includes 25 free checks. Send it as \"Authorization: Bearer <key>\"."
}

GET/api/v1/account

Cost: free. Needs a key. MCP: account. CLI: bizcheck account.

Plan, checks used and left, period end, and a ready upgrade_url for this key.

Request
curl https://bizcheck.app/api/v1/account \
  -H "Authorization: Bearer $BIZCHECK_API_KEY"
Response (example)
{
  "key_prefix": "bc_live_7Hq2",
  "label": "my-agent",
  "plan": "free",
  "status": "active",
  "checks_used": 25,
  "checks_limit": 25,
  "checks_left": 0,
  "period": "lifetime",
  "period_end": null,
  "upgrade_url": "https://checkout.example/c/9f2e..."
}

POST/api/v1/checkout

Cost: free. Needs a key. MCP: get_checkout_link. CLI: bizcheck upgrade.

Create a checkout link tied to the calling key. Give it to a human. When they pay, the same key becomes Pro; nothing to reconfigure.

ParameterInTypeNotes
planbody"pro"The plan to buy.
Request
curl -X POST https://bizcheck.app/api/v1/checkout \
  -H "Authorization: Bearer $BIZCHECK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"pro"}'
Response (example)
{
  "checkout_url": "https://checkout.example/c/9f2e...",
  "expires_at": "2026-11-05T09:12:41Z",
  "plan": "pro",
  "price": "EUR 5/month, 2,000 checks per month"
}

POST/api/v1/check

Cost: 1 check. Needs a key. MCP: check_business. CLI: bizcheck check "Nokia Oyj" --country FI.

The main call. Give any identifier you have; BizCheck resolves the company, validates VAT and IBAN, screens sanctions lists, and returns a verdict (clear, review or fail) with plain-English reasons. If one source is down you still get partial results.

ParameterInTypeNotes
name?bodystringCompany name.
country?bodystringISO 3166-1 alpha-2, e.g. EE. Strongly recommended with name.
registry_id?bodystringNational registry code.
vat?bodystringVAT number with country prefix.
lei?bodystring20-character LEI.
iban?bodystringIBAN to validate.

Send at least one field. verdict is fail on a sanctions hit scoring 0.92 or more or a dissolved company; review on a weaker hit, an invalid VAT number, unknown status or no registry match; otherwise clear. Ambiguous names return candidates.

Request
curl -X POST https://bizcheck.app/api/v1/check \
  -H "Authorization: Bearer $BIZCHECK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Nokia Oyj","country":"FI"}'
Response (example)
{
  "query": {
    "name": "Nokia Oyj",
    "country": "FI"
  },
  "verdict": "clear",
  "reasons": [
    "Nokia Oyj (FI 0112038-9) is active in Finnish Patent and Registration Office (PRH, YTJ open data).",
    "No matches on the EU, OFAC, UK, UN sanctions lists."
  ],
  "company": {
    "id": "FI:0112038-9",
    "country": "FI",
    "registry_id": "0112038-9",
    "name": "Nokia Oyj",
    "former_names": [
      "Oy Nokia Ab"
    ],
    "status": "active",
    "status_detail": "Registered in the Trade Register",
    "legal_form": "Public limited company",
    "incorporated_on": "1978-03-15",
    "address": "Karakaari 7, 02610 ESPOO",
    "vat_numbers": [
      "FI01120389"
    ],
    "industry": {
      "code": "70100",
      "scheme": "TOL 2008",
      "label": "Activities of head offices"
    },
    "website": "https://www.nokia.com",
    "sources": [
      {
        "name": "Finnish Patent and Registration Office (PRH, YTJ open data)",
        "url": "https://tietopalvelu.ytj.fi/yritys/0112038-9",
        "fetched_at": "2026-11-04T09:12:40Z",
        "licence": "CC BY 4.0, Finnish Patent and Registration Office"
      },
      {
        "name": "GLEIF (Global Legal Entity Identifier Foundation)",
        "url": "https://search.gleif.org/#/record/549300A0JPRWG1KI7U06",
        "fetched_at": "2026-11-04T09:12:40Z",
        "licence": "CC0 1.0, GLEIF"
      }
    ],
    "lei": "549300A0JPRWG1KI7U06"
  },
  "sanctions": {
    "screened_lists": [
      "EU",
      "OFAC",
      "UK",
      "UN"
    ],
    "lists_updated_at": {
      "EU": "2026-11-04T04:00:26Z",
      "UN": "2026-11-04T04:00:33Z",
      "OFAC": "2026-11-04T04:00:34Z",
      "UK": "2026-11-04T04:00:46Z"
    },
    "hits": []
  },
  "checks_left": 24
}

GET/api/v1/company/{country}/{id}

Cost: 1 check. Needs a key. MCP: get_company. CLI: bizcheck company FI 0112038-9.

Fetch one company by country and national registry code.

ParameterInTypeNotes
countrypathstringISO 3166-1 alpha-2.
idpathstringNational registry code.
Request
curl https://bizcheck.app/api/v1/company/FI/0112038-9 \
  -H "Authorization: Bearer $BIZCHECK_API_KEY"
Response (example)
{
  "company": {
    "id": "FI:0112038-9",
    "country": "FI",
    "registry_id": "0112038-9",
    "name": "Nokia Oyj",
    "former_names": [
      "Oy Nokia Ab"
    ],
    "status": "active",
    "status_detail": "Registered in the Trade Register",
    "legal_form": "Public limited company",
    "incorporated_on": "1978-03-15",
    "address": "Karakaari 7, 02610 ESPOO",
    "vat_numbers": [
      "FI01120389"
    ],
    "industry": {
      "code": "70100",
      "scheme": "TOL 2008",
      "label": "Activities of head offices"
    },
    "website": "https://www.nokia.com",
    "sources": [
      {
        "name": "Finnish Patent and Registration Office (PRH, YTJ open data)",
        "url": "https://tietopalvelu.ytj.fi/yritys/0112038-9",
        "fetched_at": "2026-11-04T09:12:40Z",
        "licence": "CC BY 4.0, Finnish Patent and Registration Office"
      },
      {
        "name": "GLEIF (Global Legal Entity Identifier Foundation)",
        "url": "https://search.gleif.org/#/record/549300A0JPRWG1KI7U06",
        "fetched_at": "2026-11-04T09:12:40Z",
        "licence": "CC0 1.0, GLEIF"
      }
    ],
    "lei": "549300A0JPRWG1KI7U06"
  },
  "checks_left": 23
}

GET/api/v1/vat/{vat}

Cost: 0 (free). Needs a key. MCP: validate_vat. CLI: bizcheck vat FI01120389.

Validate an EU VAT number against VIES. Free, but rate limited.

ParameterInTypeNotes
vatpathstringWith country prefix, e.g. FI01120389.
Request
curl https://bizcheck.app/api/v1/vat/FI01120389 \
  -H "Authorization: Bearer $BIZCHECK_API_KEY"
Response (example)
{
  "vat": "FI01120389",
  "valid": true,
  "name": "Nokia Oyj",
  "address": "c/oVero-osasto PL 226 00045 NOKIA GROUP",
  "checked_at": "2026-11-04T09:12:41Z",
  "source": {
    "name": "VIES (European Commission VAT validation)",
    "url": "https://ec.europa.eu/taxation_customs/vies/rest-api/ms/FI/vat/01120389",
    "fetched_at": "2026-11-04T09:12:41Z"
  }
}

GET/api/v1/iban/{iban}

Cost: 0 (free). Needs a key. MCP: validate_iban. CLI: bizcheck iban EE382200221020145685.

Validate an IBAN (structure and checksum) and resolve the bank where known. Free, but rate limited.

ParameterInTypeNotes
ibanpathstringNo spaces.
Request
curl https://bizcheck.app/api/v1/iban/EE382200221020145685 \
  -H "Authorization: Bearer $BIZCHECK_API_KEY"
Response (example)
{
  "iban": "EE382200221020145685",
  "valid": true,
  "country": "EE",
  "bank_code": "22",
  "bic": "HABAEE2X",
  "bank_name": "Swedbank AS"
}

GET/api/v1/sanctions

Cost: 1 check. Needs a key. MCP: screen_sanctions. CLI: bizcheck sanctions "Example Trading".

Screen a name against the EU, UN, US (OFAC) and UK sanctions lists. A hit is a possible match with a score, not a finding: a human should review it.

ParameterInTypeNotes
namequerystringPerson, company or vessel name.
country?querystringISO 3166-1 alpha-2, narrows matches.
threshold?querynumber0 to 1, default 0.85.
Request
curl "https://bizcheck.app/api/v1/sanctions?name=Example%20Trading" \
  -H "Authorization: Bearer $BIZCHECK_API_KEY"
Response (example)
{
  "screened_lists": [
    "EU",
    "OFAC",
    "UK",
    "UN"
  ],
  "lists_updated_at": {
    "EU": "2026-11-04T04:00:26Z",
    "UN": "2026-11-04T04:00:33Z",
    "OFAC": "2026-11-04T04:00:34Z",
    "UK": "2026-11-04T04:00:46Z"
  },
  "hits": [
    {
      "list": "OFAC",
      "name": "EXAMPLE TRADING LLC",
      "matched_alias": "Example Trading",
      "score": 0.93,
      "kind": "entity",
      "programme": "RUSSIA-EO14024",
      "listed_on": "2024-02-23",
      "reference": "OFAC-00000",
      "url": "https://sanctionssearch.ofac.treas.gov/"
    }
  ],
  "checks_left": 22
}

GET/api/v1/coverage

Cost: free. No key needed. MCP: coverage. CLI: bizcheck coverage.

Which countries and sources are covered, and what each one returns. No key needed.

Request
curl https://bizcheck.app/api/v1/coverage
Response (example)
{
  "countries": [
    {
      "country": "EE",
      "name": "Estonia",
      "...": "..."
    }
  ]
}

MCP server

Streamable HTTP at https://bizcheck.app/mcp. Authenticate with the same bearer key. signup and coverage work without one, so an agent can connect first and create its key from inside the session. Server card: /.well-known/mcp.json.

ToolWhat it doesKeyChecks
signupCreate an API key. Save the returned key; it is shown once.Nofree
accountPlan, checks left, period end, upgrade_url.Yesfree
get_checkout_linkCheckout link for this key, to hand to a human.Yesfree
check_businessFull check: registry, VAT, IBAN, sanctions, verdict and reasons.Yes1
search_companiesFind companies by name, optionally in one country.Yes1
get_companyOne company by country and registry id.Yes1
validate_vatEU VAT number validity via VIES.Yes0
validate_ibanIBAN checksum and bank lookup.Yes0
screen_sanctionsName screening against EU, UN, OFAC and UK lists.Yes1
coverageCountries and sources covered.Nofree
Claude Code
claude mcp add --transport http bizcheck https://bizcheck.app/mcp \
  --header "Authorization: Bearer bc_live_YOUR_KEY"
Cursor (.cursor/mcp.json)
{
  "mcpServers": {
    "bizcheck": {
      "url": "https://bizcheck.app/mcp",
      "headers": {
        "Authorization": "Bearer bc_live_YOUR_KEY"
      }
    }
  }
}
Claude Desktop (via mcp-remote)
{
  "mcpServers": {
    "bizcheck": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://bizcheck.app/mcp",
        "--header",
        "Authorization: Bearer bc_live_YOUR_KEY"
      ]
    }
  }
}

CLI

npx bizcheck <command>. Config lives in ~/.config/bizcheck/config.json (api_key, base_url); BIZCHECK_API_KEY and BIZCHECK_BASE_URL override it. Add --json to any command for machine output.

CommandWhat it does
bizcheck signupCreate a key and save it to ~/.config/bizcheck/config.json.
bizcheck accountShow plan and checks left.
bizcheck upgradePrint the checkout link and open it in a browser.
bizcheck check <name|vat|iban> [--country XX]Run a full check.
bizcheck search <q> [--country XX]Search companies by name.
bizcheck company <CC> <id>Fetch one company by registry id.
bizcheck vat <vat>Validate a VAT number.
bizcheck iban <iban>Validate an IBAN.
bizcheck sanctions <name>Screen a name against sanctions lists.
bizcheck coverageList covered countries and sources.

Errors

Every error has the same shape: { "error": { "code", "message", "upgrade_url"? } }.

CodeHTTPMeaningWhat to do
bad_request400Missing or malformed input.Fix the request. Do not retry unchanged.
unauthorized401Missing, unknown or revoked key.Send Authorization: Bearer <key>. If you have no key, call signup.
out_of_checks402This key has no checks left.Give error.upgrade_url to your human. After they pay, retry with the same key.
not_found404No company with that id in that register.Check the id, or use search.
rate_limited429Too many requests.Back off and retry later.
source_unavailable502An upstream register or list did not answer.check still returns partial results with a reason. Retry later for the rest.
402 out_of_checks
{
  "error": {
    "code": "out_of_checks",
    "message": "This key has used its 25 free checks. Give the upgrade_url to your human. After they pay, retry with the same key.",
    "upgrade_url": "https://checkout.example/c/9f2e..."
  }
}

Rate limits

Signup is limited to 5 keys per IP address per 24 hours. All endpoints, including the free ones, are rate limited per key. When you exceed a limit you get HTTP 429 with code rate_limited: wait and retry with backoff. Do not retry 400, 401 or 402 responses unchanged.

Data sources and attribution

BizCheck only uses official, publicly available sources. Each fact in a response carries the source name, URL and fetch time, and a licence where the source publishes one. When you show BizCheck data to people, cite the sources entries, not BizCheck.

  • Company registers: per country, listed below.
  • VAT: EU VIES (VAT Information Exchange System).
  • LEI: GLEIF (Global Legal Entity Identifier Foundation).
  • Sanctions: EU consolidated list, UN Security Council consolidated list, US OFAC SDN list, UK sanctions list.
Countries and sources covered by BizCheck
CountryLevelSourceReturnsOfficersOwners
CZ CzechiaOfficial register, liveARES (Ministry of Finance)name, status, address, legal form, incorporated on, former names, officers, owners, industry, vat, leiYesYes
EE EstoniaOfficial register, livee-Business Register (RIK)name, status, address, legal form, incorporated on, former names, vat, leiNoNo
FI FinlandOfficial register, livePRH / YTJ open dataname, status, address, legal form, incorporated on, former names, industry, website, vat, leiNoNo
FR FranceOfficial register, liveAPI Recherche d'entreprises (INSEE Sirene, INPI RNE)name, status, address, legal form, incorporated on, officers, industry, vat, leiYesNo
IE IrelandOfficial register, liveCompanies Registration Office open dataname, status, address, legal form, incorporated on, industry, vat, leiNoNo
LV LatviaOfficial register, liveRegister of Enterprises open dataname, status, address, legal form, incorporated on, officers, owners, vat, leiYesYes
NO NorwayOfficial register, liveBrønnøysund Register Centrename, status, address, legal form, incorporated on, former names, officers, industry, website, vat, leiYesNo
PL PolandOfficial register, liveKRS open API and Biała lista VATname, status, address, legal form, incorporated on, industry, website, vat, leiNoNo
CH SwitzerlandOfficial register, liveZefix linked data (LINDAS)name, status, address, legal form, leiNoNo
HR CroatiaOfficial register, key pendingSudski registar open dataname, status, address, legal form, incorporated on, vat, leiNoNo
GR GreeceOfficial register, key pendingOpenData GEMIname, status, address, legal form, incorporated on, vat, leiNoNo
GB United KingdomOfficial register, key pendingCompanies Housename, status, address, legal form, incorporated on, former names, officers, owners, industry, leiYesYes
AL AlbaniaVAT and LEI onlyGLEIFleiNoNo
AD AndorraVAT and LEI onlyGLEIFleiNoNo
AM ArmeniaVAT and LEI onlyGLEIFleiNoNo
AT AustriaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
AZ AzerbaijanVAT and LEI onlyGLEIFleiNoNo
BE BelgiumVAT and LEI onlyVIES + GLEIFvat, leiNoNo
BA Bosnia and HerzegovinaVAT and LEI onlyGLEIFleiNoNo
BG BulgariaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
CY CyprusVAT and LEI onlyVIES + GLEIFvat, leiNoNo
DK DenmarkVAT and LEI onlyVIES + GLEIFvat, leiNoNo
GE GeorgiaVAT and LEI onlyGLEIFleiNoNo
HU HungaryVAT and LEI onlyVIES + GLEIFvat, leiNoNo
IS IcelandVAT and LEI onlyGLEIFleiNoNo
XK KosovoVAT and LEI onlyGLEIFleiNoNo
LI LiechtensteinVAT and LEI onlyGLEIFleiNoNo
LT LithuaniaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
LU LuxembourgVAT and LEI onlyVIES + GLEIFvat, leiNoNo
MT MaltaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
MD MoldovaVAT and LEI onlyGLEIFleiNoNo
MC MonacoVAT and LEI onlyGLEIFleiNoNo
ME MontenegroVAT and LEI onlyGLEIFleiNoNo
MK North MacedoniaVAT and LEI onlyGLEIFleiNoNo
PT PortugalVAT and LEI onlyVIES + GLEIFvat, leiNoNo
RO RomaniaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
SM San MarinoVAT and LEI onlyGLEIFleiNoNo
RS SerbiaVAT and LEI onlyGLEIFleiNoNo
SK SlovakiaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
SI SloveniaVAT and LEI onlyVIES + GLEIFvat, leiNoNo
ES SpainVAT and LEI onlyVIES + GLEIFvat, leiNoNo
SE SwedenVAT and LEI onlyVIES + GLEIFvat, leiNoNo
TR TurkeyVAT and LEI onlyGLEIFleiNoNo
UA UkraineVAT and LEI onlyGLEIFleiNoNo
VA Vatican CityVAT and LEI onlyGLEIFleiNoNo
DE GermanyVAT and LEI only, paid register plannedVIES + GLEIFvat, leiNoNo
IT ItalyVAT and LEI only, paid register plannedVIES + GLEIFvat, leiNoNo
NL NetherlandsVAT and LEI only, paid register plannedVIES + GLEIFvat, leiNoNo

Freshness

Registry records may be served from a short cache of public data. sources[].fetched_at tells you exactly when each record was read from the register. VAT results carry checked_at. Sanctions results carry lists_updated_at, the time each list was last refreshed.

If a source does not answer, check returns what it could get, adds a reason saying which source failed, and the standalone endpoints return 502 source_unavailable.