# Company search

> Find a company by name or registry number within a jurisdiction, with fuzzy matching that tolerates accents and messy input.

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

## Integration

`GET /v1/search`

Example request: `/v1/search?q=Klarna&jurisdiction=se&limit=20`

Response: A ranked list of matching companies, each with name, company number, status and jurisdiction, plus a cursor for the next page.

Webhook: none. Search returns synchronously and is never billed.

## API reference

`GET /v1/search?q=Klarna&jurisdiction=se&limit=2`

```json
{
  "data": [
    {
      "id": "co_se5ddfb60e9dc0a6069e9ab4e4",
      "jurisdiction": "se",
      "company_number": "7720001457",
      "company_number_scheme": "SE-ORGNR",
      "legal_name": "Nordic Build Supply AB",
      "display_name": null,
      "legal_name_english": null,
      "status": "dissolved",
      "legal_form_code": "EK-ORGFO",
      "address": {
        "line1": "Box 32",
        "city": "ARVIKA",
        "postcode": "67101",
        "region": null,
        "country": "SE",
        "raw": null
      },
      "match": {
        "type": "name_prefix",
        "identifier": null
      }
    },
    {
      "id": "co_seab172bec38144718ebadedba",
      "jurisdiction": "se",
      "company_number": "5561277533",
      "company_number_scheme": "SE-ORGNR",
      "legal_name": "Klarna Bank AB",
      "display_name": null,
      "legal_name_english": null,
      "status": "merged",
      "legal_form_code": "AB-ORGFO",
      "address": {
        "line1": null,
        "city": "GÖTEBORG",
        "postcode": "40508",
        "region": null,
        "country": "SE",
        "raw": null
      },
      "match": {
        "type": "name_prefix",
        "identifier": null
      }
    }
  ],
  "pagination": {
    "limit": 2,
    "next_cursor": "eyJvIjogMn0",
    "has_more": true,
    "total_estimate": 134,
    "returned": 2
  }
}
```

Example response. Source metadata omitted for clarity.

| Status | Code | When |
| --- | --- | --- |
| 422 | `invalid_parameter` | q is shorter than two characters, or no jurisdiction is given. |
| 401 | `invalid_api_key` | The key is missing, revoked or not valid. |
| 429 | `rate_limited` | A rate limit window is exceeded. Retry-After says how long to wait. |

Price: $0 per call.

## Name or number, one endpoint

Search accepts a company name or a registry number and returns ranked matches. Identifier lookups never go through fuzzy name search. They hit a unique index, so a known number always resolves exactly.

- Accent-aware, fuzzy name matching
- Exact lookup by registry number
- Filter by jurisdiction and status

## Free, and the entry point to everything else

Search is free and never counts against your quota. Use it to resolve a name to a company number, then fetch the profile or run a verify with the number you found.

- Cursor pagination, 1 to 100 results per page
- Free on every plan
- Coverage and status filters from the register

## FAQ

### Is company search free?

Yes. Search is free and is never billed, on any plan. You are only billed when a lookup returns a company.

### Can I search by company number?

Yes. Pass a registry number and it is matched exactly against the identifier index for that jurisdiction.

### Why did I get an ambiguous result?

Ambiguous means several companies matched the name closely. The top candidates are returned and the call is free, so you can pick one and look it up by number.
