What it is not
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_ofread and counted inmeta.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.
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.
entity_id you selected above.
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).
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:- Value reference — every closed vocabulary, with what each value means.
- Parameter reference — every parameter by endpoint, including
officeandoffice_as_of. - Endpoint reference — the offered surface.

