Lancement officiel imminentFIDΣLIS finalise les derniers ajustements pour offrir une plateforme comptable robuste, fiable et conforme aux normes québécoises.Demander un accès anticipé

API publique

Référence des endpoints API

Documentation complète des endpoints REST FIDΣLIS — paramètres, réponses, codes d'erreur et exemples.

8 min de lecturePublié 2026-05-18apiendpointsréférencerest

Format des réponses

Toutes les réponses sont en JSON, encodage UTF-8.

Succès

{
  "data": <résultat>
}

<résultat> peut être un objet (pour POST ou GET d'un seul élément) ou un tableau (pour une liste).

Erreur

{
  "error": {
    "code": "invalid_request",
    "message": "Description lisible par un humain.",
    "details": { ... }  // Optionnel — détails par champ
  }
}

Codes d'erreur

HTTPCodeQuand
400invalid_requestLe payload est mal formé ou contient des données invalides
401unauthorizedToken manquant, invalide, expiré, ou révoqué
403forbiddenToken valide mais sans le scope requis, OU plan insuffisant
404not_foundLa ressource demandée n'existe pas dans ton organisation
429rate_limitedTu as dépassé 100 req/min
500internal_errorErreur serveur FIDΣLIS — réessaie dans quelques secondes

📇 Contacts

GET /api/v1/contacts

Liste les contacts (clients et fournisseurs) de ton organisation.

Paramètres de requête (query string)

NomTypeDescription
typestringOptionnel. CLIENT, SUPPLIER ou BOTH pour filtrer
limitintOptionnel. Max résultats (défaut 50, max 200)

Scope requis : contacts:read

Exemple

curl "https://fidelis-comptable.com/api/v1/contacts?type=CLIENT&limit=10" \
  -H "Authorization: Bearer fdl_TON_TOKEN"

Réponse (200 OK)

{
  "data": [
    {
      "id": "cmpkqx8ab000abc123",
      "type": "CLIENT",
      "name": "Restaurant Le Coq d'Or",
      "email": "contact@coqdor.qc.ca",
      "phone": "514-555-0142",
      "address": "2310 rue Saint-Denis, Montréal",
      "taxNumberTPS": null,
      "taxNumberTVQ": null,
      "createdAt": "2026-03-15T14:23:45.123Z",
      "updatedAt": "2026-05-01T09:12:00.000Z"
    }
  ]
}

POST /api/v1/contacts

Crée un nouveau contact.

Body JSON

ChampTypeRequisDescription
typestringCLIENT, SUPPLIER ou BOTH
namestringNom du contact (max 200 caractères)
emailstringAdresse courriel valide
phonestringNuméro de téléphone (max 50)
addressstringAdresse postale (max 500)
taxNumberTPSstringN° de TPS (max 50)
taxNumberTVQstringN° de TVQ (max 50)

Scope requis : contacts:write

Exemple

curl -X POST https://fidelis-comptable.com/api/v1/contacts \
  -H "Authorization: Bearer fdl_TON_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "CLIENT",
    "name": "Café Boucherville",
    "email": "info@cafe-bv.qc.ca",
    "phone": "450-555-0101"
  }'

Réponse (201 Created)

{
  "data": {
    "id": "cmpkxyz...",
    "type": "CLIENT",
    "name": "Café Boucherville",
    "email": "info@cafe-bv.qc.ca",
    "phone": "450-555-0101",
    "createdAt": "2026-05-18T16:30:00.000Z"
  }
}

📦 Produits

GET /api/v1/products

Liste les produits / services de ton catalogue.

Paramètres : limit (1-200, défaut 50)

Scope requis : products:read

Réponse (200 OK)

{
  "data": [
    {
      "id": "cmpprod123",
      "sku": "CAB_8X12",
      "name": "Cabanon (8x12)",
      "description": "Cabanon préfabriqué, vinyle, plancher 2x6...",
      "type": "PRODUCT",
      "unitPrice": "7976.0000",
      "taxable": true,
      "createdAt": "2026-04-01T10:00:00.000Z",
      "updatedAt": "2026-04-01T10:00:00.000Z"
    }
  ]
}

