Naar de inhoud
SyncMyShop

Systemen

Moneybird koppeling met je webshop: orders, betalingen en klanten in je administratie

Een Moneybird koppeling zet elke webshoporder als factuur in je Moneybird-administratie, met de juiste klant, het juiste btw-tarief en de betaling erop geboekt. Moneybird heeft een open REST API met een limiet van 150 verzoeken per 5 minuten per IP-adres, en kent geen voorraad: de koppeling boekt verkoop en betaling, de voorraad blijft in je webshop of magazijnsysteem.

Wat is Moneybird en wie gebruikt het?

Moneybird is een Nederlands online boekhoudpakket van Moneybird B.V., veel gebruikt door zzp'ers en kleine bedrijven in Nederland en België. Je factureert, boekt inkoopfacturen, koppelt je bankrekening en doet de btw-aangifte vanuit dezelfde administratie. Facturen kunnen per e-mail, per post of via Peppol de deur uit.

Voor een webshop is Moneybird de plek waar de omzet terechtkomt. Moneybird heeft producten met een prijs, een btw-tarief en een grootboekrekening, maar geen voorraad, geen orders en geen magazijn. Een Moneybird koppeling is dus een orderstroom naar de boekhouding, geen ERP-koppeling. Wie voorraad uit een centraal systeem wil sturen, kijkt naar ERP koppeling met je webshop.

Wat je met Moneybird koppelt

Stroom Richting Wat er in Moneybird ontstaat
Orders webshop naar Moneybird externe verkoopfactuur (external_sales_invoices) of verkoopfactuur (sales_invoices)
Klanten webshop naar Moneybird contact met customer_id, adres, btw-nummer
Betalingen webshop of Mollie naar Moneybird betaling op de factuur met transaction_identifier
Terugbetalingen webshop naar Moneybird creditfactuur, bij een verkoopfactuur via duplicate_creditinvoice
Factuurstatus Moneybird naar webshop via webhook, bijvoorbeeld external_sales_invoice_state_changed_to_paid

Het verschil tussen de twee soorten factuur bepaalt hoe de koppeling werkt. Een externe verkoopfactuur is een factuur die al in een ander systeem bestaat: de webshop heeft hem gemaakt en verstuurd, Moneybird boekt hem. Een gewone verkoopfactuur maakt Moneybird zelf, met een eigen nummer, en verstuurt hem naar de klant. Welke stromen er bij een order horen staat op orders, klanten en verzending.

Hoe Moneybird data vrijgeeft

REST API met de administratie in het pad

Moneybird heeft een REST API, versie 2, die JSON en XML spreekt. Elke aanroep noemt de administratie in het pad:

POST /api/v2/412938475620193847/external_sales_invoices.json HTTP/1.1
Host: moneybird.com
Authorization: Bearer <access token>
Content-Type: application/json

{"external_sales_invoice": {"contact_id": "412938475620200011",
  "reference": "10482", "date": "2026-09-30",
  "prices_are_incl_tax": true, "source": "WooCommerce",
  "details_attributes": [{"description": "Snoeischaar 10482",
    "price": "24.20", "amount": "2", "tax_rate_id": "412938475620190001",
    "ledger_account_id": "412938475620190077"}]}}

ID's in Moneybird zijn grote getallen. Moneybird raadt zelf aan ze als tekst te verwerken, omdat sommige JSON-parsers ze anders afronden. Een afgerond contact-ID verwijst naar een klant die niet bestaat, of erger, naar een andere.

OAuth of een persoonlijk token

Toegang loopt via OAuth 2.0 of een persoonlijk API-token. Met OAuth vraagt de koppeling scopes aan: sales_invoices, documents, estimates, bank, time_entries en settings. Zonder scope krijgt een applicatie alleen sales_invoices. Moneybird maakt bij OAuth een aparte API-gebruiker aan, en elke boeking staat op naam van de applicatie. Het access token verloopt op dit moment niet, maar Moneybird schrijft dat dat kan veranderen; de koppeling bewaart daarom ook het refresh token.

Limieten en wat ze betekenen

Gegeven Waarde
Limiet 150 verzoeken per 5 minuten, per IP-adres
Limiet op /reports/ 50 verzoeken per 5 minuten
Boven de limiet 429 met Retry-After en RateLimit-Remaining
Per pagina standaard 50, maximaal 100
Abonnementslimiet bereikt 402 Payment Required
Webhook mislukt 10 nieuwe pogingen met groeiende pauzes

De bron is de API-introductie van Moneybird, nagelezen op 3 oktober 2026.

