# Company verification

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

Canonical: https://corpoapi.com/endpoints/verify

## Integration

`POST /v1/verify`

Example request: `{ "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.

Webhook: none. The result returns synchronously in the HTTP response.

## API reference

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

```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"
}
```

Example response. Source metadata omitted for clarity.

| 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. |

Price: $0.01 per verified company.

## 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

## 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

## FAQ

### 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.
