Skip to content

Government services

The citizen-facing service surface: pick a service from the catalogue, file an application, have an officer review it, and receive certificates, payments and appointments — the full cycle. UI: /me/services, /me/applications, /manager/requests.

Application lifecycle

The model follows the Dutch ZGW lesson and keeps progress (status) and outcome (result) separate — "rejected" says the case is closed but not why.

stateDiagram-v2
  [*] --> submitted: citizen files
  submitted --> registered: formally registered (SLA starts)
  registered --> in_review: officer picks it up
  in_review --> info_required: more evidence requested
  info_required --> in_review: citizen supplies it
  in_review --> approved: approved
  in_review --> rejected: rejected
  approved --> completed: output issued
  submitted --> cancelled: citizen withdraws
  info_required --> expired: deadline passed
Progress (status) Meaning
submitted Filed by the citizen
registered Formally registered — the SLA starts here
in_review Under review
info_required Waiting for additional evidence
approved · rejected Decided
completed Output (certificate / document) issued
cancelled · expired Withdrawn / timed out
Outcome (result) Meaning
granted Granted
refused Refused
withdrawn Withdrawn by the citizen
not_admissible Cannot be accepted
processed Processed without a decision (automatic)

Citizen endpoints

Endpoint What
GET /v1/gov/services · /life-events Catalogue, life events
GET /v1/gov/overview My overview (applications, notifications, payments)
GET /v1/gov/applications My applications
POST /v1/gov/applications File a new one
GET /v1/gov/applications/{id}/timeline History
POST /v1/gov/applications/{id}/provide-info Supply evidence
POST /v1/gov/applications/{id}/cancel Withdraw

Writes are rate limited to ~30/min; every row is protected by the RLS self policy.

Officer queue

Requires gov.review. UI: /manager/requests.

Endpoint What
GET /v1/gov/officer/stats Workload figures
GET /v1/gov/officer/queue The queue
GET /v1/gov/officer/queue/{id} Application details
POST /v1/gov/officer/queue/{id}/assign Assign to myself
POST /v1/gov/officer/queue/{id}/request-info Ask for evidence
POST /v1/gov/officer/queue/{id}/decide Decide (approve / reject + result)
POST /v1/gov/officer/queue/{id}/complete Issue the output and close

The officer RLS policy

Besides self · admin · service, the gov_* tables carry an officer policy. A caseworker only sees the applications that concern them — even a buggy query cannot expose other citizens' data.

Certificates

Endpoint What
GET /v1/gov/references Issued certificates
POST /v1/gov/references Create one (as a service output)

A certificate is one form of output produced when an application reaches completed. Where required it is issued as a PDF with a PAdES signature.

Notifications

Endpoint What
GET /v1/gov/notifications List
POST /v1/gov/notifications/{id}/read Mark one read
POST /v1/gov/notifications/read-all Mark all read

A notification is created on every status transition. UI: /me/notifications.

Payments

Endpoint What
GET /v1/gov/payments Payment list
POST /v1/gov/payments/{id}/pay Pay

UI: /me/payments. Payment rows attach to an application; once paid, the workflow continues.

Appointments

Endpoint What
GET /v1/gov/appointments My appointments
POST /v1/gov/appointments Book
POST /v1/gov/appointments/{id}/cancel Cancel

UI: /me/appointments.

Managing the catalogue

Catalogue entries (gov_services, gov_life_events) originate in the service registry, where the passport, versions and evidence requirements live. See Service registry.

The public read surface:

Endpoint What
GET /v1/catalog/services Published services
GET /v1/catalog/services/{id} Details
GET /v1/catalog/life-events Grouped by life event

Editing the catalogue requires gov.catalog or registry.manage.

Forwarding to downstream agencies

When one application concerns several agencies, the relay module handles it — assignment with SLAs and follow-up tracking. See Request relay.