Koppelingen met Business Central
Business Central koppeling: je ERP laten praten met de rest van je software

6.000
Klanten, artikelen, orders en facturen die zelf tussen Business Central en je andere pakketten bewegen, met een eigen sleutel, logging en een weg terug.
Welke gegevens een koppeling verplaatst
Een Business Central koppeling laat een ander systeem rechtstreeks lezen en schrijven in je ERP: je webshop zet een verkooporder klaar, je planning haalt de voorraad op, je klantenportaal toont openstaande facturen. Niemand typt nog over wat al in Business Central staat, en niemand exporteert elke vrijdag een Excel om die ergens anders weer in te laden.
In de praktijk gaat het bijna altijd over dezelfde zes soorten gegevens: klanten, artikelen, verkooporders, verkoopfacturen, voorraad en grootboekboekingen. Wat telt is welke kant de bron is. Business Central blijft de baas over je boekhouding en je artikelen; het andere systeem levert orders, registraties of uren aan. Wie die rol per veld vastlegt voor er een regel code bestaat, voorkomt de helft van de problemen hieronder. Werk je met Odoo, Exact Online, Teamleader of Robaws, dan lees je hetzelfde verhaal voor die pakketten op onze pagina's over de Odoo koppeling, de Exact Online koppeling, de Teamleader koppeling en de Robaws koppeling.
Wie stuurt wat naar wie
Maandag
09:00Abonneren op facturen en artikelen
POST /api/v2.0/subscriptionsMet het adres van de koppeling, de bron (salesInvoices, items) en een gedeeld geheim in clientState.
09:00De handdruk
Business Central stuurt een validationToken. De koppeling stuurt het terug met 200, en het abonnement staat.
14:12Een factuur wordt geboekt
Dertig seconden later komt de melding updated. De koppeling haalt de factuur op voor je klantportaal.
Dinsdag
10:30Prijsherziening: 1.400 artikelen tegelijk
Meer dan 1.000 wijzigingen in dat venster: een melding collection met een filter. De koppeling haalt de lijst op en past de webshop aan.
Woensdag
08:00Verlengen
PATCH /api/v2.0/subscriptions(…)Na drie dagen vervalt een abonnement. De koppeling verlengt op tijd, met opnieuw de handdruk.
22:10Onze server antwoordt 503
Omdat het een 5xx is, probeert Business Central het de volgende 36 uur opnieuw.
Donderdag
06:30Server terug
De meldingen van de nacht komen alsnog binnen. Niets gemist.
07:00Dagelijkse controle
Bij een andere foutcode dan 408, 429 of 5xx schrapt Business Central het abonnement. De koppeling kijkt elke dag of het er nog is, maakt het zo nodig opnieuw aan en haalt op wat intussen veranderde.
Wat er gaat, onder companies({id})
- Klanten uit je CRM (customers)
- Offertes uit je buitendienst-app (salesQuotes)
Uit Business Central
- Artikelen met voorraad (items)
- Facturen voor je klantportaal (salesInvoices)
De deur
api.businesscentral.dynamics.com/v2.0/<omgeving>/api/v2.0- Microsoft Entra ID met OAuth 2.0: een app-registratie, een token met scope api.businesscentral.dynamics.com/.default, en dan Bearer bij elke call.
- Webservicesleutels met basic auth werken online niet meer sinds 2022.
Voorbeeld met verzonnen tijden en aantallen, gebaseerd op de openbare documentatie van Business Central API v2.0. Wij zijn geen Microsoft-partner.
API v2.0: zo spreek je Business Central aan
Microsoft biedt voor Business Central online een REST-API aan, versie 2.0. Volgens de documentatie op Microsoft Learn staan die API's standaard aan, en kan elke programmeertaal die REST-aanroepen doet ermee werken. Een API-koppeling op deze API is een rechtstreekse verbinding van punt tot punt: jouw systeem stuurt een verzoek, Business Central antwoordt met JSON.
Het adres heeft altijd dezelfde vorm. Je noemt de omgeving (bijvoorbeeld production of een sandbox) en daarna het bedrijf, want een omgeving kan meerdere bedrijven bevatten:
`https://api.businesscentral.dynamics.com/v2.0/<omgeving>/api/v2.0/companies(<id>)/customers`
Op dezelfde manier vraag je `items`, `salesOrders`, `salesInvoices`, `vendors`, `journals` of `generalLedgerEntries` op. Op de pagina API Overview in Business Central zie je welke API's gepubliceerd zijn. Microsoft werkt de API maandelijks bij, dus een koppeling die je vandaag bouwt, draait over een jaar op een nieuwere versie van het pakket.
Wat de standaard-API niet doet
Een eigen veld dat jullie partner ooit aan de klantenkaart toevoegde, zit niet in de standaard-API. Microsoft schrijft letterlijk dat je een bestaande API niet kunt uitbreiden met extra velden: je kopieert de code en maakt een custom API in AL, als extensie in Business Central zelf. Dat is werk in je Business Central, en dat plan je dus samen met wie je omgeving beheert. Voor de meeste koppelingen volstaan de standaardvelden; check het wel voor je begint, niet als de eerste order zonder leveringsdatum binnenkomt.
Inloggen zonder gebruiker: OAuth 2.0 via Entra ID
Een koppeling die 's nachts orders ophaalt, kan niet wachten op iemand die een code van zijn gsm overtypt. Daarom werkt Business Central voor koppelingen met service-to-service-authenticatie: de OAuth 2.0 client credentials flow, aangemeld via Microsoft Entra ID (vroeger Azure Active Directory). Microsoft wijst er zelf op dat aanmelden namens een gebruiker tweestapsverificatie kan vragen, en dat zoiets een koppeling zonder toezicht blokkeert.
De opzet gebeurt in twee delen, en beide gebeuren in jouw omgeving:
- In Entra ID registreer je een app. Je maakt een client secret aan (Entra toont die maar een keer), je geeft de app de toepassingsmachtiging API.ReadWrite.All voor Dynamics 365 Business Central, en een beheerder geeft daar toestemming voor.
- In Business Central open je de pagina Microsoft Entra-toepassingen, maak je een kaart met de client-ID van die app, zet je de status op Ingeschakeld en ken je machtigingen toe. De omschrijving zegt wie de koppeling bouwde en waarvoor.
Die machtigingen zijn het belangrijkste deel. Een app kan de machtigingenset SUPER niet krijgen, en dat is goed: geef de koppeling alleen wat ze nodig heeft. Een webshop die orders aanmaakt, hoeft geen grootboekrekeningen te kunnen wijzigen. Het token haal je op bij login.microsoftonline.com van jouw tenant, met als scope `https://api.businesscentral.dynamics.com/.default`.
Omdat de app-registratie bij jou staat, blijf jij eigenaar van de sleutel. Stopt de samenwerking met wie de koppeling bouwde, dan trek je het secret in en is de toegang weg. Leg dat ook vast in je verwerkersovereenkomst als de bouwer persoonsgegevens van je klanten kan zien.
Webhooks of zelf periodiek ophalen
Twee manieren om te weten dat er iets veranderde in Business Central. Een goede koppeling gebruikt ze allebei.
- Hoe het werkt
- Webhook-abonnementJe registreert een abonnement op een entiteit; Business Central roept jouw adres aan als er iets wijzigt
- Periodiek ophalenJe systeem vraagt om de zoveel minuten wat er sinds de vorige keer veranderde
- Vertraging
- Webhook-abonnementMelding volgt 30 seconden na de eerste wijziging
- Periodiek ophalenZo lang als het interval dat je kiest
- Wat je ontvangt
- Webhook-abonnementAlleen dat een record wijzigde; de gegevens haal je daarna zelf op
- Periodiek ophalenDe gegevens zelf, in pagina's van hoogstens 20.000 records
- Onderhoud
- Webhook-abonnementEen abonnement vervalt na drie dagen en moet je vernieuwen
- Periodiek ophalenGeen abonnement, wel een eigen bijgehouden tijdstip per entiteit
- Grote wijzigingen
- Webhook-abonnementMeer dan 1.000 wijzigingen in die 30 seconden geven een melding voor de hele collectie
- Periodiek ophalenGewoon meer pagina's ophalen
- Belasting
- Webhook-abonnementLaag, je vraagt alleen op wat wijzigde
- Periodiek ophalenHoger, elke ronde kost verzoeken uit dezelfde limiet
Gebruik een webhook voor snelheid en periodiek ophalen als vangnet: een gemiste melding wordt zo bij de volgende ronde alsnog opgepikt.
Limieten die je ontwerp bepalen
Business Central online deelt zijn servers met andere klanten, en Microsoft begrenst daarom wat een koppeling mag vragen. Die limieten gelden per gebruiker, en een app-registratie telt als gebruiker. Ze bepalen hoe je een koppeling bouwt die een grote import of een drukke maandag overleeft.
| Limiet | Waarde | Wat er gebeurt als je erover gaat |
|---|---|---|
| Verzoeken per gebruiker | 6.000 per glijdend venster van vijf minuten | Antwoord 429, te veel verzoeken |
| Gelijktijdige verzoeken | 5 tegelijk, tot 95 in de wachtrij | Na 8 minuten wachten volgt 503 |
| Verbindingen per gebruiker | 100 | Antwoord 429 |
| Records per pagina | 20.000 | Antwoord 413 |
| Bewerkingen in een $batch | 100 | Het verzoek wordt geweigerd |
| Duur van een bewerking | 8 minuten | Antwoord 408, time-out |
| Webhook-abonnementen per omgeving | 200 | Geen nieuw abonnement mogelijk |
Drie gevolgen voor het ontwerp. Je koppeling moet een 429 netjes opvangen: even wachten en opnieuw proberen, niet meteen falen en ook niet blind herhalen. Grote ladingen verdeel je over pagina's en batches in plaats van alles in een verzoek te proppen. En draaien er meerdere koppelingen, dan geef je ze elk een eigen app-registratie, zodat de webshop de limiet van de planning niet opgebruikt. Microsoft noemt dat spreiden over meerdere gebruikers of service principals uitdrukkelijk als oplossing.
Oudere koppelingen via SOAP-webservices verdienen aandacht. Microsoft kondigt aan dat SOAP verdwijnt en raadt de API of OData aan. Een koppeling die nog op SOAP draait, is technische schuld met een vervaldatum.
Drie routes voor een Business Central koppeling
Je hebt grofweg drie manieren om Business Central met een ander pakket te verbinden. Onze algemene gids over een koppeling laten maken legt die keuze uit voor elk pakket; hier gaat het over wat specifiek is aan Business Central. Geen enkele is altijd de beste; de juiste hangt af van hoe standaard je proces is en hoeveel gegevens er bewegen.
| Route | Wanneer ze past | Waar ze stopt |
|---|---|---|
| App uit de Microsoft Marketplace (AppSource) | Een gangbare combinatie waarvoor een leverancier al een app bouwde, en jouw proces volgt die app | Je werkt zoals de app het voorziet; velden of regels die erbuiten vallen, krijg je er niet bij |
| Power Automate met de Business Central-connector | Lichte stromen met een paar honderd records per dag, zoals een goedkeuring of een melding in Teams | 300 aanroepen per verbinding per minuut, records onder 8 MB, en grote wijzigingen in een keer starten geen flow |
| Eigen koppeling op de API | Meerdere systemen, eigen regels, grote volumes of een proces dat geen app kent | Je hebt iemand nodig die ze bouwt, documenteert en onderhoudt |
Apps voor Business Central gaan bij Microsoft door een geautomatiseerde technische controle voor ze in de Marketplace verschijnen, en ze installeren als extensie in je omgeving. Prijs en voorwaarden verschillen per app, dus vraag de leverancier wat er gebeurt bij een update van Business Central.
De connector voor Power Automate is een premium-connector. Hij werkt met triggers zoals een record dat aangemaakt, gewijzigd of verwijderd wordt, en acties zoals een record maken, zoeken of bijwerken. Microsoft schrijft er wel bij dat de connector geen collectiemeldingen verwerkt: wijzigen er meer dan 1.000 records binnen 30 seconden, dan start de flow niet. Voor een maandelijkse prijsupdate van je hele catalogus is dat een reëel risico. Wie twijfelt tussen een no-code-platform en eigen code, leest onze vergelijking Make, Zapier of n8n en het begrip low-code.
Een eigen koppeling op de API bouwen we bij VBS onder software op maat. Ze loont pas als de eerste twee routes je proces niet dragen, of als Business Central maar een van de systemen is die op elkaar moeten aansluiten.
Waar het in de praktijk misloopt
Zes fouten die in koppelingen met een ERP terugkomen, telkens met de regel van Business Central die erachter zit.
- Abonnement stil vervallenEen webhook-abonnement leeft drie dagen. Wie vergeet te vernieuwen, krijgt op dag vier geen meldingen meer, zonder foutmelding. Antwoordt je adres met iets anders dan 408, 429 of een 5xx-code, dan verwijdert Business Central het abonnement meteen.
- Dubbele orders na een herhalingEen verzoek dat een time-out krijgt, kan toch verwerkt zijn. Een koppeling zonder eigen referentie per order maakt bij de herhaling een tweede order aan. Een vaste sleutel uit het bronsysteem op elke order voorkomt dat.
- Wijzigingen die niemand meldtWijzigingen door een gedelegeerde beheerder van een partner worden niet gemeld tot een gebruiker met licentie iets wijzigt. Test je met zo'n account, dan lijkt de webhook kapot terwijl hij werkt.
- Sandbox die geen echte test isKopieer je productie naar een sandbox, dan zet Business Central webhooks, serviceverbindingen en taakwachtrijen uit, en blokkeert het uitgaande verzoeken van extensies. Een sandbox draait ook op andere servers, dus meet je er geen snelheid mee.
- Een sleutel met te veel rechtenEen koppeling met volledige rechten is handig tot het secret lekt. Ken alleen de tabellen toe die de koppeling echt nodig heeft, en vernieuw het secret voor het vervalt, met een herinnering in iemands agenda.
- Twee systemen die facturerenMaakt zowel je webshop als Business Central facturen, dan krijgt je klant er twee en klopt je btw-aangifte niet. Spreek af welk systeem factureert en welk alleen leest. Verstuur je via Peppol, dan mag ook dat maar een keer gebeuren.
Zo bouwen wij een koppeling op jouw omgeving
Een vaste prijs per project, vastgelegd na een eerste gesprek. Geen uren die oplopen tijdens het bouwen.
- Gesprek en veldenlijstWe overlopen welke systemen praten, welke kant per veld de bron is en wat er gebeurt als iets mislukt. Daaruit volgt een veldenlijst en een vaste prijs.
- Jouw app-registratieJe beheerder maakt de app-registratie in jullie Entra ID, met alleen de machtigingen uit de veldenlijst. Het secret blijft van jou; wij krijgen toegang, geen eigendom.
- Bouwen in de sandboxWe bouwen en testen tegen een sandbox van je eigen omgeving, met echte voorbeeldorders, inclusief de gevallen die fout moeten lopen: een onbekende klant, een artikel zonder prijs, een time-out.
- Logging van elke bewegingElke order, klant of factuur die de koppeling verplaatst, staat in een logboek met het tijdstip en het antwoord van Business Central. Gaat er iets mis, dan zie je welk record en waarom, zonder te gissen.
- Live met een weg terugWe zetten de koppeling live op een rustig moment, met de vorige werkwijze nog klaar. Loopt er iets fout, dan zetten we ze stil en verwerken we de achterstand opnieuw zodra het opgelost is.
Wat we eerder bouwden
Een koppeling is software die moet blijven draaien, ook als niemand kijkt. Het transportplatform van DA Logistics is dagelijks in gebruik door 31 gebruikers, wordt bewaakt door 1.396 geautomatiseerde tests, en een nieuwe versie gaat live in 2 tot 6 seconden, met een back-up, een snapshot en een weg terug. Voor Zuco Logistics zetten we dat platform in 57 minuten live, met een eigen server per klant, een dagelijkse back-up naar S3 en een API die alleen via CloudFront bereikbaar is.
Die gewoontes nemen we mee naar elke koppeling: tests op de randgevallen, een logboek, en een manier om terug te keren. Wil je eerst weten wat een ERP zelf kost voor je aan koppelen denkt, lees dan onze gids over ERP-kosten. Twijfel je nog tussen pakketten, dan helpen de vergelijkingen Odoo of Business Central, Exact Online of Odoo en CRM of ERP. Gaat het om Odoo, dan beschrijft de gids Odoo implementatie hoe zo'n traject verloopt. En past geen enkel pakket bij hoe je werkt, kijk dan naar ERP op maat.
Geen partner, wel jouw sleutel
VBS is geen Microsoft-partner en verkoopt geen Business Central-licenties. We bouwen op de publieke API, met jouw app-registratie en de rechten die jij toekent. Licenties, uitbreidingen in AL en de inrichting van Business Central zelf blijven bij je partner of je eigen beheerder.
AI automatisatie
Hoe VBS je hiermee helpt
We laten mails, offertes, documenten en opvolging zichzelf doen, ingebouwd in de manier waarop je nu werkt.
- Een flow per taak, van formulier tot bevestiging
- Een mens keurt goed wat ertoe doet
- Draait op AWS, met logboek en melding als iets faalt
Hoe we dat aanpakken, lees je bij AI automatisatie.
Business Central verbinden met je webshop, planning of portaal?
Vertel welke systemen moeten praten en welke gegevens er bewegen. Na een gesprek krijg je een vaste prijs en een veldenlijst. Plan het via contact, of lees eerst hoe we AI-automatisatie inzetten om facturen en orders te verwerken.
Liever meteen contact?