En un coup d’œil
- Statut
- Fonctionne aujourd’hui
- Matériel
- Contrôleurs, plateformes d’accès, un script sur PC ou Raspberry Pi
- Les membres peuvent utiliser
- Cartes, visages (identifiant d’appareil), QR, PIN à usage unique
- Prérequis
- HTTPS vers api.chronixhub.com et un jeton Bearer
Comment ça se connecte
- Le membre présente, tape ou montre un visage
- Contrôleur ou script
- POST /api/v1/access/verify
- La porte s’ouvre seulement sur granted: true
Chronix Hub expose un seul point d’accès neutre vis-à-vis des fabricants. Votre appareil (ou le boîtier placé devant) envoie l’identifiant de l’appareil et l’identifiant qu’il vient de lire. Chronix Hub répond par une décision et un motif, et l’appareil n’ouvre que sur un oui explicite.
L’authentification est une clé d’appareil de type Bearer. Chaque clé appartient à un appareil et ne peut poser que des questions de contrôle d’accès : une clé divulguée ne permet pas de lire les données des membres.
Ce qui est compatible HTTPS
Le test est simple : peut-il appeler une API web à chaque tentative d’accès et agir selon la réponse ?
- Plateformes et contrôleurs d’accès avec une étape de décision HTTP ou webhook.
- Middleware ou service sur mesure d’un intégrateur entre le lecteur et la serrure.
- Un petit script sur un PC ou un Raspberry Pi à côté du lecteur, avec un relais vers la serrure.
- Un terminal facial dont le middleware peut envoyer son propre identifiant pour la personne.
- Le matériel qui ne parle que son propre protocole n’est pas compatible HTTPS à lui seul. Voir les pages ZKTeco, Hikvision, Suprema et Kisi.
Ce que les membres peuvent utiliser
Tout ce que votre appareil sait lire, tant qu’il envoie l’un de ces types d’identifiant.
Carte
Le numéro de carte tel que le lecteur le lit. Ajoutez d’abord le même numéro dans l’onglet Accès du membre.
Visage
L’identifiant propre au terminal pour la personne, associé au membre. Aucune photo ni donnée biométrique n’est stockée dans Chronix Hub.
Pass QR
Un lecteur qui scanne les QR envoie le texte complet scanné avec le type qr. Le membre le montre depuis Mes abonnements. Il se renouvelle toutes les 30 secondes et ne sert qu’une fois.
PIN à usage unique
Un clavier envoie le code à 6 chiffres tapé par le membre avec le type pin. Le code vient d’Afficher le PIN dans le portail, dure 5 minutes et ne sert qu’une fois.
Le connecter, étape par étape
Il vous faut l’accès administrateur et la personne qui configure l’appareil.
Créer la porte et l’horaire
Onglet Portes : nommez la porte, choisissez un horaire et réglez l’anti-retour. Voir la présentation pour les détails.
Ajouter l’appareil
Onglet Appareils, Ajouter un appareil. Nommez-le, choisissez le fabricant Autre (tout appareil capable d’appeler une API web), la porte. Ajoutez l’IP publique de la salle à la liste d’autorisation.
Copier la clé et l’identifiant de l’appareil
La clé n’est affichée qu’une fois. Rangez-la dans le coffre de secrets de l’appareil, pas dans un document partagé. L’identifiant (ou son nom exact) figure dans chaque requête.
Faire envoyer un POST à chaque passage
Envoyez la requête ci-dessous au point de vérification, avec la clé en jeton Bearer. N’ouvrez la porte que si la réponse est 200 avec granted: true.
Envoyer un signal de vie
Facultatif : pingez le point de signal de vie environ une fois par minute pour que l’onglet Appareils affiche En ligne (entendu dans les 2 dernières minutes).
Tester avec une vraie carte
Présentez la carte d’un membre et surveillez le journal en direct. Vous devriez voir la tentative et son motif en quelques secondes.
L’API en un écran
Voici tout le contrat dont un appareil a besoin. Le deviceId est l’identifiant de l’appareil ou son nom exact. La référence complète est dans la documentation de l’API.
curl -X POST https://api.chronixhub.com/api/v1/access/verify -H "Authorization: Bearer $CHRONIX_DEVICE_KEY" -H "Content-Type: application/json" -d '{
"deviceId": "Front turnstile",
"credential": { "type": "card", "value": "0012345678" }
}'HTTP 200
{
"granted": true,
"reason": "active_membership",
"memberId": "clx...",
"memberName": "Sara Haddad",
"expiresAt": "2026-12-31T23:59:59.000Z",
"displayMessage": "Welcome, Sara"
}HTTP 200
{
"granted": false,
"reason": "membership_frozen",
"displayMessage": "Membership is frozen"
}Types d’identifiants
Envoyez exactement un identifiant par requête.
| Type d’identifiant | Valeur à envoyer |
|---|---|
card | Le numéro de carte tel que le lecteur le lit. |
pin | Le code à usage unique à 6 chiffres tapé par le membre. |
face | L’identifiant propre au terminal pour la personne. |
qr | Le texte complet scanné par le lecteur depuis le QR du membre. |
curl -X POST https://api.chronixhub.com/api/v1/access/heartbeat -H "Authorization: Bearer $CHRONIX_DEVICE_KEY" -H "Content-Type: application/json" -d '{ "deviceId": "Front turnstile", "firmwareVersion": "1.4.2" }'
HTTP 200
{ "ok": true, "serverTime": "2026-10-21T08:30:00.000Z" }// Open the door ONLY on an explicit yes. Everything else is "no".
const res = await fetch("https://api.chronixhub.com/api/v1/access/verify", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CHRONIX_DEVICE_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ deviceId, credential: { type, value } }),
});
const open = res.status === 200 && (await res.json()).granted === true;
if (open) unlockDoor();Règles que votre intégration doit respecter
- Seul un HTTP 200 avec granted: true ouvre la porte. Traitez tout autre statut et tout délai dépassé comme un non.
- Chaque décision, refus compris, est un 200. Un statut non 200 signale un problème de requête ou de clé : 400, 401, 403, 404, 429 ou 5xx.
- Ne mettez jamais la clé dans une chaîne de requête ou une URL. Utilisez l’en-tête Authorization.
- Affichez displayMessage à l’écran de l’appareil s’il en a un. Il est court et sûr à afficher.
- Un PIN refusé n’inclut jamais de nom de membre : n’en attendez pas.
- Respectez le 429 en attendant avant de réessayer. La limite par défaut est de 60 tentatives par minute et par appareil.
- L’ouverture par défaut sert quand l’appareil ne peut pas joindre Chronix Hub du tout. Une erreur serveur n’est jamais une permission d’ouvrir.
Dépannage
| Ce que vous voyez | Cause probable | Solution |
|---|---|---|
| 401 sur l’appel de vérification | Clé absente, incorrecte ou régénérée. | Recopiez la clé actuelle, ou Régénérez la clé et mettez l’appareil à jour. |
| 403 sur l’appel de vérification | IP absente de la liste, mauvais type de clé, ou contrôle d’accès absent de l’offre du studio. | Comparez la liste d’IP à l’IP publique de la salle et vérifiez l’offre. |
| 404 sur l’appel de vérification | L’identifiant de l’appareil ou la porte ne correspond pas à cette clé. | Utilisez l’identifiant ou le nom exact de l’appareil, et ne nommez que sa propre porte. |
| 400 validation_failed | Le corps est mal formé, ou la clé est dans la chaîne de requête. | Envoyez du JSON avec deviceId et credential, clé uniquement dans l’en-tête. |
| 429 aux heures de pointe | L’appareil a atteint sa limite par minute. | Relevez la limite de l’appareil dans l’administration (jusqu’à 600). |
| Toujours unknown_credential | La carte n’est pas enregistrée, a été révoquée, ou le format du numéro diffère. | Ajoutez l’identifiant dans Accès, avec le numéro exactement tel que le lecteur l’envoie. |
| L’appareil est Hors ligne | Aucun passage ni signal de vie en 2 minutes. | Vérifiez la connexion et la tâche de signal de vie. |
Ce qu’il faut demander à l’installateur
Transmettez cette liste avant le devis.
- Le contrôleur ou le middleware peut-il émettre un POST HTTPS avec un jeton Bearer pour chaque tentative et ouvrir selon la réponse ?
- Peut-il envoyer un numéro de carte, un code tapé, l’identifiant d’un terminal facial et un QR scanné comme valeur d’identifiant ?
- Traitera-t-il toute erreur, tout délai dépassé et tout statut non 200 comme un refus ?
- Peut-il envoyer un signal de vie à peu près chaque minute ?
- Où sera stockée la clé de l’appareil, et qui peut la lire ?
- Quelle est l’IP publique de la salle, pour l’ajouter à la liste d’autorisation ?
Questions fréquentes
Dois-je être développeur ?
Quelqu’un doit configurer l’appareil ou écrire le petit script. Beaucoup de plateformes d’accès le font par simples réglages. Sinon, un intégrateur peut le construire d’après le contrat ci-dessus.
Existe-t-il une intégration officielle pour ma marque ?
Chronix Hub n’inclut pas d’intégrations fabricants aujourd’hui et n’est partenaire officiel d’aucun fabricant de matériel. Tout ce qui peut appeler l’API ouverte fonctionne.
Puis-je tester sans vraie porte ?
Oui. Créez un appareil, envoyez la requête curl avec une carte que vous avez ajoutée et surveillez le journal en direct. L’API est la même.
Quelle est la rapidité de la réponse ?
Une réponse typique prend quelques centièmes de seconde en production, plus le temps réseau jusqu’à l’API.
Et les terminaux faciaux ?
Le terminal ou son middleware envoie son propre identifiant pour la personne avec le type face. Vous l’associez à un membre dans Accès, Ajouter un identifiant, Visage. Les visages que le terminal connaît mais que vous n’avez pas liés peuvent être signalés au point d’inscriptions et apparaissent dans Inscriptions en attente.
Un même membre peut-il utiliser une carte et un PIN ?
Oui. L’anti-retour est par membre, pas par identifiant : une carte suivie d’un PIN à la même porte dans la fenêtre est refusée.
Autres façons de se connecter
Les noms de produits appartiennent à leurs propriétaires. Chronix Hub n’est pas un partenaire certifié ou officiel d’un fabricant de matériel et ne vend pas de matériel.
Envie de voir le contrôle d’accès sur votre propre studio ?
Réservez une courte démo et nous passerons en revue votre porte, votre matériel et vos offres d’abonnement.