Ga naar hoofdinhoud
Terug naar Maatwerk Software
9 min lezen19 september 2026Gecontroleerd op 15 september 2026

e-Boekhouden API uitgelegd: SOAP of REST v1

e-Boekhouden draait SOAP en REST v1 naast elkaar, zonder aangekondigde einddatum. De keuze, de limieten en de valkuilen per veld.

Bram DokmanOprichter & AI-specialist

Oprichter van CleverTech AI, met 12+ jaar ervaring in software development, online marketing en cloud-infrastructuur. BSc Science & Innovation Management (Universiteit Utrecht).

Deze pagina is gecontroleerd op

Ontwikkelaar bekijkt op een scherm de JSON-respons van de e-Boekhouden REST-API naast een boekhoudoverzicht
Maatwerk Software

Kort antwoord

e-Boekhouden heeft twee werkende koppelvlakken naast elkaar: de oude SOAP-API op soap.e-boekhouden.nl en REST v1 op api.e-boekhouden.nl, en de SOAP-handleiding (versie 5.7) noemt geen einddatum. Kies voor nieuwbouw REST — JSON, een API-token dat je inwisselt voor een sessietoken, en resources die SOAP mist — en laat een werkende SOAP-koppeling staan zolang er geen functionele aanleiding is. Alleen AutoLogin zit uitsluitend in SOAP. Reken bij beide op pollen in plaats van webhooks, en op drie velden waar boekingen in productie op stuklopen: de mutatiesoort, de btw-code en het onderscheid tussen ledgerId en grootboekcode.

Uit de praktijk · volgende stap

Van lezen naar doen.

e-Boekhouden.nl heeft twee werkende API's tegelijk: de oude SOAP-API op soap.e-boekhouden.nl en de nieuwe REST-API v1 op api.e-boekhouden.nl. Beide zijn live, en in de officiële SOAP-handleiding (versie 5.7) staat geen enkele einddatum of uitfaseringsmelding (e-Boekhouden, Handleiding Soap 5.7{target="_blank" rel="noopener noreferrer"}).

Dat maakt de keuze tussen die twee een ontwerpbeslissing, geen deadline — precies andersom dan bij Nmbrs, waar de SOAP-API op 1 maart 2027 stopt.

Hieronder de beslisinformatie voor wie daadwerkelijk bouwt: authenticatie, de endpoints die ertoe doen, de harde limieten, en de velden waarop boekingen in productie stuklopen. Waar dit artikel op de techniek inzoomt, behandelt onze gids over maatwerk software de bouw- en kostenkant.

Waarom er twee API's naast elkaar staan

De SOAP-API stamt uit het tijdperk waarin een koppeling een sessie opende, wat calls deed en weer afsloot. De REST-API v1 doet hetzelfde werk met JSON, een API-token en filterbare querystrings.

Het praktische verschil zit in wat ze kunnen, niet in het protocol. De REST-API heeft resources die SOAP niet heeft: e-mailsjablonen, factuursjablonen en leden, plus schrijftoegang op producten en kostenplaatsen waar SOAP die alleen kan uitlezen (e-Boekhouden API-documentatie{target="_blank" rel="noopener noreferrer"}).

Andersom heeft SOAP één functie die REST mist: AutoLogin, waarmee je een gebruiker rechtstreeks de webomgeving in stuurt.

Onze vuistregel bij nieuwbouw: REST, tenzij je een bestaande SOAP-koppeling onderhoudt die werkt. Een werkende integratie herbouwen zonder functionele aanleiding is kosten maken zonder opbrengst.

Van token naar sessie: de REST-authenticatie in één call

De REST-API gebruikt geen OAuth. Je maakt in de accountinstellingen een API-token aan, wisselt dat token in voor een kortlevend sessietoken, en stuurt dát token mee als Authorization-header.

Bash
curl -X POST https://api.e-boekhouden.nl/v1/session \
  -H "Content-Type: application/json" \
  -d '{ "accessToken": "JOUW_API_TOKEN", "source": "CleverTech" }'

