Authentifizierung
Die SalonBookIt-API verwendet zwei Authentifizierungsmethoden: API-Schlüssel zur Identifizierung Ihres Geschäfts und JWT zur Authentifizierung von Kunden.
Zusammenfassung
API Key
Identifiziert Ihr Geschäft bei jeder Anfrage. Erforderlich für alle Endpoints.
- Wird vom Dashboard bezogen
- Wird im Header gesendet
X-API-Key - Präfix
hh_pub_(pública) ohh_sec_(privada)
JWT Token
Authentifiziert einen bestimmten Kunden. Erforderlich für private Endpoints.
- Wird bezogen über
/api/v1/auth/login/ - Wird im Header gesendet
Authorization - Läuft in 24 Stunden ab
API Keys
Ihr API-Schlüssel identifiziert Ihr Geschäft und muss in allen API-Anfragen enthalten sein.
Ihren API-Schlüssel erhalten
- Melden Sie sich an bei Dashboard
- Gehen Sie zu Konfiguration → Integrationen
- Klicken Sie auf Neuen API-Schlüssel generieren
- Asigna un nombre descriptivo (ej: "Widget Web", "App Móvil")
- Kopieren und sicher speichern Sie den API-Schlüssel
API-Schlüssel verwenden
Fügen Sie Ihren API-Schlüssel im Header ein X-API-Key jeder Anfrage:
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);
Arten von API-Schlüsseln
Las API Keys tienen dos dimensiones: tipo (pública/privada) y entorno (producción/pruebas).
Por tipo
| Präfix | Typ | Verwendung |
|---|---|---|
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 | Umgebung | Verwendung |
|---|---|---|
_live_ |
Produktion | Echte Daten, echte Transaktionen |
_test_ |
Test | Testdaten, keine echten Gebühren |
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)
Fügen Sie Ihren API-Schlüssel niemals in clientseitigem Code ein, der öffentlich sichtbar ist. Für das Widget verwenden wir einen API-Schlüssel mit eingeschränkten Berechtigungen, der nur Lese- und Buchungserstellungsvorgänge erlaubt.
JWT-Authentifizierung
Endpoints, die Kundenauthentifizierung erfordern, verwenden JWT-Token. Diese Endpoints umfassen:
- Kundenbuchungen anzeigen
- Kundenprofil anzeigen/ändern
- Treuepunkte abfragen
- Bestellverlauf anzeigen
JWT-Token erhalten
/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) - Kunde
{
"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
}
}
}
}
JWT-Token verwenden
Fügen Sie das Token im Header ein Authorization mit dem Präfix Bearer:
curl -X GET "https://app.salonbookit.com/api/v1/cliente/reservas/" \
-H "X-API-Key: hh_pub_live_abc123..." \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Token erneuern
Token laufen nach 24 Stunden ab. Verwenden Sie den Refresh-Endpoint, um ein neues zu erhalten:
/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
Die API hat Anfragelimits, um einen stabilen Service zu gewährleisten:
| Limit | Zeitfenster | Beschreibung |
|---|---|---|
| 120 requests | 1 Minute | Allgemeines Limit pro API-Schlüssel |
| 20 Versuche | 15 Minuten | Anmeldung (pro IP) |
| 10 Versuche | 1 Stunde | Registrierung (pro IP) |
Rate-Limit-Header
Jede Antwort enthält informative Header:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 115
X-RateLimit-Reset: 1704067200
| Header | Beschreibung |
|---|---|
X-RateLimit-Limit |
Maximale Anzahl erlaubter Anfragen |
X-RateLimit-Remaining |
Verbleibende Anfragen im aktuellen Zeitfenster |
X-RateLimit-Reset |
Unix-Zeitstempel, wenn der Zähler zurückgesetzt wird |
Fehler 429: Zu viele Anfragen
Wenn Sie das Limit überschreiten, erhalten Sie einen 429-Fehler:
{
"success": false,
"error": "Sie haben das Anfragelimit überschritten. Versuchen Sie es in 45 Sekunden erneut.",
"code": "RATE_LIMIT_EXCEEDED"
}
Authentifizierungsfehler
| Code | HTTP Status | Beschreibung |
|---|---|---|
MISSING_API_KEY |
401 | X-API-Key-Header wurde nicht eingeschlossen |
INVALID_API_KEY |
401 | API-Schlüssel ungültig oder nicht gefunden |
API_KEY_DISABLED |
403 | Der API-Schlüssel wurde deaktiviert |
API_KEY_EXPIRED |
403 | Der API-Schlüssel ist abgelaufen |
INVALID_TOKEN |
401 | Ungültiges oder fehlerhaftes JWT-Token |
TOKEN_EXPIRED |
401 | JWT-Token abgelaufen |
INVALID_CREDENTIALS |
401 | E-Mail oder Passwort falsch |