Skip to main content
/v1/ responses follow a small set of structural rules. Knowing them means you can predict the shape of an endpoint you haven’t called yet. The last rule is the one guarantee that holds everywhere: the ID fields you use to cross-reference records between endpoints stay at the top level of every response, so joins across endpoints never depend on the surrounding structure.
Objects carry only the keys that have a value. A period with no end date comes back as {"start": "2020-06-01"}, one with neither bound as {} — the missing keys are absent, not null. So read period.end defensively rather than assuming both bounds exist: on Property.property_structure, active_period and mandate_period never carry both at once, and on Contracts.service_contracts most rows have only contract_period.start. The same applies to code/label pairs, where label can be missing for a present code.
Not every table applies all of these rules yet. Each data model page documents the actual structure of its tables, and the API Reference tab always shows what an endpoint returns today.