Company verification

Check a company against the register and get a verdict: verified, partial or mismatch, with a per-check breakdown.

  • $0.01 per verified company
  • No contract
  • Straight from the register

69 jurisdictions covered across official registers

Sample regions: United Kingdom, France, Germany, Sweden, Belgium, Brazil, Colombia, Argentina, California, Japan, Australia, Singapore
Verify response
POST /v1/verifyVerified
  • legal_namematch

    score 1.0

What it does

One call, a per-check verdict

Verify resolves a name or number to a company and checks the fields you pass: legal name, status, address, VAT number and officer names. It returns a verdict plus the result of each check, so you can see exactly what matched.

  • verified, partial or mismatch
  • Per-check results for each field
  • Ambiguous and not-found results are free
A clear match verdict
Acme Studio Ltd

United Kingdom · 01234567

Legal nameMatch
Company statusMatch

How it decides

Exact where it can be, fuzzy where it matters

A company number resolves exactly. Names are compared on a normalised form, with trigram similarity for near matches. A status check passes only when it is asked to. Any mismatch downgrades the verdict, and a missing check makes it partial.

  • Exact identifier resolution
  • Normalised name and fuzzy matching
  • Address, VAT and officer-name checks
Resolve a near match
Your inputACME studio
Normalised nameacme studio
Register matchAcme Studio Ltd

Integrate

One call. Set your base URL and key once: they work for every endpoint on the platform.

terminal: verify
# All endpoints share one base URL and key. Set them once:
export API_BASE="https://api.corpoapi.com"
export API_KEY="ck_live_..."   # or ck_test_... to return fixtures and never bill

curl -X POST "$API_BASE/v1/verify" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "jurisdiction": "se", "company_number": "5567370431", "expected": { "legal_name": "Klarna Bank AB" } }'

Ship

Paste into Claude Code, Cursor, Codex, or any coding agent. It is already filled for the Company verification endpoint: set <my_stack> and your API key, and everything else stays exactly as written.

corpo api-verify-integration-prompt.md
# Corpo API Company verification: integrate in 5 minutes

You are integrating Corpo API's Company verification endpoint into <my_stack>.
Follow these steps exactly. Every URL, header, and value below is canonical.
Do not paraphrase or "improve" them.

## 1. Provision an account
- Sign up: https://app.corpoapi.com (no credit card required).
- Or set credentials you already have:
  export API_BASE="https://api.corpoapi.com"
  export API_KEY="ck_live_..."

## 2. Make the call
POST $API_BASE/v1/verify
Auth header: X-API-Key: ck_live_... (use ck_test_... for fixtures; test calls are never billed)
Body: { "jurisdiction": "se", "company_number": "5567370431", "expected": { "legal_name": "Klarna Bank AB" } }
Response: A verdict (verified, partial or mismatch) plus each check that ran, with a match score and where the company was found.

## 3. Handle the result
- 200: use the JSON response described above.
- On error, branch on the stable `error` field, never the message text.
- 429 = rate limited (back off and retry). 401 = invalid key. 422 = malformed body.
- Webhook / async: none. The result returns synchronously in the HTTP response.

## 4. Hard rules, do not change
- Base URL is $API_BASE (set above). Do not invent other hosts.
- Auth header is `X-API-Key` (exact casing).
- Read the full reference before writing code: https://docs.corpoapi.com

## 5. Pricing (public)
- Per-call pricing is published at https://corpoapi.com/pricing.md. Read it there; do not hardcode a rate.

When in doubt: https://docs.corpoapi.com

API reference

Company verification takes one request and returns one JSON document. The response below came from the live API, not a mock.

POST /v1/verify with { "jurisdiction": "se", "company_number": "5567370431", "expected": { "legal_name": "Klarna Bank AB" }, "reference": "order-1234" }

Sample response

Example response. Source metadata omitted for clarity.