Het veld source is verplicht en mag maximaal tien tekens lang zijn, met alleen letters, cijfers, underscores en spaties. Een waarde buiten dat patroon levert foutcode API_SESSION_002 op.

Support gebruikt die code om jouw verkeer terug te vinden, dus kies iets herkenbaars.

Daarna gaat het sessietoken mee bij elke call:

Bash
curl "https://api.e-boekhouden.nl/v1/relation?limit=100&offset=0" \
  -H "Authorization: SESSIETOKEN"

Sluit de sessie af met DELETE /v1/session; dat trekt het sessietoken in. Krijg je API_SESSION_004 terug, dan is je API-token verlopen en moet je een nieuw token aanmaken.

Eén verschil met Exact Online is hier belangrijk. Waar de Exact Online API elke call naar een division routeert, hangt een e-Boekhouden-token aan de administratie waarin het is aangemaakt.

Meerdere administraties bedienen betekent dus meerdere tokens — behalve voor accountants, die via GET /v1/administration de beheerde administraties opvragen.

De SOAP-variant, en de valkuil die niemand verwacht

SOAP werkt met OpenSession(Username, SecurityCode1, SecurityCode2), geeft een sessie-ID terug, en verwacht dat ID plus SecurityCode2 bij elke volgende call. Die gegevens vind je onder Beheer > Instellingen > API/SOAP.

De valkuil staat in de FAQ van de handleiding zelf: beveiligingscode 1 verandert zodra het wachtwoord van het account wordt aangepast. Een gebruiker die netjes zijn wachtwoord roteert, legt daarmee de koppeling stil.

Dit is de e-Boekhouden-storing die we het vaakst terugzien, en hij is niet te onderscheiden van een ongeldige login. Bouw je op SOAP, monitor dan expliciet op foutcode E001.1 ("verkeerde sessiegegevens").

De endpoints die er in de praktijk toe doen

REST v1 kent twaalf resources, verdeeld over 24 endpoints. Vier daarvan dragen vrijwel elke koppeling.

Endpoint Waarvoor Let op
/v1/relation Debiteuren en crediteuren Filter op code, email, name, city; alleen name is verplicht bij aanmaken
/v1/mutation Boekingen in alle soorten type, date en ledgerId zijn verplicht
/v1/invoice Verkoopfacturen incl. verzenden Vraagt templateId; sjablonen haal je op via /v1/invoicetemplate
/v1/ledger Grootboekrekeningen en saldi /v1/ledger/balances geeft alle saldi in één call

Voor debiteurenbewaking is er /v1/mutation/invoice/outstanding: alle openstaande facturen, filterbaar op debiteur of crediteur. Dat scheelt het zelf reconstrueren van de openstaande post uit mutaties, de rekensom waar in maatwerkkoppelingen de meeste afwijkingen ontstaan.

Bij de zoek-endpoints werkt paginering overal hetzelfde: limit staat standaard op 100 en mag tussen 1 en 2000 liggen, offset begint op 0. Een limit daarbuiten geeft PAGE_001 terug.

Mutatiesoorten: het veld waarop boekingen stuklopen

type is een code van 1 tot en met 7, als string meegestuurd. De betekenis bepaalt wat er verder verplicht is.

Type Betekenis
1 Inkoopfactuur ontvangen
2 Verkoopfactuur verstuurd
3 Factuurbetaling ontvangen
4 Factuurbetaling verstuurd
5 Geld ontvangen
6 Geld verstuurd
7 Memoriaalboeking

Twee regels uit de specificatie kosten de meeste debugtijd. De eerste: bij de typen 1, 2, 5 en 6 mag het grootboek op een regel niet in de categorie FIN, CRED of DEB vallen, terwijl bij type 7 elk grootboek mag.

Doe je dat toch, dan volgt MUT_106.

De tweede: bij de typen 3 en 4 is invoiceNumber op de regel verplicht, want dat veld koppelt de betaling aan de juiste factuur. Afletteren is bij e-Boekhouden dus geen apart endpoint maar een regelveld.

