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

Twinfield API uitgelegd: SOAP, OAuth en credits

Twinfield koppelen gaat via SOAP en XML, met OAuth 2.0 ervoor en een creditlimiet erachter. De koppelvlakken, het dimensiemodel en de valkuilen op een rij.

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

Twee collega’s bekijken op een monitor een grootboekoverzicht naast het XML-log van een boekhoudkoppeling
Maatwerk Software

Kort antwoord

De Twinfield API is geen REST-API maar een reeks SOAP-webservices met XML-berichten; alleen het inloggen is modern, via OAuth 2.0 en OpenID Connect bij Wolters Kluwer. Na het inloggen lees je de claim twf.clusterUrl uit je access token: die basis-URL verschilt per klant en is het adres voor al je calls. Je doorvoer loopt niet in calls maar in credits — 1 per query, 3 per elk ander verzoek — en zonder certificering blijft je ClientId op 50 credits per minuut steken, ongeveer 16 boekingen.

Uit de praktijk · volgende stap

Van lezen naar doen.

De Twinfield API is geen REST-API: het is een verzameling SOAP-webservices met XML-berichten, bereikbaar op een clusterspecifieke URL. Inloggen gaat wel modern, via OAuth 2.0 en OpenID Connect bij Wolters Kluwer.

Dat onderscheid kost teams hun eerste sprint. Wie een REST-client pakt en voor elke klant op accounting.twinfield.com mikt, krijgt geen nette 404 maar stille authenticatiefouten (Apideck{target="_blank" rel="noopener noreferrer"}, 2026).

Hieronder de koppelvlakken in de volgorde waarin je ze tegenkomt: inloggen, het offices- en dimensiemodel, data ophalen, de creditlimieten en de fouten die pas onder productievolume zichtbaar worden. Het bredere plaatje staat in onze gids over maatwerk software; voor de vergelijking met het andere grote NL-pakket zie de Exact Online API uitgelegd.

Geen REST-endpoints, wel een rij SOAP-services

De boekhoudkern van Twinfield is uitsluitend via SOAP bereikbaar; een native REST-API bestaat niet (Chift{target="_blank" rel="noopener noreferrer"}, 2026). Het officiele overzicht noemt alleen WSDL-endpoints, verdeeld over een generieke dienst en een reeks getypeerde diensten.

