Documentation

Factures

Endpoints API pour créer, lister, valider et envoyer des factures.

Lister les factures

GET /v1/invoices

Paramètres de requête :

ParamètreTypeDescription
skipintegerPagination — offset
takeintegerPagination — limite (max 100)
searchstringRecherche par référence ou client
statusstringFiltrer par statut : DRAFT, SENT, PAID, OVERDUE, CANCELLED
clientIdstringFiltrer par client
fromdateDate de début (ISO 8601)
todateDate de fin (ISO 8601)

Réponse :

{
  "data": [
    {
      "id": "clx1234abcd",
      "reference": "FAC-2026-0042",
      "status": "SENT",
      "issueDate": "2026-05-01T00:00:00Z",
      "dueDate": "2026-05-31T00:00:00Z",
      "totalHT": 500000,
      "totalTVA": 90000,
      "totalTTC": 590000,
      "currency": "XOF",
      "client": {
        "id": "clx5678efgh",
        "name": "SARL MonClient",
        "email": "contact@monclient.com"
      }
    }
  ],
  "total": 142
}

Obtenir une facture

GET /v1/invoices/{id}

Retourne les détails complets d'une facture, incluant les lignes de facturation.

Créer une facture

POST /v1/invoices

Corps de la requête :

{
  "clientId": "clx5678efgh",
  "issueDate": "2026-05-01",
  "dueDate": "2026-05-31",
  "currency": "XOF",
  "notes": "Facture pour le projet XYZ",
  "lines": [
    {
      "productId": "clxprd001",
      "description": "Développement web",
      "quantity": 10,
      "unitPrice": 50000,
      "taxRateId": "clxtax001",
      "discount": 0
    }
  ]
}

Réponse : 201 Created avec l'objet facture créé.

Cycle de vie recommandé

  1. Créer la facture en brouillon.
  2. Vérifier les totaux et la date d'échéance.
  3. Valider (/validate) pour figer le document.
  4. Envoyer (/send) au client.
  5. Enregistrer les paiements (/payments) jusqu'au solde.

Valider une facture

POST /v1/invoices/{id}/validate

Passe la facture de DRAFT à SENT et génère le numéro définitif.

Contraintes métier

  • Une facture sans ligne ne doit pas être validée.
  • Après validation, la modification directe doit être restreinte.
  • Le cumul des paiements ne doit pas dépasser le total TTC.
  • dueDate doit être supérieure ou égale à issueDate.

Envoyer par email

POST /v1/invoices/{id}/send

Corps optionnel :

{
  "to": "client@example.com",
  "subject": "Votre facture FAC-2026-0042",
  "message": "Veuillez trouver ci-joint votre facture."
}

Enregistrer un paiement

POST /v1/invoices/{id}/payments
{
  "amount": 590000,
  "date": "2026-05-15",
  "method": "WAVE",
  "reference": "WAVE-TXN-123456",
  "notes": "Virement Wave du 15 mai"
}

Erreurs fréquentes

Code HTTPerror.codeCas typique
400VALIDATION_ERRORDate invalide, ligne invalide, montant non conforme
404NOT_FOUNDFacture introuvable
409CONFLICTTransition d'état invalide (ex. validation impossible)
422BUSINESS_RULE_ERRORPaiement supérieur au solde

Exemple de conflit métier :

{
  "error": {
    "code": "BUSINESS_RULE_ERROR",
    "message": "Le montant du paiement dépasse le solde restant."
  }
}

Télécharger le PDF

GET /v1/invoices/{id}/pdf

Retourne le fichier PDF de la facture (Content-Type: application/pdf).

Bonnes pratiques d'intégration

  • Traitez la validation comme une étape explicite de workflow (pas implicite).
  • Synchronisez les statuts de facture dans votre système tiers via polling ou webhooks.
  • Journalisez les tentatives d'envoi email et les échecs pour faciliter le support.