{"openapi": "3.1.0", "info": {"title": "cadastre", "version": "1", "description": "\nA manifest-versioned dataset of the national legislators of the United States,\nthe United Kingdom, Canada, Germany and France.\n\n**Every data operation needs an API key.** Send it as `Authorization: Bearer\ncad_live_...`. Swagger at `/v1/docs`, the generated schemas at\n`/v1/openapi.json` and `/openapi.json`, the public website, `/health`, and\ncontent-addressed `/photos/<sha256>` can be read without a key. Public\ndocumentation does not remove authentication from any operation it describes.\n\n**Every response comes out of one manifest.** A manifest is a pinned set of\nper-source artifacts, one for each chamber, and it is what makes a whole answer\nconsistent. The current manifest answers by default; `?manifest=<id>` reads one\nthat has already been replaced, which is how a historical question is asked. An\nartifact is immutable once sealed, so the old manifest answers exactly as it\ndid. One that retention has pruned answers 410 rather than 404: the answer\nexisted and is gone.\n\n**Each source refreshes on its own cadence.** There is no nightly build of the\nwhole dataset. A chamber is read when its own source says it is due, and a\nsource that could not be read changes nothing: the manifest goes on pinning the\nartifact that chamber already had, whole and unmodified. `/v1/meta` shows that\nas the chamber's vintage \u2014 the moment its publisher was really read \u2014 and, once\nthe vintage passes the freshness bound the source itself declares, as a warning\nnaming that chamber.\n\n**Every field states where it came from.** A member carries its values plainly\nand a sibling `provenance` map beside them, keyed by the dotted path of the\nfield: `party.name`, `contacts.0`, `identifiers.wikidata`. Each entry names the\n`kind` \u2014 source, joined, derived, inferred or undeclared \u2014 and, where there is\none, the page it was read from and the moment it was read. Nothing is ever\ncopied between artifacts, so no value is ever second-hand and no `kind` says\nthat it is.\n\n**Every refusal is `application/problem+json`** (RFC 9457) with a stable\nmachine `code` and the `request_id` of the request.\n"}, "paths": {"/v1/representatives": {"get": {"operationId": "cadastre_api_routers_representatives_list_representatives", "summary": "Search the members of every chamber", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The `next_cursor` of the previous page.", "title": "Cursor"}, "required": false, "description": "The `next_cursor` of the previous page."}, {"in": "query", "name": "limit", "schema": {"anyOf": [{"maximum": 200, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Rows per page, up to 200.", "title": "Limit"}, "required": false, "description": "Rows per page, up to 200."}, {"in": "query", "name": "country", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "ISO 3166-1 alpha-2, for example GB.", "title": "Country"}, "required": false, "description": "ISO 3166-1 alpha-2, for example GB."}, {"in": "query", "name": "person_id", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "Stable person UUID. Returns their memberships in the selected manifest.", "title": "Person Id"}, "required": false, "description": "Stable person UUID. Returns their memberships in the selected manifest."}, {"in": "query", "name": "chamber", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a chamber, for example uk-commons.", "title": "Chamber"}, "required": false, "description": "The code of a chamber, for example uk-commons."}, {"in": "query", "name": "party", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The party, as its publisher writes it.", "title": "Party"}, "required": false, "description": "The party, as its publisher writes it."}, {"in": "query", "name": "division_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a constituency.", "title": "Division Code"}, "required": false, "description": "The code of a constituency."}, {"in": "query", "name": "associated_division_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A published local constituency association, independent of legal mandate.", "title": "Associated Division Code"}, "required": false, "description": "A published local constituency association, independent of legal mandate."}, {"in": "query", "name": "mandate_basis", "schema": {"anyOf": [{"$ref": "#/components/schemas/MandateBasis"}, {"type": "null"}], "description": "How the member got their seat."}, "required": false, "description": "How the member got their seat."}, {"in": "query", "name": "gender", "schema": {"anyOf": [{"$ref": "#/components/schemas/Gender"}, {"type": "null"}], "description": "As the publisher states it."}, "required": false, "description": "As the publisher states it."}, {"in": "query", "name": "q", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Part of a display name. The spelling may be approximate.", "title": "Q"}, "required": false, "description": "Part of a display name. The spelling may be approximate."}, {"in": "query", "name": "has_contact", "schema": {"anyOf": [{"$ref": "#/components/schemas/ContactKind"}, {"type": "null"}], "description": "Only members who publish this kind of contact."}, "required": false, "description": "Only members who publish this kind of contact."}, {"in": "query", "name": "identifier", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "`scheme:value`, for example `wikidata:Q286898`.", "title": "Identifier"}, "required": false, "description": "`scheme:value`, for example `wikidata:Q286898`."}, {"in": "query", "name": "include", "schema": {"anyOf": [{"$ref": "#/components/schemas/Include"}, {"type": "null"}], "description": "Add the provenance map to every item of the list."}, "required": false, "description": "Add the provenance map to every item of the list."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RepresentativeList"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "One page of members of one manifest, ordered by display name. Walk the pages by sending back the `next_cursor` of the previous one.", "tags": ["representatives"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_representatives_list_representatives", "summary": "Search the members of every chamber", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The `next_cursor` of the previous page.", "title": "Cursor"}, "required": false, "description": "The `next_cursor` of the previous page."}, {"in": "query", "name": "limit", "schema": {"anyOf": [{"maximum": 200, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Rows per page, up to 200.", "title": "Limit"}, "required": false, "description": "Rows per page, up to 200."}, {"in": "query", "name": "country", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "ISO 3166-1 alpha-2, for example GB.", "title": "Country"}, "required": false, "description": "ISO 3166-1 alpha-2, for example GB."}, {"in": "query", "name": "person_id", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "Stable person UUID. Returns their memberships in the selected manifest.", "title": "Person Id"}, "required": false, "description": "Stable person UUID. Returns their memberships in the selected manifest."}, {"in": "query", "name": "chamber", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a chamber, for example uk-commons.", "title": "Chamber"}, "required": false, "description": "The code of a chamber, for example uk-commons."}, {"in": "query", "name": "party", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The party, as its publisher writes it.", "title": "Party"}, "required": false, "description": "The party, as its publisher writes it."}, {"in": "query", "name": "division_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a constituency.", "title": "Division Code"}, "required": false, "description": "The code of a constituency."}, {"in": "query", "name": "associated_division_code", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A published local constituency association, independent of legal mandate.", "title": "Associated Division Code"}, "required": false, "description": "A published local constituency association, independent of legal mandate."}, {"in": "query", "name": "mandate_basis", "schema": {"anyOf": [{"$ref": "#/components/schemas/MandateBasis"}, {"type": "null"}], "description": "How the member got their seat."}, "required": false, "description": "How the member got their seat."}, {"in": "query", "name": "gender", "schema": {"anyOf": [{"$ref": "#/components/schemas/Gender"}, {"type": "null"}], "description": "As the publisher states it."}, "required": false, "description": "As the publisher states it."}, {"in": "query", "name": "q", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Part of a display name. The spelling may be approximate.", "title": "Q"}, "required": false, "description": "Part of a display name. The spelling may be approximate."}, {"in": "query", "name": "has_contact", "schema": {"anyOf": [{"$ref": "#/components/schemas/ContactKind"}, {"type": "null"}], "description": "Only members who publish this kind of contact."}, "required": false, "description": "Only members who publish this kind of contact."}, {"in": "query", "name": "identifier", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "`scheme:value`, for example `wikidata:Q286898`.", "title": "Identifier"}, "required": false, "description": "`scheme:value`, for example `wikidata:Q286898`."}, {"in": "query", "name": "include", "schema": {"anyOf": [{"$ref": "#/components/schemas/Include"}, {"type": "null"}], "description": "Add the provenance map to every item of the list."}, "required": false, "description": "Add the provenance map to every item of the list."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RepresentativeList"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "One page of members of one manifest, ordered by display name. Walk the pages by sending back the `next_cursor` of the previous one.", "tags": ["representatives"], "security": [{"ApiKeyAuth": []}]}}, "/v1/representatives/{representative_id}": {"get": {"operationId": "cadastre_api_routers_representatives_get_representative", "summary": "One member, whole", "parameters": [{"in": "path", "name": "representative_id", "schema": {"format": "uuid", "title": "Representative Id", "type": "string"}, "required": true}, {"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RepresentativeDetail"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "Everything this project holds about one member, and a sibling `provenance` map that says where each field came from, keyed by its dotted path.", "tags": ["representatives"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_representatives_get_representative", "summary": "One member, whole", "parameters": [{"in": "path", "name": "representative_id", "schema": {"format": "uuid", "title": "Representative Id", "type": "string"}, "required": true}, {"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RepresentativeDetail"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "Everything this project holds about one member, and a sibling `provenance` map that says where each field came from, keyed by its dotted path.", "tags": ["representatives"], "security": [{"ApiKeyAuth": []}]}}, "/v1/chambers": {"get": {"operationId": "cadastre_api_routers_chambers_list_chambers", "summary": "Every chamber of a manifest", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChamberList"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["chambers"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_chambers_list_chambers", "summary": "Every chamber of a manifest", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChamberList"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["chambers"], "security": [{"ApiKeyAuth": []}]}}, "/v1/chambers/{code}": {"get": {"operationId": "cadastre_api_routers_chambers_get_chamber", "summary": "One chamber, its registry and its seat accounting", "parameters": [{"in": "path", "name": "code", "schema": {"title": "Code", "type": "string"}, "required": true}, {"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChamberDetail"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["chambers"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_chambers_get_chamber", "summary": "One chamber, its registry and its seat accounting", "parameters": [{"in": "path", "name": "code", "schema": {"title": "Code", "type": "string"}, "required": true}, {"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ChamberDetail"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["chambers"], "security": [{"ApiKeyAuth": []}]}}, "/v1/divisions": {"get": {"operationId": "cadastre_api_routers_divisions_list_divisions", "summary": "Search the entries of every registry", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The `next_cursor` of the previous page.", "title": "Cursor"}, "required": false, "description": "The `next_cursor` of the previous page."}, {"in": "query", "name": "limit", "schema": {"anyOf": [{"maximum": 200, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Rows per page, up to 200.", "title": "Limit"}, "required": false, "description": "Rows per page, up to 200."}, {"in": "query", "name": "chamber", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a chamber.", "title": "Chamber"}, "required": false, "description": "The code of a chamber."}, {"in": "query", "name": "tier", "schema": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "description": "0 is the country root.", "title": "Tier"}, "required": false, "description": "0 is the country root."}, {"in": "query", "name": "type", "schema": {"anyOf": [{"$ref": "#/components/schemas/DivisionType"}, {"type": "null"}], "description": "What kind of entry."}, "required": false, "description": "What kind of entry."}, {"in": "query", "name": "q", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Part of the name, or the whole code.", "title": "Q"}, "required": false, "description": "Part of the name, or the whole code."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DivisionList"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["divisions"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_divisions_list_divisions", "summary": "Search the entries of every registry", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}, {"in": "query", "name": "cursor", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The `next_cursor` of the previous page.", "title": "Cursor"}, "required": false, "description": "The `next_cursor` of the previous page."}, {"in": "query", "name": "limit", "schema": {"anyOf": [{"maximum": 200, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Rows per page, up to 200.", "title": "Limit"}, "required": false, "description": "Rows per page, up to 200."}, {"in": "query", "name": "chamber", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a chamber.", "title": "Chamber"}, "required": false, "description": "The code of a chamber."}, {"in": "query", "name": "tier", "schema": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "description": "0 is the country root.", "title": "Tier"}, "required": false, "description": "0 is the country root."}, {"in": "query", "name": "type", "schema": {"anyOf": [{"$ref": "#/components/schemas/DivisionType"}, {"type": "null"}], "description": "What kind of entry."}, "required": false, "description": "What kind of entry."}, {"in": "query", "name": "q", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Part of the name, or the whole code.", "title": "Q"}, "required": false, "description": "Part of the name, or the whole code."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DivisionList"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["divisions"], "security": [{"ApiKeyAuth": []}]}}, "/v1/divisions/{chamber}/{code}": {"get": {"operationId": "cadastre_api_routers_divisions_get_division", "summary": "One entry, and the members who hold it", "parameters": [{"in": "path", "name": "chamber", "schema": {"title": "Chamber", "type": "string"}, "required": true}, {"in": "path", "name": "code", "schema": {"title": "Code", "type": "string"}, "required": true}, {"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DivisionDetail"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["divisions"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_divisions_get_division", "summary": "One entry, and the members who hold it", "parameters": [{"in": "path", "name": "chamber", "schema": {"title": "Chamber", "type": "string"}, "required": true}, {"in": "path", "name": "code", "schema": {"title": "Code", "type": "string"}, "required": true}, {"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DivisionDetail"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["divisions"], "security": [{"ApiKeyAuth": []}]}}, "/v1/meta": {"get": {"operationId": "cadastre_api_routers_meta_get_meta", "summary": "The state of the dataset, chamber by chamber", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MetaOut"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["meta"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_meta_get_meta", "summary": "The state of the dataset, chamber by chamber", "parameters": [{"in": "query", "name": "manifest", "schema": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "required": false, "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MetaOut"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "tags": ["meta"], "security": [{"ApiKeyAuth": []}]}}, "/v1/lookup": {"post": {"operationId": "cadastre_api_routers_lookup_lookup", "summary": "Resolve an input to the members who represent it", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LookupOut"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "Send exactly one of `postcode` or `point`, and a `country`. The input travels in the body and is never stored, logged or echoed. The response names the manifest, how the input resolved, the divisions it resolved to, and the members who hold them.", "tags": ["lookup"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/LookupIn"}}}, "required": true}, "security": [{"ApiKeyAuth": []}]}}, "/v1/lookup/requirements": {"get": {"operationId": "cadastre_api_routers_lookup_requirements", "summary": "The per-country input contract", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequirementsOut"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "What each country resolves, and how: the modes it accepts, whether each makes an external call, and how complete its local data is. Generated from the same declarations the lookup validates against.", "tags": ["lookup"], "security": [{"ApiKeyAuth": []}]}, "head": {"operationId": "cadastre_api_routers_lookup_requirements", "summary": "The per-country input contract", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/RequirementsOut"}}}}, "401": {"description": "No API key, or a key this service does not accept.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "403": {"description": "The API key was revoked.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "404": {"description": "No endpoint at this path, or nothing of this kind in this manifest.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "405": {"description": "This endpoint does not answer that method.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "410": {"description": "The manifest named by `?manifest=` was pruned; its artifacts are gone. Only the endpoints that take `?manifest=` can answer it.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "422": {"description": "A parameter was refused; `errors` says which one and why.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "429": {"description": "This key spent its rate. `Retry-After` says when to come back.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "500": {"description": "This service failed to answer.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "503": {"description": "A service this API depends on is not answering. Try again shortly.", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}}, "description": "What each country resolves, and how: the modes it accepts, whether each makes an external call, and how complete its local data is. Generated from the same declarations the lookup validates against.", "tags": ["lookup"], "security": [{"ApiKeyAuth": []}]}}}, "components": {"schemas": {"ContactKind": {"description": "How a person reaches a member, in the words the API uses.\n\nThe words say what the caller is about to do. `letter` and `visit` are the\ntwo that need a place rather than a value.", "enum": ["email", "call", "letter", "visit", "fax", "contact_form"], "title": "ContactKind", "type": "string"}, "Gender": {"description": "The gender a publisher states.\n\nNULL alone can mean an explicit null or no selected statement; the field's\nprovenance distinguishes them. Gender is never guessed from a name or photo.", "enum": ["female", "male", "non_binary", "other"], "title": "Gender", "type": "string"}, "Include": {"description": "What a caller can ask a list to add to each item.\n\nThe provenance map of a member is bigger than the member. A list of two\nhundred carries it only when it is asked for.", "enum": ["provenance"], "title": "Include", "type": "string"}, "MandateBasis": {"description": "How a member came by their seat.\n\nThe first three are elected routes, told apart by the geography of the\ncontest. `APPOINTED` is conferred by an appointing authority. `DESIGNATED`\nbelongs to an institution that fills the seat. `EX_OFFICIO` is held by\nvirtue of another office. `HEREDITARY` is held by heritable status.\n\nThe boundary between `DISTRICT` with an indirect franchise and `DESIGNATED`\nis the tenure test. A member who holds a personal term that survives a\nchange of the body that chose them is elected. A member whose seat tracks\nthe composition of that body, and who is replaced when it renews, is\ndesignated.", "enum": ["district", "regional_list", "national_list", "appointed", "designated", "ex_officio", "hereditary"], "title": "MandateBasis", "type": "string"}, "RepresentativeQuery": {"description": "Everything a caller can ask of a list of members.", "properties": {"manifest": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The `next_cursor` of the previous page.", "title": "Cursor"}, "limit": {"anyOf": [{"maximum": 200, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Rows per page, up to 200.", "title": "Limit"}, "country": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "ISO 3166-1 alpha-2, for example GB.", "title": "Country"}, "person_id": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "Stable person UUID. Returns their memberships in the selected manifest.", "title": "Person Id"}, "chamber": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a chamber, for example uk-commons.", "title": "Chamber"}, "party": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The party, as its publisher writes it.", "title": "Party"}, "division_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a constituency.", "title": "Division Code"}, "associated_division_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A published local constituency association, independent of legal mandate.", "title": "Associated Division Code"}, "mandate_basis": {"anyOf": [{"$ref": "#/components/schemas/MandateBasis"}, {"type": "null"}], "description": "How the member got their seat."}, "gender": {"anyOf": [{"$ref": "#/components/schemas/Gender"}, {"type": "null"}], "description": "As the publisher states it."}, "q": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Part of a display name. The spelling may be approximate.", "title": "Q"}, "has_contact": {"anyOf": [{"$ref": "#/components/schemas/ContactKind"}, {"type": "null"}], "description": "Only members who publish this kind of contact."}, "identifier": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "`scheme:value`, for example `wikidata:Q286898`.", "title": "Identifier"}, "include": {"anyOf": [{"$ref": "#/components/schemas/Include"}, {"type": "null"}], "description": "Add the provenance map to every item of the list."}}, "title": "RepresentativeQuery", "type": "object"}, "ManifestRef": {"description": "The manifest a response was read out of.", "properties": {"id": {"format": "uuid", "title": "Id", "type": "string"}, "published_at": {"format": "date-time", "title": "Published At", "type": "string"}, "is_current": {"title": "Is Current", "type": "boolean"}}, "required": ["id", "published_at", "is_current"], "title": "ManifestRef", "type": "object"}, "RepresentativeList": {"description": "One page of members.", "properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "total": {"title": "Total", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/RepresentativeSummary"}, "title": "Items", "type": "array"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["manifest", "total", "items", "next_cursor"], "title": "RepresentativeList", "type": "object"}, "RepresentativeSummary": {"additionalProperties": true, "type": "object"}, "ManifestQuery": {"description": "The parameter every endpoint of this API takes.", "properties": {"manifest": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}}, "title": "ManifestQuery", "type": "object"}, "ContactOut": {"description": "One way to reach a member.\n\nThe four scalar media carry a `value`. The two place media carry an\n`address` and, where the publisher named it, a `label`; a letter and a\nvisit both need a place and not a string.", "properties": {"kind": {"title": "Kind", "type": "string"}, "value": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Value"}, "label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Label"}, "address": {"anyOf": [{"additionalProperties": true, "type": "object"}, {"type": "null"}], "title": "Address"}}, "required": ["kind"], "title": "ContactOut", "type": "object"}, "LocalAssociationOut": {"description": "A published local link; not the geography that confers a legal mandate.", "properties": {"division_code": {"title": "Division Code", "type": "string"}, "division_name": {"title": "Division Name", "type": "string"}}, "required": ["division_code", "division_name"], "title": "LocalAssociationOut", "type": "object"}, "PartyOut": {"description": "The party of a member, and the group it sits with.", "properties": {"name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Name"}, "group": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Group"}}, "required": ["name", "group"], "title": "PartyOut", "type": "object"}, "RepresentativeDetail": {"properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "representative": {"$ref": "#/components/schemas/RepresentativeOut"}}, "required": ["manifest", "representative"], "title": "RepresentativeDetail", "type": "object"}, "RepresentativeOut": {"description": "A member, whole.", "properties": {"id": {"description": "This chamber membership row in its source artifact.", "format": "uuid", "title": "Id", "type": "string"}, "person_id": {"description": "Stable person identity recorded when this artifact was projected. An explicit identity correction may assign a different person in later artifacts.", "format": "uuid", "title": "Person Id", "type": "string"}, "manifest_id": {"format": "uuid", "title": "Manifest Id", "type": "string"}, "names": {"additionalProperties": {"type": "string"}, "title": "Names", "type": "object"}, "name": {"title": "Name", "type": "string"}, "chamber": {"title": "Chamber", "type": "string"}, "country": {"title": "Country", "type": "string"}, "mandate_basis": {"title": "Mandate Basis", "type": "string"}, "division_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Division Code"}, "division_name": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Division Name"}, "party": {"$ref": "#/components/schemas/PartyOut"}, "gender": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Gender"}, "website": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Website"}, "photo_url": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Photo Url"}, "photo_attribution": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Photo Attribution"}, "preferred_language": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Preferred Language"}, "salutation": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Salutation"}, "contacts": {"items": {"$ref": "#/components/schemas/ContactOut"}, "title": "Contacts", "type": "array"}, "social": {"additionalProperties": {"$ref": "#/components/schemas/SocialAccount"}, "title": "Social", "type": "object"}, "identifiers": {"additionalProperties": {"type": "string"}, "title": "Identifiers", "type": "object"}, "terms": {"items": {"$ref": "#/components/schemas/TermOut"}, "title": "Terms", "type": "array"}, "local_associations": {"items": {"$ref": "#/components/schemas/LocalAssociationOut"}, "title": "Local Associations", "type": "array"}, "provenance": {"additionalProperties": {"additionalProperties": true, "type": "object"}, "title": "Provenance", "type": "object"}}, "required": ["id", "person_id", "manifest_id", "names", "name", "chamber", "country", "mandate_basis", "division_code", "division_name", "party", "gender", "website", "photo_url", "photo_attribution", "preferred_language", "salutation", "contacts", "social", "identifiers", "terms", "provenance"], "title": "RepresentativeOut", "type": "object"}, "SocialAccount": {"description": "One account of a member on one network.", "properties": {"url": {"title": "Url", "type": "string"}, "handle": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Handle"}}, "required": ["url", "handle"], "title": "SocialAccount", "type": "object"}, "TermOut": {"description": "One period a member sat in their chamber.", "properties": {"started_on": {"format": "date", "title": "Started On", "type": "string"}, "ended_on": {"anyOf": [{"format": "date", "type": "string"}, {"type": "null"}], "title": "Ended On"}, "label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Label"}}, "required": ["started_on", "ended_on", "label"], "title": "TermOut", "type": "object"}, "ChamberList": {"properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "items": {"items": {"$ref": "#/components/schemas/ChamberOut"}, "title": "Items", "type": "array"}}, "required": ["manifest", "items"], "title": "ChamberList", "type": "object"}, "ChamberOut": {"description": "One chamber of one manifest.", "properties": {"code": {"title": "Code", "type": "string"}, "country": {"title": "Country", "type": "string"}, "house": {"title": "House", "type": "string"}, "continuous_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Continuous Reason"}, "manifest_id": {"format": "uuid", "title": "Manifest Id", "type": "string"}, "registry": {"$ref": "#/components/schemas/RegistryOut"}, "seats": {"$ref": "#/components/schemas/SeatAccountingOut"}, "classes": {"items": {"$ref": "#/components/schemas/MandateClassOut"}, "title": "Classes", "type": "array"}, "pools": {"items": {"$ref": "#/components/schemas/SeatPoolOut"}, "title": "Pools", "type": "array"}}, "required": ["code", "country", "house", "continuous_reason", "manifest_id", "registry", "seats", "classes", "pools"], "title": "ChamberOut", "type": "object"}, "MandateClassOut": {"description": "One route into a chamber, and the mode it accounts in.", "properties": {"basis": {"title": "Basis", "type": "string"}, "label": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Label"}, "franchise": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Franchise"}, "tiers": {"anyOf": [{"items": {"type": "integer"}, "type": "array"}, {"type": "null"}], "title": "Tiers"}, "seat_mode": {"title": "Seat Mode", "type": "string"}, "pool_seats": {"title": "Pool Seats", "type": "integer"}, "max_seats": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Max Seats"}, "open": {"title": "Open", "type": "boolean"}, "vacancy_allowance": {"title": "Vacancy Allowance", "type": "integer"}, "members": {"title": "Members", "type": "integer"}}, "required": ["basis", "label", "franchise", "tiers", "seat_mode", "pool_seats", "max_seats", "open", "vacancy_allowance", "members"], "title": "MandateClassOut", "type": "object"}, "RegistryOut": {"description": "The electoral geography of a chamber, as it was attested.", "properties": {"boundary_set": {"title": "Boundary Set", "type": "string"}, "attested_by": {"title": "Attested By", "type": "string"}, "attested_on": {"format": "date", "title": "Attested On", "type": "string"}, "max_age_days": {"title": "Max Age Days", "type": "integer"}, "statutory_size": {"anyOf": [{"$ref": "#/components/schemas/StatutorySizeOut"}, {"type": "null"}]}, "size_proof": {"anyOf": [{"$ref": "#/components/schemas/SizeProofOut"}, {"type": "null"}]}, "notes": {"title": "Notes", "type": "string"}}, "required": ["boundary_set", "attested_by", "attested_on", "max_age_days", "statutory_size", "size_proof", "notes"], "title": "RegistryOut", "type": "object"}, "SeatAccountingOut": {"description": "What the registry accounts for, and what the manifest holds.", "properties": {"closed_total": {"title": "Closed Total", "type": "integer"}, "overhang_allowance": {"title": "Overhang Allowance", "type": "integer"}, "members": {"title": "Members", "type": "integer"}, "divisions": {"title": "Divisions", "type": "integer"}}, "required": ["closed_total", "overhang_allowance", "members", "divisions"], "title": "SeatAccountingOut", "type": "object"}, "SeatPoolOut": {"description": "Seats that the count splits between classes.", "properties": {"bases": {"items": {"type": "string"}, "title": "Bases", "type": "array"}, "seats": {"title": "Seats", "type": "integer"}, "reason": {"title": "Reason", "type": "string"}}, "required": ["bases", "seats", "reason"], "title": "SeatPoolOut", "type": "object"}, "SizeProofOut": {"description": "A dated observation of a published membership count.", "properties": {"count": {"title": "Count", "type": "integer"}, "attested_by": {"title": "Attested By", "type": "string"}, "attested_on": {"format": "date", "title": "Attested On", "type": "string"}, "max_age_days": {"title": "Max Age Days", "type": "integer"}}, "required": ["count", "attested_by", "attested_on", "max_age_days"], "title": "SizeProofOut", "type": "object"}, "StatutorySizeOut": {"description": "The whole-chamber number an instrument fixes, where one exists.", "properties": {"seats": {"title": "Seats", "type": "integer"}, "instrument": {"title": "Instrument", "type": "string"}, "as_of": {"format": "date", "title": "As Of", "type": "string"}}, "required": ["seats", "instrument", "as_of"], "title": "StatutorySizeOut", "type": "object"}, "ChamberDetail": {"properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "chamber": {"$ref": "#/components/schemas/ChamberOut"}}, "required": ["manifest", "chamber"], "title": "ChamberDetail", "type": "object"}, "DivisionQuery": {"description": "Everything a caller can ask of a list of registry entries.", "properties": {"manifest": {"anyOf": [{"format": "uuid", "type": "string"}, {"type": "null"}], "description": "The id of a published manifest. Omit it to read the current one. A manifest that is not published, or does not exist, is 404; one that retention has pruned is 410.", "title": "Manifest"}, "cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The `next_cursor` of the previous page.", "title": "Cursor"}, "limit": {"anyOf": [{"maximum": 200, "minimum": 1, "type": "integer"}, {"type": "null"}], "description": "Rows per page, up to 200.", "title": "Limit"}, "chamber": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "The code of a chamber.", "title": "Chamber"}, "tier": {"anyOf": [{"minimum": 0, "type": "integer"}, {"type": "null"}], "description": "0 is the country root.", "title": "Tier"}, "type": {"anyOf": [{"$ref": "#/components/schemas/DivisionType"}, {"type": "null"}], "description": "What kind of entry."}, "q": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "Part of the name, or the whole code.", "title": "Q"}}, "title": "DivisionQuery", "type": "object"}, "DivisionType": {"description": "What kind of thing a registry entry is.\n\n`NATIONAL` belongs to the tier-0 root alone. `PANEL` (a vocational\nconstituency), `INSTITUTION` (university seats) and `BODY` (a designating\nparliament) are not geographic: postcode/point lookup never reaches them, and a\ndivision picker resolves them instead.", "enum": ["national", "district", "state", "region", "province", "panel", "institution", "body"], "title": "DivisionType", "type": "string"}, "DivisionList": {"properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "total": {"title": "Total", "type": "integer"}, "items": {"items": {"$ref": "#/components/schemas/DivisionSummary"}, "title": "Items", "type": "array"}, "next_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Next Cursor"}}, "required": ["manifest", "total", "items", "next_cursor"], "title": "DivisionList", "type": "object"}, "DivisionSummary": {"description": "One entry of a registry.", "properties": {"chamber": {"title": "Chamber", "type": "string"}, "code": {"title": "Code", "type": "string"}, "name": {"title": "Name", "type": "string"}, "tier": {"title": "Tier", "type": "integer"}, "type": {"title": "Type", "type": "string"}, "parent_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Code"}, "seats": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Seats"}, "basis": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Basis"}, "code_provenance": {"title": "Code Provenance", "type": "string"}, "members": {"title": "Members", "type": "integer"}}, "required": ["chamber", "code", "name", "tier", "type", "parent_code", "seats", "basis", "code_provenance", "members"], "title": "DivisionSummary", "type": "object"}, "DivisionDetail": {"properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "division": {"$ref": "#/components/schemas/DivisionOut"}}, "required": ["manifest", "division"], "title": "DivisionDetail", "type": "object"}, "DivisionOut": {"description": "One entry, and the members who hold it.", "properties": {"manifest_id": {"format": "uuid", "title": "Manifest Id", "type": "string"}, "chamber": {"title": "Chamber", "type": "string"}, "code": {"title": "Code", "type": "string"}, "name": {"title": "Name", "type": "string"}, "tier": {"title": "Tier", "type": "integer"}, "type": {"title": "Type", "type": "string"}, "parent_code": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Parent Code"}, "seats": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Seats"}, "basis": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Basis"}, "code_provenance": {"title": "Code Provenance", "type": "string"}, "members": {"items": {"$ref": "#/components/schemas/RepresentativeSummary"}, "title": "Members", "type": "array"}}, "required": ["manifest_id", "chamber", "code", "name", "tier", "type", "parent_code", "seats", "basis", "code_provenance", "members"], "title": "DivisionOut", "type": "object"}, "ApiInfoOut": {"properties": {"version": {"title": "Version", "type": "string"}, "docs": {"title": "Docs", "type": "string"}, "openapi": {"title": "Openapi", "type": "string"}, "contact": {"title": "Contact", "type": "string"}}, "required": ["version", "docs", "openapi", "contact"], "title": "ApiInfoOut", "type": "object"}, "ArtifactOut": {"description": "One chamber of the manifest: which artifact serves it, and how old it is.\n\nThere is no global build behind this, and that is the whole reason the shape\nis per chamber. Each source refreshes on its own cadence, and each refresh\nthat read its publisher sealed an artifact of its own; the manifest pins one\nper chamber, and a chamber whose last refresh failed or found nothing due\ngoes on being served out of the artifact it was already pinned to.\n\n`vintage` is therefore the fact a reader wants, and `age_seconds` is the\nsame fact in the unit an alert is written in: the moment the publisher was\nreally read, never the moment this manifest was assembled. `stale` compares\nthat age against `stale_after_seconds`, which is the bound the source itself\ndeclares \u2014 a nightly source is late after two nights, a quarterly gazette is\nnot late until the quarter is over \u2014 so a chamber that is ageing is measured\nagainst its own clock and not against a number in a settings file.\n\n`last_refresh_status` and `last_refresh_error` describe the refresh that\nproduced this artifact, and they are empty on an artifact no run row names.\nA later attempt at the same chamber that failed opened an artifact of its\nown, or none at all, and it is not this one: a publisher that stopped\nanswering shows up here as a vintage that ages and a sentence in\n`warnings`, and never as a status word that flips under a chamber that is\nstill being served correctly.", "properties": {"source_code": {"title": "Source Code", "type": "string"}, "chamber_code": {"title": "Chamber Code", "type": "string"}, "artifact_id": {"format": "uuid", "title": "Artifact Id", "type": "string"}, "vintage": {"format": "date-time", "title": "Vintage", "type": "string"}, "age_seconds": {"title": "Age Seconds", "type": "integer"}, "digest": {"title": "Digest", "type": "string"}, "sealed_at": {"format": "date-time", "title": "Sealed At", "type": "string"}, "stale": {"title": "Stale", "type": "boolean"}, "stale_after_seconds": {"title": "Stale After Seconds", "type": "integer"}, "last_refresh_status": {"title": "Last Refresh Status", "type": "string"}, "last_refresh_error": {"title": "Last Refresh Error", "type": "string"}}, "required": ["source_code", "chamber_code", "artifact_id", "vintage", "age_seconds", "digest", "sealed_at", "stale", "stale_after_seconds", "last_refresh_status", "last_refresh_error"], "title": "ArtifactOut", "type": "object"}, "ChamberCountOut": {"properties": {"chamber": {"title": "Chamber", "type": "string"}, "country": {"title": "Country", "type": "string"}, "members": {"title": "Members", "type": "integer"}}, "required": ["chamber", "country", "members"], "title": "ChamberCountOut", "type": "object"}, "GateOut": {"description": "One gate, what it decided, and what it decided it about.\n\nThe gates come in two families and this shape carries both, because a reader\nof `/v1/meta` wants one list and not two. `subject` tells them apart: it is\n`manifest` for a cross-source gate, which judged the assembled set and\ndecided whether it could be published at all, and it is a chamber code for a\nper-source gate, which judged that chamber's artifact and decided whether it\ncould be pinned.", "properties": {"gate_code": {"title": "Gate Code", "type": "string"}, "subject": {"title": "Subject", "type": "string"}, "passed": {"title": "Passed", "type": "boolean"}, "failed_chambers": {"items": {"type": "string"}, "title": "Failed Chambers", "type": "array"}, "evaluated_at": {"format": "date-time", "title": "Evaluated At", "type": "string"}}, "required": ["gate_code", "subject", "passed", "failed_chambers", "evaluated_at"], "title": "GateOut", "type": "object"}, "MetaOut": {"description": "The state of the dataset, chamber by chamber.\n\n`age_seconds` is the age of the manifest \u2014 how long ago the pointer was\ngiven this set of pins \u2014 and it is deliberately not the age of the data. A\nmanifest published this morning can serve a chamber that was last read a\nweek ago, because that chamber's source has not answered since. `artifacts`\ncarries the age that matters, per chamber, and `warnings` states in one\nsentence per chamber which of them are past the bound their source declared.", "properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "git_sha": {"title": "Git Sha", "type": "string"}, "age_seconds": {"title": "Age Seconds", "type": "integer"}, "artifacts": {"items": {"$ref": "#/components/schemas/ArtifactOut"}, "title": "Artifacts", "type": "array"}, "counts": {"items": {"$ref": "#/components/schemas/ChamberCountOut"}, "title": "Counts", "type": "array"}, "gates": {"items": {"$ref": "#/components/schemas/GateOut"}, "title": "Gates", "type": "array"}, "warnings": {"items": {"type": "string"}, "title": "Warnings", "type": "array"}, "api": {"$ref": "#/components/schemas/ApiInfoOut"}}, "required": ["manifest", "git_sha", "age_seconds", "artifacts", "counts", "gates", "warnings", "api"], "title": "MetaOut", "type": "object"}, "LookupDivisionOut": {"description": "One division an input resolved to.", "properties": {"chamber": {"title": "Chamber", "type": "string"}, "code": {"title": "Code", "type": "string"}, "name": {"title": "Name", "type": "string"}, "tier": {"title": "Tier", "type": "integer"}, "type": {"title": "Type", "type": "string"}}, "required": ["chamber", "code", "name", "tier", "type"], "title": "LookupDivisionOut", "type": "object"}, "LookupLegislatureOut": {"description": "All geographically relevant members of one legislature.", "properties": {"chamber": {"title": "Chamber", "type": "string"}, "divisions": {"items": {"$ref": "#/components/schemas/LookupDivisionOut"}, "title": "Divisions", "type": "array"}, "representatives": {"items": {"$ref": "#/components/schemas/RepresentativeOut"}, "title": "Representatives", "type": "array"}}, "required": ["chamber", "divisions", "representatives"], "title": "LookupLegislatureOut", "type": "object"}, "LookupOut": {"description": "The answer to one lookup: where the input resolved, and to whom.", "properties": {"manifest": {"$ref": "#/components/schemas/ManifestRef"}, "resolution": {"$ref": "#/components/schemas/ResolutionOut"}, "legislatures": {"items": {"$ref": "#/components/schemas/LookupLegislatureOut"}, "title": "Legislatures", "type": "array"}, "warnings": {"items": {"type": "string"}, "title": "Warnings", "type": "array"}}, "required": ["manifest", "resolution", "legislatures", "warnings"], "title": "LookupOut", "type": "object"}, "ResolutionOut": {"description": "How one input resolved.\n\n`input_echo` is always null. It is a field and not an absence so that a\nreader sees the guarantee stated: this service resolved your input and did\nnot keep it, and it does not hand it back.", "properties": {"method": {"title": "Method", "type": "string"}, "confidence": {"title": "Confidence", "type": "string"}, "external_calls": {"title": "External Calls", "type": "integer"}, "input_echo": {"title": "Input Echo", "type": "null"}}, "required": ["method", "confidence", "external_calls"], "title": "ResolutionOut", "type": "object"}, "LookupIn": {"additionalProperties": false, "description": "One lookup request. Exactly one of the two inputs is sent.\n\nThe input is personal data, so it travels here in the body and never in a\nquery string, where it would leak into an access log and a trace. The handler\nchecks that exactly one mode is present rather than a schema validator,\nbecause a schema error would carry the whole body \u2014 the input included \u2014 into\nthe refusal it produces.", "properties": {"country": {"title": "Country", "type": "string"}, "postcode": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Postcode"}, "point": {"anyOf": [{"$ref": "#/components/schemas/PointIn"}, {"type": "null"}]}, "chambers": {"anyOf": [{"items": {"type": "string"}, "type": "array"}, {"type": "null"}], "title": "Chambers"}}, "required": ["country"], "title": "LookupIn", "type": "object"}, "PointIn": {"additionalProperties": false, "description": "A point, in WGS 84 degrees.", "properties": {"lat": {"title": "Lat", "type": "number"}, "lng": {"title": "Lng", "type": "number"}}, "required": ["lat", "lng"], "title": "PointIn", "type": "object"}, "CountryReqOut": {"description": "What one country resolves, and how.", "properties": {"country": {"title": "Country", "type": "string"}, "preferred_input": {"title": "Preferred Input", "type": "string"}, "selected_address_mode": {"default": "point", "title": "Selected Address Mode", "type": "string"}, "address_selection": {"default": "Select an address in the frontend, then submit country and point only. Never submit a postcode centre as an address.", "title": "Address Selection", "type": "string"}, "chambers": {"items": {"type": "string"}, "title": "Chambers", "type": "array"}, "modes": {"items": {"$ref": "#/components/schemas/ModeReqOut"}, "title": "Modes", "type": "array"}}, "required": ["country", "preferred_input", "chambers", "modes"], "title": "CountryReqOut", "type": "object"}, "ModeReqOut": {"description": "What one country promises about one mode.", "properties": {"mode": {"title": "Mode", "type": "string"}, "external_calls": {"title": "External Calls", "type": "string"}, "coverage": {"title": "Coverage", "type": "string"}, "available": {"title": "Available", "type": "boolean"}, "unavailable_reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Unavailable Reason"}}, "required": ["mode", "external_calls", "coverage", "available"], "title": "ModeReqOut", "type": "object"}, "RequirementsOut": {"description": "The per-country input contract, generated from the resolver declarations.", "properties": {"countries": {"items": {"$ref": "#/components/schemas/CountryReqOut"}, "title": "Countries", "type": "array"}}, "required": ["countries"], "title": "RequirementsOut", "type": "object"}, "Problem": {"title": "Problem", "description": "A refusal, in the shape of RFC 9457. Every refusal of this API takes this shape and is served as application/problem+json. Branch on `code`, which is a stable machine word that never changes meaning inside version 1.", "type": "object", "required": ["type", "title", "status", "detail", "instance", "code"], "properties": {"type": {"type": "string", "format": "uri", "description": "A page describing this code, under https://adsumdata.com/problems/."}, "title": {"type": "string", "description": "What went wrong, in one line."}, "status": {"type": "integer", "description": "The HTTP status of this response."}, "detail": {"type": "string", "description": "What went wrong here, and what to do."}, "instance": {"type": "string", "description": "The path of the request. Never its query string."}, "code": {"type": "string", "description": "The machine word a client branches on.", "enum": ["missing_api_key", "invalid_api_key", "revoked_api_key", "authentication_unavailable", "data_unavailable", "manifest_unavailable", "invalid_input", "not_found", "release_pruned", "method_not_allowed", "rate_limited", "internal_error", "unsupported_country", "mode_unavailable_for_region", "unknown_postcode", "point_not_found", "ambiguous_input", "incomplete_postcode", "lookup_unavailable"]}, "request_id": {"type": "string", "description": "The id of this request. Quote it when reporting a problem."}, "next_action": {"type": "string", "enum": ["select_address", "select_another_address", "correct_postcode"], "description": "Correct a postcode or submit a selected address coordinate."}, "candidates": {"type": "array", "items": {"type": "string"}, "description": "Constituency codes for context only, never selectable answers."}}}}, "securitySchemes": {"ApiKeyAuth": {"type": "http", "scheme": "bearer"}}}, "servers": []}