GymFlexa Gym Management

Veja os horários disponíveis da sua academia, os serviços, o movimento de cada dia e os totais dos seus pagamentos.

Servidor MCP hospedado

npx add-mcp 'https://mcp.gymflexa.com/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

Dirija sua academia a partir do seu próprio código: uma API REST com chaves de escopo e limites de taxa por chave para academias, membros, agendamentos, serviços e pagamentos, além de webhooks assinados quando algo muda.

Chaves de API

Obtenha uma chave e autentique-se

A API REST do GymFlexa permite que seu próprio backend trabalhe com os mesmos dados que o painel exibe: suas academias, os membros matriculados nelas, os agendamentos em seus calendários, os serviços que você vende e os pagamentos que você recebe.

As chaves de API são emitidas para uma organização por um de seus proprietários, e uma chave pode ser restrita a uma única academia. Seu segredo é exibido apenas uma vez, quando a chave é criada — guarde-o em um local seguro. A própria chave carrega o locatário, então a organização e a academia nunca precisam ser enviadas pelo chamador, e uma chave com escopo de academia nunca pode acessar outra academia.

Autentique cada requisição com autenticação HTTP Basic contendo apenas o segredo da chave, codificado em base64, no cabeçalho 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)

Todo endpoint vive sob https://api.gymflexa.com. Requisições feitas com uma chave são limitadas por taxa por chave; exceder o limite retorna 429. Uma chave sem o escopo exigido por um endpoint é recusada com 403.

Início rápido

Suas três primeiras chamadas

Encontre sua academia, liste os membros matriculados nela e leia uma semana de seus agendamentos.

# 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)"

Consulte a referência completa da API — cada endpoint com seus parâmetros, corpo da requisição, respostas e escopo exigido.

CLI

Interface de linha de comando

As mesmas academias, membros, serviços, agendamentos e pagamentos estão disponíveis no seu terminal através do CLI gymflexa. Instale-o globalmente com npm ou execute-o ad hoc com npx.

A autenticação é um único comando: gymflexa login abre seu navegador para entrar na sua conta GymFlexa e armazena uma sessão para comandos futuros — sem necessidade de colar chave de API. Scripts headless exportam GYMFLEXA_API_KEY e pulam completamente a etapa de login.

# 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

Todo subcomando aceita --json para saída analisável, e gymflexa schema imprime toda a árvore de comandos como JSON. O CLI é open source em github.com/gymflexa/cli e publicado como gymflexa no npm. Execute qualquer comando com --help para ver suas opções.

Escopos

Menor privilégio por padrão

Cada chave carrega uma lista de escopos, então uma integração que só precisa ler sua agenda nunca ganha a capacidade de alterá-la. Novas chaves começam somente leitura; amplie-as explicitamente. Uma requisição cuja chave não tenha o escopo exigido por um endpoint é recusada com 403.

  • gyms:readListe as academias da sua organização e leia uma delas.
  • gyms:writeCrie, atualize e exclua academias.
  • members:readListe seus membros e leia um único membro.
  • members:writeCrie, atualize e exclua membros.
  • appointments:readListe agendamentos por academia, membro ou intervalo de tempo, e leia um único.
  • appointments:writeReserve, reagende, atualize e cancele agendamentos.
  • services:readListe os serviços que você oferece e leia um único serviço.
  • services:writeCrie, atualize e exclua serviços.
  • payments:readListe pagamentos e leia um único pagamento.
  • payments:writeRegistre, atualize e exclua pagamentos.

Conector MCP

Revise operações de academia no ChatGPT e Claude

Conecte o endpoint MCP de produção do GymFlexa com OAuth. Cada leitura permanece dentro da organização autorizada pela sua conta GymFlexa e exige o escopo gymflexa:read.

{
  "mcpServers": {
    "gymflexa": {
      "type": "http",
      "url": "https://mcp.gymflexa.com/mcp"
    }
  }
}

Ferramentas administrativas somente leitura

  • list_gymsEncontre uma academia de sua propriedade para uma leitura de acompanhamento.
  • get_gymRevise a configuração segura de agendamento.
  • get_gym_availabilityResuma a capacidade reservável para a janela fixa de quatorze dias.
  • get_gym_schedule_summaryConte registros agendados por dia UTC sem retornar agendamentos.
  • get_gym_payment_summaryRevise o status agregado e os totais de pagamentos registrados sem movimentar fundos.
  • list_servicesRevise nomes e preços limitados do catálogo de serviços.
  • show_gym_overviewRenderize um cartão administrativo de visão geral limitado.

O conector não expõe identidades ou contatos de membros, agendamentos ou pagamentos individuais, frequência ou histórico de serviços, dados de treinadores, notas de texto livre, motivos de recusa, dados de cartão ou processadora, nem links de reidentificação entre registros. Ele não pode reservar, editar, enviar mensagens, cobrar, reembolsar, transferir ou excluir nada.

O conector público nunca consulta registros de membros. Resultados de agenda e pagamento são agregados administrativos não vinculados a pessoas: não contêm identificador de membro, horário reservado individual, registro de frequência, transação ou vínculo entre registros.

Habilidades de Agente

Ensine seu agente de codificação sobre o GymFlexa

O GymFlexa inclui Habilidades de Agente — guias que seguem o padrão agentskills.io e ensinam agentes de codificação a trabalhar com academias, membros, agendamentos, serviços e pagamentos através do CLI gymflexa e do conector MCP, em vez de adivinhar comandos e ferramentas.

# Install the GymFlexa skills into your coding agent
npx skills add gymflexa/skills

Um único comando instala as habilidades no Claude Code, Cursor, Codex, Gemini CLI e em qualquer outro agente que siga o padrão de Habilidades. O CLI também inclui os mesmos guias, com versão correspondente aos comandos que ele fornece: gymflexa skills get <name> imprime um sob demanda.

As habilidades são open source em github.com/gymflexa/skills. Usuários do Claude também podem instalar o plugin GymFlexa para Claude, que agrupa o conector junto com a habilidade somente leitura de operações de academia: github.com/gymflexa/claude-plugin.

Webhooks

Webhooks assinados

Assine um endpoint seu a uma academia e o GymFlexa envia via POST os eventos que você escolheu para o seu servidor conforme eles acontecem. As assinaturas são gerenciadas em /api/webhooksubscriptions com um token de sessão de operador, e o segredo de assinatura é retornado uma única vez, quando a assinatura é criada.

  • member.createdUm membro foi adicionado.
  • member.updatedUm membro foi editado, ou seu e-mail retornou bounce.
  • member.deletedUm membro foi excluído.
  • appointment.createdUm agendamento foi reservado.
  • appointment.updatedUm agendamento foi reagendado, editado ou revisado pelo membro.
  • appointment.deletedUm agendamento foi cancelado ou excluído.
  • payment.createdUm pagamento foi registrado.
POST https://your-server.com/gymflexa-webhook

{
  "event": "member.created",
  "timestamp": 1719000000,
  "data": { "...": "..." }
}

Verifique a assinatura

Cada entrega carrega um cabeçalho X-Gymflexa-Signature no formato t=timestamp,v1=signature, onde a assinatura é um HMAC-SHA256 de timestamp.body com chave no segredo da assinatura. Recalcule-a sobre o corpo bruto e compare antes de confiar no payload. O nome do evento é repetido no cabeçalho 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))
}

A entrega é uma única tentativa de melhor esforço com timeout de cinco segundos e sem novas tentativas, então responda 2xx rapidamente e faça o trabalho de forma assíncrona. Um endpoint que falha vinte vezes seguidas é desabilitado automaticamente e precisa ser reabilitado.

Comece a construir