Consulter la licence
Cas d'usage pas à pas pour lire la licence d'un cabinet par l'API, connaître ses plafonds et son estimation mensuelle, et activer une clé d'activation.
La licence d'un cabinet détermine son plan, ses plafonds de dossiers et d'utilisateurs et son estimation de facturation. Votre intégration peut la lire pour vérifier qu'un dossier peut encore être créé, ou pour afficher la consommation dans un tableau de bord.
Prérequis : un jeton avec la capacité read, détenu par un membre du cabinet, et le public_token du cabinet. L'activation d'une clé demande en plus write et le rôle d'administrateur ou de gestionnaire.
Étape 1 : lire la licence
curl "https://api.novafisko.com/v1/firms/Fd7hQ2mN8sXa/licence?lang=fr" \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
{
"status": "active",
"subscription": {
"id": 31,
"status": "active",
"billing_interval": "monthly",
"current_period_start": "2026-10-01",
"current_period_end": "2026-10-31",
"trial_ends_at": null,
"source": "licence_key",
"billed": true,
"pilot": {"active": false, "until": null}
},
"plan": {
"code": "firm",
"name": "Cabinet",
"kind": "firm",
"features": ["peppol", "document_import", "bank"],
"base_price_monthly": 49.0,
"tiers": [{"from": 1, "to": 10, "unit_price": 9.0}, {"from": 11, "to": null, "unit_price": 7.0}],
"max_companies": null,
"peppol_fair_use_per_company": 200,
"annual_discount_pct": 10.0
},
"usage": {
"month": "2026-10",
"companies": 12,
"users": 4,
"bank_accounts": 15,
"rows": [
{"company_id": 318, "token": "k3Jd9fPq2LmX", "name": "Le Comptoir Montois SRL", "code": "COMPTOIR", "bank_accounts": 2, "status": "active", "activated_at": "2026-01-06T09:00:00+00:00", "deactivated_at": null}
],
"max_companies": 25,
"over_limit": false,
"suggestion": null
},
"estimate": {
"month": "2026-10",
"base": 49.0,
"companies_breakdown": [
{"from": 1, "to": 10, "quantity": 10, "unit_price": 9.0, "total": 90.0},
{"from": 11, "to": null, "quantity": 2, "unit_price": 7.0, "total": 14.0}
],
"options": [],
"discount": 0.0,
"subtotal": 153.0,
"vat_rate": 21.0,
"vat_amount": 32.13,
"total_incl_vat": 185.13,
"billed": true
},
"next_month_preview": {"companies": 12, "total": 153.0},
"over_limit": false,
"limits": {"max_users": 10, "max_companies": 25, "users_count": 4, "companies_count": 12},
"expires_at": "2027-09-30",
"warning": null,
"activation": {
"key_masked": "NF-••••-••••-••••-7K2Q",
"activated_at": "2026-01-06T08:55:12+00:00",
"valid_until": "2027-09-30",
"services": ["peppol", "document_import"]
},
"statements": [
{"id": 904, "reference": "NF-2026-09-0031", "kind": "monthly", "period": "2026-09", "subtotal": 146.0, "vat_amount": 30.66, "total": 176.66, "status": "paid", "issued_at": "2026-10-01", "paid_at": "2026-10-03"}
],
"options_available": [
{"code": "extra_bank_account", "name": "Compte bancaire supplémentaire", "price_monthly": 2.0, "unit": "par compte"}
],
"can_manage": true
}
La réponse est abrégée : elle contient aussi entitlements, companies_detail, comparison et quelques champs historiques conservés pour les anciennes versions des applications. Les valeurs chiffrées ci-dessus sont des exemples : la grille réelle est publiée par GET /v1/pricing.
Champs utiles à une intégration
| Champ | Usage |
|---|---|
status |
none si le cabinet n'a pas d'abonnement utilisable, sinon le statut de l'abonnement |
limits.max_companies, limits.companies_count |
Savoir s'il reste de la place pour un nouveau dossier. null signifie sans plafond |
limits.max_users, limits.users_count |
Même logique pour les collaborateurs |
over_limit |
Le cabinet dépasse le plafond de son plan |
expires_at |
Fin de validité de la clé d'activation, null sans clé |
warning |
Avertissement à afficher (échéance proche, dépassement), null sinon |
estimate |
Estimation du mois en cours, hors TVA et TVA comprise |
can_manage |
L'utilisateur peut activer ou libérer une clé |
Les montants de la licence sont des nombres JSON et non des chaînes. Il s'agit de montants commerciaux et non d'écritures comptables. Voir Conventions.
Un utilisateur qui n'est pas membre du cabinet reçoit 404.
Étape 2 : vérifier avant de créer un dossier
def can_add_company(licence):
limits = licence["limits"]
if limits["max_companies"] is None:
return True # no ceiling on this plan
return limits["companies_count"] < limits["max_companies"]
Si vous créez tout de même un dossier alors que le plafond est atteint, POST /v1/companies répond 422 avec le code company_limit_reached. De la même manière, l'ajout d'un collaborateur au-delà du plafond répond 422 avec user_limit_reached.
Étape 3 : activer une clé
Une clé d'activation a la forme NF-XXXX-XXXX-XXXX-XXXX. Elle accorde un plan, des options et des plafonds pour une durée donnée.
curl -X POST https://api.novafisko.com/v1/firms/Fd7hQ2mN8sXa/licence/activate \
-H "Authorization: Bearer $NOVAFISKO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"key": "NF-8H2K-P4QM-7TZD-7K2Q"}'
En cas de succès, la réponse 200 est la licence mise à jour, de la même forme qu'à l'étape 1. En cas de refus, la réponse est 422 :
{
"message": "Cette clé d'activation a expiré.",
"code": "expired_key",
"errors": {"key": ["Cette clé d'activation a expiré."]}
}
code |
Signification |
|---|---|
invalid_key |
Clé inconnue ou mal saisie |
expired_key |
Clé expirée |
exhausted_key |
Nombre d'activations autorisé déjà atteint |
key_reserved |
Clé réservée à un autre cabinet |
already_active |
Clé déjà active sur ce cabinet |
La route est limitée à 10 tentatives par minute.
Libérer une clé
curl -X DELETE https://api.novafisko.com/v1/firms/Fd7hQ2mN8sXa/licence/activation \
-H "Authorization: Bearer $NOVAFISKO_TOKEN"
La clé redevient disponible et l'abonnement qui en dépend est résilié. La réponse est la licence mise à jour.
L'activation et la libération d'une clé sont bloquées dans le cabinet de démonstration (403, code demo_mode).
Grille tarifaire publique
Deux routes publiques, sans authentification, alimentent un simulateur :
curl https://api.novafisko.com/v1/pricing
curl "https://api.novafisko.com/v1/pricing/simulate?companies=12"
Leur schéma détaillé figure dans la référence.