150 per 5 minuten is 30 per minuut. In de dagelijkse stroom is dat ruim: bij 400 orders per dag, de helft met een nieuwe klant, kost een order gemiddeld 3,5 aanroepen, samen 1.400 verzoeken, 47 minuten verspreid over de dag. Het knelt bij een inhaalslag. Wie 2.400 orders uit het afgelopen kwartaal wil nazetten, heeft 2.400 x 3,5 = 8.400 verzoeken nodig. Bij 30 per minuut is dat 280 minuten, 4 uur en 40 minuten, en in die tijd wachten de nieuwe orders in dezelfde rij. De koppeling plant zo'n import daarom 's nachts en houdt ruimte vrij voor de lopende orders. Hoe je zo'n som maakt staat in doorvoer berekenen.

Webhooks

Moneybird stuurt webhooks bij gebeurtenissen zoals een nieuwe externe factuur, een geregistreerde betaling of een factuur die betaald is. Elke push heeft een Idempotency-Key en een Moneybird-Signature. Mislukt de aflevering, dan probeert Moneybird het nog 10 keer. De koppeling controleert de handtekening en verwerkt elke sleutel één keer, zodat een herhaalde push geen tweede statuswijziging in de webshop geeft.

Waar het bij Moneybird op vastloopt

Een webshoporder als externe verkoopfactuur in Moneybird, met een 429 De koppeling zoekt de klant op customer_id, maakt hem aan als hij niet bestaat, zet de order als externe verkoopfactuur en registreert de betaling met de Mollie-transactie-ID. Bij de vierde aanroep geeft Moneybird een 429 en wacht de koppeling de Retry-After af. WooCommerce order 10482 Koppeling wachtrij Moneybird API v2 order betaald, webhook GET contacts/customer_id/WC-311 404 Not Found POST contacts 201 Created, contact_id POST external_sales_invoices 429, Retry-After: 41 41 seconden later POST external_sales_invoices 201 Created, state new POST .../payments, tr_7Hx2kQ 201 Created Vier aanroepen voor een nieuwe klant, drie voor een bestaande. De limiet van 150 per 5 minuten geldt per IP-adres.
Een order met een nieuwe klant kost vier aanroepen. De 429 stopt de order niet: hij wacht in de wachtrij tot de tijd uit Retry-After voorbij is.

Een concept zonder factuurnummer

Een sales_invoice die via de API wordt aangemaakt, staat op draft. Het veld invoice_id, het factuurnummer, is null zolang de factuur een concept is. Pas bij versturen krijgt hij een nummer en gaat hij naar open. Een koppeling die verkoopfacturen aanmaakt en niet verstuurt, laat dus een stapel concepten achter die niet in de omzet staan. Dat is de bekende klacht dat webshopfacturen "op concept blijven staan".

Voor webshoporders gebruiken we daarom meestal external_sales_invoices. De webshop heeft de factuur al gemaakt; Moneybird boekt hem met het ordernummer in reference en de webshop in source. Wil je dat Moneybird de factuur maakt en verstuurt, dan roept de koppeling na het aanmaken send_invoice aan, met e-mail of Peppol als verzendmethode.

Btw als tarief-ID, met een stille standaardwaarde

Moneybird vraagt per factuurregel het ID van een btw-tarief uit /tax_rates. Dat ID verschilt per administratie. Laat de koppeling het veld leeg, dan gebruikt Moneybird het standaardtarief van de administratie: een regel met 9% wordt zonder foutmelding een regel met 21%. Hetzelfde geldt voor prices_are_incl_tax: leeg betekent de instelling van de administratie. Een webshopprijs van € 24,20 inclusief btw die als exclusief wordt gelezen, wordt € 24,20 x 1,21 = € 29,28. De koppeling stuurt beide velden altijd mee en weigert een order met een tarief dat niet in de tabel staat. Meer in bedragen en btw mappen.

Klanten en het veld customer_id

Moneybird kan een contact opzoeken op customer_id, een eigen nummer dat uniek moet zijn binnen de administratie. De koppeling zet daar het klantnummer uit de webshop in, bijvoorbeeld WC-311. Gastbestellingen hebben in WooCommerce geen klantnummer (customer_id is 0). Die gaan op e-mailadres, of op een verzameldebiteur als je particulieren niet apart wilt. Zakelijke klanten krijgen altijd een eigen contact met tax_number, omdat de btw-verlegging ervan afhangt. Hoe dubbele contacten ontstaan staat in dubbele klanten en debiteuren.

