Naar de inhoud
Ledenboek Ontwikkelaars

Quickstart

In vier stappen van een sleutel naar een werkende koppeling. Reken op tien minuten.

1. Een sleutel maken

Een beheerder van de vereniging maakt sleutels aan in Ledenboek onder Instellingen → API-sleutels → Nieuwe sleutel. Geef de sleutel een naam waaraan je later herkent waarvoor hij is, en kies de rechten. Standaard staat alles op lezen en niets op schrijven; voor stap 4 heb je ook leden:schrijven nodig.

De sleutel wordt één keer getoond. Zet hem in een omgevingsvariabele en niet in je code:

shell
export LEDENBOEK_API_KEY="lb_test_..."

Werk je in een voorbeeldvereniging, dan begint de sleutel met lb_test_. Daar gaan geen mails en geen betaalverzoeken de deur uit, dus je kunt alles proberen zonder echte leden te raken.

2. Je eerste aanroep

GET /v2/organization werkt met elke sleutel en geeft de vereniging terug, de onderdelen die aan staan en de rechten van je sleutel. Een goede eerste controle dat alles klopt.

curl https://api.ledenboek.nl/v2/organization \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

Het antwoord:

200 OK
{
  "object": "organization",
  "id": 42,
  "name": "WSV De Kaag",
  "slug": "wsv-de-kaag",
  "country": "Nederland",
  "language": "nl",
  "website_url": "https://www.wsvdekaag.nl",
  "modules": {
    "groups": true,
    "committees": true,
    "participants": false,
    "relationships": false,
    "events": true,
    "invoicing": true
  },
  "api_key": {
    "name": "Koppeling met de website",
    "prefix": "lb_test_8kQz",
    "environment": "test",
    "scopes": [
      "leden:lezen",
      "leden:schrijven"
    ]
  }
}

Krijg je een 401, kijk dan of de header precies Authorization: Bearer lb_... is. Bij een 402 heeft de vereniging geen geldig abonnement.

3. Door leden bladeren

Met het recht leden:lezen haal je leden op met GET /v2/members. Een lijst komt in pagina's van maximaal 100 records (standaard 25). Zolang has_more waar is, vraag je de volgende pagina op door next_cursor mee te geven als starting_after.

curl "https://api.ledenboek.nl/v2/members?limit=100" \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

# Next page: pass next_cursor from the previous response
curl "https://api.ledenboek.nl/v2/members?limit=100&starting_after=1234" \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

Een pagina ziet er zo uit (ingekort; alle velden staan in de referentie):

200 OK
{
  "object": "list",
  "data": [
    {
      "object": "member",
      "id": 1234,
      "membership_number": "L042",
      "first_name": "Anna",
      "last_name": "de Vries",
      "email": "anna@example.com",
      "status": "active",
      "member_since": "2024-03-01",
      "created_at": "2024-03-01T10:12:00+01:00",
      "updated_at": "2026-10-02T08:30:00+02:00"
    }
  ],
  "has_more": true,
  "next_cursor": "1234"
}

4. Een lid aanmaken

Met leden:schrijven maak je een lid aan met POST /v2/members. Stuur een Idempotency-Key mee: een unieke waarde per nieuw lid, bijvoorbeeld een UUID. Valt de verbinding weg en stuur je hetzelfde verzoek opnieuw met dezelfde sleutel, dan krijg je het eerste antwoord terug en staat het lid er niet twee keer in.

curl https://api.ledenboek.nl/v2/members \
  -X POST \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2a3e-8d4b-4c1e-9a7f-2b5d0e9c4a11" \
  -d '{"first_name": "Anna", "last_name": "de Vries", "email": "anna@example.com"}'

Klopt er een veld niet, dan krijg je 422 met per veld wat er mis is:

422 Unprocessable Entity
{
  "type": "https://developers.ledenboek.nl/errors/validation_failed",
  "title": "Gegevens kloppen niet",
  "status": 422,
  "detail": "Een of meer velden zijn niet goed ingevuld; zie errors.",
  "instance": "/v2/members",
  "errors": [
    {
      "field": "email",
      "code": "invalid",
      "message": "E-mail is ongeldig"
    }
  ]
}

Verder