JSON
{
  "type": "2",
  "date": "2026-10-28",
  "ledgerId": 42,
  "invoiceNumber": "F-2026-0042",
  "relationId": 5012,
  "inExVat": "EX",
  "description": "Webshoporder 8841",
  "rows": [
    { "ledgerId": 57, "vatCode": "HOOG_VERK_21", "amount": 250.00 }
  ]
}

Verwar ledgerId niet met je grootboekcode. De API adresseert grootboekrekeningen op hun eigen id, terwijl code — het nummer dat je in je rekeningschema ziet — een apart veld is.

Haal die mapping één keer op via GET /v1/ledger en cache hem.

Let op description: dat veld mag maximaal vijftig tekens lang zijn, net als invoiceNumber. Een omschrijving die je uit een orderregel samenstelt, past daar zelden in, dus kort hem in je eigen code af op een betekenisvol punt.

Een mutatie mag maximaal 500 regels bevatten (MUT_101 daarboven), en dezelfde grens geldt voor factuurregels. Voor een maandelijkse verzamelboeking is dat ruim, voor een jaarimport in één call niet.

Btw-codes: zestien in de enum, twintig in de tabel

De btw-code op een regel is een string, geen percentage. Voor Nederland gelden onder meer HOOG_VERK_21 (21% verkoop), LAAG_VERK_9 (9% verkoop), VERL_VERK (verlegd 21%), BI_EU_VERK_D (diensten binnen de EU, 0%) en GEEN.

Hier zit een subtiliteit die je alleen ziet als je de documentatie helemaal leest. De formele enum in de API-specificatie telt zestien codes, terwijl de NL-tabel in diezelfde documentatie er twintig noemt.

Het verschil bestaat uit vier codes, waarvan er drie een afkapdatum van 1 januari 2019 dragen: LAAG_VERK, LAAG_INK en VERL_INK_L. Dat zijn de oude 6%-codes: boek je met een datum vóór 2019, dan geldt 6%, daarna 9%.

Voor een historische import is dat precies het verschil tussen een kloppende en een niet-kloppende btw-aangifte.

Twee codes hebben een eigen regel. AFW en AFW_VERK betekenen "afwijkend tarief" en werken alleen samen met een expliciet vatAmount op de regel, want de API rekent dan niets uit.

Gebruik dat niet als vangnet voor codes die je niet kent; je haalt er de btw-controle mee onderuit.

Het veld inExVat bepaalt of de bedragen inclusief (IN) of exclusief (EX) btw zijn. Eén verkeerde waarde in een import van duizend regels is 21% verschil over de hele boeking.

Limieten: wat er wél en niet gedocumenteerd is

Dit is het punt waarop e-Boekhouden afwijkt van wat je van een moderne API verwacht.

Wat SOAP REST v1
Calls per dag 10.000 (foutcode E003.3) Niet gedocumenteerd
GetMutaties Max. 5.000 calls per maand, nooit meer dan de laatste 500 mutaties Vervangen door limit/offset tot 2000
Regels per boeking Niet gedocumenteerd 500 (MUT_101)
Webhooks Expliciet niet ondersteund Geen webhook-endpoints in de specificatie

De SOAP-limieten staan zwart op wit in de handleiding. Voor REST publiceert e-Boekhouden geen callplafond, en de specificatie noemt geen HTTP 429 bij de mogelijke antwoorden.

Behandel dat niet als "geen limiet" maar als "onbekende limiet": bouw hoe dan ook backoff en retry in, en meet je eigen callvolume. Een koppeling die onder een ongedocumenteerde grens duikt, doet dat stil.

Geen webhooks, dus je pollt

De SOAP-handleiding is er ondubbelzinnig over: e-Boekhouden kan geen URL's aanroepen wanneer er iets in de boekhouding verandert, de actie start altijd vanuit een call naar de API. De REST-specificatie bevat evenmin webhook-endpoints.

Dat heeft directe gevolgen voor je architectuur. Waar een Exact-koppeling zich op gebeurtenissen kan abonneren, moet een e-Boekhouden-koppeling periodiek kijken of er iets nieuws is.

