Introduction à l'API
Base URL, authentification par clé Bearer et premier appel à l'API REST v1 de Naskel.
L'API REST de Naskel vous permet de lire et créer vos factures, devis, contacts, entreprises et opportunités, et de gérer vos produits et stocks depuis vos propres outils. Cette page couvre l'essentiel pour faire votre premier appel.
Base URL
Tous les appels se font sur :
https://app.naskel.io/api/v1
Authentification
Chaque requête doit porter une clé API dans l'en-tête Authorization, sous la forme d'un jeton Bearer :
Authorization: Bearer nsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Format des clés
Une clé commence par nsk_live_, suivi de 32 caractères hexadécimaux (41 caractères en tout). Par exemple (clé factice) :
nsk_live_0123456789abcdef0123456789abcdef
La clé n'est affichée qu'une fois
À sa création, la clé n'est montrée qu'une seule fois. Copiez-la et stockez-la en lieu sûr. Si vous la perdez, générez-en une nouvelle. Une clé peut être révoquée ou expirée à tout moment.
Générer une clé
Les clés se créent dans l'application : Paramètres → API et intégrations → Clés API publiques. L'écran est réservé au propriétaire de l'espace.
Vous y nommez la clé, cochez ses scopes, et fixez une date d'expiration si besoin. Le secret n'est affiché qu'une fois, à la création : copiez-le tout de suite. Vous pouvez aussi révoquer une clé existante.
Votre premier appel
Récupérer vos 20 dernières factures payées :
curl -H "Authorization: Bearer nsk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
"https://app.naskel.io/api/v1/invoices?limit=20&status=PAID"
Le même appel en JavaScript (Node 18+ ou navigateur, avec fetch) :
const res = await fetch(
"https://app.naskel.io/api/v1/invoices?limit=20&status=PAID",
{ headers: { Authorization: `Bearer ${process.env.NASKEL_API_KEY}` } },
);
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${res.status} ${error.code}: ${error.message}`);
}
const { data, pagination } = await res.json();
console.log(`${data.length} factures sur ${pagination.total}`);
Une écriture, en passant le corps JSON et, pour les opérations sensibles, un en-tête d'idempotence :
await fetch("https://app.naskel.io/api/v1/stock-movements", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NASKEL_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
movements: [{ productId: "prod_123", quantity: -2, reason: "Casse" }],
}),
});
Portée de l'API
L'API v1 couvre la lecture, la création, la mise à jour et la suppression ciblée de vos données :
- Lecture (
GET) sur toutes les ressources documentées ; - Création (
POST) des factures, devis, contacts, entreprises et opportunités ; - Mise à jour (
PATCH) des factures, devis, contacts, entreprises et opportunités. Sur les factures et les devis, la modification est réservée au statut brouillon (DRAFT) ; - Suppression (
DELETE) des factures (brouillon, définitive), devis (brouillon), contacts et opportunités ; - Écritures de stock : ajustement d'un produit et mouvements de stock.
Les méthodes exactes et leurs contraintes (statuts autorisés, idempotence) sont détaillées sur chaque page de ressource. Les produits ne se créent pas par l'API (voir Produits) ; seul leur stock s'ajuste.
Un seul environnement
Naskel ne propose qu'un seul environnement : toutes les clés sont au format nsk_live_…. Il n'existe pas de mode bac à sable ni de clés de test (nsk_test_) pour le moment. Pour tester sans risque, créez une clé dédiée aux scopes strictement nécessaires, et révoquez-la après usage.
Idempotence
Les écritures acceptent un en-tête Idempotency-Key : une chaîne unique que vous choisissez pour identifier une opération.
Idempotency-Key: a1b2c3d4-…
Si vous rejouez le même appel avec la même clé, le serveur renvoie le même résultat sans ré-exécuter l'opération. C'est la garantie qui vous permet de retenter sans risque après une coupure réseau : vous ne savez pas si le premier appel est passé, vous le rejouez avec la même clé, et au pire vous récupérez simplement la réponse du premier.
- Générez une clé par opération (un UUID convient), et réutilisez-la uniquement pour rejouer cette opération-là.
- L'en-tête est supporté sur les écritures, notamment
POST /products/{id}/adjustetPOST /stock-movements.
La suite
- Scopes et permissions : ce qu'une clé a le droit de faire.
- Limites de débit : combien de requêtes par minute.
- Pagination et format des réponses
- Codes d'erreur
- Factures et Entreprises : les ressources documentées en détail.
Spécification OpenAPI
Une spécification OpenAPI 3.1 est disponible : /openapi.json. Importez-la dans Postman, Insomnia ou un générateur de client pour démarrer plus vite. La référence détaillée reste ces pages.