Met dit endpoint maak je verkoopfacturen aan in NumNum. Zodra ze aangemaakt zijn kan je ze verzenden via e-mail, Peppol of per post.
ℹ️ Authenticatie (persoonlijke API-token +
X-Company-Id), limieten en algemene foutcodes staan in het API-overzicht voor ontwikkelaars. Lees dat eerst.
POST https://app.numnum.be/api/v1/webhooks/create-invoice
Headers:
Authorization: Bearer <jouw-api-token>
X-Company-Id: <jouw-company-id>
Content-Type: application/json
Accept: application/json
De body is een JSON-array van factuurobjecten. Je kan één of meerdere facturen tegelijk aanmaken (max 50, atomair verwerkt).
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
language |
string | Ja | Taal van de factuur (bepaalt de PDF-taal): nl, fr, en of de |
invoice_date |
string | Ja | Factuurdatum in formaat JJJJ-MM-DD (bv. 2026-02-15) |
expire_days |
integer | Ja | Aantal dagen na de factuurdatum tot de vervaldatum (0–365) |
reference |
string | Nee | Eigen referentie (bv. ordernummer), max 255 tekens |
intro |
string | Nee | Introductietekst boven de factuurlijnen, max 255 tekens |
remarks |
string | Nee | Opmerking onder de factuurlijnen (zichtbaar voor de klant), max 255 tekens |
private_notes |
string | Nee | Privénotitie (enkel intern zichtbaar, niet op de PDF), max 255 tekens |
payment_info |
string | Nee | Betaalinfo tonen: yes (standaard), no of paid (zie hieronder) |
vat_shifted |
integer | Nee | Btw-verleggingsregime (zie tabel hieronder). Standaard 0 |
client |
object | Ja | Klantgegevens (zie Klant-object) |
invoice_lines |
array | Ja | Minstens 1 factuurlijn (zie Factuurlijnen) |
payment_info| Waarde | Gedrag |
|---|---|
yes |
Betaalinformatie tonen op de factuur (standaard) |
no |
Betaalinformatie verbergen |
paid |
Factuur meteen als betaald markeren; er wordt automatisch een betaling geregistreerd voor het volledige bedrag |
vat_shiftedBtw-verleggingsregime:
| Waarde | Betekenis |
|---|---|
0 |
Geen verlegging (standaard) |
1 |
Btw verlegd (algemeen) |
2 |
Medecontractant (werken in onroerende staat) |
4 |
Intracommunautaire dienstverrichting (B2B) |
8 |
Intracommunautaire levering van goederen (B2B) |
32 |
Marge-regeling btw |
64 |
Goederenexport (buiten EU) |
128 |
Diensten verricht buiten EU (B2B) |
⚠️ Bij een andere waarde dan
0moeten alle factuurlijnenvat_percentage: 0hebben. De klant heeft doorgaans een geldig btw-nummer nodig (bv. voor intracommunautaire leveringen).
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
company_type |
string | Ja | company of individual (legacy: bedrijf / particulier) |
type |
string | Bij company |
Juridische vorm (bv. bv, nv, vzw). Zie Entiteitstypes |
email |
string | Ja | Geldig e-mailadres, max 255 tekens |
first_name |
string | Ja | Voornaam contactpersoon |
last_name |
string | Ja | Achternaam contactpersoon |
address |
string | Ja | Straat + huisnummer |
address_zip |
string | Ja | Postcode |
address_city |
string | Ja | Stad / gemeente |
address_country |
string | Ja | Landcode, exact 2 letters (ISO 3166-1, bv. BE) |
vat_country_code |
string | Nee | Btw-landcode, exact 2 letters (bv. BE) |
vat_id |
string | Nee | Btw-nummer zonder landcode (bv. 0123456789). Punten/spaties worden genormaliseerd |
title |
string | Nee | Aanspreektitel, max 255 tekens |
telephone |
string | Nee | Telefoonnummer, max 255 tekens |
ℹ️ Het veld
typeis enkel verplicht voor bedrijven (company/bedrijf), niet voor particulieren.
invoice_lines)| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
description |
string | Ja | Omschrijving van product of dienst, max 255 tekens |
unit_price |
numeric | Ja | Eenheidsprijs exclusief btw (punt als decimaalteken, bv. 99.99) |
amount |
numeric | Ja | Aantal eenheden (mag decimaal zijn, bv. 2.5) |
vat_percentage |
numeric | Ja | Btw-percentage zonder % (bv. 21, 6, 0) |
De totalen worden automatisch berekend:
netto = unit_price × amountbtw = netto × (vat_percentage / 100)totaal = netto + btwcurl -X POST https://app.numnum.be/api/v1/webhooks/create-invoice \
-H "Authorization: Bearer <jouw-api-token>" \
-H "X-Company-Id: 12345" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"language": "nl",
"invoice_date": "2026-02-15",
"expire_days": 30,
"reference": "ORDER-2026-001",
"intro": "Bedankt voor uw bestelling!",
"remarks": "Gelieve binnen 30 dagen te betalen.",
"payment_info": "yes",
"vat_shifted": 0,
"client": {
"company_type": "company",
"type": "bv",
"email": "info@klant.be",
"vat_country_code": "BE",
"vat_id": "0123456789",
"first_name": "Jan",
"last_name": "Janssen",
"address": "Kerkstraat 1",
"address_zip": "1000",
"address_city": "Brussel",
"address_country": "BE",
"telephone": "+32 2 123 45 67"
},
"invoice_lines": [
{ "description": "Website ontwikkeling", "unit_price": 1500.00, "amount": 1, "vat_percentage": 21 },
{ "description": "Hosting (12 maanden)", "unit_price": 15.00, "amount": 12, "vat_percentage": 21 }
]
}
]'
Voor een particulier zijn type en vat_id niet vereist:
[
{
"language": "nl",
"invoice_date": "2026-02-20",
"expire_days": 14,
"client": {
"company_type": "individual",
"email": "john.doe@gmail.com",
"first_name": "John",
"last_name": "Doe",
"address": "Dorpstraat 45",
"address_zip": "9000",
"address_city": "Gent",
"address_country": "BE"
},
"invoice_lines": [
{ "description": "Grafisch ontwerp logo", "unit_price": 350.00, "amount": 1, "vat_percentage": 21 }
]
}
]
Bij verlegde btw gebruik je vat_shifted en vat_percentage: 0:
[
{
"language": "en",
"invoice_date": "2026-02-25",
"expire_days": 30,
"vat_shifted": 4,
"remarks": "Reverse charge - VAT to be accounted for by the customer",
"client": {
"company_type": "company",
"type": "gmbh",
"email": "info@deutschefirma.de",
"vat_country_code": "DE",
"vat_id": "123456789",
"first_name": "Hans",
"last_name": "Müller",
"address": "Hauptstraße 10",
"address_zip": "10115",
"address_city": "Berlin",
"address_country": "DE"
},
"invoice_lines": [
{ "description": "Consulting services", "unit_price": 2500.00, "amount": 1, "vat_percentage": 0 }
]
}
]
{
"invoices": [1234, 5678]
}
invoices is een lijst van interne database-ID’s in dezelfde volgorde als de input; dit zijn geen factuurnummers. De factuurnummers worden automatisch gegenereerd volgens je bedrijfsinstellingen.
Zie de foutentabel in het API-overzicht. Een validatiefout ziet er zo uit:
{
"error": "invalid_body",
"errors": {
"0.language": ["The language must be one of: nl, fr, en, de."],
"0.client.email": ["The client email must be a valid email address."],
"0.invoice_lines.0.unit_price": ["The unit price must be a number."]
}
}
Voor elke factuur zoekt NumNum of de klant al bestaat, anders wordt hij aangemaakt:
vat_country_code + vat_id): match op je bedrijf + het genormaliseerde btw-nummer. Formattering maakt niet uit: 0123456789 en 0123.456.789 matchen op dezelfde klant.vat_id + email. Gebruik dan een consistent e-mailadres om duplicaten te vermijden.⚠️ Bestaat de klant al (btw-match)? Dan wordt hij niet overschreven met de nieuwe gegevens (naam, adres, e-mail). Wijzig je klantgegevens in NumNum zelf.
1234.56), geen komma en geen duizendtalscheiding.JJJJ-MM-DD met leading zeros (2026-02-05).%-teken (21, niet "21%" of 0.21).Geldige waarden voor client.type (enkel verplicht bij bedrijven), o.a.: bv, nv, vzw, bvba, cvba, comm.v, comm.va, vof, eenmanszaak, sa, sarl, sas, srl, gmbh, ag, limited-ltd, limited-llc, natuurlijk-persoon, onbekend. Niet zeker? Gebruik onbekend.
Het oude endpoint POST /webhooks/create-invoice (zonder /api/v1) werkt nog voor bestaande integraties maar is verouderd: het geeft een kale lijst terug ([10232, 10233]) en gebruikt afwijkende foutcodes (406/401). Migreer naar POST /api/v1/webhooks/create-invoice.