Company profile

Fetch one company's record from an official register: name, status, legal form, registered address, identifiers and activity.

  • $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
Company record
GET /v1/companies/se/5567370431Klarna Bank AB
Statusactive
Legal formAB-ORGFO, Aktiebolag
Registered12 March 2005

What it does

One company, every field we hold

The profile returns the normalised company record: legal name, status, legal form, registration and dissolution dates, registered address, identifiers such as the company number and VAT number, and activity codes. Persons are never included.

  • One JSON shape in every jurisdiction
  • Identifiers and activity codes included
  • Data from official registers
One company record
Company record

Official register

Legal nameAcme Studio Ltd
Company number01234567
StatusActive

Integrate

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

terminal: company
# 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 GET "$API_BASE/v1/companies/{jurisdiction}/{company_number}" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '/v1/companies/se/5567370431'

Ship

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

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

You are integrating Corpo API's Company profile 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
GET $API_BASE/v1/companies/{jurisdiction}/{company_number}
Auth header: X-API-Key: ck_live_... (use ck_test_... for fixtures; test calls are never billed)
Body: /v1/companies/se/5567370431
Response: The company record, with identifiers, addresses and activity codes.

## 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 profile 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 profile takes one request and returns one JSON document. The response below came from the live API, not a mock.

GET /v1/companies/se/5567370431

Sample response

Example response. Source metadata omitted for clarity.

company.json
{
  "id": "co_sea81b5ad3d15a050b79a96d8b",
  "jurisdiction": "se",
  "company_number": "5567370431",
  "company_number_scheme": "SE-ORGNR",
  "legal_name": "Klarna Bank AB",
  "display_name": null,
  "legal_name_english": "Klarna Bank AB",
  "legal_form_code": "AB-ORGFO",
  "status": "active",
  "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"
  },
  "is_natural_person": false,
  "restricted": false,
  "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
    }
  ],
  "activity": [
    {
      "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
    }
  ],
  "other_names": [
    {
      "name": "Klarna Bank AB",
      "kind": "translated",
      "start_date": "1998-02-12",
      "end_date": null
    }
  ],
  "legal_form": {
    "id": "se:AB-ORGFO",
    "code": "AB-ORGFO",
    "name_local": "Aktiebolag",
    "name_en": "Limited company"
  },
  "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
  }
}

Price per call

$0.01

per verified company. Billed once per company per day across all endpoints.

See every price

Errors

StatusCodeWhen
404company_not_foundNo company matches that number in that jurisdiction. Never billed.
422invalid_parameterA path or query value 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 a verified company?
One billable call that returned a company. The profile is billed once per company per day, so fetching the same company again the same day is free.
Does the profile include directors?
The profile is company-only. Officers are a separate endpoint, sourced from the register's own officer table, so you can fetch them for the same company in one more call.

From the blog: Usage-based billing without the surprise invoice.

Related

Start free with Corpo API

Verify any company from official registers with one API.