De generieke dienst is ProcessXml. Die verwerkt XML-berichten voor stamgegevens en transacties: gebruikers, dimensies, facturen en boekingen lopen er allemaal doorheen (Twinfield, Web services overview{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

Daarnaast staan er getypeerde services voor werk waar ProcessXml hooguit een beperkte variant voor kent: perioden openen en sluiten, bankafschriften en verwijderde transacties. Afletteren en periodevalidatie kun je ook via ProcessXml doen, met match en period als rootelement.

Text
https://api.<cluster>.twinfield.com/webservices/processxml.asmx?wsdl
https://api.<cluster>.twinfield.com/webservices/finder.asmx?wsdl
https://api.<cluster>.twinfield.com/webservices/matching.asmx?wsdl
https://api.<cluster>.twinfield.com/webservices/periodservice.svc?wsdl
https://api.<cluster>.twinfield.com/webservices/bankstatementservice.svc?wsdl

Praktisch gevolg: je bouwt tegen XML-schema's, niet tegen JSON-modellen. Reken op een XML-serialisatielaag en op handwerk voor foutafhandeling, want SOAP-fouten komen terug als exceptie met een detailblok, niet als statuscode met een body.

Inloggen bij Wolters Kluwer, en daarna pas je eigen cluster

Twinfield draait OpenID Connect op OAuth 2.0 en ondersteunt twee flows: implicit en authorization code (Twinfield, OpenID Connect authentication{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026). Voor een koppeling met een server-backend is authorization code de juiste keuze.

De tokenlevensduur verschilt per flow, en dat verschil is groter dan je zou verwachten.

Element Waarde Waar je op let
Access token (implicit) 43.200 seconden (12 uur) Alleen voor clients zonder backend
Access token (authorization code) 3.600 seconden (1 uur) Vernieuwen via refresh token
Refresh token 788.940.000 seconden (25 jaar) Vraag offline_access aan bij autorisatie
Verplichte scope twf.organisationUser Zonder deze scope geen login

Die refresh token van 25 jaar is een valkuil in vermomming. Hij verloopt praktisch nooit, maar wordt wel stil ingetrokken zodra een gebruiker wordt gedeactiveerd of zijn wachtwoord roteert — zonder waarschuwing vooraf (Apideck, 2026).

Na het inloggen komt de stap die de meeste integraties overslaan. Je valideert het access token en leest daaruit de claim twf.clusterUrl; dat is de basis-URL voor al je SOAP-calls.

Bash
# 1. Token ophalen (authorization code flow)
curl -s https://login.twinfield.com/auth/authentication/connect/token \
  -d grant_type=authorization_code \
  -d code="$CODE" \
  -d client_id="$CLIENT_ID" \
  -d client_secret="$CLIENT_SECRET" \
  -d redirect_uri="$REDIRECT_URI"

# 2. Cluster bepalen — deze URL is per klant anders
curl -s "https://login.twinfield.com/auth/authentication/connect/accesstokenvalidation?token=$ACCESS_TOKEN"
# -> { "twf.clusterUrl": "https://api.<cluster>.twinfield.com", ... }

Loopt het toch mis, dan helpen de foutcodes: 354 betekent een ongeldig token, 351 tot 353 een ontbrekende claim, en 360 dat je een access token en een session-ID tegelijk meestuurt (Twinfield, Guidelines{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

Een klant is geen klant, maar een DEB-dimensie

Twinfield kent geen aparte objecten voor debiteuren en crediteuren. Alles wat je in een boeking als tegenpartij of kostendrager gebruikt, is een dimensie met een type-code binnen een office — de Twinfield-term voor een administratie.

Dimtype Wat het is
BAS Balansrekeningen
PNL Winst- en verliesrekeningen
DEB Debiteuren
CRD Crediteuren
KPL Kostenplaatsen
PRJ Projecten
AST Vaste activa
ACT Activiteiten

Elk dimensietype hoort bij een office en draagt een mask die het formaat van de codes vastlegt, bijvoorbeeld 1#### voor debiteuren (Twinfield, Dimension types{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026). Verzin je zelf een code die buiten dat mask valt, dan weigert Twinfield hem.

Een debiteur uitlezen is daarmee een dimensie-read met vier velden.

XML
<read>
  <type>dimensions</type>
  <office>001</office>
  <dimtype>DEB</dimtype>
  <code>EXAMPLE</code>
</read>

Aanmaken en bijwerken lopen via hetzelfde bericht: wordt de dimensie niet gevonden, dan maakt Twinfield hem aan, anders werkt hij hem bij. De code die je meestuurt moet voldoen aan het mask van het DEB-dimensietype (Twinfield, Customers{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

Het office-veld keert in vrijwel elk bericht terug. Een verkoopfactuur draagt naast office ook customer, invoicetype en een periode in YYYY/PP-notatie, plus minstens een regel (Twinfield, Sales invoices{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

XML
<salesinvoice>
  <header>
    <office>001</office>
    <invoicetype>FACTUUR</invoicetype>
    <customer>1000</customer>
    <period>2021/4</period>
    <status>concept</status>
  </header>
  <lines>
    <line id="1">
      <article>510</article>
      <quantity>2.00</quantity>
      <unitspriceexcl>83.94</unitspriceexcl>
    </line>
  </lines>
</salesinvoice>

Data eruit halen gaat via browse-codes, niet via een query-taal

Voor financiele data gebruik je browse data: een set voorgedefinieerde browse-codes die elk een dataset ontsluiten, van grootboekmutaties (030-reeks) tot debiteuren- en crediteurentransacties (100 en 200) en kas en bank (400 en 410) (Twinfield, Browse data{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

Je kiest per code welke kolommen je wilt en filtert met operatoren als equal en between.

XML
<column>
  <field>fin.trs.head.yearperiod</field>
  <operator>between</operator>
  <from>2021/01</from>
  <to>2021/12</to>
  <visible>true</visible>
</column>

Twinfield adviseert zelf om transacties per periode op te halen en alleen kolommen op te nemen waarvan je de waarden echt nodig hebt. Dat is geen stijladvies: brede uitvragen over een heel boekjaar lopen op technische fouten stuk.

Credits in plaats van calls: certificering bepaalt je doorvoer

Twinfield rekent niet in calls maar in credits: een query-verzoek kost 1 credit, elk ander verzoek 3 credits. Query's zijn GET- en OPTIONS-calls, SOAP-acties die met Get, Query, Search of Load beginnen, en ProcessXml-berichten met list, read, columns, accountcode of accountcodes als root (Twinfield, Fair use policy{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

De limieten lopen per minuut over vier emmers tegelijk. De sterretjes zijn het hele verhaal: alleen de ClientId-emmers zakken naar 5 procent zolang je integratie niet gecertificeerd is.

Emmer Gecertificeerd Ongecertificeerd
Per IP-adres 1.000 credits/min 1.000 credits/min
Per ClientId 1.000 credits/min* 50 credits/min
Per OrganisationId 1.000 credits/min 1.000 credits/min
Per ClientId + OrganisationId 500 credits/min* 25 credits/min

Daarnaast geldt een gelijktijdigheidslimiet: 20 parallelle verzoeken per ClientId en 10 per combinatie van ClientId en organisatie. Boven een limiet volgt een 429 Too Many Requests, met Retry-After en X-RateLimit-*-headers in de response.

Op dat laatste punt spreken de integratieblogs elkaar tegen. Apideck volgt de documentatie — "a non-certified Client ID is capped at 50 credits per minute, and 25 credits per minute against a single organisation" — terwijl Chift de korting over alle emmers uitsmeert: "5% of those limits across all buckets: 50 credits/min per IP, per ClientId, and per OrganisationId".

Het verschil is niet academisch. In Chifts lezing is een tweede klant op dezelfde server een probleem; volgens de officiele pagina is dat het niet, en is jouw ClientId de rem in plaats van je infrastructuur.

Reken je scenario door voordat je bouwt. Bij 3 credits per schrijfactie haal je ongecertificeerd ongeveer 16 boekingen per minuut; een eenmalige historie-import van 10.000 boekingen kost 30.000 credits en dus zo'n tien uur doorlooptijd.

Certificering is daarmee geen keurmerk maar een capaciteitsbeslissing. Reken op enkele weken tussen indienen en goedkeuring (Apideck, 2026) en plan die doorlooptijd voor je go-live-datum in.

Wat er misgaat zodra het echt draait

Vier dingen die je niet uit de schema's haalt, maar wel je incidenten bepalen.

Valkuil Wat er gebeurt
Geen sandbox Testomgevingen zijn echte Twinfield-administraties (Apideck, 2026)
Regellimiet Boven 1.000 regels per <transaction> volgt een 400-status; de fair-use-pagina adviseert 500
Periode-afsluiting Een gesloten periode weigert boekingen zodra de controller hem dichtzet
Breaking changes Elke wijziging heeft een deprecated-, sunset- en end-of-life-datum

De periode-valkuil verdient toelichting, want hij slaat maandelijks toe. De PeriodService kent OpenPeriod en ClosePeriod plus een IsOpen-vlag per periode, met foutcodes PeriodCanNotBeOpened en PeriodCanNotBeClosed (Twinfield, Periods{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

Een koppeling die op de derde van de maand nog naar de vorige periode boekt, valt om op het moment dat iemand die periode sluit.

Los dat op in je koppeling, niet in een procedure: lees de periodestatus voor je boekt en wijk uit naar de eerstvolgende open periode, met een melding.

De breaking-changes-kalender is de zachte variant van wat Nmbrs doet. Twinfield gaf het general-rootelement end-of-life op 01-07-2025 en ProcessXmlCompressed op 31-07-2025, telkens met jaren aankondiging (Twinfield, Breaking changes{target="_blank" rel="noopener noreferrer"}, geraadpleegd september 2026).

Bij Nmbrs stopt de complete SOAP-API in een keer op een datum, wat een heel ander migratieproject is — zie de Nmbrs API-migratie.

Grootboeksuggesties en afwijkingsdetectie op de boekingsstroom

De koppeling zelf is transport. De winst zit in het model dat je ertussen zet, en Twinfield leent zich daar beter voor dan gemiddeld.

Grootboekcodesuggestie werkt omdat je historie in dezelfde structuur staat als je nieuwe boeking. Een model dat op je eigen boekingsverleden per CRD-dimensie is afgestemd, stelt bij een nieuwe inkoopfactuur een grootboekrekening en kostenplaats voor.

Het veiligheidsventiel zit in Twinfield zelf: je levert de boeking aan met <status>concept</status>, zodat een mens hem bevestigt voordat hij definitief wordt. Suggereren mag automatisch, definitief boeken niet.

Afwijkingsdetectie draait de vraag om. Je vergelijkt een nieuwe boeking met het patroon van dezelfde dimensie over de voorgaande perioden en signaleert een bedrag, btw-code of tegenrekening die eruit springt — precies de historie die de browse-codes voor grootboekmutaties je leveren.

Beide zijn classificatietaken, geen chatbot. Wij bouwen ze als aparte laag naast de koppeling; wat dat kost staat op AI software laten maken, waar een ingebouwde AI-feature start bij €8.500.

Een kanttekening die je vooraf regelt: zodra declaraties, uren of salarisboekingen in de stroom zitten, verwerk je persoonsgegevens en hoort er een verwerkersovereenkomst met je modelleverancier bij.

Wanneer de koppeling van je accountant volstaat

Draait je Twinfield onder het kantoor van je accountant, dan is er vaak al een koppeling of connector actief. Voor een enkele administratie met standaard facturatie is dat de goedkoopste route, en blijft de API buiten beeld.

Zelf bouwen wordt pas de betere keuze bij een van deze drie signalen.

  • Je boekt in meerdere offices en wilt een autorisatie die alle administraties dekt.
  • Je volume past niet in 50 credits per minuut, dus je hebt certificering nodig.
  • Je wilt iets dat geen connector doet, zoals afletteren via de matching-service of een eigen dimensiestructuur.

Werk je vanuit een kantoor en koppel je voor meerdere klanten tegelijk, dan speelt er meer dan techniek — daarover schrijven we op software voor accountants en adviseurs.

Qua kosten: de standaardstroom van webshop naar boekhouding bouwen wij als boekhoudkoppeling vanaf €2.000 eenmalig plus €150 tot €350 per maand. Een eigen integratie op de API valt onder API-koppelingen: vanaf €5.000 in een richting, €7.500 tot €15.000 bidirectioneel met datatransformatie.

Twijfel je aan welke kant van die streep je zit, leg je scenario kort aan ons voor — je krijgt een eerlijk oordeel over connector 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

Heeft Twinfield een REST-API?

Nee. De boekhoudkern van Twinfield is uitsluitend via SOAP-webservices met XML-berichten bereikbaar; een native REST-API bestaat niet. Alleen het inloggen is modern: dat verloopt via OAuth 2.0 en OpenID Connect bij Wolters Kluwer.

Wat is de clusterUrl in de Twinfield API?

Twinfield draait op meerdere clusters, en elke klant zit op een ander cluster. Na het inloggen valideer je het access token en lees je de claim twf.clusterUrl uit; die URL is de basis voor al je SOAP-calls. Sla je die stap over en mik je op een vaste hostnaam, dan krijg je stille authenticatiefouten.

Wat zijn de rate limits van de Twinfield API?

Twinfield rekent in credits per minuut: 1 credit voor een query, 3 credits voor elk ander verzoek. Gecertificeerde integraties krijgen 1.000 credits per minuut per ClientId en 500 per combinatie van ClientId en organisatie; ongecertificeerd is dat 5 procent daarvan. Boven de limiet volgt een 429 met een Retry-After-header.

Wat betekent DEB in Twinfield?

DEB is het dimensietype voor debiteuren. Twinfield kent geen losse klantobjecten: klanten, leveranciers (CRD), kostenplaatsen (KPL), projecten (PRJ) en grootboekrekeningen zijn allemaal dimensies binnen een office. Elk dimensietype heeft een mask dat het formaat van de codes bepaalt.

Waarom moet ik mijn Twinfield-integratie laten certificeren?

Zonder certificering krijgt je ClientId 5 procent van de creditlimiet, dus 50 credits per minuut. Bij 3 credits per schrijfactie zijn dat ongeveer 16 boekingen per minuut, wat voor productievolume vrijwel altijd te weinig is. Reken op enkele weken tussen indienen en goedkeuring.

Kan ik via de API boeken in een afgesloten periode?

Nee. De PeriodService kent per periode een IsOpen-vlag plus OpenPeriod- en ClosePeriod-commando met eigen foutcodes. Een koppeling die na de maandafsluiting nog naar de vorige periode boekt, valt om; lees daarom de periodestatus voordat je boekt en wijk uit naar de eerstvolgende open periode.

Kan ik een Twinfield-koppeling veilig testen?

Twinfield biedt geen aparte sandbox-API: testomgevingen zijn echte Twinfield-administraties. Gebruik daarom een aparte testadministratie, boek in conceptstatus en blijf onder de harde limiet van 1.000 regels per transactie.

Hoe lang is een Twinfield access token geldig?

Bij de authorization code flow 3.600 seconden (een uur), bij de implicit flow 43.200 seconden (twaalf uur). Het refresh token is met 788.940.000 seconden (25 jaar) praktisch onbeperkt, mits je bij de autorisatie de scope offline_access aanvraagt naast de verplichte twf.organisationUser. Let op het randje: dat refresh token wordt stil ingetrokken zodra een gebruiker wordt gedeactiveerd of zijn wachtwoord roteert.

Wat is een office in Twinfield?

Office is de Twinfield-term voor een administratie. Vrijwel elk bericht draagt het office-veld, en ook de dimensietypes hangen eraan, dus je bepaalt per call in welke administratie je leest of schrijft. Koppel je voor meerdere administraties tegelijk, dan regel je vooraf een autorisatie die al die offices dekt.

Hoe haal ik financiele data uit Twinfield?

Via browse data: voorgedefinieerde browse-codes die elk een dataset ontsluiten, van grootboekmutaties (030-reeks) tot debiteuren- en crediteurentransacties (100 en 200) en kas en bank (400 en 410). Per code kies je de kolommen en filter je met operatoren als equal en between. Een query-taal is er niet, en Twinfield adviseert per periode op te halen en alleen de kolommen mee te nemen die je werkelijk gebruikt.

Hoeveel regels mag een Twinfield-transactie bevatten?

Boven de 1.000 regels per transaction-element krijg je een 400-status terug. De fair-use-pagina adviseert ruim daaronder te blijven, met maximaal 500 regels per bericht. Voor een historie-import betekent dat batchen in plaats van een enkel groot bericht.

Hoe ver van tevoren kondigt Twinfield breaking changes aan?

Elke wijziging krijgt een deprecated-, sunset- en end-of-life-datum, in de praktijk met jaren aankondiging: het general-rootelement ging op 01-07-2025 end-of-life en ProcessXmlCompressed op 31-07-2025. Dat is milder dan bij Nmbrs, waar de complete SOAP-API op een vaste datum stopt. Neem de kalender wel op in je onderhoudsbudget, want de wijzigingen komen hoe dan ook.

Wanneer volstaat de Twinfield-koppeling van mijn accountant?

Draait je Twinfield onder het kantoor van je accountant, dan is er vaak al een connector actief, en voor een enkele administratie met standaard facturatie is dat de goedkoopste route. Zelf bouwen wordt pas beter bij drie signalen: je boekt in meerdere offices en wilt een autorisatie die alle administraties dekt, je volume past niet in 50 credits per minuut, of je wilt iets wat geen connector doet — zoals afletteren via de matching-service of een eigen dimensiestructuur.

Wat kost een Twinfield-koppeling?

De standaardstroom van webshop naar boekhouding bouwen wij als boekhoudkoppeling vanaf €2.000 eenmalig plus €150 tot €350 per maand. Een eigen integratie rechtstreeks op de API valt onder API-koppelingen: vanaf €5.000 in een richting en €7.500 tot €15.000 bidirectioneel met datatransformatie. Welke van de twee je nodig hebt, volgt uit de drie signalen hierboven.

Kan AI grootboekrekeningen voorstellen op Twinfield-boekingen?

Ja, en het werkt hier beter dan gemiddeld omdat je historie in dezelfde structuur staat als je nieuwe boeking. Een model dat op je eigen boekingsverleden per CRD-dimensie is afgestemd, stelt bij een inkoopfactuur een grootboekrekening en kostenplaats voor; je levert de boeking aan met status concept, zodat een mens hem bevestigt voordat hij definitief wordt. Zitten er declaraties, uren of salarisboekingen in de stroom, dan verwerk je persoonsgegevens en hoort er een verwerkersovereenkomst met je modelleverancier bij.

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.