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, SingaporeMarion 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
Official register
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
09:00 · Company lookup
Billed once16:00 · Re-check
Already counted
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 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 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.comAPI 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.
{
"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 priceErrors
| Status | Code | When |
|---|---|---|
| 409 | officers_not_available | The register for that jurisdiction does not publish an officer table. Not billed. |
| 404 | company_not_found | No company matches that number in that jurisdiction. Never billed. |
| 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 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
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