Plan dat interval op wat het proces echt nodig heeft: betalingen ophalen elk kwartier is bijna altijd genoeg, voorraadstanden elke minuut vrijwel nooit.

Dezelfde afweging speelt bij Moneybird, waar de API wél webhooks kent — als je nog vrij bent in je pakketkeuze, is dat een argument dat pas ná de go-live gaat tellen.

Waar AI het overtypen stopt: vóór de koppeling

Een API verplaatst gestructureerde data. Het werk dat in het MKB de meeste uren kost, zit ervóór: een PDF-factuur die iemand leest en overtypt.

Daar zit de winst, en die staat los van de vraag of je SOAP of REST kiest.

Twee toepassingen die we in koppelingen inbouwen:

  • Factuurherkenning vóór de boeking. Een taalmodel leest de inkoopfactuur en levert leverancier, factuurnummer, datum, bedragen en btw-uitsplitsing als JSON — precies de velden die POST /v1/mutation verwacht.
  • Grootboek- en btw-voorstel bij de mutatie. Op basis van eerdere boekingen van dezelfde relatie stelt het model ledgerId en vatCode voor, met een zekerheidsscore.

De harde eis in beide gevallen: een voorstel is geen boeking. Onder een ingestelde drempel gaat de regel naar een goedkeuringsscherm in plaats van naar de API.

Wie dat weglaat, automatiseert fouten sneller dan een mens ze kan vinden. Hoe wij die laag bouwen, staat op onze pagina over software met AI.

Wanneer een standaardkoppeling volstaat

Voor de gangbare stromen hoef je niets te bouwen. e-Boekhouden heeft een koppelingenoverzicht met kant-en-klare integraties voor webshops, banken, kassasystemen, urenregistratie, salaris- en rapportagesoftware (e-Boekhouden, Koppelingen{target="_blank" rel="noopener noreferrer"}).

Draait je webshop op een gangbaar platform en is je btw standaard, dan is dat de goedkoopste route.

Maatwerk wordt pas verdedigbaar bij een van deze vier:

  • Je bronsysteem staat niet in het koppelingenoverzicht, bijvoorbeeld een eigen ordersysteem of een branchepakket.
  • Je grootboek- of kostenplaatsmapping wijkt per productgroep, klantgroep of project af.
  • Je hebt meerdere administraties en dus meerdere tokens, met logica die bepaalt wat waar hoort.
  • Je wil documentherkenning of classificatie vóór de boeking, zoals hierboven.

Een standaardstroom van webshop naar boekhouding bouwen we voor €2.000 tot €5.000 eenmalig plus €150 tot €350 per maand beheer; de volledige opbouw en wat daar technisch in zit, staat op boekhoudkoppeling en ERP-integratie. Gaat het om meer dan twee systemen, dan wil je een koppeling tussen systemen laten maken.

Twijfel je aan welke kant van die streep jouw scenario valt? Leg het ons kort voor — je krijgt een eerlijk antwoord over standaard versus maatwerk, inclusief kostenindicatie.

Opgesteld met AI-ondersteuning, geredigeerd en inhoudelijk verantwoord door Bram Dokman.

Tags:#API#Koppelingen#Boekhouding#Maatwerk software
Delen:
Veelgestelde vragen

Antwoorden over dit artikel

Wat is het verschil tussen de SOAP-API en de REST-API van e-Boekhouden?

De SOAP-API werkt met een sessie die je opent met Username, SecurityCode1 en SecurityCode2; de REST-API v1 wisselt een API-token in voor een kortlevend sessietoken en spreekt JSON. REST heeft daarnaast resources die SOAP niet heeft, zoals e-mailsjablonen, factuursjablonen en leden, plus schrijftoegang op producten en kostenplaatsen die SOAP alleen kan uitlezen. Voor nieuwbouw is REST de logische keuze; een werkende SOAP-koppeling hoef je niet zonder aanleiding te herbouwen.

Stopt e-Boekhouden met de SOAP-API?

