{"id":"fe450358-7aef-40c7-8f95-78712baa1548","type":"API","name":"Commons Votes API","slug":"commons-votes-api","description":"An API that allows querying of Commons Votes data.","free_access_class":"FREE_NO_AUTH","auth_type":"NONE","homepage_url":"https://www.parliament.uk/","docs_url":null,"repo_url":"https://commonsvotes-api.parliament.uk/swagger/docs/v1","status":"ACTIVE","verification_state":"VERIFIED","tags":["elections"],"logo_url":"https://www.google.com/s2/favicons?sz=64&domain=parliament.uk","primary_source_url":"https://commonsvotes-api.parliament.uk/swagger/docs/v1","extraction_confidence":"0.70","created_at":"2026-01-01T19:42:19.393Z","updated_at":"2026-08-16T10:41:29.245Z","last_verified_at":"2026-08-16T10:41:29.245Z","deprecated_at":null,"ranking_score":65,"last_ranked_at":"2026-08-08T23:24:04.112Z","last_seen_at":null,"last_validated_at":null,"last_uptime_at":"2026-08-06T17:44:57.063Z","search_vector":"'access':21B,64B,105B 'accessible':148B 'allow':7B,32B 'allows':91B,116B 'an':88B,97B 'and':131B,145B,161B 'api':3A,5B,14B,87A,89B,98B 'at':141B 'authent':66B 'authentication':150B 'be':153B 'behaviour':81B,165B 'by':100B 'can':152B 'common':1A,10B,30B,56B 'commons':85A,94B,114B,140B 'cover':52B 'covers':136B 'data':12B,51B,96B,135B 'date':46B 'dates':130B 'decis':75B 'decision':159B 'decision-mak':74B 'decision-making':158B 'divis':23B 'division':107B 'elect':84C 'freeli':63B 'freely':147B 'from':110B 'hous':28B,54B 'house':112B,138B 'how':119B 'includ':43B 'including':127B 'individu':78B 'individual':162B 'is':146B 'it':115B,151B 'level':60B,144B 'make':76B 'making':160B 'member':36B,49B 'members':120B,133B 'motion':42B 'motions':126B 'mps':79B,163B 'nation':59B 'national':143B 'of':93B,113B,118B,121B,139B 'on':124B 'outcom':45B 'outcomes':129B 'over':166B 'parliament':18B,38B,102B,122B 'parliamentari':73B 'parliamentary':157B 'particip':48B 'participating':132B 'provid':20B 'provides':104B 'publish':15B 'published':99B 'queri':8B,33B 'querying':92B,117B 'record':25B 'records':109B 'specif':41B 'specific':125B 'that':90B,103B 'the':111B,134B,137B,142B 'time':83B,167B 'to':106B,155B 'track':72B,156B 'uk':17B,101B 'use':70B 'used':154B 'vote':2A,11B,24B,39B,44B,80B,128B 'voted':123B 'votes':86A,95B 'voting':108B,164B 'without':65B,149B","popularity_score":"0.0000","maintenance_score":"0.5000","institution_id":"80926881-de89-4d9e-a1c5-f2393d25dac7","institution_type":"GOVERNMENT","country_code":"GB","official_confidence":40,"proof_summary":"official domain (parliament.uk)","source_seed_url":null,"is_public_sector":true,"published_at":"2026-01-01T19:42:19.393Z","geographic_scope":"NATIONAL","name_en":null,"description_en":"An API published by UK Parliament that provides access to division (voting) records from the House of Commons. It allows querying of how Members of Parliament voted on specific motions, including vote outcomes, dates, and participating members. The data covers the House of Commons at the national level and is freely accessible without authentication. It can be used to track parliamentary decision-making and individual MPs' voting behaviour over time.","native_lang":"en","access_level":"documented","formats":[],"capability_tier":"sample","trust_score":71,"access":{"level":"documented","primary":{"kind":"query","label":"Run verified request","method":"GET","url":"https://commonsvotes-api.parliament.uk/data/division/%7BdivisionId%7D.%7Bformat%7D","source":"probe","runnable":true},"actions":[{"kind":"query","label":"Run verified request","method":"GET","url":"https://commonsvotes-api.parliament.uk/data/division/%7BdivisionId%7D.%7Bformat%7D","source":"probe","runnable":true},{"kind":"query","label":"Return a Division","method":"GET","url":"https://commonsvotes-api.parliament.uk/data/division/{divisionId}.{format}","source":"query_example","runnable":true,"direct":false},{"kind":"spec","label":"OpenAPI spec","method":"GET","url":"https://commonsvotes-api.parliament.uk/swagger/docs/v1","source":"openapi","runnable":false},{"kind":"query","label":"API base URL","method":"GET","url":"https://commonsvotes-api.parliament.uk","source":"base_url","runnable":false},{"kind":"landing","label":"Visit homepage","method":"GET","url":"https://www.parliament.uk/","source":"homepage","runnable":false}],"formats":[]},"maturity":{"entry_id":"fe450358-7aef-40c7-8f95-78712baa1548","granularity":"entry","granularity_label":"One unit = one catalog entry. A PROXY for the SCOPE.md §4 ladder, which governs source families, not entries: a family with 400 entries moves this reading 400 times as much as a family with one. Never compare or combine with the source_family reading.","level":"profiled","level_index":3,"level_label":"Profiled","meaning":"Schema, dimensions and licence understood","counts_as_coverage":false,"blocked_by":null,"rungs":[{"level":"discovered","level_index":1,"label":"Discovered","meaning":"Source and metadata recorded","evidence":"membership of the named population the ladder is taken over","counts_as_coverage":false,"met":true,"reached":true,"criterion":"TRUE"},{"level":"verified","level_index":2,"label":"Verified","meaning":"Access tested successfully","evidence":"entries.verification_state = 'VERIFIED'","counts_as_coverage":false,"met":true,"reached":true,"criterion":"entries.verification_state = 'VERIFIED'"},{"level":"profiled","level_index":3,"label":"Profiled","meaning":"Schema, dimensions and licence understood","evidence":"a data profile with at least one field (entry_data_profiles.field_count > 0)","counts_as_coverage":false,"met":true,"reached":true,"criterion":"EXISTS (SELECT 1 FROM entry_data_profiles p WHERE p.entry_id = entries.id AND COALESCE(p.field_count, 0) > 0)"},{"level":"executable","level_index":4,"label":"Executable","meaning":"Queries run through Commodity","evidence":"entries.capability_tier = 'live' — today's proxy for \"queryable through us\"","counts_as_coverage":true,"met":false,"reached":false,"criterion":"entries.capability_tier = 'live'"},{"level":"joinable","level_index":5,"label":"Joinable","meaning":"Canonical identifiers and concepts mapped","evidence":"a field link to a canonical identifier whose sampled VALUES match its format","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM entry_field_links efl WHERE efl.entry_id = entries.id AND efl.identifier_id IS NOT NULL AND efl.value_status = 'match')"},{"level":"reproducible","level_index":6,"label":"Reproducible","meaning":"Snapshots and transformation evidence retained","evidence":"at least one retained evidence manifest (migration 078)","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM evidence_manifests em WHERE em.entry_id = entries.id)"},{"level":"guaranteed","level_index":7,"label":"Guaranteed","meaning":"Monitored against an operational reliability target","evidence":"an active reliability target with a named monitor (migration 096)","counts_as_coverage":true,"met":false,"reached":false,"criterion":"EXISTS (SELECT 1 FROM entry_reliability_targets rt WHERE rt.entry_id = entries.id AND rt.is_active = true)"}],"officialness":{"basis":"catalog_inherited","label":"Inherited from the upstream catalog: this item came from a trusted official government catalog, and that provenance — not per-item proof — is the warrant. Its own proof score is below 80 or it matched no registered institution (apps/worker/src/connectors/catalog/qualify-store.ts).","proof_confidence":40,"proven_threshold":80,"institution_id":"80926881-de89-4d9e-a1c5-f2393d25dac7","definition":"CASE WHEN COALESCE(entries.is_public_sector, false) IS NOT TRUE THEN 'not_official' WHEN COALESCE(entries.official_confidence, 0) >= 80 AND entries.institution_id IS NOT NULL THEN 'per_item_proven' ELSE 'catalog_inherited' END"},"source_family":{"key":"commonsvotes-api.parliament.uk","label":"One unit = one source family, approximated by the serving host of the entry's primary source URL (e.g. bdl.stat.gov.pl). A COMPUTED stand-in for the curated families of SCOPE.md §5, which no table holds yet. A family sits at the highest level any of its entries has reached, because a family is integrated to the depth of its deepest working integration. Never compare or combine with the entry reading."},"generated_at":"2026-08-16T13:48:46.441Z"},"api_details":{"id":"e2717b47-2bce-4b90-abf1-3723e540543c","entry_id":"fe450358-7aef-40c7-8f95-78712baa1548","base_url":"https://commonsvotes-api.parliament.uk","openapi_url":"https://commonsvotes-api.parliament.uk/swagger/docs/v1","graphql_url":null,"api_version":"v1","spec_format":"openapi","endpoints_count":5,"endpoints":[{"path":"/data/division/{divisionId}.{format}","method":"GET","description":"Return a Division"},{"path":"/data/divisions.{format}/groupedbyparty","method":"GET","description":"Return Divisions results grouped by party"},{"path":"/data/divisions.{format}/membervoting","method":"GET","description":"Return voting records for a Member"},{"path":"/data/divisions.{format}/search","method":"GET","description":"Return a list of Divisions"},{"path":"/data/divisions.{format}/searchTotalResults","method":"GET","description":"Return total results count"}],"rate_limit_info":null,"free_tier_limits":null,"ping_url":null,"created_at":"2026-01-01T19:42:19.563Z","updated_at":"2026-01-01T19:42:19.563Z"},"dataset_details":null,"license":null,"reuse":{"license_id":null,"license_name":null,"license_url":null,"commercial_use":{"status":"unknown","value":null},"redistribution":{"status":"unknown","value":null},"attribution_required":{"status":"unknown","value":null},"share_alike":{"status":"unknown","value":null},"personal_data_warning":{"status":"unknown","value":null},"cache_and_mirror":{"status":"unknown","value":null},"undetermined":["commercial_use","redistribution","attribution_required","share_alike","personal_data_warning","cache_and_mirror"],"basis":"unverified","confidence":0.1,"confidence_tier":"low","source_text":null,"source_url":null,"reviewed_at":null},"license_raw":null,"latest_check":{"id":"9166301f-e320-4951-8672-a1a619ae21cb","entry_id":"fe450358-7aef-40c7-8f95-78712baa1548","status":"VERIFIED","last_checked_at":"2026-08-16T10:41:28.950Z","p50_latency_ms":1104,"p95_latency_ms":null,"last_error":null,"consecutive_failures":0,"created_at":"2026-06-08T12:34:07.370Z","updated_at":"2026-08-16T10:41:28.950Z","consecutive_successes":142,"probe_url":"https://commonsvotes-api.parliament.uk/data/division/%7BdivisionId%7D.%7Bformat%7D","probe_method":"GET","probe_http_status":400,"probe_content_type":"application/json; charset=utf-8","probe_succeeded_at":"2026-08-16T10:41:28.950Z"},"data_profile":{"id":"f785781d-fe0d-46fd-b94a-4533d1d2e69b","entry_id":"fe450358-7aef-40c7-8f95-78712baa1548","profile_source":"openapi","profile_kind":"dataset","dataset_id":null,"fields":[{"name":"divisionId","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"path","required":true,"container":"/data/division/{divisionId}.{format}","filterable":true,"description":"Id number of a Division whose records are to be returned","description_en":"ID number of the division whose records are returned."},{"name":"format","role":"parameter","type":"string","label":null,"param_in":"path","required":true,"container":"/data/division/{divisionId}.{format}","filterable":true,"description":"xml or json","description_en":"Response format, either xml or json."},{"name":"queryParameters.searchTerm","role":"parameter","type":"string","label":null,"param_in":"query","container":"/data/divisions.{format}/groupedbyparty","filterable":true,"description":"Divisions containing search term within title or number","description_en":"Filters divisions whose title or number contains this term."},{"name":"queryParameters.memberId","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","required":true,"container":"/data/divisions.{format}/groupedbyparty","filterable":true,"description":"Divisions returning Member with Member ID voting records","description_en":"Filters divisions to those where this Member's ID has a voting record."},{"name":"queryParameters.includeWhenMemberWasTeller","role":"parameter","type":"boolean","label":null,"param_in":"query","container":"/data/divisions.{format}/groupedbyparty","filterable":true,"description":"Divisions where member was a teller as well as if they actually voted","description_en":"Includes divisions where the member acted as a teller, not just voted."},{"name":"queryParameters.startDate","role":"parameter","type":"string (date-time)","label":null,"format":"date-time","param_in":"query","container":"/data/divisions.{format}/groupedbyparty","filterable":true,"description":"Divisions where division date in one or after date provided. Date format is yyyy-MM-dd","description_en":"Filters divisions dated on or after this date (yyyy-MM-dd)."},{"name":"queryParameters.endDate","role":"parameter","type":"string (date-time)","label":null,"format":"date-time","param_in":"query","container":"/data/divisions.{format}/groupedbyparty","filterable":true,"description":"Divisions where division date in one or before date provided. Date format is yyyy-MM-dd","description_en":"Filters divisions dated on or before this date (yyyy-MM-dd)."},{"name":"queryParameters.divisionNumber","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/data/divisions.{format}/groupedbyparty","filterable":true,"description":"Division Number - as specified by the House, unique within a session. This is different to the division id which uniquely identifies a division in this system and is passed to the GET division endpoint","description_en":"Division number as assigned by the House, unique within a session."},{"name":"queryParameters.skip","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/data/divisions.{format}/membervoting","filterable":true,"description":"The number of records to skip. Default is 0","description_en":"Number of records to skip for pagination; default 0."},{"name":"queryParameters.take","role":"parameter","type":"integer (int32)","label":null,"format":"int32","param_in":"query","container":"/data/divisions.{format}/membervoting","filterable":true,"description":"The number of records to return per page. Default is 25","description_en":"Number of records to return per page; default 25."},{"name":"DivisionId","type":"integer (int32)","label":"PublishedDivision","format":"int32","description":null,"description_en":"Unique system identifier for the division."},{"name":"Date","type":"string (date-time)","label":"PublishedDivision","format":"date-time","description":null,"description_en":"Date on which the division took place."},{"name":"PublicationUpdated","type":"string (date-time)","label":"PublishedDivision","format":"date-time","description":null,"description_en":"Date and time the division's published record was last updated."},{"name":"Number","type":"integer (int32)","label":"PublishedDivision","format":"int32","description":null,"description_en":"Division number assigned by the House, unique within a session."},{"name":"IsDeferred","type":"boolean","label":"PublishedDivision","description":null,"description_en":"Indicates whether the division was a deferred division."},{"name":"EVELType","type":"string","label":"PublishedDivision","description":null,"description_en":"Type of English Votes for English Laws (EVEL) procedure applied to the division."},{"name":"EVELCountry","type":"string","label":"PublishedDivision","description":null,"description_en":"Country to which the EVEL certification of the division applies."},{"name":"Title","type":"string","label":"PublishedDivision","description":null,"description_en":"Official title of the division."},{"name":"AyeCount","type":"integer (int32)","label":"PublishedDivision","format":"int32","description":null,"description_en":"Total number of Aye votes recorded in the division."},{"name":"NoCount","type":"integer (int32)","label":"PublishedDivision","format":"int32","description":null,"description_en":"Total number of No votes recorded in the division."},{"name":"DoubleMajorityAyeCount","type":"integer (int32)","label":"PublishedDivision","format":"int32","description":null,"description_en":"Number of Aye votes counted under double-majority rules."},{"name":"DoubleMajorityNoCount","type":"integer (int32)","label":"PublishedDivision","format":"int32","description":null,"description_en":"Number of No votes counted under double-majority rules."},{"name":"AyeTellers","type":"array<object>","label":"PublishedDivision","description":null,"description_en":"List of Members who acted as tellers for the Aye vote."},{"name":"NoTellers","type":"array<object>","label":"PublishedDivision","description":null,"description_en":"List of Members who acted as tellers for the No vote."},{"name":"Ayes","type":"array<object>","label":"PublishedDivision","description":null,"description_en":"List of Members who voted Aye in the division."},{"name":"Noes","type":"array<object>","label":"PublishedDivision","description":null,"description_en":"List of Members who voted No in the division."},{"name":"FriendlyDescription","type":"string","label":"PublishedDivision","description":null,"description_en":"Plain-language description of the division's subject."},{"name":"FriendlyTitle","type":"string","label":"PublishedDivision","description":null,"description_en":"Human-readable title of the division."},{"name":"NoVoteRecorded","type":"array<object>","label":"PublishedDivision","description":null,"description_en":"List of Members eligible to vote who did not have a vote recorded."},{"name":"RemoteVotingStart","type":"string (date-time)","label":"PublishedDivision","format":"date-time","description":null,"description_en":"Date and time remote voting opened for the division."},{"name":"RemoteVotingEnd","type":"string (date-time)","label":"PublishedDivision","format":"date-time","description":null,"description_en":"Date and time remote voting closed for the division."},{"name":"MemberId","type":"integer (int32)","label":"RecordedMember","format":"int32","description":null,"description_en":"Unique identifier of the Member."},{"name":"Name","type":"string","label":"RecordedMember","description":null,"description_en":"Full name of the Member."},{"name":"Party","type":"string","label":"RecordedMember","description":null,"description_en":"Political party of the Member."},{"name":"SubParty","type":"string","label":"RecordedMember","description":null,"description_en":"Sub-grouping or faction of the Member's party."},{"name":"PartyColour","type":"string","label":"RecordedMember","description":null,"description_en":"Colour code associated with the Member's party."},{"name":"PartyAbbreviation","type":"string","label":"RecordedMember","description":null,"description_en":"Abbreviated form of the Member's party name."},{"name":"MemberFrom","type":"string","label":"RecordedMember","description":null,"description_en":"Constituency represented by the Member."},{"name":"ListAs","type":"string","label":"RecordedMember","description":null,"description_en":"Name format used to list the Member alphabetically."},{"name":"ProxyName","type":"string","label":"RecordedMember","description":null,"description_en":"Name of the person who cast a proxy vote for the Member."},{"name":"SearchTerm","type":"string","label":"QueryParameters","description":"Divisions containing search term within title or number","description_en":"Filters divisions whose title or number contains this term."},{"name":"IncludeWhenMemberWasTeller","type":"boolean","label":"QueryParameters","description":"Divisions where member was a teller as well as if they actually voted","description_en":"Includes divisions where the member acted as a teller, not just voted."},{"name":"StartDate","type":"string (date-time)","label":"QueryParameters","format":"date-time","description":"Divisions where division date in one or after date provided. Date format is yyyy-MM-dd","description_en":"Filters divisions dated on or after this date (yyyy-MM-dd)."},{"name":"EndDate","type":"string (date-time)","label":"QueryParameters","format":"date-time","description":"Divisions where division date in one or before date provided. Date format is yyyy-MM-dd","description_en":"Filters divisions dated on or before this date (yyyy-MM-dd)."},{"name":"DivisionNumber","type":"integer (int32)","label":"QueryParameters","format":"int32","description":"Division Number - as specified by the House, unique within a session. This is different to the division id which uniquely identifies a division in this system and is passed to the GET division endpoint","description_en":"Division number as assigned by the House, unique within a session."},{"name":"PartyName","type":"string","label":"PartyVoteResult","description":null,"description_en":"Name of the political party in this vote result."},{"name":"VoteCount","type":"integer (int32)","label":"PartyVoteResult","format":"int32","description":null,"description_en":"Number of votes cast by the party in the division."},{"name":"Skip","type":"integer (int32)","label":"MemberSearchQueryParameters","format":"int32","description":"The number of records to skip. Default is 0","description_en":"Number of member records to skip for pagination; default 0."},{"name":"Take","type":"integer (int32)","label":"MemberSearchQueryParameters","format":"int32","description":"The number of records to return per page. Default is 25","description_en":"Number of member records to return per page; default 25."},{"name":"MemberVotedAye","type":"boolean","label":"MemberVotingRecord","description":null,"description_en":"Indicates whether the Member voted Aye."},{"name":"MemberVotedNo","type":"boolean","label":"MemberVotingRecord","description":null,"description_en":"Indicates whether the Member voted No."},{"name":"MemberWasTeller","type":"boolean","label":"MemberVotingRecord","description":null,"description_en":"Indicates whether the Member acted as a teller in this division."},{"name":"PublishedDivision","type":"object","label":"MemberVotingRecord","description":null,"description_en":"Full published details of the division associated with this voting record."}],"field_count":53,"sample_records":null,"record_count":null,"data_size_bytes":null,"dataset_count":null,"query_examples":[{"url":"https://commonsvotes-api.parliament.uk/swagger/docs/v1","curl":"curl -s 'https://commonsvotes-api.parliament.uk/swagger/docs/v1' -H 'Accept: application/json'","label":"OpenAPI spec","method":"GET","description":"Machine-readable API description (use it to generate clients)."},{"url":"https://commonsvotes-api.parliament.uk/data/division/{divisionId}.{format}","curl":"curl -s 'https://commonsvotes-api.parliament.uk/data/division/{divisionId}.{format}' -H 'Accept: application/json'","label":"Return a Division","method":"GET","description":"Return a Division"}],"status":"partial","error_message":null,"profiled_at":"2026-07-24T20:31:52.197Z","run_id":"54ef0e1f-2063-4276-bbeb-683cf0a83eb5","created_at":"2026-06-12T19:12:04.276Z","updated_at":"2026-07-24T20:31:52.197Z","license_raw":null,"license_id":null,"consecutive_failure_count":0,"last_error_at":null,"last_error_message":null,"previewable":false},"datasets":[],"limits":[]}