Cet endpoint crée des factures de vente dans Sage Cloud Demat Invoicing. Une fois créées, vous pouvez les envoyer par e-mail, Peppol ou courrier.
ℹ️ 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. Lisez-le d’abord.
POST https://www.clouddematinvoicing.be/api/v1/webhooks/create-invoice
En-têtes :
Authorization: Bearer <votre-jeton-api>
X-Company-Id: <votre-company-id>
Content-Type: application/json
Accept: application/json
Le corps est un tableau JSON d’objets facture. Vous pouvez créer une ou plusieurs factures à la fois (max 50, traitées de façon atomique).
| Champ | Type | Requis | Description |
|---|---|---|---|
language |
string | Oui | Langue de la facture (définit la langue du PDF) : nl, fr, en ou de |
invoice_date |
string | Oui | Date de facture au format AAAA-MM-JJ (p. ex. 2026-02-15) |
expire_days |
integer | Oui | Nombre de jours après la date de facture jusqu’à l’échéance (0–365) |
reference |
string | Non | Votre référence (p. ex. numéro de commande), max 255 caractères |
intro |
string | Non | Texte d’introduction au-dessus des lignes, max 255 caractères |
remarks |
string | Non | Remarque sous les lignes (visible par le client), max 255 caractères |
private_notes |
string | Non | Note privée (interne uniquement, pas sur le PDF), max 255 caractères |
payment_info |
string | Non | Affichage des infos de paiement : yes (défaut), no ou paid (voir ci-dessous) |
vat_shifted |
integer | Non | Régime d’autoliquidation de TVA (voir tableau ci-dessous). Défaut 0 |
client |
object | Oui | Données du client (voir Objet client) |
invoice_lines |
array | Oui | Au moins 1 ligne de facture (voir Lignes de facture) |
payment_info| Valeur | Comportement |
|---|---|
yes |
Afficher les informations de paiement sur la facture (défaut) |
no |
Masquer les informations de paiement |
paid |
Marquer la facture comme payée immédiatement ; un paiement est automatiquement enregistré pour le montant total |
vat_shiftedRégime d’autoliquidation de TVA :
| Valeur | Signification |
|---|---|
0 |
Pas d’autoliquidation (défaut) |
1 |
TVA autoliquidée (général) |
2 |
Cocontractant (travaux immobiliers) |
4 |
Prestation de services intracommunautaire (B2B) |
8 |
Livraison intracommunautaire de biens (B2B) |
32 |
Régime de la marge TVA |
64 |
Exportation de biens (hors UE) |
128 |
Prestations de services hors UE (B2B) |
⚠️ Pour toute valeur autre que
0, toutes les lignes de facture doivent avoirvat_percentage: 0. Le client a généralement besoin d’un numéro de TVA valide (p. ex. pour les livraisons intracommunautaires).
| Champ | Type | Requis | Description |
|---|---|---|---|
company_type |
string | Oui | company ou individual (legacy : bedrijf / particulier) |
type |
string | Si company |
Forme juridique (p. ex. bv, nv, vzw). Voir la section « Types d’entité » plus bas |
email |
string | Oui | Adresse e-mail valide, max 255 caractères |
first_name |
string | Oui | Prénom du contact |
last_name |
string | Oui | Nom du contact |
address |
string | Oui | Rue + numéro |
address_zip |
string | Oui | Code postal |
address_city |
string | Oui | Ville |
address_country |
string | Oui | Code pays, exactement 2 lettres (ISO 3166-1, p. ex. BE) |
vat_country_code |
string | Non | Code pays TVA, exactement 2 lettres (p. ex. BE) |
vat_id |
string | Non | Numéro de TVA sans le code pays (p. ex. 0123456789). Les points/espaces sont normalisés |
title |
string | Non | Titre de civilité, max 255 caractères |
telephone |
string | Non | Numéro de téléphone, max 255 caractères |
ℹ️ Le champ
typen’est requis que pour les entreprises (company/bedrijf), pas pour les particuliers.
invoice_lines)| Champ | Type | Requis | Description |
|---|---|---|---|
description |
string | Oui | Description du produit ou service, max 255 caractères |
unit_price |
numeric | Oui | Prix unitaire hors TVA (point comme séparateur décimal, p. ex. 99.99) |
amount |
numeric | Oui | Nombre d’unités (peut être décimal, p. ex. 2.5) |
vat_percentage |
numeric | Oui | Pourcentage de TVA sans % (p. ex. 21, 6, 0) |
Les totaux sont calculés automatiquement :
net = unit_price × amounttva = net × (vat_percentage / 100)total = net + tvacurl -X POST https://www.clouddematinvoicing.be/api/v1/webhooks/create-invoice \
-H "Authorization: Bearer <votre-jeton-api>" \
-H "X-Company-Id: 12345" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '[
{
"language": "fr",
"invoice_date": "2026-02-15",
"expire_days": 30,
"reference": "ORDER-2026-001",
"intro": "Merci pour votre commande !",
"remarks": "Merci de payer dans les 30 jours.",
"payment_info": "yes",
"vat_shifted": 0,
"client": {
"company_type": "company",
"type": "bv",
"email": "info@client.be",
"vat_country_code": "BE",
"vat_id": "0123456789",
"first_name": "Jan",
"last_name": "Janssen",
"address": "Kerkstraat 1",
"address_zip": "1000",
"address_city": "Bruxelles",
"address_country": "BE",
"telephone": "+32 2 123 45 67"
},
"invoice_lines": [
{ "description": "Développement de site web", "unit_price": 1500.00, "amount": 1, "vat_percentage": 21 },
{ "description": "Hébergement (12 mois)", "unit_price": 15.00, "amount": 12, "vat_percentage": 21 }
]
}
]'
Pour un particulier, type et vat_id ne sont pas requis :
[
{
"language": "fr",
"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": "Gand",
"address_country": "BE"
},
"invoice_lines": [
{ "description": "Conception graphique de logo", "unit_price": 350.00, "amount": 1, "vat_percentage": 21 }
]
}
]
Pour l’autoliquidation, utilisez vat_shifted et 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 est une liste d’identifiants internes de base de données dans le même ordre que l’entrée ; ce ne sont pas des numéros de facture. Les numéros de facture sont générés automatiquement selon vos paramètres d’entreprise.
Voir le tableau des erreurs dans l’aperçu de l’API. Une erreur de validation ressemble à ceci :
{
"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."]
}
}
Pour chaque facture, Sage Cloud Demat Invoicing vérifie si le client existe déjà, sinon il le crée :
vat_country_code + vat_id) : correspondance sur votre entreprise + le numéro de TVA normalisé. Le formatage n’a pas d’importance : 0123456789 et 0123.456.789 correspondent au même client.vat_id + email. Utilisez une adresse e-mail cohérente pour éviter les doublons.⚠️ Si le client existe déjà (correspondance TVA), il n’est pas écrasé par les nouvelles données (nom, adresse, e-mail). Modifiez les données client dans Sage Cloud Demat Invoicing même.
1234.56), sans virgule ni séparateur de milliers.AAAA-MM-JJ avec zéros initiaux (2026-02-05).% (21, pas "21%" ni 0.21).Valeurs valides pour client.type (requis uniquement pour les entreprises), notamment : bv, nv, vzw, bvba, cvba, comm.v, comm.va, vof, eenmanszaak, sa, sarl, sas, srl, gmbh, ag, limited-ltd, limited-llc, natuurlijk-persoon, onbekend. Pas sûr ? Utilisez onbekend.
L’ancien endpoint POST /webhooks/create-invoice (sans /api/v1) fonctionne encore pour les intégrations existantes mais est obsolète : il renvoie une liste brute ([10232, 10233]) et utilise d’autres codes d’erreur (406/401). Migrez vers POST /api/v1/webhooks/create-invoice.