/search
Universal search across meetings and documents. Returns grouped results with context.
API key as Bearer token
In: header
Query Parameters
Search phrase. In keyword mode supports boolean operators against the full-text index on chunk text: AND (default, also implicit between adjacent terms), OR (alternation), NOT or leading - (exclusion), ( … ) for grouping, "…" for exact phrase match. Example: windkraft AND ("erneuerbare energien" OR solar) -atomkraft. Operators must be uppercase; lowercase words are treated as regular terms. At most 5 top-level OR branches. In semantic mode only OR is supported.
1 <= length <= 1000Search mode. 'semantic' (default): finds results by meaning, even without exact term matches. Results include a relevance score (0–1). 'keyword': exact term matching only. Faster, but only finds literal occurrences. Scores are not comparable across modes.
"semantic""semantic" | "keyword"chunkType filter as repeated query params or comma-separated list. Defaults to all types. Allowed values: agendaItemTitle, agendaItemDescription, document, proposalTitle, proposalDescription
Entity IDs (Regionalschlüssel) as repeated query params or comma-separated list. Use * suffix for prefix matching: 01* matches all entities in Schleswig-Holstein, 03101 matches LK Braunschweig exactly. Unallowed entities are silently stripped; the search runs only against permitted entities. Mutually exclusive with bbox.
Bounding box as 'west,south,east,north' (lon/lat). Resolves to entities whose geographic bounds intersect this box. Only entities the caller is permitted to access are included. Mutually exclusive with entities.
Administrative levels as repeated query params or comma-separated list. Values: 10=Bundesland, pr=Planungsregion, 40=Landkreis, 50=Verbandsgemeinde, 60=Kommune
Filter from this date (inclusive, ISO 8601)
dateFilter up to this date (inclusive, ISO 8601)
dateOnly return results ingested since this datetime (inclusive, ISO 8601). Useful for polling new content since the last check.
date-timeMax number of result groups returned in data[]. Values above 300 are clamped; use hasMore to detect truncation. Default 50 is sufficient for most use cases. Higher values increase latency.
501 <= value <= 300Minimum relevance score (0.05–1) to include a result in data[] and mapPoints[]. Only applies to semantic mode; keyword mode ignores this. Higher values return fewer but more relevant results. 0.35 is a balanced default; use 0.5+ for precise matches, 0.1–0.2 for broad recall.
0.350.05 <= value <= 1Sort order for data[]. 'relevance' (default): pure score descending — best for finding the most topically relevant items. 'newest': source date descending (then score as tiebreaker) — best for monitoring fresh content. 'oldest': source date ascending (then score) — useful for historical research. 'relevanceRecency': score multiplied by exponential time decay — balances relevance with freshness, surfaces recent relevant items at the top. All modes respect scoreThreshold. In keyword mode 'relevanceRecency' falls back to 'newest'.
"relevance""relevance" | "newest" | "oldest" | "relevanceRecency"Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.poliscope.de/v2/search?q=string&limit=50"{
"data": [
{
"groupKey": "string",
"groupType": "meeting",
"groupCreationDate": "2019-08-24T14:15:22Z",
"date": "string",
"score": 0,
"hits": [
{
"id": "string",
"score": 0,
"text": "string",
"chunkType": "agendaItemTitle",
"highlights": [
[
0,
0
]
],
"agendaItemId": "string",
"documentId": "string",
"proposalId": "string",
"pageFrom": 0,
"pageTo": 0,
"pageFromOffsetPct": 0,
"pageFromOffset": 0,
"pageToOffset": 0,
"poliscopeUrl": "string",
"fileUrl": "string"
}
],
"totalHits": 0,
"context": {
"date": "string",
"entityName": "string",
"entityLevel": "string",
"entityId": "string",
"parents": [
{
"id": "string",
"name": "string",
"level": "string"
}
],
"location": {
"lat": 0,
"lon": 0
},
"meeting": {
"id": "string",
"title": "string",
"date": "string",
"url": "string",
"committee": "string",
"bookmarks": [
{
"id": "string",
"firstName": "string",
"lastName": "string"
}
]
},
"proposal": {
"id": "string",
"title": "string",
"url": "string",
"reference": "string"
},
"document": {
"id": "string",
"title": "string",
"type": "string",
"url": "string"
}
}
}
],
"mapPoints": [
{
"location": {
"lat": 0,
"lon": 0
},
"intensity": 0,
"entityId": "string",
"entityName": "string",
"groupKey": "string"
}
],
"meta": {
"total": 0,
"totalHits": 0,
"hasMore": true,
"estimatedTotal": 0
}
}{
"error": "BAD_REQUEST",
"message": "string"
}{
"error": "BAD_REQUEST",
"message": "string"
}{
"error": "BAD_REQUEST",
"message": "string"
}{
"error": "BAD_REQUEST",
"message": "string"
}/proposals/{id} GET
Get a single proposal by ID
Exhaustive keyword scan (experimental) GET
**EXPERIMENTAL** — this endpoint may change or be removed without notice. Exhaustive keyword scan for data analysis and export. Evaluates the boolean query as a strict full-text filter and returns every matching chunk, flat (ungrouped) and offset-paginated. Unlike /search there is no relevance ranking: all hits satisfy the query equally and arrive in a stable order. Paginate via limit/offset until offset + data.length reaches meta.pagination.total.