De datum rond middernacht

Moneybird verwerkt een verzoek in de tijdzone uit de header Time-Zone, anders in die van de administratie, anders in UTC. Een order van 00:30 op 1 oktober Nederlandse tijd is 22:30 UTC op 30 september. Stuurt de koppeling de UTC-datum mee, dan valt de factuur in het derde kwartaal in plaats van het vierde, en in de verkeerde btw-aangifte. De koppeling rekent de orderdatum om naar Europe/Amsterdam voordat hij date vult. Zie datums en tijdzones.

Controleren met GET werkt niet altijd

Moneybird cachet API-antwoorden en raadt af om met een GET te controleren of een aanroep gelukt is: het antwoord kan onvolledig zijn. De koppeling bewaart daarom het ID uit het 201-antwoord bij de order. Bij een time-out haalt hij eerst de facturen van dat contact op (filter contact_id) en zoekt het ordernummer in reference voordat hij opnieuw post, zodat er geen tweede factuur voor dezelfde order ontstaat.

Platformen die we aan Moneybird koppelen

De koppeling wordt gebouwd op jouw administratie: je btw-tarieven, je grootboekrekeningen per productsoort, je betaalmethoden. Per combinatie:

De platformkant staat op WooCommerce koppeling en Shopify koppeling. Andere boekhoudpakketten: e-Boekhouden koppeling en SnelStart koppeling. Het overzicht van alle stromen staat op koppelingen.

Wij bouwen de koppeling voor een vaste prijs en hosten, draaien en bewaken hem daarna voor een vast bedrag per maand. Voor de livegang draait hij als dry run: je ziet per order welk contact, welk tarief en welke grootboekrekening er in Moneybird zouden ontstaan. Vertel welke webshop en welke betaalprovider je gebruikt.

Veelgestelde vragen

Blijven facturen uit de webshop in Moneybird op concept staan?

Dat hangt af van het soort factuur. Een verkoopfactuur die via de API wordt aangemaakt is een concept zonder factuurnummer tot hij wordt verstuurd. Een externe verkoopfactuur is geen concept: hij staat direct in de boekhouding met het ordernummer uit de webshop als referentie. Voor webshoporders gebruiken we meestal de externe factuur.

Komt de Mollie-transactie-ID mee naar Moneybird?

Ja. Bij het registreren van een betaling heeft Moneybird een veld transaction_identifier voor een bank- of PSP-referentie, en Moneybird gebruikt dat om de betaling te matchen met de bankmutatie. De koppeling zet daar de transactie-ID van Mollie in, bijvoorbeeld tr_7Hx2kQ. Meer over matchen staat in wat is afletteren.

Houdt Moneybird voorraad bij?

Nee. Een product in Moneybird heeft een prijs, een btw-tarief, een grootboekrekening en een unieke identifier, maar geen voorraadaantal. Voorraad blijft in je webshop, in een magazijnsysteem zoals Picqer of in een ERP. De koppeling met Moneybird gaat over verkoop, betalingen en klanten.

Kan ik meerdere webshops op één Moneybird-administratie koppelen?

Ja. Elke webshop krijgt een eigen bron en referentie op de factuur, zodat je in Moneybird ziet waar een order vandaan komt. Let op de limiet: die telt per IP-adres, dus alle koppelingen die vanaf hetzelfde adres met Moneybird praten, delen samen 150 verzoeken per 5 minuten.

Moet ik een API-token aanmaken of OAuth gebruiken?

Moneybird kent beide. Een persoonlijk API-token geeft volgens Moneybird toegang tot je hele account en moet worden bewaard als een wachtwoord. Met OAuth kies je scopes, zoals alleen sales_invoices en bank, en maakt Moneybird een aparte API-gebruiker aan, zodat je in de administratie ziet welke boekingen van de koppeling komen. De koppeling gebruikt OAuth.

Kan ik Moneybird eerst testen voordat de koppeling live gaat?

Ja. Moneybird biedt sandbox-administraties met alle functies, zonder abonnement; facturen krijgen daar een watermerk. De koppeling draait daar eerst als dry run, en daarna op je echte administratie zonder dat er iets wordt geboekt tot je hem goedkeurt.

Vertel wat je nodig hebt

Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.

  • Je weet de prijs en de doorlooptijd voordat je iets toezegt
  • Wij zoeken uit welke koppeling het werk uit handen neemt
  • Wij verzorgen de bouw, hosting, bewaking en het onderhoud
  • Je team krijgt minder overtypwerk en minder uitzoekwerk

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com