In de officiële SOAP-handleiding (versie 5.7) staat geen einddatum of uitfaseringsmelding, en het koppelvlak is gewoon in gebruik. Dat is anders dan bij Nmbrs, waar de SOAP-API een harde einddatum heeft. Reken er wel op dat nieuwe functionaliteit alleen in REST landt en houd je koppeling migreerbaar.

Hoe werkt authenticatie op de e-Boekhouden REST-API?

Je maakt een API-token aan in de accountinstellingen en stuurt dat met een POST naar /v1/session, samen met een verplicht source-veld van maximaal tien tekens. Je krijgt een sessietoken terug dat je als Authorization-header meestuurt bij elke volgende call. Met DELETE /v1/session trek je dat sessietoken weer in.

Welke rate limits kent de e-Boekhouden API?

Voor SOAP is de grens gedocumenteerd: maximaal 10.000 calls per dag (foutcode E003.3), en GetMutaties kent bovendien een maximum van 5.000 calls per maand en geeft nooit meer dan de laatste 500 mutaties terug. Voor de REST-API publiceert e-Boekhouden geen callplafond en noemt de specificatie geen HTTP 429. Bouw daarom hoe dan ook backoff en retry in en meet je eigen callvolume.

Ondersteunt de e-Boekhouden API webhooks?

Nee. De SOAP-handleiding stelt expliciet dat e-Boekhouden geen URL’s kan aanroepen bij wijzigingen in de boekhouding: de actie start altijd vanuit een call naar de API. De REST-specificatie bevat evenmin webhook-endpoints. Je koppeling moet dus periodiek pollen, met een interval dat past bij het proces.

Hoe letter ik betalingen af via de e-Boekhouden API?

Afletteren is geen apart endpoint maar een veld. Je boekt een mutatie van type 3 (factuurbetaling ontvangen) of 4 (factuurbetaling verstuurd) en vult op de regel het veld invoiceNumber met het factuurnummer; dat koppelt de betaling aan de juiste factuur. Openstaande posten haal je op via /v1/mutation/invoice/outstanding.

Welke btw-codes gebruikt de e-Boekhouden API?

Btw gaat als code mee, niet als percentage: HOOG_VERK_21 voor 21% verkoop, LAAG_VERK_9 voor 9%, VERL_VERK voor verlegd 21% en GEEN voor geen btw. Let op de oude 6%-codes LAAG_VERK en LAAG_INK met afkapdatum 1 januari 2019 — die gelden alleen voor boekingen van vóór die datum. Bij AFW en AFW_VERK levert de API geen berekening en moet je zelf een vatAmount meegeven.

Wat kost een koppeling met e-Boekhouden?

Een standaardstroom van webshop naar boekhouding bouwt CleverTech AI voor €2.000 tot €5.000 eenmalig, plus €150 tot €350 per maand voor monitoring en beheer. Past je situatie binnen het bestaande koppelingenoverzicht van e-Boekhouden, dan is een kant-en-klare connector goedkoper en adviseren we die ook.

Mijn e-Boekhouden-koppeling is ineens gestopt — waar zoek ik eerst?

Bij SOAP vrijwel altijd bij het wachtwoord: beveiligingscode 1 verandert zodra het wachtwoord van het account wordt aangepast, en een gebruiker die netjes roteert legt daarmee de koppeling stil. De foutmelding is niet te onderscheiden van een ongeldige login, dus monitor expliciet op foutcode E001.1. Bij REST wijst API_SESSION_004 op een verlopen API-token, dat je opnieuw moet aanmaken in de accountinstellingen.

Kan ik met één API-token meerdere administraties benaderen?

Nee. Een e-Boekhouden-token hangt aan de administratie waarin het is aangemaakt, dus meerdere administraties betekent meerdere tokens en logica die bepaalt wat waar hoort. Dat wijkt af van Exact Online, waar elke call naar een division wordt gerouteerd. Uitzondering zijn accountants: die vragen de beheerde administraties op via GET /v1/administration.

Wat betekent foutcode MUT_106 bij het boeken van een mutatie?