⚠️ Les montants sont retournés comme strings décimales pour préserver la précision (évite les erreurs de virgule flottante en JavaScript). Utilise une lib comme decimal.js ou BigDecimal côté client.

POST /api/v1/products

Crée un nouveau produit.

Body JSON

ChampTypeRequisDescription
skustringCode article unique (max 100)
namestringNom (max 200)
descriptionstringDescription longue (max 2000)
typestringPRODUCT (défaut) ou SERVICE
unitPricenumberPrix unitaire ≥ 0
taxablebooleantrue par défaut (TPS+TVQ appliquées)

Scope requis : products:write

Erreur courante : SKU dupliqué → 400 invalid_request.


💰 Factures

GET /api/v1/invoices

Liste les factures de ton organisation.

Paramètres

NomTypeDescription
statusstringDRAFT, SENT, PAID, OVERDUE, VOIDED
limitint1-200 (défaut 50)

Scope requis : invoices:read

Réponse (200 OK)

{
  "data": [
    {
      "id": "cminv001",
      "invoiceNumber": "FAC-2026-042",
      "date": "2026-05-15T00:00:00.000Z",
      "dueDate": "2026-06-14T00:00:00.000Z",
      "status": "PAID",
      "subtotal": "1058.0000",
      "tps": "52.9000",
      "tvq": "105.5355",
      "total": "1216.4355",
      "description": "Catering événement mai",
      "contact": {
        "id": "cmcontact001",
        "name": "Bistro Saint-Henri",
        "email": "compta@bistrosh.ca"
      },
      "createdAt": "2026-05-15T08:30:00.000Z"
    }
  ]
}

🚧 Création de factures (POST /api/v1/invoices) — bientôt disponible. La complexité vient de la gestion des lignes avec calcul de TPS/TVQ par item et association avec les comptes du grand livre. En attendant, utilise l'interface web /dashboard/invoices/new.


🧾 Dépenses

GET /api/v1/expenses

Liste les dépenses de ton organisation.

Paramètres

NomTypeDescription
statusstringDRAFT, APPROVED, PAID, REJECTED
limitint1-200 (défaut 50)

Scope requis : expenses:read

Réponse (200 OK)

{
  "data": [
    {
      "id": "cmexp001",
      "date": "2026-05-12T00:00:00.000Z",
      "status": "APPROVED",
      "amount": "340.0000",
      "tps": "17.0000",
      "tvq": "33.9150",
      "total": "390.9150",
      "description": "Achat fournitures Sysco",
      "contact": {
        "id": "cmcontact002",
        "name": "Sysco"
      },
      "account": {
        "id": "cmacc005",
        "code": "5000",
        "name": "Coût des marchandises vendues"
      },
      "createdAt": "2026-05-12T11:00:00.000Z"
    }
  ]
}

CORS et pré-flight

L'API supporte le CORS (Cross-Origin Resource Sharing) :

  • Origin autorisée : * (toutes)
  • Méthodes : GET, POST, PUT, PATCH, DELETE, OPTIONS
  • Headers : Authorization, Content-Type

Tu peux donc appeler l'API directement depuis le navigateur (ex. dans une SPA). Attention : si tu fais ça, ton token sera visible par les utilisateurs — préfère un backend proxy pour les apps publiques.

Pagination

Pour récupérer plus de 200 résultats, utilise limit + filtre sur la date :

# Page 1
GET /api/v1/invoices?limit=200

# Page 2 — filtre sur la date du dernier résultat de la page précédente
GET /api/v1/invoices?limit=200&before=2026-04-15

(Le paramètre before est ajouté progressivement aux endpoints.)

Support

Tu veux un endpoint qui n'existe pas encore ? Écris-nous — la roadmap API est conduite par tes besoins.