verify.json
{
  "result": "verified",
  "company": {
    "id": "co_sea81b5ad3d15a050b79a96d8b",
    "jurisdiction": "se",
    "company_number": "5567370431",
    "legal_name": "Klarna Bank AB",
    "display_name": null,
    "name_translit": "Klarna Bank AB",
    "legal_form": {
      "code": "AB-ORGFO",
      "elf_code": "se_aktiebolag",
      "label": "Aktiebolag"
    },
    "status": "active",
    "status_date": null,
    "registration_date": "1930-11-24",
    "dissolution_date": null,
    "address": {
      "line1": "ARSC, DC24000",
      "city": "GÖTEBORG",
      "postcode": "40508",
      "region": null,
      "country": "SE",
      "raw": "ARSC, DC24000  GÖTEBORG 40508 SE-LAND"
    },
    "officers_availability": "gated",
    "identifiers": [
      {
        "scheme": "SE-ORGNR",
        "value": "5567370431",
        "is_primary": true,
        "valid_check": true
      },
      {
        "scheme": "EU-VAT",
        "value": "SE556737043101",
        "is_primary": false,
        "valid_check": true
      }
    ],
    "other_names": [
      {
        "name": "Klarna Bank AB",
        "kind": "translated",
        "start_date": "1998-02-12",
        "end_date": null
      }
    ],
    "activities": [
      {
        "scheme": "SNI-2025",
        "code": "70200",
        "description": null,
        "is_primary": true
      },
      {
        "scheme": "SNI-2025",
        "code": "78100",
        "description": null,
        "is_primary": false
      },
      {
        "scheme": "SNI-2025",
        "code": "85594",
        "description": null,
        "is_primary": false
      }
    ],
    "officers": [],
    "freshness": {
      "origin": "database",
      "retrieved_at": "2026-10-15T16:43:13.413346+02:00",
      "source_updated_at": "2026-10-15T16:43:13.413346+02:00",
      "stale": false
    }
  },
  "candidates": [],
  "checks": [
    {
      "field": "legal_name",
      "outcome": "match",
      "expected": "Klarna Bank AB",
      "actual": "Klarna Bank AB",
      "score": 1.0
    }
  ],
  "reference": "order-1234"
}

Price per call

$0.01

per verified company. Billed only when a company is found (verified, partial or mismatch).

See every price

Errors

StatusCodeWhen
422missing_identifier_or_nameNeither company_number nor name was supplied.
400invalid_parameterexpected.status is not active or any, or another field fails validation.
429rate_limitedA rate limit window is exceeded. Retry-After says how long to wait.
402free_tier_exhaustedThe free tier is used up and no payment method is set. Free calls keep working.

Rate limits

  • Free: 5 requests per second, 100 per minute.
  • Paying: 50 requests per second, 2,000 per minute.
  • Limits are per key, on a fixed 1-second window and a 1-minute window.
  • Exceeding either window returns 429 with a Retry-After header in seconds.
  • A batch call counts as one request, however many items it carries.

Simple by design

69

Jurisdictions covered

$0.01

Per verified company

1 schema

Consistent company data

Transparent pricing

Pay-as-you go, 1 cent per company, forever.

100 free calls to get started, then $0.01 per verified company. No subscription.

Pay as you go

Usage

$0.01/ company

Pay as you go · No contract

100 free

starter calls · No card

Everything included

  • 100 free calls to get started
  • Search, coverage and usage are always free
  • Failed and ambiguous lookups are never billed
  • REST API and hosted MCP server
Get started

Failed and ambiguous lookups are never billed, and the same company is billed at most once a day.

FAQ

Common questions

What is the difference between partial and mismatch?
Partial means nothing mismatched but a check could not run, for example a VAT number the register does not store. Mismatch means at least one field disagreed.
What does verify cost?
One verified company: $0.01 after the starter allowance. A not-found or ambiguous result is free, so you never pay for a call that did not find a company.
Can I check several companies at once?
Yes. Batch verify runs up to 100 items synchronously, billed per item exactly like single verifies.

From the blog: Error responses you can act on.

Related

Start free with Corpo API

Verify any company from official registers with one API.