Intégration Terminal de Pointage
Connectez n'importe quel terminal de pointage physique à NERP Suite via l'API générique d'événements
Intégration Terminal de Pointage
NERP Suite expose un endpoint générique qui accepte les événements de pointage depuis n'importe quel terminal physique (badge NFC, empreinte digitale, code PIN, QR code, etc.). Votre terminal envoie un simple appel HTTP — NERP Suite se charge de l'enregistrement, de la validation et de la mise à jour du statut de l'employé.
Pré-requis
- Un terminal capable d'envoyer des requêtes HTTP (
push to URL) - Une clé API terminal générée dans le dashboard RH
- Les matricules employés configurés dans NERP Suite
Authentification
Toutes les requêtes doivent inclure la clé terminal dans le header X-Terminal-Key :
X-Terminal-Key: tk_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Les clés terminal suivent le format :
tk_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
tk— Terminal Keylive— Environnement production (testpour le sandbox)XXXX...— Identifiant unique généré
Ne partagez jamais une clé terminal. En cas de compromission, révoquez-la immédiatement depuis Dashboard → RH → Paramètres → Terminaux.
Envoyer un événement
POST /api/hr/time/terminal/event
Headers
| Header | Valeur | Requis |
|---|---|---|
X-Terminal-Key | tk_live_... | ✅ |
Content-Type | application/json | ✅ |
Corps de la requête
{
"employeeNumber": "EMP-0042",
"eventType": "CLOCK_IN",
"timestamp": "2026-05-13T08:47:00Z",
"terminalId": "terminal-hall-entree",
"metadata": {
"method": "NFC",
"cardUid": "04:A3:B2:C1:D0:E9:F8",
"location": "Hall d'entrée"
}
}
Paramètres
| Champ | Type | Requis | Description |
|---|---|---|---|
employeeNumber | string | ✅ | Matricule de l'employé tel que configuré dans NERP Suite |
eventType | enum | ✅ | CLOCK_IN ou CLOCK_OUT |
timestamp | string | ✅ | Date/heure de l'événement en ISO 8601 UTC |
terminalId | string | ✅ | Identifiant unique du terminal (libre, défini par vous) |
metadata | object | — | Informations complémentaires — non utilisées pour la logique métier, stockées pour l'audit |
metadata.method | string | — | Méthode d'identification : NFC, FINGERPRINT, PIN, QR_CODE, FACE |
metadata.cardUid | string | — | UID de la carte NFC/RFID |
metadata.location | string | — | Libellé de l'emplacement du terminal |
Réponse — succès 200
{
"success": true,
"data": {
"entryId": "cuid_abc123",
"employeeNumber": "EMP-0042",
"employeeName": "Marie Dubois",
"eventType": "CLOCK_IN",
"clockIn": "2026-05-13T08:47:00Z",
"clockOut": null,
"status": "OPEN"
}
}
Réponse — doublon 200
Si l'employé a déjà pointé son arrivée et envoie un second CLOCK_IN, NERP Suite retourne l'entrée existante sans créer de doublon :
{
"success": true,
"duplicate": true,
"data": {
"entryId": "cuid_abc123",
"employeeNumber": "EMP-0042",
"eventType": "CLOCK_IN",
"clockIn": "2026-05-13T08:47:00Z",
"status": "OPEN"
}
}
Vérifier le statut d'un terminal
GET /api/hr/time/terminal/status
Retourne le statut du terminal associé à la clé API utilisée.
Réponse 200
{
"terminalId": "terminal-hall-entree",
"companyId": "uuid-de-la-company",
"companyName": "ACME Bénin",
"active": true,
"lastEventAt": "2026-05-13T08:47:00Z"
}
Codes d'erreur
| Code | Signification | Action recommandée |
|---|---|---|
401 | Clé terminal invalide ou révoquée | Vérifier la clé dans le dashboard |
404 | Matricule employé introuvable | Vérifier que l'employé existe dans NERP Suite et que son matricule est correct |
409 | Journée déjà clôturée | L'employé a déjà un CLOCK_IN et un CLOCK_OUT pour ce jour — aucune action possible |
422 | Payload invalide | Vérifier les champs requis et le format ISO 8601 du timestamp |
429 | Trop de requêtes | Respecter la limite de 60 requêtes/minute par terminal |
Exemples complets
Pointage arrivée — badge NFC
curl -X POST "https://api.nerpsuite.com/api/hr/time/terminal/event" \
-H "X-Terminal-Key: tk_live_votre_cle_ici" \
-H "Content-Type: application/json" \
-d '{
"employeeNumber": "EMP-0042",
"eventType": "CLOCK_IN",
"timestamp": "2026-05-13T08:47:00Z",
"terminalId": "terminal-hall-entree",
"metadata": {
"method": "NFC",
"cardUid": "04:A3:B2:C1:D0:E9:F8"
}
}'
Pointage départ — empreinte digitale
curl -X POST "https://api.nerpsuite.com/api/hr/time/terminal/event" \
-H "X-Terminal-Key: tk_live_votre_cle_ici" \
-H "Content-Type: application/json" \
-d '{
"employeeNumber": "EMP-0042",
"eventType": "CLOCK_OUT",
"timestamp": "2026-05-13T17:30:00Z",
"terminalId": "terminal-hall-entree",
"metadata": {
"method": "FINGERPRINT"
}
}'
Pointage — QR code sur badge imprimé
curl -X POST "https://api.nerpsuite.com/api/hr/time/terminal/event" \
-H "X-Terminal-Key: tk_live_votre_cle_ici" \
-H "Content-Type: application/json" \
-d '{
"employeeNumber": "EMP-0042",
"eventType": "CLOCK_IN",
"timestamp": "2026-05-13T08:47:00Z",
"terminalId": "terminal-atelier",
"metadata": {
"method": "QR_CODE"
}
}'
Configuration par marque de terminal
La plupart des terminaux de pointage physiques supportent le mode "Push to URL" ou "HTTP POST". Voici les paramètres génériques à renseigner dans l'interface de configuration de votre terminal :
| Paramètre | Valeur |
|---|---|
| URL | https://api.nerpsuite.com/api/hr/time/terminal/event |
| Méthode | POST |
| Header 1 | X-Terminal-Key: tk_live_votre_cle_ici |
| Header 2 | Content-Type: application/json |
| Format | JSON |
| Champ matricule | Mapper vers employeeNumber |
| Champ événement | Mapper vers eventType (CLOCK_IN / CLOCK_OUT) |
| Champ horodatage | Mapper vers timestamp (format ISO 8601) |
Le nom exact de ces paramètres varie selon le fabricant (Zkteco, HikVision, Suprema, Virdi, etc.). Référez-vous au manuel de votre terminal pour localiser la section "Attendance Push", "HTTP Upload" ou "Cloud Service".
Retry et idempotence
Si votre terminal envoie plusieurs fois le même événement (réseau instable, retry automatique), NERP Suite détecte les doublons via la combinaison employeeNumber + eventType + date. Un doublon retourne un 200 avec "duplicate": true — aucune entrée supplémentaire n'est créée.
Si votre terminal ne supporte pas le format ISO 8601 pour le timestamp, envoyez l'horodatage en Unix timestamp (secondes) — NERP Suite accepte les deux formats.