API développeurs
Integrez les données k-factu dans vos propres apps et automatisations via des tokens API REST.
API REST
API HTTP+JSON standard. Compatible avec tout langage ou outil.
Securise par conception
Les tokens sont haches en SHA-256. Vous ne voyez le token brut qu'une seule fois, a la creation.
Tokens par compte
Chaque token est lie à votre compte. Revoquez-le a tout moment depuis les Paramètres.
Authentification
Tous les endpoints requierent un Bearer token dans le header Authorization.
Étape 1 — Créer un token
Allez dans Paramètres → API Tokens.
Étape 2 — Utiliser le token
Incluez le token dans chaque requete :
Authorization: Bearer kf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Limites de taux
Les requetes avec token sont limitees pour protégér le service.
| Plan | Limite |
|---|---|
| Autonomo / PYME / Gestoria | 100 req/min |
Les requetes depassant la limite retournent 429. Reessayez après la valeur du header Retry-After (secondes).
Endpoints
/api/invoicesRetourne une liste paginee de factures de votre compte, triees par date d'émission decroissante.
Query Parameters
pageintegerNuméro de page (defaut : 1, 50 éléments par page)statusstringFiltrer par statut : draft, sent, paid, overdue, cancelleddateFromstring (YYYY-MM-DD)Date de debut (inclusive)dateTostring (YYYY-MM-DD)Date de fin (inclusive)searchstringRecherche textuelleExample Request
curl https://factu.krokanti.com/api/invoices \ -H "Authorization: Bearer kf_your_token"
Example Response
{
"items": [
{
"id": "uuid",
"invoiceNumber": "2026-A-001",
"issueDate": "2026-03-01",
"dueDate": "2026-04-01",
"clientName": "Acme SL",
"status": "paid",
"total": 121000,
"subtotal": 100000,
"ivaAmount": 21000,
"irpfAmount": 0
}
],
"total": 42,
"page": 1,
"limit": 50
}/api/clientsRetourne tous les clients de votre compte. Filtrez optionnellement par nom, NIF ou email.
Query Parameters
searchstringRecherche textuelleExample Request
curl https://factu.krokanti.com/api/clients \ -H "Authorization: Bearer kf_your_token"
Example Response
[
{
"id": "uuid",
"name": "Acme SL",
"nif": "A12345678",
"email": "billing@acme.es",
"address": "Calle Mayor 1",
"city": "Madrid",
"postalCode": "28001",
"country": "ES"
}
]/api/expensesRetourne une liste paginee de dépenses. Tous les montants sont en centimes d'euro.
Query Parameters
pageintegerNuméro de page (defaut : 1, 50 éléments par page)dateFromstring (YYYY-MM-DD)Date de debut (inclusive)dateTostring (YYYY-MM-DD)Date de fin (inclusive)deductiblebooleanFiltrer par déductibilité : true ou falsesearchstringRecherche textuelleExample Request
curl https://factu.krokanti.com/api/expenses \ -H "Authorization: Bearer kf_your_token"
Example Response
{
"items": [
{
"id": "uuid",
"date": "2026-03-10",
"description": "Cloud hosting",
"amount": 4999,
"isDeductible": true,
"categoryName": "Software y tecnologia",
"receiptUrl": null
}
],
"total": 18,
"page": 1,
"limit": 50
}Montants monetaires
Tous les montants monetaires sont retournes en centimes d'euro. Divisez par 100 pour obtenir des euros.
// total: 121000 → EUR 1,210.00 const euros = amount / 100;
Codes d'erreur
| Statut HTTP | Signification |
|---|---|
| 200 | Succès |
| 400 | Requete incorrecte — paramètrès ou corps invalides |
| 401 | Non autorise — token manquant ou invalide |
| 404 | Ressource introuvable |
| 429 | Limite de taux dépassée |
| 500 | Erreur interne du serveur |
/api/invoices/{id}Retourne une facture avec toutes les lignes et les données du client.
Example Request
curl https://factu.krokanti.com/api/invoices/INVOICE_ID \ -H "Authorization: Bearer kf_your_token"
Example Response
{
"invoice": {
"id": "uuid",
"invoiceNumber": "2026-A-001",
"issueDate": "2026-03-01",
"dueDate": "2026-04-01",
"status": "paid",
"total": 121000
},
"lines": [
{ "description": "Consulting", "quantity": 100, "unitPrice": 100000, "amount": 100000 }
],
"clientName": "Acme SL",
"clientNif": "A12345678"
}/api/invoicesCréé une nouvelle facture en brouillon. Les montants sont calcules cote serveur. `irpfRate` en points de base. `quantity` et `unitPrice` en centimes.
Example Request
curl -X POST https://factu.krokanti.com/api/invoices \
-H "Authorization: Bearer kf_your_token" \
-H "Content-Type: application/json" \
-d '{
"clientId": "CLIENT_UUID",
"seriesId": "SERIES_UUID",
"issueDate": "2026-03-13",
"irpfRate": 1500,
"applyIrpf": true,
"lines": [
{
"description": "Consulting services",
"quantity": 100,
"unitPrice": 100000,
"ivaType": "general"
}
]
}'Example Response
{
"id": "uuid",
"invoiceNumber": "2026-A-042",
"status": "draft",
"total": 106500
}/api/invoices/{id}/statusMet a jour le statut d'une facture. Transitions valides : draft → sent → paid. `paidAt` requis lors du passage a paid.
Example Request
curl -X PATCH https://factu.krokanti.com/api/invoices/INVOICE_ID/status \
-H "Authorization: Bearer kf_your_token" \
-H "Content-Type: application/json" \
-d '{ "status": "paid", "paidAt": "2026-03-13" }'Example Response
{
"id": "uuid",
"invoiceNumber": "2026-A-001",
"status": "paid",
"paidAt": "2026-03-13T00:00:00.000Z"
}/api/clientsCréé un nouveau client. Le NIF/CIF/NIE est valide pour les clients espagnols (country: ES).
Example Request
curl -X POST https://factu.krokanti.com/api/clients \
-H "Authorization: Bearer kf_your_token" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme SL",
"nif": "A12345678",
"email": "billing@acme.es",
"address": "Calle Mayor 1",
"city": "Madrid",
"postalCode": "28001",
"country": "ES"
}'Example Response
{
"id": "uuid",
"name": "Acme SL",
"nif": "A12345678",
"email": "billing@acme.es"
}/api/expensesCréé une nouvelle entrée de dépense. Le montant est en centimes d'euro.
Example Request
curl -X POST https://factu.krokanti.com/api/expenses \
-H "Authorization: Bearer kf_your_token" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-03-13",
"description": "Cloud hosting March",
"amount": 4999,
"categoryId": "CATEGORY_UUID",
"isDeductible": true,
"supplierName": "AWS"
}'Example Response
{
"id": "uuid",
"date": "2026-03-13",
"description": "Cloud hosting March",
"amount": 4999,
"isDeductible": true
}