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- 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
United Kingdom · 01234567
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
Integrate
One call. Set your base URL and key once: they work for every endpoint on the platform.
# 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 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.comAPI 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.
{
"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 priceErrors
| Status | Code | When |
|---|---|---|
| 422 | missing_identifier_or_name | Neither company_number nor name was supplied. |
| 400 | invalid_parameter | expected.status is not active or any, or another field fails validation. |
| 429 | rate_limited | A rate limit window is exceeded. Retry-After says how long to wait. |
| 402 | free_tier_exhausted | The 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
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
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?
What does verify cost?
Can I check several companies at once?
From the blog: Error responses you can act on.