Company officers

List officers a register publishes, name, role, and appointment dates, with records sourced from the register's own officer table.

  • $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
Officers response
GET /v1/companies/gb/SC117120/officersSCOTTISH POWER UK PLC · SC117120
  • Marion Venman

    Secretary · appointed 26 October 2007

  • Caireen Mary Devanney

    Director · appointed 26 June 2024

What it does

The people the register publishes

Officers returns the officers and other registered roles a register publishes, with role and appointment dates. We keep only what the register publishes: name, role, dates, and birth year and month as the register publishes them.

  • Current and historical appointments
  • Registry role and jurisdiction
  • No personal data the register does not publish
A register-published role
Director record

Official register

NameAlex Example
RoleDirector
Appointed12 Jun 2024

Coverage and billing

Free when you just looked up the company

Officers is free if the same company was billed in the previous 24 hours, and one verified company otherwise. Records come from the register's own officer table; where a register has none, the endpoint returns HTTP 409 officers_not_available so your code branches on the response.

  • Free within 24 hours of a billed company lookup
  • One verified company otherwise
  • 409 officers_not_available when a register has no officer table
One company, one daily charge
One company today$0.01
  1. 09:00 · Company lookup

    Billed once
  2. 16:00 · Re-check

    Already counted

Integrate

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

terminal: officers
# 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}/officers" \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '/v1/companies/se/5560295197/officers'

Ship

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

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

You are integrating Corpo API's Company officers 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}/officers
Auth header: X-API-Key: ck_live_... (use ck_test_... for fixtures; test calls are never billed)
Body: /v1/companies/se/5560295197/officers
Response: The officers the register publishes, each with name, role, appointment dates and current status. Where a register has no officer table, the response is HTTP 409 with code officers_not_available, so the caller can branch.

## 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. Officers return synchronously.

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

GET /v1/companies/se/5560295197/officers

Sample response

Example response. Source metadata omitted for clarity.

officers.json
{
  "type": "https://corpoapi.com/errors/officers_not_available",
  "title": "Officers not available",
  "status": 409,
  "code": "officers_not_available",
  "detail": "Officers are not published for se."
}

Price per call

$0.01

per verified company. Free if the same company was billed in the last 24 hours.

See every price

Errors

StatusCodeWhen
409officers_not_availableThe register for that jurisdiction does not publish an officer table. Not billed.
404company_not_foundNo company matches that number in that jurisdiction. Never billed.
429rate_limitedA rate limit window is exceeded. Retry-After says how long to wait.
402free_tier_exhaustedThe free tier is used up and the company was not billed in the last 24 hours.

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

How do you handle officer data across countries?
Officer records come from the register's own officer table. Where a register has no officer table, the call returns HTTP 409 officers_not_available and your code branches on the response.
Is officer data personal data?
Yes. We keep only what the register itself publishes, which is name, role, appointment dates, and birth year and month as the register publishes them, and drop national IDs, full dates of birth and addresses at parse time.
Can I search for a person?
No. There are no person-search endpoints. Officers are returned only for a company you already have, which keeps the data within its published scope.

Related

Start free with Corpo API

Verify any company from official registers with one API.