Skip to main content
Political offices are the offices — a head of state, a ministry, a legislative seat, a governorship — and the office-holders are the people who have held them over a published interval. The data is gathered by our open-source crawler lane directly from the publishers: official government and parliamentary rosters where a country publishes one, and Wikidata where it does not. Each holder is bound to the same entity spine as everything else on the API, so one person id reaches their offices, their coded events, the stories that name them and — where one exists — their entry on a public restricted-party list. Coverage is national and subnational. Subnational offices (state governors, regional ministers, provincial assemblies) are carried only where the publisher states the level; an office the source does not place is served at the national level rather than guessed.

What it is not

This is actor context for geopolitical analysis. It is not a politically-exposed-persons list, it is not sanctions screening, and no response from it is a compliance determination. Every response carries the same sentence in meta.disclaimer:“For geopolitical-intelligence analysis — NOT a sanctions-screening, KYC/AML, or compliance control. Use a compliance-grade provider for screening decisions. Coverage is high-recall analytical, not audit-grade.”A person appearing here means a public source lists them as holding a public office. It does not mean they are exposed, restricted, or under investigation, and the absence of a person means nothing at all.

as_of here means valid time

On the offices endpoints, as_of asks who held the office on that date, and it is answered from the start and end dates the publisher states — the office’s own clock, not ours. That is the opposite convention from the rest of the reference layer: on the screening lists and /api/v2/screening/match, as_of asks what we knew on that date and replays our own snapshots. The two answer different questions and are priced and gated differently, which is why the offices family is deliberately not routed through the knowledge-time gate. Two consequences follow from taking the publisher’s clock seriously:
  • An office-holder the source gives no start date cannot be placed on a date. It is excluded from an as_of read and counted in meta.undated_office_holders, never fabricated onto the timeline.
  • Whether a holder is current is what the source asserts, independent of the dates. A source that does not say leaves the status unknown, and unknown is served as unknown rather than coerced into current because an end date happens to be missing.
The same valid-time filter reaches the news layer: office= on /api/v2/events and /api/v2/stories scopes rows to the holders of an office, and office_as_of= narrows that roster to whoever held it on a single date. Both are defined on the parameter reference, which also discloses how many holders in a roster are bridged to a news identity and how many are not. For the general rule about event_date versus when we coded something — the knowledge-time claim on the Core surfaces — see As-of claims and coding latency.

Endpoints

Three calls cover most questions. Resolve the person first, then read their offices; or start from an office and read who has held it. The --data-urlencode shape below is what tests/docs/offices-examples.test.ts runs through the same descriptors that validate a live request. Resolve a person who holds or held office. holds_office=true keeps only office-holders, and country_match=strict refuses to guess a country from thin evidence. The response is a list of candidates — inspect the candidates; never take the first row.
The person’s office history. Reuse the entity_id you selected above.
Who held an office on a date. as_of is valid time — the publisher’s own start and end dates — so a holder with no start date cannot be placed and is left out (and counted, below).
Every holder row carries a status that is publisher-asserted, never inferred from a missing end date: Two fields on meta tell you what a roster did NOT show you. meta.undated_office_holders counts the holders excluded from an as_of read because the source gave them no start date — they exist, they are simply not placeable on a timeline. meta.checked records that the section was measured, so a response with data: [] is a measured empty roster, while a withheld section (an entitlement your key does not carry) is not evidence of no records.

What a person record carries

A served person carries a name, their aliases, citizenship, a Wikidata identifier, gender and birth year — plus the offices they have held and any public-list memberships. That is the whole record. It never carries a date of birth, a passport, national-identity or tax number, an address, or any contact detail. These are not filtered out at serve time; they are absent by construction. No served table has a column to hold them, and the crawler discards them at the moment of writing, so there is no setting, plan or internal surface on which they could be returned. The date of birth collapses to its year before it is stored. If you are the subject of a record and want it corrected or removed, the request path is on the privacy page. Because every record is a projection of a public source, a correction we make is a correction against that source’s publication, and the publisher remains the place to change the underlying fact.

Lists now include individuals

The restricted-party lists on /api/v2/lists used to carry institutions, vessels and aircraft only — individual rows were dropped at load, because there was no person contract to hold them under. They now also carry the individuals those lists name, under exactly the minimal field set above: nothing finer is stored for a listed person than for an office-holder, and the address and remarks fields an institution row may carry are always empty on a person. A category filter on /api/v2/lists selects the kind of list a source is; the accepted values are defined on the value reference, and only some of them count as a sanction in the exposure lenses, which that page also states. A removal is kept as a dated fact on /api/v2/lists/changes rather than deleted, so a list entry that disappears from the publisher remains reconstructable.

Sources and attribution

Each row names its originating publisher, and the freshness a response reports is the time we last read that publisher — not a catalogue date. Official rosters are published by the governments and legislatures that maintain them; Wikidata content is CC0. The crawlers are our fork of the OpenSanctions crawler codebase, which its authors publish under the MIT licence. OpenSanctions’ compiled data, API and bulk exports are not used and are not redistributed — their data carries a non-commercial licence, and nothing in this product fetches it. Our fork carries only crawler code; every fact served here was read from the publisher it is attributed to.

Availability

Published 2026-09-07: the data catalog carries the measured coverage — publisher term records, the share with start dates, the share resolved to the spine — and states that national-roster completeness is unverified. The endpoint reference is the statement of what is offered; a request against the family is validated exactly as every other v2 endpoint is.

Where the values are defined

Nothing on this page restates a vocabulary. The scope, branch, status and sort values the offices endpoints accept, the list categories, and every parameter’s exact semantics live on the emitted reference pages: