API-documentatie

REST API voor partijorganisaties om fracties, instellingen en AI-instructies te beheren.

Authenticatie

Alle endpoints vereisen een Bearer-token via Laravel Sanctum. Tokens worden aangemaakt door een beheerder.

Authorization: Bearer <token>

Zonder geldig token: 401 Unauthorized. Met een token zonder partij-rechten: 403 Forbidden.


Rate limiting

Maximaal 60 requests per minuut per gebruiker. Bij overschrijding: 429 Too Many Requests.


Base URL

https://maidewerker.nl/api/party

Endpoints

GET /api/party

Haal partij-informatie op.

Response

{
  "id": 1,
  "name": "Vooruit Lokaal",
  "slug": "vl",
  "instructions": "Focus op het woningbouwprogramma"
}
PUT /api/party/instructions

Werk de AI-instructies bij die gelden voor alle fracties.

Request body

{
  "instructions": "Focus op het woningbouwprogramma"
}
instructions string|null AI-instructies (max 65.535 tekens). Stuur null om te wissen.

Response

{
  "instructions": "Focus op het woningbouwprogramma"
}
GET /api/party/tenants

Lijst van alle fracties van de partij.

Response

{
  "tenants": [
    {
      "id": 1,
      "name": "VL Utrecht",
      "slug": "vl-utrecht",
      "gemeente": "Utrecht",
      "partij_naam": "Vooruit Lokaal",
      "zetels": 1,
      "users_count": 3,
      "conversations_count": 42,
      "setup_complete": true
    }
  ]
}
GET /api/party/tenants/{id}

Details van een specifieke fractie, inclusief setup-status.

Response

{
  "id": 1,
  "name": "VL Utrecht",
  "slug": "vl-utrecht",
  "gemeente": "Utrecht",
  "partij_naam": "Vooruit Lokaal",
  "zetels": 1,
  "provider_type": "ibabs",
  "setup_steps": [
    {"key": "provider", "label": "Raadsinformatiesysteem", "complete": true},
    {"key": "standpunten", "label": "Standpunten", "complete": true}
  ],
  "setup_complete": true
}
GET /api/party/tenants/{id}/settings

Alle instellingen van een fractie.

Response

{
  "standpunten": "## Wonen\n\n1. Meer woningen bouwen",
  "coalitie": "## Zetelverdeling\n\n- VL: 1 zetel",
  "toon": "Zakelijk en scherp",
  "document_templates": {"motie": "...", "amendement": "..."},
  "provider_type": "ibabs",
  "provider_config": {"base_url": "https://utrecht.bestuurlijkeinformatie.nl"}
}
PATCH /api/party/tenants/{id}/settings

Werk een of meer instellingen bij. Stuur alleen de velden die je wilt wijzigen.

Request body

{
  "standpunten": "## Nieuw programma\n\n1. Lagere belastingen",
  "toon": "Informeel en toegankelijk"
}
standpunten string|null Verkiezingsprogramma (markdown)
coalitie string|null Coalitie-informatie (markdown)
toon string|null Schrijfstijl voor de AI
document_templates object|null Sjablonen met keys: motie, amendement, schriftelijke_vragen, mondelinge_vragen

Response

{
  "standpunten": "## Nieuw programma\n\n1. Lagere belastingen",
  "coalitie": null,
  "toon": "Informeel en toegankelijk",
  "document_templates": null
}
GET /api/party/tenants/{id}/users

Lijst van alle gebruikers van een fractie.

Response

{
  "users": [
    {
      "id": 1,
      "first_name": "Jan",
      "last_name": "Smit",
      "email": "jan@vl-utrecht.nl",
      "role": "admin",
      "functie": "raadslid"
    }
  ]
}
GET /api/party/tenants/{id}/conversations

Gesprekken van een fractie (gepagineerd, 25 per pagina). Alleen metadata, geen berichtinhoud.

Response

{
  "data": [
    {
      "id": 1,
      "title": "Motie parkeerbeleid",
      "user": "Jan Smit",
      "visibility": "private",
      "created_at": "2026-04-14T10:30:00+02:00",
      "updated_at": "2026-04-14T11:15:00+02:00"
    }
  ],
  "current_page": 1,
  "last_page": 3,
  "per_page": 25,
  "total": 62
}

Foutcodes

401 Geen of ongeldig token.
403 Geen toegang. Gebruiker is geen partijbeheerder, of de fractie behoort niet tot jouw partij.
404 Fractie niet gevonden.
422 Validatiefout. Controleer de request body.
429 Rate limit bereikt. Wacht even en probeer opnieuw.