Authentification
L'API SalonBookIt utilise deux méthodes d'authentification : clés API pour identifier votre commerce et JWT pour authentifier les clients.
Résumé
API Key
Identifie votre commerce à chaque requête. Requise pour tous les endpoints.
- S'obtient depuis le tableau de bord
- S'envoie dans le header
X-API-Key - Préfixe
hh_pub_(pública) ohh_sec_(privada)
JWT Token
Authentifie un client spécifique. Requis pour les endpoints privés.
- S'obtient via
/api/v1/auth/login/ - S'envoie dans le header
Authorization - Expire dans 24 heures
API Keys
Votre clé API identifie votre commerce et doit être incluse dans toutes les requêtes à l'API.
Obtenir votre clé API
- Connectez-vous à votre Dashboard
- Allez à Configuration → Intégrations
- Cliquez sur Générer une nouvelle clé API
- Asigna un nombre descriptivo (ej: "Widget Web", "App Móvil")
- Copiez et gardez la clé API en sécurité
Utiliser la clé API
Incluez votre clé API dans le header X-API-Key de chaque requête :
curl -X GET "https://app.salonbookit.com/api/v1/negocio/" \
-H "X-API-Key: hh_pub_live_abc123def456..."
const response = await fetch('https://app.salonbookit.com/api/v1/servicios/', {
headers: {
'X-API-Key': 'hh_pub_live_abc123def456...'
}
});
const data = await response.json();
import requests
response = requests.get(
'https://app.salonbookit.com/api/v1/servicios/',
headers={'X-API-Key': 'hh_pub_live_abc123def456...'}
)
data = response.json()
$ch = curl_init('https://app.salonbookit.com/api/v1/servicios/');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: hh_pub_live_abc123def456...'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
Types de clé API
Las API Keys tienen dos dimensiones: tipo (pública/privada) y entorno (producción/pruebas).
Por tipo
| Préfixe | Type | Utilisation |
|---|---|---|
hh_pub_ |
Pública | Para widgets y frontend. Permisos limitados a lectura y crear reservas. |
hh_sec_ |
Privada | Para backend. No exponer en código cliente. |
Por entorno
| Sufijo | Environnement | Utilisation |
|---|---|---|
_live_ |
Production | Données réelles, transactions réelles |
_test_ |
Tests | Données de test, sans frais réels |
Ejemplos de formatos completos:
hh_pub_live_...- Pública de producción (para widgets en producción)hh_pub_test_...- Pública de pruebas (para desarrollo de widgets)hh_sec_live_...- Privada de producción (para tu backend)hh_sec_test_...- Privada de pruebas (para desarrollo backend)
N'incluez jamais votre clé API dans du code côté client visible publiquement. Pour le widget, nous utilisons une clé API avec des permissions limitées qui permet uniquement les opérations de lecture et la création de réservations.
Authentification JWT
Les endpoints nécessitant une authentification client utilisent des tokens JWT. Ces endpoints incluent :
- Voir les réservations du client
- Voir/modifier le profil du client
- Consulter les points de fidélité
- Voir l'historique des commandes
Obtenir un token JWT
/api/v1/auth/login/
Request
curl -X POST "https://app.salonbookit.com/api/v1/auth/login/" \
-H "X-API-Key: hh_pub_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"email": "cliente@ejemplo.com",
"password": "contraseña123"
}'
Response (200 OK) - Client
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"tipo": "cliente",
"cliente": {
"id": 123,
"nombre": "Juan",
"apellido": "García",
"email": "cliente@ejemplo.com",
"telefono": "+34612345678",
"puntos": 150,
"nivel": "gold"
}
}
}
Response (200 OK) - Staff
Si las credenciales corresponden a un miembro del staff:
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"tipo": "staff",
"staff": {
"id": 1,
"nombre": "María",
"apellido": "López",
"email": "maria@salon.com",
"telefono": "+34612345678",
"rol": "admin",
"permisos": {
"puede_ver_reservas": true,
"puede_crear_reservas": true,
"puede_ver_clientes": true
}
}
}
}
Utiliser le token JWT
Incluez le token dans le header Authorization avec le préfixe Bearer:
curl -X GET "https://app.salonbookit.com/api/v1/cliente/reservas/" \
-H "X-API-Key: hh_pub_live_abc123..." \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Renouveler le token
Les tokens expirent dans 24 heures. Utilisez l'endpoint refresh pour en obtenir un nouveau :
/api/v1/auth/refresh/
curl -X POST "https://app.salonbookit.com/api/v1/auth/refresh/" \
-H "X-API-Key: hh_pub_live_abc123..." \
-H "Authorization: Bearer TOKEN_ACTUAL"
Rate Limiting
L'API a des limites de requêtes pour garantir un service stable :
| Limite | Fenêtre | Description |
|---|---|---|
| 120 requests | 1 minute | Limite générale par clé API |
| 20 tentatives | 15 minutes | Connexion (par IP) |
| 10 tentatives | 1 heure | Inscription (par IP) |
Headers de limite de requêtes
Chaque réponse inclut des headers informatifs :
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 115
X-RateLimit-Reset: 1704067200
| Header | Description |
|---|---|
X-RateLimit-Limit |
Nombre maximum de requêtes autorisées |
X-RateLimit-Remaining |
Requêtes restantes dans la fenêtre actuelle |
X-RateLimit-Reset |
Timestamp Unix lors de la réinitialisation du compteur |
Erreur 429 : Too Many Requests
Si vous dépassez la limite, vous recevrez une erreur 429 :
{
"success": false,
"error": "Vous avez dépassé la limite de requêtes. Réessayez dans 45 secondes.",
"code": "RATE_LIMIT_EXCEEDED"
}
Erreurs d'authentification
| Code | HTTP Status | Description |
|---|---|---|
MISSING_API_KEY |
401 | Le header X-API-Key n'a pas été inclus |
INVALID_API_KEY |
401 | Clé API invalide ou non trouvée |
API_KEY_DISABLED |
403 | La clé API a été désactivée |
API_KEY_EXPIRED |
403 | La clé API a expiré |
INVALID_TOKEN |
401 | Token JWT invalide ou malformé |
TOKEN_EXPIRED |
401 | Token JWT expiré |
INVALID_CREDENTIALS |
401 | Email ou mot de passe incorrect |