Dat je op een regel een grootboek gebruikt dat bij die mutatiesoort niet mag. Bij de typen 1, 2, 5 en 6 mag het grootboek niet in de categorie FIN, CRED of DEB vallen; alleen bij type 7 (memoriaal) is elk grootboek toegestaan. Controleer de categorie van het grootboek vóór je de call doet, niet pas op de foutmelding.

Waarom werkt mijn grootboeknummer niet als ledgerId?

Omdat het twee verschillende velden zijn. De API adresseert grootboekrekeningen op hun eigen id, terwijl code — het nummer dat je in je rekeningschema ziet — daarnaast bestaat. Haal die mapping één keer op met GET /v1/ledger en cache hem; alle saldi in één call krijg je via /v1/ledger/balances.

Welke veldlimieten kent een mutatie in de e-Boekhouden API?

Drie die je in productie tegenkomt. Een mutatie mag maximaal 500 regels bevatten (daarboven volgt MUT_101), en dezelfde grens geldt voor factuurregels. De velden description en invoiceNumber zijn allebei maximaal vijftig tekens, dus een omschrijving die je uit orderregels samenstelt moet je in je eigen code op een betekenisvol punt afkorten. Bij de zoek-endpoints ligt limit tussen 1 en 2000, met 100 als standaard; daarbuiten volgt PAGE_001.

Wanneer volstaat een standaardkoppeling en wanneer wordt het maatwerk?

Staat je bronsysteem in het koppelingenoverzicht van e-Boekhouden en is je btw standaard, dan is de kant-en-klare connector de goedkoopste route. Maatwerk wordt pas verdedigbaar in vier gevallen: je bronsysteem staat er niet in (eigen ordersysteem, branchepakket), je grootboek- of kostenplaatsmapping wijkt per productgroep, klantgroep of project af, je hebt meerdere administraties met eigen tokens, of je wil documentherkenning vóór de boeking.

Kan AI facturen inlezen voordat ze de e-Boekhouden API in gaan?

Ja, en dat is waar in het MKB de meeste uren zitten — niet in de koppeling zelf. Een taalmodel leest de inkoopfactuur en levert leverancier, factuurnummer, datum, bedragen en btw-uitsplitsing als JSON: precies de velden die POST /v1/mutation verwacht. Op basis van eerdere boekingen van dezelfde relatie kan het ook ledgerId en vatCode voorstellen, met een zekerheidsscore. Harde eis: een voorstel is geen boeking, en onder een ingestelde drempel gaat de regel naar een goedkeuringsscherm in plaats van naar de API.

Volgende stap

Wat dit in jouw situatie betekent, weet je snel

Je legt je vraag voor, wij zeggen wat haalbaar is, wat het ongeveer kost en wat de slimste eerste stap is. Ook als dat betekent: nog even niet bouwen.

Liever eerst schriftelijk? Stel je vraag via het formulier.
Liever eerst zelf checken? Download de AI Readiness Checklist.
Of begin met de gratis AI-scan.
5,0op Google
  • Zeer fijne samenwerking! Professioneel, deskundig en vooral erg oplossingsgericht. Ze denken goed mee, communiceren duidelijk en leveren kwaliteit. Een betrouwbare en innovatieve techpartner die ik zeker kan aanbevelen!

    Spark O.

  • Heel goed geholpen duidelijke uitleg en werken heel hard voor je en denken heel goed mee wat belangrijk is. Duidelijk heel veel kennis van zaken. Echt een aanrader.

    Maarten B.

Verder lezen

Meer in deze serie

Blijf op de hoogte

Ontvang praktische AI-inzichten in je inbox. Geen spam, alleen waardevolle content.

Geen spam · max 2x per maand · altijd opzegbaar

Je gegevens worden alleen gebruikt voor het verzenden van de nieuwsbrief. Uitschrijven kan op elk moment.

Van kennis naar resultaat

Wat betekent dit voor jouw bedrijf?

We denken vrijblijvend mee over wat dit concreet zou opleveren — vaste prijs, vaste deadline.