Naar de inhoud
Ledenboek Ontwikkelaars

Concepten

Wat voor elk endpoint geldt. Lees dit voordat je een koppeling in productie neemt.

Fouten

Een fout komt altijd in dezelfde vorm, als application/problem+json volgens RFC 9457:

403 Forbidden
{
  "type": "https://developers.ledenboek.nl/errors/insufficient_scope",
  "title": "Onvoldoende rechten",
  "status": 403,
  "detail": "Deze sleutel heeft het recht leden:schrijven niet. Een beheerder kan een sleutel met dat recht aanmaken.",
  "instance": "/v2/members"
}
# -i shows the status line and headers; errors come as application/problem+json
curl -i https://api.ledenboek.nl/v2/members \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

Alle foutcodes

Code HTTP Titel
api_key_in_url 400 Sleutel in de URL
invalid_request 400 Ongeldig verzoek
invalid_api_key 401 Ongeldige sleutel
missing_api_key 401 Sleutel ontbreekt
subscription_required 402 Abonnement nodig
insufficient_scope 403 Onvoldoende rechten
module_disabled 404 Onderdeel staat uit
not_found 404 Niet gevonden
already_in_group 409 Al in de groep
already_registered 409 Al ingeschreven
event_full 409 Niet genoeg plekken
event_requires_payment 409 Betaling nodig
group_follows_subscription 409 Groep volgt de abonnementen
idempotency_in_progress 409 Verzoek wordt nog verwerkt
invoice_not_sendable 409 Factuur kan niet verstuurd worden
membership_already_ended 409 Lidmaatschap al beëindigd
recipient_without_email 409 Geen e-mailadres
registration_closed 409 Inschrijving gesloten
idempotency_key_reused 422 Idempotency-Key al gebruikt
validation_failed 422 Gegevens kloppen niet
rate_limited 429 Te veel aanroepen
internal_error 500 Interne fout

Paginering

Een lijst geeft een object met data, has_more en next_cursor. Je bladert met twee parameters:

Records komen in volgorde van id. Komen er tijdens het bladeren records bij, dan sla je niets over en zie je niets dubbel; met paginanummers lukt dat niet. Op de laatste pagina is has_more onwaar en next_cursor null.

Een voorbeeld staat in de quickstart.

Synchroniseren met updated_since

Houd je een eigen kopie bij, haal dan niet elke keer alles op. Met updated_since krijg je alleen records die op of na dat tijdstip zijn gewijzigd. Het tijdstip is ISO 8601, bijvoorbeeld 2026-10-01T00:00:00Z; een ander formaat geeft invalid_request. Je kunt het combineren met paginering.

Leg het moment vast waarop je synchronisatie begint en gebruik dat de volgende keer als updated_since. Zo mis je niets wat tijdens het ophalen veranderde.

curl "https://api.ledenboek.nl/v2/members?updated_since=2026-10-01T00:00:00Z&limit=100" \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY"

Een record dat helemaal is verwijderd, komt met updated_since niet meer terug. Vergelijk daarom af en toe de volledige lijst met je eigen kopie.

Idempotentie

Een POST accepteert de header Idempotency-Key: een unieke waarde van hooguit 255 tekens, bijvoorbeeld een UUID. Stuur je hetzelfde verzoek opnieuw met dezelfde sleutel, dan wordt er niets dubbel aangemaakt.

Sleutels worden 24 uur bewaard. Bewaar de sleutel bij je eigen record voordat je het verzoek stuurt, dan gebruikt een nieuwe poging vanzelf dezelfde.

Limieten

Per sleutel mag je 600 aanroepen per minuut doen, met een testsleutel 120. Het venster is een vaste minuut. Elk antwoord vertelt hoeveel ruimte er nog is:

HeaderBetekenis
RateLimit-LimitAanroepen per minuut voor deze sleutel.
RateLimit-RemainingWat er in deze minuut nog over is.
RateLimit-ResetSeconden tot de volgende minuut begint.
Retry-AfterAlleen bij 429: hoeveel seconden je moet wachten.

Boven de limiet krijg je rate_limited met status 429. Wacht dan het aantal seconden uit Retry-After.

# The headers show how much room is left in this minute
curl -s -D - -o /dev/null https://api.ledenboek.nl/v2/organization \
  -H "Authorization: Bearer $LEDENBOEK_API_KEY" | grep -i ratelimit

Versies

De versie staat in het pad: /v2. Daarvoor geldt: