get_officersDirectors, secretaries, partners, board members - current + (by default) historical resignations.
Return the officers of a company with unified fields (jurisdiction, officer_id, name, role, appointed_on, resigned_on, is_active) plus jurisdiction_data raw upstream. Role labels are passed through in the registry's native language. Use officer_id with get_officer_appointments for cross-company tracing.
| Name | Type | Required | Description |
|---|---|---|---|
jurisdiction | string | yes | ISO code. |
company_id | string | yes | Registry ID. |
include_resigned | boolean | no | Include historical resignations (default: true). |
group_by_person | boolean | no | Deduplicate across consecutive appointments. |
BE - BelgiumCA - Canada (federal)CH - SwitzerlandCY - CyprusCZ - CzechiaES - SpainFI - FinlandFR - FranceGB - United KingdomIS - IcelandJP - JapanKR - South KoreaMC - MonacoNO - NorwayNZ - New ZealandPL - PolandRU - RussiaSE - SwedenTW - TaiwanYes. include_resigned defaults to true — you get the full appointment history. Pass include_resigned: false for the current board only. is_active on each record tells you which is which without filtering server-side.
get_officers returns directors / secretaries / partners / board members appointed under company law. PSC returns beneficial owners (>25% ownership threshold). The two lists rarely overlap — a director need not be an owner, and a PSC need not be a director.
Older filings (pre-electronic, pre-1990s in most registries) often have no machine-readable appointed_on. The field stays empty rather than guessing. Jurisdiction_data sometimes carries a textual date that wasn't parseable into ISO format.
The registry's native role label, passed through unchanged. GB: 'director' / 'secretary' / 'llp-member'. FR: 'Président' / 'Directeur général'. DE: 'Geschäftsführer'. Don't case-normalize role strings if you need cross-jurisdiction comparisons — use the unified is_active flag instead.
Two-step: take the officer_id from this result, pass it to get_officer_appointments. That's the cross-company tracing endpoint. Available on the same jurisdictions that expose individual officer IDs (GB, IE, FI, CA, NZ, CZ, currently).
No — only persons formally appointed and disclosed on the public officer register. For beneficial / shadow control use get_persons_with_significant_control. For real-economic control, you have to triangulate get_officers + get_shareholders + PSC.
Multiple concurrent or consecutive appointments at the same company (e.g. 'director' + 'company secretary'). Set group_by_person: true to deduplicate by officer_id (where exposed by the registry) — useful for headcount queries, breaks history reconstruction.
Where the registry publishes them. GB returns nationality + month-of-birth (DD always censored). FR returns month-of-birth. DE / CH / IE generally do not publish DOB. Privacy-protected officers (PSC-style hiding) return masked or absent fields.
Most registries return all officers in one call. GB caps at ~35 active + 35 resigned per page — paginate via jurisdiction_data.links.self (passes through verbatim). Large boards on AU (>100 officers historical) chunk automatically.
list_jurisdictions({supports_tool: "get_officers"}) returns the live coverage matrix. Countries without a structured officer endpoint (e.g. publication-register-only jurisdictions like ES) return 501 with an alternative_url pointing at the registry's web search.