Développeurs
L'API Kompta
Reliez Kompta à vos autres outils : lisez vos clients, devis et factures, et créez des brouillons automatiquement depuis Zapier, Make, votre site internet ou votre CRM.
Inclus dans les plans Solo et Équipe · API REST · JSON
Une clé par outil
Créée dans Kompta, révocable à tout moment, en lecture seule ou en lecture et création.
Vos données seulement
Une clé donne accès à une seule entreprise, jamais aux autres.
Rien ne part tout seul
L'API crée des brouillons. L'envoi au client reste toujours votre décision, dans Kompta.
Simple à brancher
REST, JSON, une seule en-tête d'authentification. Un appel curl suffit pour tester.
Démarrer en 3 minutes
1. Créez une clé
Dans Kompta, menu Plus d'outils → API. Donnez-lui le nom de l'outil qui l'utilisera et choisissez ses droits. La clé commence par
kpt_et n'est affichée qu'une seule fois : copiez-la tout de suite.2. Testez-la
Terminal
curl https://kompta.pro/api/v1/me \ -H "Authorization: Bearer kpt_votre_cle"3. Créez un devis en brouillon
Requête
curl -X POST https://kompta.pro/api/v1/quotes \ -H "Authorization: Bearer $KOMPTA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_id": "3c1f6a2e-8b4d-4f7a-9e21-5d0c7b9a1f42", "validity_date": "2026-12-31", "items": [ { "description": "Dépose et pose de carrelage", "quantity": 12, "unit": "m²", "unit_price": 45, "vat_rate": 10 }, { "description": "Plinthes assorties", "quantity": 14, "unit": "ml", "unit_price": 12, "vat_rate": 10 } ], "notes": "Demande reçue via le formulaire du site" }'Réponse
HTTP/1.1 201 Created { "data": { "id": "9b2e…", "quote_number": "DEV-2026-00042", "quote_date": "2026-11-09", "status": "draft", "amount_ht": 708, "vat_amount": 70.8, "amount_ttc": 778.8, "client": { "id": "3c1f…", "name": "MARTIN Julie" }, "items": [ … ], … } }Le devis apparaît aussitôt dans Kompta, numéroté, au statut brouillon. Vous le relisez et l'envoyez vous-même à votre client.
Conventions
Adresse et authentification
Toutes les requêtes passent par https://kompta.pro/api/v1, en HTTPS, avec l'en-tête Authorization: Bearer kpt_…. Gardez la clé côté serveur : ne la mettez jamais dans le code d'une page web ou d'une application mobile.
Pagination
Les listes acceptent limit (1 à 100, 50 par défaut) et offset. La réponse indique le total et s'il reste des éléments.
GET /invoices?status=paid&from=2026-01-01&limit=50
{
"data": [ { "id": "…", "invoice_number": "FAC-2026-00012", "status": "paid", "amount_ttc": 1250, … } ],
"pagination": { "limit": 50, "offset": 0, "total": 134, "has_more": true }
}Filtres
from/to: dates AAAA-MM-JJ, sur la date du document.client_id: devis ou factures d'un client.q: recherche texte (clients, prospects, catalogue), 2 caractères minimum.stagedes prospects :nouveau,contacte,devis_envoye,negociation,gagne,perdu;archived=truepour les archivés.statusdes devis :draft,sent,accepted,refused,invoiced,expired,cancelled.statusdes factures :draft,pending,sent,paid,overdue,cancelled,irrecoverable.
Pas de doublon (idempotence)
Ajoutez à une création l'en-tête Idempotency-Key avec une valeur unique (un UUID par exemple). Si votre outil renvoie la même requête (coupure réseau, nouvel essai automatique), Kompta ne crée rien de plus et renvoie la réponse d'origine, avec l'en-tête Idempotent-Replayed: true. Fortement conseillé pour les factures, qui consomment un numéro. La clé est retenue 24 heures.
En-tête
Idempotency-Key: 6f1c2a9e-7b1d-4c2e-9a5f-1d2c3b4a5e6fLimites
120 requêtes par minute et par clé, dont 30 créations. Au-delà, la réponse 429 indique dans Retry-After combien de secondes attendre.
Erreurs
Une erreur renvoie toujours un code HTTP et un objet error avec un code stable, à tester dans votre programme, et un message en français.
Exemple
HTTP/1.1 422 Unprocessable Entity
{
"error": {
"code": "validation_error",
"message": "items.0.unit_price : doit être supérieur ou égal à 0",
"docs": "https://kompta.pro/developpeurs"
}
}| 400 | invalid_parameter / invalid_json | Paramètre de liste ou corps JSON mal formé. |
| 401 | missing_api_key / invalid_api_key | Clé absente, inconnue ou révoquée. |
| 403 | insufficient_scope | Clé en lecture seule utilisée pour créer. |
| 403 | plan_required | L'abonnement de l'entreprise ne comprend plus l'API. |
| 403 | plan_limit_reached | Quota mensuel de devis ou de factures atteint. |
| 404 | not_found | Ressource inexistante ou appartenant à une autre entreprise. |
| 409 | idempotency_conflict | Une requête avec la même Idempotency-Key est encore en cours. |
| 415 | unsupported_media_type | Corps envoyé sans « Content-Type: application/json ». |
| 422 | validation_error | Champ manquant, invalide ou inconnu : le message indique lequel. |
| 422 | idempotency_key_reused | Idempotency-Key déjà utilisée pour un autre contenu. |
| 429 | rate_limited | Trop de requêtes : attendez le nombre de secondes de l'en-tête Retry-After. |
| 500 | internal_error | Erreur de notre côté : réessayez plus tard. |
Référence
Adresses relatives à https://kompta.pro/api/v1.
Compte
- GET
/meEntreprise, abonnement et droits de la clé. Idéal pour tester une clé.
Clients
- GET
/clientsListe des clients, du plus récent au plus ancien.
Paramètres : limit, offset, q (nom ou email)
- GET
/clients/{id}Un client.
- POST
/clientsclé « Lecture et création »Crée une fiche client.
Devis
- GET
/quotesListe des devis, par date de devis décroissante.
Paramètres : limit, offset, status, from, to, client_id
- GET
/quotes/{id}Un devis, avec ses lignes.
- POST
/quotesclé « Lecture et création »Crée un devis en brouillon.
Factures clients
- GET
/invoicesListe des factures clients, par date de facture décroissante.
Paramètres : limit, offset, status, from, to, client_id
- GET
/invoices/{id}Une facture client, avec ses lignes.
- GET
/invoices/{id}/pdfLe PDF Factur-X de la facture, identique à celui de l'application.
- POST
/invoicesclé « Lecture et création »Crée une facture en brouillon.
Factures fournisseurs
- GET
/supplier-invoicesListe des factures fournisseurs (achats).
Paramètres : limit, offset, from, to
- GET
/supplier-invoices/{id}Une facture fournisseur.
Prospects
- GET
/prospectsPipeline commercial, hors prospects archivés.
Paramètres : limit, offset, stage, q, archived
- GET
/prospects/{id}Un prospect.
- POST
/prospectsclé « Lecture et création »Ajoute un prospect à l'étape « nouveau » (ex. formulaire de votre site).
Catalogue
- GET
/catalog-itemsArticles et ouvrages du catalogue.
Paramètres : limit, offset, q
- GET
/catalog-items/{id}Un article.
- POST
/catalog-itemsclé « Lecture et création »Ajoute un article simple.
Webhooks
- GET
/webhooksAdresses abonnées aux événements (sans leur secret).
- POST
/webhooksclé « Lecture et création »Abonne une adresse à des événements. Le secret de signature n'est renvoyé qu'ici.
- DELETE
/webhooks/{id}clé « Lecture et création »Désabonne une adresse.
Champs de création
Les champs inconnus sont refusés : une faute de frappe donne une erreur claire au lieu d'être ignorée.
POST /clients
name (obligatoire), email, phone, address, siret (14 chiffres), country (code à 2 lettres, FR par défaut).
POST /quotes
items (obligatoire), client_id, quote_date (aujourd'hui par défaut), validity_date, notes, deposit_percent, payment_terms_days (30 par défaut), planned_start_date, planned_duration_days.
POST /invoices
items (obligatoire), client_id, invoice_date (aujourd'hui par défaut), due_date, notes, is_reverse_charge (autoliquidation, TVA à 0).
POST /prospects
contact_name (obligatoire), company_name, email, phone, address, notes, estimated_amount (HT), next_action_at.
POST /catalog-items
label, unit_price (HT) et vat_rate obligatoires ; details, unit (u par défaut), category.
POST /webhooks
url (https, serveur public) et events (liste) obligatoires ; description.
Une ligne (items)
description, quantity, unit_price (HT, positif) et vat_rate (en %, ex. 20, 10, 5.5) obligatoires ; unit et details facultatifs. Sur un devis seulement, optional: true propose une ligne en option. Les totaux sont toujours recalculés par Kompta.
Webhooks
Plutôt que d'interroger l'API en boucle, laissez Kompta vous prévenir : une requête POST part vers votre adresse dès qu'un événement se produit.
Événements
quote.signed: devis signé par le client.quote.refused: devis refusé par le client.invoice.paid: facture payée.prospect.created: nouveau prospect (site vitrine, saisie manuelle, API).
Ajoutez une adresse dans Kompta (Plus d'outils → API) ou par POST /webhooks. Le bouton « Tester » envoie un événement ping.
Contenu envoyé
L'objet concerné, avec les mêmes champs que l'API. Les en-têtes Kompta-Event, Kompta-Event-Id et Kompta-Signature accompagnent chaque envoi.
POST vers votre adresse
Kompta-Event: quote.signed
Kompta-Event-Id: 0f6b1c7e-…
Kompta-Signature: t=1762700000,v1=5f2c…
{
"id": "0f6b1c7e-…",
"type": "quote.signed",
"created_at": "2026-11-09T14:12:03.120Z",
"data": {
"object": {
"id": "9b2e…",
"quote_number": "DEV-2026-00042",
"status": "accepted",
"amount_ttc": 778.8,
"signed_at": "2026-11-09T14:12:02.884Z",
"client": { "id": "3c1f…", "name": "MARTIN Julie" },
…
}
}
}Vérifier la signature
Kompta-Signature: t=…,v1=… : v1 est le HMAC-SHA256, avec le secret de l'adresse (whsec_…), de t + "." + corps brut. Refusez une signature fausse ou trop ancienne.
Node.js
import crypto from "node:crypto";
// rawBody : le corps EXACT reçu (texte), avant tout JSON.parse.
function verifyKomptaSignature(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = crypto
.createHmac("sha256", secret)
.update(`${parts.t}.${rawBody}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
const a = Buffer.from(expected);
const b = Buffer.from(parts.v1 ?? "");
return fresh && a.length === b.length && crypto.timingSafeEqual(a, b);
}Réponse et nouvelles tentatives
Répondez par un code 2xx en moins de 10 secondes. Sinon, Kompta réessaie après 1 min, 5 min, 30 min, 2 h, 6 h puis 24 h. Les redirections ne sont pas suivies. Après 30 échecs d'affilée, l'adresse est désactivée : vous la réactivez en un clic dans Kompta. Un même événement peut arriver deux fois : dédoublonnez sur Kompta-Event-Id.
Avec Zapier ou Make
Sans écrire de code : créez un déclencheur « Webhooks by Zapier → Catch Hook » ou, dans Make, un module « Webhooks → Custom webhook », puis collez l'adresse obtenue dans Kompta. Pour les actions (créer un client, un devis…), utilisez le module HTTP avec votre clé API.
Kompta dans votre assistant IA (MCP)
Kompta parle le Model Context Protocol : reliez-le à Claude, Cursor ou tout outil compatible, et posez vos questions en français.
- • « Combien j'ai facturé ce mois-ci, et qu'est-ce qui reste à encaisser ? »
- • « Quels devis attendent encore une signature ? »
- • « Prépare un devis pour Mme Martin : 12 m² de carrelage à 45 € HT, TVA 10 %. »
Avec votre compte Kompta (recommandé)
Dans Claude ou un autre assistant compatible, ajoutez un connecteur personnalisé avec l'adresse https://kompta.pro/api/mcp. L'assistant vous envoie sur Kompta : vous vous connectez, choisissez « Lecture » ou « Lecture et brouillons », puis cliquez sur « Autoriser ». Aucune clé à copier ; vous coupez l'accès quand vous voulez depuis Plus d'outils → API.
Fonctionne avec Claude, ChatGPT (connecteurs personnalisés) et Cursor. Ajouter à Cursor en un clic.
Pour les développeurs : OAuth 2.1 avec PKCE (S256) et enregistrement dynamique des clients. Métadonnées sur /.well-known/oauth-protected-resource et /.well-known/oauth-authorization-server.
Avec une clé API
Pour les outils qui acceptent un en-tête : Authorization: Bearer kpt_…. Une clé en lecture seule ne donne accès qu'aux questions ; une clé « Lecture et création » permet aussi de préparer des brouillons, jamais de les envoyer.
Claude Code
claude mcp add --transport http kompta https://kompta.pro/api/mcp \
--header "Authorization: Bearer kpt_votre_cle"Cursor, Claude Desktop… (fichier de configuration MCP)
{
"mcpServers": {
"kompta": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://kompta.pro/api/mcp",
"--header", "Authorization: Bearer kpt_votre_cle"]
}
}
}Outils disponibles : synthèse d'activité, clients, devis, factures, factures fournisseurs, prospects, catalogue, et la préparation de brouillons.
Ce que l'API ne fait pas (encore)
- • Elle n'envoie rien : ni email au client, ni transmission par la plateforme agréée. Un document créé par l'API reste un brouillon jusqu'à ce que vous l'envoyiez depuis Kompta.
- • Elle ne modifie ni ne supprime : pas de changement de statut, pas de marquage « payée ».
- • Pas de PDF de devis par l'API : le devis se consulte et s'imprime depuis Kompta.
- • Un devis ou une facture créé reçoit son numéro tout de suite, comme dans l'application.
Un besoin qui n'est pas couvert ? Écrivez-nous : l'API évolue avec les demandes de ses utilisateurs.
