Skip to Content
Authentification

Authentification et clés d’API

L’API utilise des clés d’API d’entreprise (des comptes de service, non liés à un utilisateur). Chaque requête s’authentifie avec la clé en Bearer token :

curl https://api.kinmu.app/v1/organization \ -H "Authorization: Bearer kinmu_sk_live_xxxxxxxx"

Nature des clés

L’entreprise est toujours résolue à partir de la clé : vous n’envoyez jamais de companyId dans l’URL ni dans le body.

AspectDétail
Formatkinmu_sk_live_<40+ chars> (production) · kinmu_sk_test_<40+ chars> (sandbox).
VisibilitéLes clés ne sont affichées qu’une seule fois, à la création. Ensuite, seuls le préfixe et les premiers caractères restent visibles.
ÉmissionDepuis le dashboard my.kinmu.app → Développeurs (réservé à global_admin / company_manager).
Limite10 clés actives par entreprise par défaut ; configurable par entreprise dans les réglages de l’addon (max_active_keys). La valeur en vigueur est visible dans le dashboard.
ExpirationOptionnelle à la création (90 / 180 / 365 jours ou sans expiration). Si l’entreprise a fixé default_expiration_days et que vous ne demandez pas d’expiration explicite, la clé expire quand même selon cette politique.

Vérifiez expires_at dans la réponse de création. C’est la seule source fiable : même sans expiration demandée, la politique default_expiration_days de votre entreprise a pu en poser une. Notez-la et planifiez la rotation.

Scopes

Chaque clé porte des scopes explicites (moindre privilège). Sans le scope requis, l’endpoint répond 403 invalid_scope.

ScopePermet
org:empleados:readLire les salariés.
org:empleados:writeCréer, mettre à jour et gérer le départ des salariés.
org:fichajes:readLire les pointages et les work-summaries.
org:fichajes:writeEnregistrer des pointages.
org:ausencias:readLire les absences.
org:ausencias:writeCréer, approuver et refuser des absences.
org:saldos:readLire les soldes de congés.
org:estructura:readLire les locations et les units.
org:informes:readDemander et télécharger des rapports.
webhooks:manageGérer les webhooks sortants.

GET /v1/organization ne requiert aucun scope particulier : il sert à l’introspection et à la validation de la clé. Les rapports exigent en plus le scope de lecture de leur domaine : p. ex. absences_export requiert org:ausencias:read.

N’accordez à chaque intégration que les scopes dont elle a besoin.

Sandbox

Les clés kinmu_sk_test_ opèrent toujours sur une entreprise sandbox avec des données synthétiques, isolée de vos données réelles. Voir le guide Sandbox.

Désactiver l’addon Public API révoque TOUTES les clés API de l’entreprise (motif addon_disabled) et supprime l’entreprise sandbox avec ses données. Le réactiver ne les ressuscite pas : il faut émettre de nouvelles clés. Voir le cycle de vie.

Rotation

Une rotation atomique existe : un clic dans le dashboard Kinmu (Développeurs → API keys) émet la clé de remplacement en conservant les scopes, le nom, l’environnement et la politique d’expiration, et révoque l’ancienne dans la même transaction. Vous récupérez le nouveau secret une seule fois, comme à la création. L’API /v1 n’expose pas la gestion des clés : création, rotation et révocation se font toujours depuis le dashboard.

Une clé déjà révoquée ne peut pas être tournée : pour la remplacer, créez-en une nouvelle.

Si vous préférez faire se chevaucher les deux clés pour déployer sans interruption, procédez à la main :

  1. Créez la nouvelle clé avec les mêmes scopes.
  2. Déployez votre intégration avec la nouvelle clé.
  3. Vérifiez qu’elle fonctionne (p. ex. un GET /v1/organization).
  4. Révoquez l’ancienne clé.

Révocation

La révocation est immédiate depuis le dashboard : la clé cesse de fonctionner dès la requête suivante (401 unauthenticated). Révoquez sans attendre toute clé que vous soupçonnez compromise et vérifiez son last_used_ip.

Révoquer des clés et des webhooks (DELETE) fonctionne même avec un abonnement inactif : c’est un contrôle de sécurité, pas de la consommation de service. Vous n’êtes jamais privé du moyen de couper une credential compromise.

Bonnes pratiques

  • Ne publiez jamais une clé dans du code client, une app mobile, un dépôt ou des logs. Ce sont des identifiants de serveur.
  • Stockez-les dans un gestionnaire de secrets ou des variables d’environnement.
  • Utilisez une clé par intégration pour pouvoir révoquer de façon granulaire.
  • Appliquez le moindre privilège : uniquement les scopes indispensables.
  • Configurez une expiration et effectuez des rotations régulières.
  • Dans vos logs, n’enregistrez jamais le header Authorization.

Erreurs d’authentification

HTTPcodeCause
401unauthenticatedClé absente, invalide, révoquée ou expirée.
403invalid_scopeLa clé n’a pas le scope requis (errors.required_scope).
403subscription_inactiveEntreprise suspendue ou archivée, sans abonnement, abonnement suspendu, essai expiré, ou abonnement résilié et arrivé à terme ou expiré. Toujours 403, jamais 402.
403addon_disabledL’addon Public API n’est pas actif.

Le format complet des erreurs est décrit dans Conventions → Erreurs.

Last updated on