{"openapi":"3.1.0","info":{"title":"EuropeScope API","description":"Open data API for European Parliament voting intelligence.\n\n## Authentication\nv1 is **public and unauthenticated**. No API key is required. API keys with higher rate limits are planned for v2 to support heavy research workloads.\n\n## Rate limits\nv1 has **no hard rate limit**. Please be considerate — for bulk data, use the CSV exports or the nightly data dumps rather than paginating the full dataset. Per-key limits are planned for v2.\n\n## Versioning\nThe API is versioned in the URL path (`/v1/...`). Breaking changes ship under a new version prefix; `/v1` will remain stable.\n\n## Response format\nAll responses are JSON. List endpoints return `{total, limit, offset, results}`. Dates are ISO-8601. Vote positions are `F` (For), `A` (Against), `B` (Abstain), `N` (Absent / no vote).\n\n## Data license\nData is published under the Open Data Commons Attribution License (ODC-By 1.0). Source: European Parliament official roll-call records, via the European Parliament Open Data Portal. Please attribute OpenParliament EU when reusing.\n\n## Machine-readable spec\nOpenAPI schema: [`/openapi.json`](/openapi.json) · Interactive docs: [`/docs`](/docs) · [`/redoc`](/redoc)","contact":{"name":"EuropeScope","url":"https://europescope.eu/","email":""},"license":{"name":"Open Data Commons Attribution License (ODC-By 1.0)","url":"https://opendatacommons.org/licenses/by/1-0/"},"version":"0.1.0-mvp"},"paths":{"/v1/parliament/upcoming-votes/summary":{"get":{"tags":["European Parliament"],"summary":"Upcoming Votes Summary","operationId":"upcoming_votes_summary_v1_parliament_upcoming_votes_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Upcoming Votes Summary V1 Parliament Upcoming Votes Summary Get"}}}}}}},"/v1/parliament/upcoming-votes":{"get":{"tags":["European Parliament"],"summary":"List Upcoming Votes","operationId":"list_upcoming_votes_v1_parliament_upcoming_votes_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"scheduled_in_plenary, on_draft_agenda, on_voting_list, voting_time_published, result_published","title":"Status"},"description":"scheduled_in_plenary, on_draft_agenda, on_voting_list, voting_time_published, result_published"},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"plenary_agenda, voting_list, texts_submitted, committee_document, legislative_train","title":"Source Type"},"description":"plenary_agenda, voting_list, texts_submitted, committee_document, legislative_train"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Frontend alias for source_type. `all` means no source filter.","title":"Source"},"description":"Frontend alias for source_type. `all` means no source filter."},{"name":"document_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in title/procedure/topic","title":"Q"},"description":"Search in title/procedure/topic"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date From"},"description":"YYYY-MM-DD"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Date To"},"description":"YYYY-MM-DD"},{"name":"include_past","in":"query","required":false,"schema":{"type":"boolean","description":"By default, past dated items are hidden.","default":false,"title":"Include Past"},"description":"By default, past dated items are hidden."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Upcoming Votes V1 Parliament Upcoming Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/parliament/upcoming-votes/{item_id}":{"get":{"tags":["European Parliament"],"summary":"Get Upcoming Vote","operationId":"get_upcoming_vote_v1_parliament_upcoming_votes__item_id__get","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Upcoming Vote V1 Parliament Upcoming Votes  Item Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/upcoming-ep-votes":{"get":{"tags":["European Parliament"],"summary":"List Upcoming Votes Alias","operationId":"list_upcoming_votes_alias_v1_upcoming_ep_votes_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"source_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"}},{"name":"include_past","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Past"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Upcoming Votes Alias V1 Upcoming Ep Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/council/summary":{"get":{"tags":["Council of the EU"],"summary":"Council Summary","description":"Top-level Council data coverage for the Council landing page.","operationId":"council_summary_v1_council_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Council Summary V1 Council Summary Get"}}}}}}},"/v1/council/votes":{"get":{"tags":["Council of the EU"],"summary":"List Council Votes","description":"Paginated Council vote-result metadata from the Consilium public register.","operationId":"list_council_votes_v1_council_votes_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"configuration","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Configuration"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"vote_position","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"for | against | abstained | not_participating","title":"Vote Position"},"description":"for | against | abstained | not_participating"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"has_country_votes","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true = only acts with parsed country-level positions; false = only pending acts; omitted = all acts","title":"Has Country Votes"},"description":"true = only acts with parsed country-level positions; false = only pending acts; omitted = all acts"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Council Votes V1 Council Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/council/acts":{"get":{"tags":["Council of the EU"],"summary":"List Council Acts","operationId":"list_council_acts_v1_council_acts_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"configuration","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Configuration"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"vote_position","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vote Position"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"has_country_votes","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Country Votes"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Council Acts V1 Council Acts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/council/votes/{vote_id}":{"get":{"tags":["Council of the EU"],"summary":"Get Council Vote","operationId":"get_council_vote_v1_council_votes__vote_id__get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"string","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Council Vote V1 Council Votes  Vote Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/council/acts/{vote_id}":{"get":{"tags":["Council of the EU"],"summary":"Get Council Act","operationId":"get_council_act_v1_council_acts__vote_id__get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"string","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Council Act V1 Council Acts  Vote Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/council/alliances":{"get":{"tags":["Council of the EU"],"summary":"Council Alliances","description":"Country-to-country behavioural similarity based on parsed country votes.\n\nIf council_act_votes is empty, the endpoint returns an empty graph rather\nthan inventing alliances from metadata.","operationId":"council_alliances_v1_council_alliances_get","parameters":[{"name":"min_shared","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":5,"title":"Min Shared"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":80,"title":"Limit"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Council Alliances V1 Council Alliances Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries/{country_code}/council":{"get":{"tags":["Council of the EU"],"summary":"Country Council Record","description":"One country's Council record, when country-level rows are available.","operationId":"country_council_record_v1_countries__country_code__council_get","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Country Council Record V1 Countries  Country Code  Council Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Root  Get"}}}}}}},"/healthz":{"get":{"summary":"Health","operationId":"health_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Healthz Get"}}}}}}},"/v1/members":{"get":{"summary":"List Members","operationId":"list_members_v1_members_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"description":"ISO country code","title":"Country"},"description":"ISO country code"},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Political group code (e.g. EPP, S&D)","title":"Group"},"description":"Political group code (e.g. EPP, S&D)"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Fuzzy name search","title":"Search"},"description":"Fuzzy name search"},{"name":"is_active","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Is Active"}},{"name":"current_term","in":"query","required":false,"schema":{"type":"boolean","description":"Filter to MEPs in the current parliamentary term (default: true)","default":true,"title":"Current Term"},"description":"Filter to MEPs in the current parliamentary term (default: true)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Members V1 Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{member_id}":{"get":{"summary":"Get Member","operationId":"get_member_v1_members__member_id__get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Member V1 Members  Member Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{member_id}/votes":{"get":{"summary":"Get Member Votes","operationId":"get_member_votes_v1_members__member_id__votes_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"main_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Main Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Member Votes V1 Members  Member Id  Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{member_id}/statistics":{"get":{"summary":"Get Member Statistics","operationId":"get_member_statistics_v1_members__member_id__statistics_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Member Statistics V1 Members  Member Id  Statistics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{member_id}/similar":{"get":{"summary":"Get Similar Members","operationId":"get_similar_members_v1_members__member_id__similar_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Similar Members V1 Members  Member Id  Similar Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{member_id}/voting-allies":{"get":{"summary":"Get Voting Allies","description":"This MEP's closest voting allies — other MEPs whose roll-call record is most\nsimilar — aggregated by political group and national delegation, plus the\nindividual top allies. The vote-based analogue of a co-signature network:\n'who votes the same way as this MEP, and where do they sit?'","operationId":"get_voting_allies_v1_members__member_id__voting_allies_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":40,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Voting Allies V1 Members  Member Id  Voting Allies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members/{member_id}/cosignatures":{"get":{"summary":"Get Member Cosignatures","description":"Co-signature ego-network for one MEP.\n\nAn interaction is a co-authored parliamentary activity (questions, motions):\ncosign_count(A, B) = number of activities A and B both authored. Returns the\nMEP's top co-signing partners, every co-signature edge *between* the members\nof that ego-network (so the client can draw a real graph, not just a star),\nplus per-group aggregation and authorship totals.","operationId":"get_member_cosignatures_v1_members__member_id__cosignatures_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":24,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Member Cosignatures V1 Members  Member Id  Cosignatures Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/activities/facets":{"get":{"summary":"Activity Facets","description":"Counts per activity category — powers the filter chips.","operationId":"activity_facets_v1_activities_facets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Activity Facets V1 Activities Facets Get"}}}}}}},"/v1/activities":{"get":{"summary":"List Activities","description":"Browse parliamentary activities (the document analogue of the votes list):\nwho authored which question, amendment or motion. Each row carries its authors.","operationId":"list_activities_v1_activities_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"member_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Id"}},{"name":"term","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To Date"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"newest","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Activities V1 Activities Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bodies":{"get":{"summary":"List Bodies","description":"List corporate bodies (committees / delegations) with their member counts.","operationId":"list_bodies_v1_bodies_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Bodies V1 Bodies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bodies/detail":{"get":{"summary":"Get Body","description":"One body with its members grouped by role (Chair / Vice-Chair / Member / Substitute).\n\nUses a query param (not a path segment) because body ids contain a slash\n('org/6563'), which breaks path-based routing when percent-encoded.","operationId":"get_body_v1_bodies_detail_get","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","description":"Body id, e.g. org/6563","title":"Id"},"description":"Body id, e.g. org/6563"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Body V1 Bodies Detail Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes":{"get":{"summary":"List Votes","operationId":"list_votes_v1_votes_get","parameters":[{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To Date"}},{"name":"main_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Main Only"}},{"name":"final_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Final Only"}},{"name":"close_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Close Only"}},{"name":"group_split","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Group Split"}},{"name":"country_split","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Country Split"}},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"country_majority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Majority"}},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"}},{"name":"group_majority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Majority"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"collapse","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Collapse"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"date","title":"Sort"}},{"name":"importance","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Importance"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Votes V1 Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes/{vote_id}":{"get":{"summary":"Get Vote","operationId":"get_vote_v1_votes__vote_id__get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"integer","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vote V1 Votes  Vote Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes/{vote_id}/members":{"get":{"summary":"Get Vote Members","description":"Full individual MEP positions for a vote, with rebel flags.\nA MEP is 'rebel' if their position differs from their group's majority.\n'against_country_majority' if it differs from their country delegation majority.\nReturns all rows; filtering is done client-side (max ~720 rows).","operationId":"get_vote_members_v1_votes__vote_id__members_get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"integer","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vote Members V1 Votes  Vote Id  Members Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/groups":{"get":{"summary":"List Groups","operationId":"list_groups_v1_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Groups V1 Groups Get"}}}}}}},"/v1/groups/{group_id}/statistics":{"get":{"summary":"Get Group Statistics","operationId":"get_group_statistics_v1_groups__group_id__statistics_get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"integer","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Group Statistics V1 Groups  Group Id  Statistics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries":{"get":{"summary":"List Countries","operationId":"list_countries_v1_countries_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Countries V1 Countries Get"}}}}}}},"/v1/countries/{country_code}":{"get":{"summary":"Get Country Dashboard","operationId":"get_country_dashboard_v1_countries__country_code__get","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Country Dashboard V1 Countries  Country Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries/{country_code}/dashboard":{"get":{"summary":"Country Full Dashboard","description":"Comprehensive country dashboard. Returns 6 sections in one response.\nEach section is independently defensive — a heavy query failure (e.g. the\ncountry-similarity matrix on a cold cache) falls back to an empty result\nrather than failing the entire dashboard.","operationId":"country_full_dashboard_v1_countries__country_code__dashboard_get","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Country Full Dashboard V1 Countries  Country Code  Dashboard Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries/{country_code}/parties":{"get":{"tags":["Countries"],"summary":"List Country Parties","description":"National parties of a country with summary metrics (current-term MEPs).","operationId":"list_country_parties_v1_countries__country_code__parties_get","parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Country Parties V1 Countries  Country Code  Parties Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/parties/{slug}":{"get":{"tags":["Countries"],"summary":"Get Party","description":"Full national-party profile: MEPs, cohesion, group/delegation alignment,\nsplit votes and party-vs-group divergence. Metrics use current-term MEPs\non main votes. Accepts a slug (e.g. 'ro-psd') or a numeric id.","operationId":"get_party_v1_parties__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Party V1 Parties  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes/{vote_id}/parties":{"get":{"tags":["Votes"],"summary":"Vote By Party","description":"How each national party voted on a given vote (one row per party).","operationId":"vote_by_party_v1_votes__vote_id__parties_get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"integer","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Vote By Party V1 Votes  Vote Id  Parties Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/topics":{"get":{"summary":"List Topics","operationId":"list_topics_v1_topics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Topics V1 Topics Get"}}}}}}},"/v1/topics/{slug}":{"get":{"summary":"Get Topic","operationId":"get_topic_v1_topics__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Topic V1 Topics  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/topics/{slug}/votes":{"get":{"summary":"Get Topic Votes","operationId":"get_topic_votes_v1_topics__slug__votes_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"primary_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Primary Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Topic Votes V1 Topics  Slug  Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/topics/{slug}/countries":{"get":{"summary":"Get Topic Countries","description":"How each country delegation votes on this topic (across all votes tagged with it).","operationId":"get_topic_countries_v1_topics__slug__countries_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Topic Countries V1 Topics  Slug  Countries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes/{vote_id}/topics":{"get":{"summary":"Get Vote Topics","operationId":"get_vote_topics_v1_votes__vote_id__topics_get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"integer","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vote Topics V1 Votes  Vote Id  Topics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/methodology":{"get":{"summary":"List Methodologies","description":"Public registry of all calculation methodologies used by the platform.","operationId":"list_methodologies_v1_methodology_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Methodologies V1 Methodology Get"}}}}}}},"/v1/methodology/{slug}":{"get":{"summary":"Get Methodology","operationId":"get_methodology_v1_methodology__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Methodology V1 Methodology  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audit/mep/{member_id}/{metric}":{"get":{"summary":"Audit Mep Metric","description":"Returns a fully-traceable explanation for a single MEP metric:\nthe value, the formula, the input counts, the period, the data source,\nand the methodology version used.","operationId":"audit_mep_metric_v1_audit_mep__member_id___metric__get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"metric","in":"path","required":true,"schema":{"type":"string","title":"Metric"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit Mep Metric V1 Audit Mep  Member Id   Metric  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audit/mep/{member_id}/{metric}/votes":{"get":{"tags":["Audit"],"summary":"Audit Mep Metric Votes","description":"The concrete list of votes USED (or EXCLUDED) when computing a given MEP\nmetric — the audit trail behind the headline number.","operationId":"audit_mep_metric_votes_v1_audit_mep__member_id___metric__votes_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"metric","in":"path","required":true,"schema":{"type":"string","title":"Metric"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"included","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit Mep Metric Votes V1 Audit Mep  Member Id   Metric  Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audit/mep/{member_id}/{metric}/votes.csv":{"get":{"tags":["Audit"],"summary":"Audit Mep Metric Votes Csv","description":"Downloadable CSV of the votes used (or excluded) for a given MEP metric.","operationId":"audit_mep_metric_votes_csv_v1_audit_mep__member_id___metric__votes_csv_get","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"integer","title":"Member Id"}},{"name":"metric","in":"path","required":true,"schema":{"type":"string","title":"Metric"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"included","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/health":{"get":{"summary":"Health Check","description":"Simple liveness probe. Returns current process uptime.","operationId":"health_check_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Check V1 Health Get"}}}}}}},"/v1/data-health":{"get":{"summary":"Data Health","description":"Operational + data-quality dashboard.\n\nEvery metric is computed against the live database. This endpoint is\nintentionally not cached — callers should hit it directly to see the\ncurrent state of the platform.","operationId":"data_health_v1_data_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Data Health V1 Data Health Get"}}}}}}},"/v1/search/meps":{"get":{"summary":"Search Meps","description":"Typeahead-friendly MEP search returning rich data (group, party, attendance, loyalty).","operationId":"search_meps_v1_search_meps_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Fuzzy name search","default":"","title":"Q"},"description":"Fuzzy name search"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Search Meps V1 Search Meps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compare/meps":{"get":{"summary":"Compare Meps","description":"Compare 2–4 MEPs.\n- 2 MEPs: full detailed comparison (summary, topics, disagreements, agreements, absences).\n- 3 or 4: pairwise similarity matrix only.","operationId":"compare_meps_v1_compare_meps_get","parameters":[{"name":"ids","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated MEP IDs, e.g. 197490,197491","title":"Ids"},"description":"Comma-separated MEP IDs, e.g. 197490,197491"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Compare Meps V1 Compare Meps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes/{vote_id}/groups":{"get":{"tags":["Votes"],"summary":"Vote By Group","description":"How each European political group voted on a given vote.","operationId":"vote_by_group_v1_votes__vote_id__groups_get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"integer","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Vote By Group V1 Votes  Vote Id  Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes/{vote_id}/countries":{"get":{"tags":["Votes"],"summary":"Vote By Country","description":"How each national delegation voted on a given vote.","operationId":"vote_by_country_v1_votes__vote_id__countries_get","parameters":[{"name":"vote_id","in":"path","required":true,"schema":{"type":"integer","title":"Vote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Vote By Country V1 Votes  Vote Id  Countries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/close-votes":{"get":{"tags":["Analytics"],"summary":"Analytics Close Votes","description":"Main votes decided by the narrowest margins (For vs Against).","operationId":"analytics_close_votes_v1_analytics_close_votes_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"main_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Main Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Close Votes V1 Analytics Close Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/rebel-votes":{"get":{"tags":["Analytics"],"summary":"Analytics Rebel Votes","description":"MEPs ranked by how often they voted against their European political group's majority.","operationId":"analytics_rebel_votes_v1_analytics_rebel_votes_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics Rebel Votes V1 Analytics Rebel Votes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/votes.csv":{"get":{"tags":["Exports"],"summary":"Export Votes Csv","description":"Download roll-call votes as CSV (most recent first).","operationId":"export_votes_csv_v1_votes_csv_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20000,"minimum":1,"default":2000,"title":"Limit"}},{"name":"main_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Main Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/members.csv":{"get":{"tags":["Exports"],"summary":"Export Members Csv","description":"Download MEPs (with their latest statistics) as CSV.","operationId":"export_members_csv_v1_members_csv_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"current_term","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Current Term"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/positions.csv":{"get":{"tags":["Exports"],"summary":"Export Positions Csv","description":"Download individual vote positions as CSV (streamed).\n\nThe full positions table has ~17M rows. To keep downloads bounded, this\nendpoint applies a default limit of 100,000 rows (max 2,000,000). For a\ntargeted export, filter by vote_id, member_id, country, or a date range —\ne.g. all positions on one vote (~700 rows) or one MEP's full record (~24k rows).","operationId":"export_positions_csv_v1_positions_csv_get","parameters":[{"name":"vote_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vote Id"}},{"name":"member_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Member Id"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000000,"minimum":1,"default":100000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/countries.csv":{"get":{"tags":["Exports"],"summary":"Export Countries Csv","description":"Download the per-country summary (latest snapshot) as CSV.","operationId":"export_countries_csv_v1_countries_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/groups.csv":{"get":{"tags":["Exports"],"summary":"Export Groups Csv","description":"Download the per-group summary (latest snapshot) as CSV.","operationId":"export_groups_csv_v1_groups_csv_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/topic-votes.csv":{"get":{"tags":["Exports"],"summary":"Export Topic Votes Csv","description":"Download every topic-tagged vote as CSV (one row per vote-topic pair, streamed).","operationId":"export_topic_votes_csv_v1_topic_votes_csv_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000000,"minimum":1,"default":100000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/methodology.json":{"get":{"tags":["Exports"],"summary":"Export Methodology Json","description":"Download the full methodology registry as a JSON file.","operationId":"export_methodology_json_v1_methodology_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/impact/event":{"post":{"tags":["System"],"summary":"Impact Event","description":"Lightweight, privacy-first beacon sent by the website on page views/shares.\nNo PII, no cookies. Visitor is an anonymous daily-rotating hash.","operationId":"impact_event_v1_impact_event_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpactEvent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Impact Event V1 Impact Event Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/impact/newsletter":{"post":{"tags":["System"],"summary":"Impact Newsletter","description":"Store a newsletter signup (explicit consent; the one place we keep an email).","operationId":"impact_newsletter_v1_impact_newsletter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSignup"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Impact Newsletter V1 Impact Newsletter Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/impact/issue":{"post":{"tags":["System"],"summary":"Impact Issue","description":"Record a reported data error / bug / suggestion.","operationId":"impact_issue_v1_impact_issue_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueReport"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Impact Issue V1 Impact Issue Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/impact/summary":{"get":{"tags":["System"],"summary":"Impact Summary","description":"All-time + last-30-day counts per metric (reads the impact_summary view).","operationId":"impact_summary_v1_impact_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Impact Summary V1 Impact Summary Get"}}}}}}},"/v1/search":{"get":{"tags":["System"],"summary":"Global Search","description":"Unified search across MEPs, votes, topics, countries, groups, national parties,\nand procedure references. Filters apply where relevant (e.g. date/main_only/topic\nnarrow votes; country/group narrow MEPs).","operationId":"global_search_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restrict to one category: meps|votes|topics|countries|groups|parties|procedures","title":"Type"},"description":"Restrict to one category: meps|votes|topics|countries|groups|parties|procedures"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"Country"}},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To Date"}},{"name":"main_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Main Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Global Search V1 Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stats/summary":{"get":{"summary":"Summary","operationId":"summary_v1_stats_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Summary V1 Stats Summary Get"}}}}}}},"/v1/stats/distributions":{"get":{"tags":["Stats"],"summary":"Stats Distributions","description":"Aggregates that power the Insights charts: how loyalty/attendance are\ndistributed across MEPs, and per-country averages. Uses the latest stored\nsnapshot per current-term MEP.","operationId":"stats_distributions_v1_stats_distributions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Distributions V1 Stats Distributions Get"}}}}}}},"/v1/stats/votes-by-year":{"get":{"tags":["Stats"],"summary":"Stats Votes By Year","description":"Roll-call vote volume per calendar year (all votes + main/final votes).","operationId":"stats_votes_by_year_v1_stats_votes_by_year_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats Votes By Year V1 Stats Votes By Year Get"}}}}}}},"/v1/groups/{group_id}":{"get":{"summary":"Get Group","description":"One political group with its current members grouped by country.","operationId":"get_group_v1_groups__group_id__get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"integer","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Group V1 Groups  Group Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cosignatures/network":{"get":{"summary":"Get Cosignature Network","operationId":"get_cosignature_network_v1_cosignatures_network_get","parameters":[{"name":"term_number","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Term Number"}},{"name":"document_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"}},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}},{"name":"min_count","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Min Count"}},{"name":"limit_nodes","in":"query","required":false,"schema":{"type":"integer","default":80,"title":"Limit Nodes"}},{"name":"limit_edges","in":"query","required":false,"schema":{"type":"integer","default":180,"title":"Limit Edges"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Cosignature Network V1 Cosignatures Network Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/newsletter/subscribe":{"post":{"summary":"Newsletter Subscribe","operationId":"newsletter_subscribe_v1_newsletter_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsletterSubscribeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Newsletter Subscribe V1 Newsletter Subscribe Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImpactEvent":{"properties":{"type":{"type":"string","title":"Type"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","required":["type"],"title":"ImpactEvent"},"IssueReport":{"properties":{"message":{"type":"string","title":"Message"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","default":"other"},"target_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Path"},"contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact"}},"type":"object","required":["message"],"title":"IssueReport"},"NewsletterSignup":{"properties":{"email":{"type":"string","title":"Email"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["email"],"title":"NewsletterSignup"},"NewsletterSubscribeBody":{"properties":{"email":{"type":"string","title":"Email"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["email"],"title":"NewsletterSubscribeBody"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"MEPs","description":"Members of the European Parliament, their profiles, votes and statistics."},{"name":"Votes","description":"Roll-call votes, breakdowns by group and country, and per-vote topics."},{"name":"Countries","description":"National delegations and the comprehensive country dashboard."},{"name":"Topics","description":"Policy topics and topic-level vote listings."},{"name":"Analytics","description":"Cross-cutting analytics: closest votes, most rebellious MEPs."},{"name":"Compare","description":"MEP search and head-to-head comparison."},{"name":"Methodology & audit","description":"Methodology registry and per-metric audit trail."},{"name":"Exports","description":"CSV exports for offline analysis."},{"name":"System","description":"Health checks and data-quality dashboard."}]}