/api/v1/search/media?
| Parameter | Validation | Matches | Type |
|---|---|---|---|
| q | min 3 chars | Full Text Search | String |
| parliament | min 2 chars | String | |
| electoralPeriod | min 1 char | electoralPeriod.data.attributes.number | String |
| electoralPeriodID | min 1 char | electoralPeriod.data.id | String |
| sessionID | min 1 char | session.data.id | String |
| sessionNumber | min 1 char | session.data.attributes.number | String |
| dateFrom | date in ISO format (ex. "2017-10-28") | dateStart | String |
| dateTo | date in ISO format (ex. "2017-12-22") | dateStart | String |
| party | min 1 char | people.data.attributes.party.labelAlternative | String OR Array |
| partyID | min 1 char | organisations.data.id | String OR Array |
| faction | min 1 char | people.data.attributes.faction.labelAlternative | String OR Array |
| factionID | min 1 char | organisations.data.id | String OR Array |
| person | min 3 chars | people.data.attributes.label | String |
| personID | Wikidata ID RegEx | people.data.id | String OR Array |
| abgeordnetenwatchID | min 1 char | people.data.attributes.additionalInformation.abgeordnetenwatchID | String |
| organisationID | Wikidata ID RegEx | people.data.attributes.party.id, people.data.attributes.faction.id | String |
| context | min 3 chars | people.data.attributes.context, organisations.data.attributes.context | String |
| agendaItemID | min 2 chars | agendaItem.data.id | String |
| documentID | min 1 char | documents.data.id | String |
| termID | min 1 char | terms.data.id | String |
| id | min 4 chars | id | String |
| agendaItemTitle | min 3 chars | agendaItem.data.attributes.title | String |
| aligned | boolean | Filter by alignment status | Boolean |
| fragDenStaatID | min 1 char | FragDenStaat ID | String |
| numberOfTexts | integer | Number of text segments | Integer |
| organisation | min 3 chars | Organisation name | String |
| personOriginID | min 1 char | Person origin identifier | String |
| procedureID | min 1 char | Procedure identifier | String |
| limit | integer | Maximum number of results to return | Integer |
| page | integer | Page number for pagination | Integer |
| sort | date-asc, date-desc, topic-asc, topic-desc, duration-asc, duration-desc, changed-asc, changed-desc | Sort results by date, duration, or last changed timestamp (defaults to relevance) | String |
| fields | comma-separated values | Return only specified fields (e.g., "id" for ID-only results) | String |
/api/v1/search/people?
| Parameter | Validation | Matches | Type |
|---|---|---|---|
| name | min 3 chars | label, firstName, lastName | String |
| type | "memberOfParliament", "unknown" | type | String |
| party | min 1 char | organisation.label, organisation.labelAlternative | String OR Array |
| partyID | Wikidata ID RegEx | partyOrganisationID | String OR Array |
| faction | min 1 char | organisation.label, organisation.labelAlternative | String OR Array |
| factionID | Wikidata ID RegEx | factionOrganisationID | String OR Array |
| organisationID | Wikidata ID RegEx | factionOrganisationID, partyOrganisationID | String |
| degree | min 1 char | degree | String |
| gender | "male", "female", "nonbinary", "bi", "queer" | gender | String |
| originID | min 1 char | originID | String |
| abgeordnetenwatchID | min 1 char | additionalInformation.abgeordnetenwatchID | String |
| fragDenStaatID | min 1 char | FragDenStaat ID | String |
/api/v1/search/organisations?
| Parameter | Validation | Matches | Type |
|---|---|---|---|
| name | min 3 chars | label, labelAlternative, abstract | String OR Array |
| type | min 2 chars | type | String |
/api/v1/search/documents?
| Parameter | Validation | Matches | Type |
|---|---|---|---|
| label | min 3 chars | label, labelAlternative, abstract | String OR Array |
| type | min 2 chars | type | String |
| wikidataID | Wikidata ID RegEx | wikidataID | String |
/api/v1/search/terms?
| Parameter | Validation | Matches | Type |
|---|---|---|---|
| label | min 3 chars | label, labelAlternative | String OR Array |
| type | min 2 chars | type | String |
| wikidataID | Wikidata ID RegEx | wikidataID | String |
Media IDs contain info about the parliament, electoral period and session. You should however not try to guess those IDs (eg. based on the order of speeches). This might work in some cases, it will not in many others.
/api/v1/media/IDPerson IDs are always a Wikidata ID.
/api/v1/person/IDOrganisation IDs are always a Wikidata ID.
/api/v1/organisation/IDDokument IDs are internal incremental IDs and contain no reference to the document numbers (like "Drucksache 19/1234"). The rationale for this is that documents can be official documents as well as law texts and potentially other types of documents, sometimes applying to a specific parliament, sometimes generic, sometimes having a Wikidata ID, sometimes not. If you want to get a document by its official document number, you can use the document search.
/api/v1/document/IDBegriff IDs are always a Wikidata ID.
/api/v1/term/IDWahlperiode IDs can safely be referenced by the parliament shortcode plus the respective number.
/api/v1/electoralPeriod/IDSitzung IDs can safely be referenced by the parliament shortcode plus the respective numbers.
/api/v1/session/IDTagesordnungspunkt IDs are built of the parliament shortcode and an incremental ID. You should not try to guess those IDs (eg. based on the order of agenda items). This might work in some cases, it will not in many others.
/api/v1/agendaItem/IDapplication/ld+json), CORS-enabled.IIIF Presentation 3.0 Manifest for a single speech (video, transcript annotations, named-entity annotations with time codes). Request via the format=iiif query parameter (or an Accept: application/ld+json header) on the media endpoint.
/api/v1/media/ID?format=iiifIIIF Manifest for a whole session: one Canvas per public speech, grouped into Ranges by agenda item.
/api/v1/session/ID?format=iiifIIIF Collection for a whole parliament (its electoral periods as sub-collections), or for a single electoral period (its sessions as Manifest references).
/api/v1/iiif/collection/PARLIAMENT and /api/v1/iiif/collection/PARLIAMENT/ELECTORALPERIODA IIIF Collection built from a media search: its items are Manifest references to the matching speeches. Accepts the same query parameters as /api/v1/search/media (see the Search tab).
/api/v1/iiif/search?PARAMETERSAkoma Ntoso 1.0 <debate> document, requested via the format=akn query parameter (or an Accept: application/akn+xml header) on the media or session endpoint. A speech is returned as a debate record holding the one <debateSection> of its agenda item, a session as the whole sitting with one <debateSection> per agenda item. Every <speech> references its speaker and faction as TLC references (Wikidata QIDs) and carries absolute startTime/endTime attributes; interjections and other comments become <scene> elements. FRBR metadata in <meta> identifies work, expression and manifestation.
Audio/video synchronisation: Akoma Ntoso has no timeline or synchronisation mechanism, so the sentence-level alignment between transcript and video that underlies our data cannot be expressed in it. As a substitute, each <speech> carries absolute startTime/endTime timestamps and refersTo a W3C Media Fragment URI (video.mp4#t=start,end) that deep-links its exact clip segment — precise to the speech, but not to the sentence. For sentence-level alignment use the ParlaMint, IIIF or WebVTT representation below.
/api/v1/media/ID?format=akn and /api/v1/session/ID?format=akn<timeline>.TEI document following the ParlaMint conventions, requested via the format=parlamint query parameter (or an Accept: application/tei+xml header) on the media or session endpoint. Speeches become <u> utterances with @who (Wikidata QID) and @ana (#chair / #regular), one <seg> per paragraph, comments as <incident>, <kinesic> and <vocal>; the <teiHeader> carries the speakers and factions as <listPerson>/<listOrg>. The AV recording is declared in <recordingStmt> and aligned sentence by sentence to a TEI <timeline>.
/api/v1/media/ID?format=parlamint and /api/v1/session/ID?format=parlamint<track> element or media player can display as subtitles, and the simplest way to consume our transcript timings.Timed transcript of a speech as a WebVTT file (text/vtt).
/api/v1/media/ID/transcript.vttSpeeches often carry several transcripts. The WebVTT, Akoma Ntoso and ParlaMint endpoints all accept the same two optional parameters to pick one; without them the best available transcript is used.
| Parameter | Description | Beispiel |
|---|---|---|
type |
Transcript type | proceedings, generated |
lang |
Transcript language (BCP 47) | de, en |
/api/v1/statistics/general
| Parameter | Validation | Description | Type |
|---|---|---|---|
| parliament | Optional, defaults to "de" | Parliament code for multi-parliament support | String |
/api/v1/statistics/entity
| Parameter | Validation | Description | Type |
|---|---|---|---|
| entityType | Required: person, organisation, document, term | Type of entity to analyze | String |
| entityID | Required: Wikidata ID RegEx or internal ID | ID of specific entity to analyze | String |
/api/v1/statistics/word-trends
| Parameter | Validation | Description | Type |
|---|---|---|---|
| words[] | Required: array of words | Words to track over time | Array |
| startDate | Optional, defaults to '2020-01-01' | Start date in YYYY-MM-DD format | String |
| endDate | Optional, defaults to current date | End date in YYYY-MM-DD format | String |
| parliament | Optional, defaults to 'de' | Parliament code for multi-parliament support | String |
| factions[] | Optional, array of Wikidata IDs | Filter word trends by specific political factions | Array |
| separateByFaction | Optional, boolean | Separate results by faction when true | Boolean |
/api/v1/statistics/entity-counts
| Parameter | Validation | Description | Type |
|---|
API Dokumentation/api
API Endpoint Base URL/api/v1
Responses MUST include the following properties for any request (GET and POST):
{
"meta": {
"api": {
"version": "1.0",
"documentation": "https://de.openparliament.tv/api",
"license": {
"label": "ODC Open Database License (ODbL) v1.0",
"link": "https://opendatacommons.org/licenses/odbl/1-0/"
}
},
"requestStatus": "success" // OR "error"
},
"data": [], // {} OR []
"errors": [], // EITHER "data" OR "errors"
"links": {
"self": "https://de.openparliament.tv/api/v1/search/media?q=Rente" // request URL
}
}
Successful requests MUST include the following properties:
{
"meta": {
"api": {
"version": "1.0",
"documentation": "https://de.openparliament.tv/api",
"license": {
"label": "ODC Open Database License (ODbL) v1.0",
"link": "https://opendatacommons.org/licenses/odbl/1-0/"
}
},
"requestStatus": "success"
},
"data": {},
"links": {
"self": "https://de.openparliament.tv/api/v1/search/media?q=Rente" // request URL
}
}
Errors MUST include the following properties:
{
"meta": {
"api": {
"version": "1.0",
"documentation": "https://de.openparliament.tv/api",
"license": {
"label": "ODC Open Database License (ODbL) v1.0",
"link": "https://opendatacommons.org/licenses/odbl/1-0/"
}
},
"requestStatus": "error"
},
"errors": [
{
"meta": {
"domSelector": "" // optional
},
"status": "422", // HTTP Status
"code": "3",
"title": "Invalid Attribute",
"detail": "First name must contain at least three characters."
}
],
"links": {
"self": "https://de.openparliament.tv/api/v1/search/media?q=Rente" // request URL
}
}
Data Objects MUST always include the properties:
Additionally Data Objects CAN include the properties:
Depending on the context, the attributes object can only include a subset of all properties. The full set can then be retrieved via an API request to links > self.
This principle SHOULD be applied on all levels of the data structure.
Example for an Entity Response:
{
"meta": {
"api": {
"version": "1.0",
"documentation": "https://de.openparliament.tv/api",
"license": {
"label": "ODC Open Database License (ODbL) v1.0",
"link": "https://opendatacommons.org/licenses/odbl/1-0/"
}
},
"requestStatus": "success"
},
"data": {
"type": "media",
"id": "DE-198765837",
"attributes": {},
"relationships": {
"documents": {
"data": [
{
"type": "document",
"id": "201",
"attributes": {},
"links": {
"self": "https://de.openparliament.tv/api/v1/document/201"
}
}
],
"links": {
"self": "https://de.openparliament.tv/api/v1/searchAnnotations?mediaID=DE-198765837&type=document"
}
}
},
"links": {
"self": "https://de.openparliament.tv/api/v1/media/DE-198765837"
}
}
}
Example for a Search Response:
{
"meta": {
"api": {
"version": "1.0",
"documentation": "https://de.openparliament.tv/api",
"license": {
"label": "ODC Open Database License (ODbL) v1.0",
"link": "https://opendatacommons.org/licenses/odbl/1-0/"
}
},
"requestStatus": "success",
"results": {
"count": 25,
"total": 128,
"rangeStart": 51,
"rangeEnd": 75,
"maxScore": 4.7654785 /* float or null */
}
},
"data": [],
"links": {
"self": "https://de.openparliament.tv/api/v1/search/people?party=CDU&page[number]=3&page[size]=25",
"first": "https://de.openparliament.tv/api/v1/search/people?party=CDU&page[number]=1&page[size]=25",
"prev": "https://de.openparliament.tv/api/v1/search/people?party=CDU&page[number]=2&page[size]=25",
"next": "https://de.openparliament.tv/api/v1/search/people?party=CDU&page[number]=4&page[size]=25",
"last": "https://de.openparliament.tv/api/v1/search/people?party=CDU&page[number]=13&page[size]=25"
}
}