Skip to content

VOG Filtered People API

This document describes how to retrieve the list of volunteers who need a new or renewed VOG (Verklaring Omtrent het Gedrag), including their KNVB IDs. This is the same data shown on the VOG tab in the frontend.

GET /rondo/v1/people/filtered

Permission: Authenticated users only

To retrieve exactly the people shown on the VOG tab, use these parameters:

NameValueDescription
huidig_vrijwilliger1Only current volunteers
vog_missing1People without VOG date
vog_older_than_years3People whose VOG is older than 3 years
per_page100Results per page (max 100)
page1Page number
GET /wp-json/rondo/v1/people/filtered?huidig_vrijwilliger=1&vog_missing=1&vog_older_than_years=3&per_page=100&page=1

The combination of vog_missing=1 and vog_older_than_years=3 creates an OR condition:

  • People with no VOG date (new volunteers), OR
  • People whose VOG date is older than 3 years (need renewal)
{
"people": [
{
"id": 123,
"first_name": "Jan",
"infix": "de",
"last_name": "Vries",
"modified": "2026-01-15 10:30:00",
"thumbnail": "https://example.com/wp-content/uploads/jan-de-vries-150x150.jpg",
"labels": ["Vrijwilliger"],
"acf": {
"first_name": "Jan",
"infix": "de",
"last_name": "Vries",
"knvb-id": "KNVB12345678",
"datum-vog": "",
"contact_info": [
{
"contact_type": "email",
"contact_value": "jan@example.com",
"contact_label": "Email"
},
{
"contact_type": "mobile",
"contact_value": "06-12345678",
"contact_label": "Mobile"
}
],
"vog_email_sent_date": "2026-01-10",
"vog_justis_submitted_date": ""
}
}
],
"total": 25,
"page": 1,
"total_pages": 1
}
FieldLocationDescription
KNVB IDacf.knvb-idThe person’s KNVB registration number
VOG dateacf.datum-vogDate of last VOG (empty = new volunteer)
Emailacf.contact_info[]Find entry where contact_type = email
Phoneacf.contact_info[]Find entry where contact_type = phone or mobile
VOG email sentacf.vog_email_sent_dateDate the VOG request email was sent
Justis submittedacf.vog_justis_submitted_dateDate submitted to Justis system

These additional filters narrow down the VOG list:

NameValuesDescription
vog_typenieuw, vernieuwingnieuw = no VOG date, vernieuwing = expired VOG
vog_email_statussent, not_sentFilter by whether VOG email has been sent
vog_justis_statussubmitted, not_submittedFilter by Justis submission status
GET /wp-json/rondo/v1/people/filtered?huidig_vrijwilliger=1&vog_type=nieuw&per_page=100
GET /wp-json/rondo/v1/people/filtered?huidig_vrijwilliger=1&vog_type=vernieuwing&vog_older_than_years=3&per_page=100
GET /wp-json/rondo/v1/people/filtered?huidig_vrijwilliger=1&vog_missing=1&vog_older_than_years=3&vog_email_status=not_sent&per_page=100
NameValuesDefaultDescription
orderbyfirst_name, last_name, modified, custom_datum-vog, custom_vog_email_sent_date, custom_vog_justis_submitted_datefirst_nameSort field
orderasc, descascSort direction

The VOG tab defaults to sorting by custom_datum-vog ascending (oldest/empty VOG dates first).

To get just the KNVB IDs from the response, extract acf.knvb-id from each person in the people array:

const response = await fetch('/wp-json/rondo/v1/people/filtered?huidig_vrijwilliger=1&vog_missing=1&vog_older_than_years=3&per_page=100');
const data = await response.json();
const knvbIds = data.people
.map(person => person.acf?.['knvb-id'])
.filter(Boolean);

A person is considered a “current volunteer” (huidig_vrijwilliger=1) if they have an active position where:

  • The position is in a commissie (any role), OR
  • The position is in a team with a staff role (not a player role)

Player roles (not counted as volunteer): Aanvaller, Verdediger, Keeper, Middenvelder, Teamspeler, Speler, Champions league, Zondag recranten, Zaterdag recreanten

Honorary/membership roles (excluded): Donateur, Erelid, Lid van Verdienste, Verenigingslid voor het leven (contributievrij)

Commissies listed in the rondo_vog_exempt_commissies option are also excluded from volunteer status.