Ces endpoints créent des bordereaux d’achat émis, en jargon TVA belge des factures d’autofacturation (self-billing). Il s’agit d’un document que votre entreprise établit au nom d’un fournisseur (p. ex. un décompte de « prix du lait » qu’une laiterie établit pour un éleveur laitier).
Utilisateurs typiques : producteurs et coopératives qui établissent périodiquement des décomptes pour leurs fournisseurs, ou systèmes externes qui génèrent des décomptes et souhaitent les transmettre à NumNum tout en conservant leur propre mise en page PDF.
ℹ️ L’authentification (jeton API personnel +
X-Company-Id), les limites et les codes d’erreur généraux figurent dans l’Aperçu de l’API pour développeurs. Les en-têtes et la correspondance client sont identiques à l’API Factures.
POST https://app.numnum.be/api/v1/webhooks/create-purchase-borderelle
POST https://app.numnum.be/api/v1/webhooks/create-purchase-borderelle-creditnote
Un tableau JSON de bordereaux (traités de façon atomique). La structure ressemble à l’API Factures, avec quelques différences.
| Champ | Type | Requis | Description |
|---|---|---|---|
language |
string | Oui | nl, fr, en ou de |
purchase_borderelle_date |
string | Oui | Date du document AAAA-MM-JJ |
expire_days |
integer | Oui | Jours d’échéance après la date du document (0–365) |
reference |
string | Non | Votre référence (p. ex. période), max 255 |
intro |
string | Non | Texte au-dessus des lignes, max 255 |
remarks |
string | Non | Texte sous les lignes, max 255 |
private_notes |
string | Non | Note interne (non visible par le fournisseur), max 255 |
payment_info |
string | Non | yes (défaut), no ou paid |
vat_shifted |
integer | Non | Voir le tableau vat_shifted |
attachment_pdf |
string | Non | PDF encodé en base64 (votre propre mise en page, voir ci-dessous) |
attachment_pdf_filename |
string | Non | Nom du fichier joint ; défaut <n°-bordereau>.pdf |
client |
object | Oui | Le fournisseur pour lequel vous établissez le document (même structure que le client dans l’API Factures) |
lines |
array | Oui | Au moins 1 ligne (attention : lines, pas invoice_lines) |
lines)"lines": [
{ "description": "Livraison de lait 1–15 mai (litre)", "unit_price": 0.45, "amount": 12500, "vat_percentage": 6 }
]
Mêmes champs qu’une ligne de facture : description, unit_price, amount, vat_percentage. amount peut être décimal (p. ex. litre/kg). Les totaux sont calculés côté serveur.
attachment_pdf)Vous voulez conserver votre propre mise en page PDF ? Envoyez un PDF encodé en base64. Il est stocké comme pièce jointe sur le document et inclus lors de l’envoi Peppol. NumNum génère malgré tout un PDF standard à partir des données du document.
attachment_pdf_filename est absent, <n°-bordereau>.pdf est utilisé.application/pdf.// Node.js
const fs = require('fs')
const pdfBase64 = fs.readFileSync('./prix-du-lait-mai-2026.pdf').toString('base64')
Presque identique à un bordereau, avec ces différences :
| Champ | Description |
|---|---|
purchase_borderelle_creditnote_date |
Date du document (au lieu de purchase_borderelle_date) |
purchase_borderelle_uuid |
Facultatif. UUID d’un bordereau d’achat existant dans la même entreprise ; lié comme source. Un UUID d’une autre entreprise renvoie 404 |
expire_days, payment_info |
Non applicables aux notes de crédit |
Tous les autres champs se comportent de manière identique. Utilisez des montants négatifs ou correctifs selon votre correction.
curl -X POST https://app.numnum.be/api/v1/webhooks/create-purchase-borderelle \
-H "Authorization: Bearer <votre-jeton-api>" \
-H "X-Company-Id: 12345" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"language": "fr",
"purchase_borderelle_date": "2026-05-20",
"expire_days": 30,
"reference": "Prix du lait mai 2026",
"payment_info": "no",
"client": {
"company_type": "company",
"type": "onbekend",
"email": "eleveur@example.be",
"first_name": "Jan",
"last_name": "De Boer",
"vat_country_code": "BE",
"vat_id": "0123456789",
"address": "Boerderijstraat 1",
"address_zip": "9800",
"address_city": "Deinze",
"address_country": "BE"
},
"lines": [
{ "description": "Livraison de lait 1–15 mai (litre)", "unit_price": 0.45, "amount": 12500, "vat_percentage": 6 },
{ "description": "Livraison de lait 16–31 mai (litre)", "unit_price": 0.46, "amount": 13200, "vat_percentage": 6 }
]
}
]'
curl -X POST https://app.numnum.be/api/v1/webhooks/create-purchase-borderelle-creditnote \
-H "Authorization: Bearer <votre-jeton-api>" \
-H "X-Company-Id: 12345" \
-H "Content-Type: application/json" \
-d '[
{
"language": "fr",
"purchase_borderelle_creditnote_date": "2026-05-21",
"purchase_borderelle_uuid": "9c1a2b3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
"reference": "Correction prix du lait mai",
"client": { "company_type": "company", "type": "onbekend", "email": "eleveur@example.be", "first_name": "Jan", "last_name": "De Boer", "vat_country_code": "BE", "vat_id": "0123456789", "address": "Boerderijstraat 1", "address_zip": "9800", "address_city": "Deinze", "address_country": "BE" },
"lines": [
{ "description": "Correction prime de qualité", "unit_price": -50.00, "amount": 1, "vat_percentage": 6 }
]
}
]'
Bordereau d’achat :
{ "purchase_borderelles": [1234, 1235] }
Note de crédit :
{ "purchase_borderelle_creditnotes": [987] }
Le tableau contient les identifiants internes de base de données dans le même ordre que l’entrée.
Voir le tableau des erreurs dans l’aperçu de l’API. Les erreurs de validation suivent le même format invalid_body que l’API Factures, indexées par position (0.client.email, 1.lines.0.unit_price, …). Un purchase_borderelle_uuid d’une autre entreprise renvoie 404.
| Sujet | API Factures | API Bordereau d’achat |
|---|---|---|
| Type de document | Facture de vente (sortante) | Bordereau d’achat émis (au nom d’un fournisseur) |
| Client dans la charge utile | Le client que vous facturez | Le fournisseur pour lequel vous établissez |
| Champ date | invoice_date |
purchase_borderelle_date |
| Champ lignes | invoice_lines |
lines |
| Pièce jointe PDF propre | ❌ | ✅ via attachment_pdf |
| Peppol InvoiceTypeCode | 380 (facture) | 389 (autofacturation) |
AB). Vous ne pouvez pas fournir votre propre numéro.