GymFlexa Gym Management
Consulta los espacios disponibles de tu gimnasio, los servicios, qué tan concurrido está cada día y tus totales de pago.
Servidor MCP alojado
npx add-mcp 'https://mcp.gymflexa.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Drive tu gimnasio desde tu propio código: una API REST con claves de alcance limitado y límites de tasa por clave para gimnasios, miembros, citas, servicios y pagos, y webhooks firmados cuando algo cambia.
Claves de API
Obtén una clave y autentícate
La API REST de GymFlexa permite que tu propio backend trabaje con los mismos datos que muestra el panel: tus gimnasios, los miembros inscritos en ellos, las citas en sus calendarios, los servicios que vendes y los pagos que recibes.
Las claves de API se emiten a una organización por uno de sus propietarios, y una clave puede limitarse a un solo gimnasio. Su secreto se muestra una sola vez, cuando se crea la clave: guárdalo en un lugar seguro. La clave en sí misma lleva el inquilino, por lo que la organización y el gimnasio nunca tienen que ser enviados por el llamador, y una clave limitada a un gimnasio nunca puede acceder a otro gimnasio.
Autentica cada solicitud con autenticación básica HTTP que lleve solo el secreto de la clave, codificado en base64, en el encabezado Authorization.
# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)
Cada endpoint vive bajo https://api.gymflexa.com. Las solicitudes realizadas con una clave tienen límite de tasa por clave; superar el límite devuelve 429. Una clave que carece del alcance que requiere un endpoint es rechazada con 403.
Inicio rápido
Tus primeras tres llamadas
Encuentra tu gimnasio, lista los miembros inscritos en él y luego lee una semana de sus citas.
# List the gyms of your organization
curl https://api.gymflexa.com/api/gyms \
-H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"
# List the members of one gym, asking for a few fields only
curl "https://api.gymflexa.com/api/members?gymId=GYM_ID&fields=name,surname,email" \
-H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"
# Read the appointments of that gym in a time range
curl "https://api.gymflexa.com/api/appointments?gymId=GYM_ID&startTime=2026-01-01T00:00:00.000Z&endTime=2026-01-08T00:00:00.000Z" \
-H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"
Explora la referencia completa de la API: cada endpoint con sus parámetros, cuerpo de solicitud, respuestas y alcance requerido.
CLI
Interfaz de línea de comandos
Los mismos gimnasios, miembros, servicios, citas y pagos están disponibles desde tu terminal a través del CLI de gymflexa. Instálalo globalmente con npm, o ejecútalo puntualmente con npx.
La autenticación es un solo comando: gymflexa login abre tu navegador para iniciar sesión en tu cuenta de GymFlexa y almacena una sesión para comandos posteriores, sin necesidad de pegar una clave de API. Los scripts sin interfaz exportan GYMFLEXA_API_KEY y omiten el paso de inicio de sesión por completo.
# Install once, globally
npm install -g gymflexa
# or run it ad hoc without installing
npx gymflexa --help
# No account yet? Create one from the terminal
gymflexa signup --email founder@example.com
# Or log in — opens your browser and stores a session
gymflexa login
# The gyms of your organization
gymflexa gyms list
# The members of one gym, a few fields only
gymflexa members list --gymId GYM_ID --fields name,email,phone
# A week of appointments, as parseable JSON
gymflexa appointments list --gymId GYM_ID \
--startTime 2026-01-01T00:00:00.000Z \
--endTime 2026-01-08T00:00:00.000Z --json
Cada subcomando acepta --json para salida analizable, y gymflexa schema imprime todo el árbol de comandos como JSON. El CLI es de código abierto en github.com/gymflexa/cli y se publica como gymflexa en npm. Ejecuta cualquier comando con --help para ver sus opciones.
Alcances
Privilegio mínimo por defecto
Cada clave lleva una lista de alcances, por lo que una integración que solo necesita leer tu horario nunca obtiene la capacidad de cambiarlo. Las claves nuevas comienzan con solo lectura; amplíalas explícitamente. Una solicitud cuya clave carece del alcance que requiere un endpoint es rechazada con 403.
- gyms:readLista los gimnasios de tu organización y lee uno de ellos.
- gyms:writeCrea, actualiza y elimina gimnasios.
- members:readLista tus miembros y lee un miembro individual.
- members:writeCrea, actualiza y elimina miembros.
- appointments:readLista citas por gimnasio, miembro o rango de tiempo, y lee una individual.
- appointments:writeReserva, reprograma, actualiza y cancela citas.
- services:readLista los servicios que ofreces y lee un servicio individual.
- services:writeCrea, actualiza y elimina servicios.
- payments:readLista pagos y lee un pago individual.
- payments:writeRegistra, actualiza y elimina pagos.
Conector MCP
Revisa operaciones de gimnasio en ChatGPT y Claude
Conecta el endpoint MCP de producción de GymFlexa con OAuth. Cada lectura permanece dentro de la organización autorizada por tu cuenta de GymFlexa y requiere el alcance gymflexa:read.
{
"mcpServers": {
"gymflexa": {
"type": "http",
"url": "https://mcp.gymflexa.com/mcp"
}
}
}
Herramientas administrativas de solo lectura
- list_gymsEncuentra un gimnasio propiedad de la organización para una lectura de seguimiento.
- get_gymRevisa la configuración segura de programación.
- get_gym_availabilityResume la capacidad de reserva para la ventana fija de catorce días.
- get_gym_schedule_summaryCuenta registros programados por día UTC sin devolver citas.
- get_gym_payment_summaryRevisa el estado agregado de pagos registrados y totales sin mover fondos.
- list_servicesRevisa nombres y precios limitados del catálogo de servicios.
- show_gym_overviewRenderiza una tarjeta de descripción general administrativa limitada.
El conector no expone identidades de miembros ni contactos, citas o pagos individuales, asistencia o historial de servicios, datos de entrenadores, notas de texto libre, razones de rechazo, datos de tarjetas o procesadores, ni enlaces que reidentifiquen entre registros. No puede reservar, editar, enviar mensajes, cobrar, reembolsar, transferir ni eliminar nada.
El conector público nunca consulta registros de miembros. Los resultados de horarios y pagos son agregados administrativos no vinculados a personas: no contienen identificador de miembro, tiempo reservado individual, registro de asistencia, transacción ni vinculación de registros.
Habilidades de agente
Enseña a tu agente de codificación GymFlexa
GymFlexa incluye Habilidades de Agente: guías que siguen el estándar agentskills.io y enseñan a los agentes de codificación cómo trabajar con gimnasios, miembros, citas, servicios y pagos a través del CLI de gymflexa y el conector MCP, en lugar de adivinar comandos y herramientas.
# Install the GymFlexa skills into your coding agent
npx skills add gymflexa/skills
Un solo comando instala las habilidades en Claude Code, Cursor, Codex, Gemini CLI y cualquier otro agente que siga el estándar de Habilidades. El CLI también incluye las mismas guías, con versiones coincidentes con los comandos que incluye: gymflexa skills get <name> imprime una bajo demanda.
Las habilidades son de código abierto en github.com/gymflexa/skills. Los usuarios de Claude también pueden instalar el plugin de Claude de GymFlexa, que incluye el conector junto con la habilidad de operaciones de gimnasio de solo lectura: github.com/gymflexa/claude-plugin.
Webhooks
Webhooks firmados
Suscribe un endpoint tuyo a un gimnasio y GymFlexa envía por POST los eventos que selecciones a tu servidor a medida que ocurren. Las suscripciones se gestionan en /api/webhooksubscriptions con un token de sesión de operador, y el secreto de firma se devuelve una sola vez, cuando se crea la suscripción.
- member.createdSe agregó un miembro.
- member.updatedSe editó un miembro, o su correo electrónico rebotó.
- member.deletedSe eliminó un miembro.
- appointment.createdSe reservó una cita.
- appointment.updatedSe reprogramó, editó o revisó una cita por el miembro.
- appointment.deletedSe canceló o eliminó una cita.
- payment.createdSe registró un pago.
POST https://your-server.com/gymflexa-webhook
{
"event": "member.created",
"timestamp": 1719000000,
"data": { "...": "..." }
}
Verifica la firma
Cada entrega lleva un encabezado X-Gymflexa-Signature de la forma t=timestamp,v1=signature, donde la firma es un HMAC-SHA256 de timestamp.body con clave del secreto de suscripción. Recalcúlalo sobre el cuerpo sin procesar y compáralo antes de confiar en el payload. El nombre del evento se repite en el encabezado X-Gymflexa-Event.
import crypto from 'node:crypto'
// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
if (!t || !v1) return false
const expected = crypto
.createHmac('sha256', secret)
.update(\`${t}.${body}\`)
.digest('hex')
// timingSafeEqual throws on a length mismatch, so a malformed signature
// has to be rejected before the comparison rather than by it.
if (v1.length !== expected.length) return false
return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}
La entrega es un único intento de mejor esfuerzo con un tiempo de espera de cinco segundos y sin reintentos, por lo que responde 2xx rápidamente y haz el trabajo de forma asíncrona. Un endpoint que falla veinte veces seguidas se desactiva automáticamente y debe reactivarse.