API de Integración
Conecta tu app Dockely con ERPs, CRMs, automatizaciones y cualquier sistema externo. Lectura y escritura completa sobre todos los módulos de tu instancia.
La API externa de Dockely expone los datos de tu instancia bajo el prefijo /api/ext/. Es independiente del API interna (que usa JWT para la app móvil) y se autentica exclusivamente con API keys generadas desde el panel de control.
Incluye tu API key en cada petición usando el header X-API-Key o como Bearer token en Authorization.
X-API-Key: dky_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Authorization: Bearer dky_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Sustituye <slug> y <tu-clave> por los valores reales curl -s \ -H "X-API-Key: dky_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \ "https://<slug>.dockely.com/api/ext/users"
401. Si el proyecto no tiene API activa recibirás un 500 (error de configuración).Cada instancia tiene su propia URL base. Si tienes dominio propio configurado, úsalo en lugar del subdominio de Dockely.
Todos los endpoints se añaden a esta URL base. Por ejemplo: https://mygym.dockely.com/api/ext/users
La API devuelve errores en JSON con el campo msg.
| Código | Significado |
|---|---|
| 200 | OK — operación correcta |
| 201 | Creado — recurso creado correctamente |
| 400 | Datos incorrectos o campos obligatorios faltantes |
| 401 | API key no proporcionada o inválida |
| 403 | Límite de plan alcanzado (ej. máximo de usuarios) |
| 404 | Recurso no encontrado |
| 409 | Conflicto — por ejemplo email ya registrado |
| 500 | Error interno o de configuración del servidor |
{
"msg": "Límite de usuarios alcanzado (50). Actualiza tu plan."
}
Todos los endpoints de listado aceptan los parámetros page y limit.
| Parámetro | Tipo | Default | Máximo | Descripción |
|---|---|---|---|---|
| page | integer | 1 | — | Número de página (empieza en 1) |
| limit | integer | 100 | 500 | Resultados por página |
GET /api/ext/users?page=2&limit=50
Gestión completa del directorio de usuarios de la app. El campo is_admin=false corresponde a clientes/socios. Las altas respetan el límite de usuarios del plan contratado.
| Param | Tipo | Descripción | |
|---|---|---|---|
| q | opt | string | Busca por nombre, apellidos o email |
| page | opt | integer | Página (default 1) |
| limit | opt | integer | Resultados por página (max 500, default 100) |
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/users?q=juan&limit=20"
[
{
"id": 1,
"email": "juan@ejemplo.com",
"name": "Juan",
"apellidos": "García",
"phone": "+34 600 000 000",
"is_admin": false,
"is_active": true,
"created_at": "2024-03-01T10:00:00"
}
]
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/users/42"
| Campo | Tipo | Descripción | |
|---|---|---|---|
| req | string | Email único del usuario | |
| name | req | string | Nombre |
| apellidos | opt | string | Apellidos |
| phone | opt | string | Teléfono |
| password | opt | string | Si no se envía, se genera una aleatoria y se devuelve en _generated_password |
| is_admin | opt | boolean | Si es administrador de la app (default false) |
curl -X POST \ -H "X-API-Key: dky_..." \ -H "Content-Type: application/json" \ -d '{"email":"maria@ejemplo.com","name":"María","apellidos":"López"}' \ "https://<slug>.dockely.com/api/ext/users"
201{
"id": 55,
"email": "maria@ejemplo.com",
"name": "María",
"apellidos": "López",
"is_admin": false,
"_generated_password": "Xk9mP2qr..." // solo si no se envió password
}
| Campo | Tipo | Descripción |
|---|---|---|
| name | string | Nombre |
| apellidos | string | Apellidos |
| phone | string | Teléfono |
| string | Nuevo email | |
| password | string | Nueva contraseña (se hashea) |
| is_admin | boolean | Rol de administrador |
curl -X PATCH \ -H "X-API-Key: dky_..." \ -H "Content-Type: application/json" \ -d '{"phone":"+34 611 000 000"}' \ "https://<slug>.dockely.com/api/ext/users/55"
curl -X DELETE \ -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/users/55"
{ "ok": true }Acceso completo a la agenda de reservas. Disponible en los verticales que tengan el módulo de reservas activado (gym, salud, educación, etc.).
2024-06-15T10:30:00. Los campos start_datetime y end_datetime son obligatorios al crear.| Param | Tipo | Descripción | |
|---|---|---|---|
| user_id | opt | integer | Filtra por usuario |
| status | opt | string | confirmed, cancelled, pending |
| page | opt | integer | Página |
| limit | opt | integer | Resultados por página (max 500) |
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/bookings?status=confirmed&user_id=42"
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/bookings/101"
{
"id": 101,
"user_id": 42,
"appointment_type_id": 3,
"calendar_id": 1,
"start_datetime": "2024-06-15T10:00:00",
"end_datetime": "2024-06-15T11:00:00",
"status": "confirmed",
"admin_notes": ""
}
| Campo | Tipo | Descripción | |
|---|---|---|---|
| user_id | req | integer | ID del usuario |
| appointment_type_id | req | integer | ID del tipo de cita/servicio |
| start_datetime | req | string | ISO 8601 — inicio |
| end_datetime | req | string | ISO 8601 — fin |
| calendar_id | opt | integer | ID del calendario/profesional |
| status | opt | string | Default confirmed |
| admin_notes | opt | string | Notas internas |
curl -X POST \ -H "X-API-Key: dky_..." \ -H "Content-Type: application/json" \ -d '{"user_id":42,"appointment_type_id":3,"start_datetime":"2024-06-15T10:00:00","end_datetime":"2024-06-15T11:00:00"}' \ "https://<slug>.dockely.com/api/ext/bookings"
curl -X PATCH \ -H "X-API-Key: dky_..." \ -H "Content-Type: application/json" \ -d '{"status":"cancelled"}' \ "https://<slug>.dockely.com/api/ext/bookings/101"
curl -X DELETE \ -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/bookings/101"
Consulta del historial de pagos, suscripciones activas y catálogo de planes. Todos los endpoints son de solo lectura.
| Param | Tipo | Descripción | |
|---|---|---|---|
| user_id | opt | integer | Filtra por usuario |
| page / limit | opt | integer | Paginación |
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/pagos?user_id=42"
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/suscripciones"
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/planes"
Eventos del calendario interno de la app.
curl -H "X-API-Key: dky_..." \ "https://<slug>.dockely.com/api/ext/calendar?limit=50"