Alunos (Members)
Gerenciar alunos da academia via API.
Alunos (Members)
Endpoints para criar, listar, atualizar alunos e gerenciar medições corporais e check-ins.
Base URL
https://dashboard.octagym.ai/api/v1GET /api/v1/members — Listar alunos
Retorna uma lista paginada de alunos da academia.
Query Parameters
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
search | string | — | Busca por nome, email ou telefone |
status | string | — | Filtrar por status: trial, active, frozen, cancelled |
experience_level | string | — | Filtrar por nível de experiência |
plan_id | string | — | Filtrar por plano (UUID) |
store_id | string | — | Filtrar por unidade (UUID) |
page | integer | 1 | Número da página |
page_size | integer | 20 | Itens por página (máximo 100) |
sort_by | string | created_at | Campo para ordenação |
sort_order | string | desc | Direção: asc ou desc |
Exemplo de Requisição
curl -X GET "https://dashboard.octagym.ai/api/v1/members?status=active&page=1&page_size=20" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json"Exemplo de Resposta
{
"success": true,
"data": [
{
"id": "mp_uuid_001",
"status": "active",
"experience_level": "intermediate",
"fitness_goals": ["hipertrofia", "condicionamento"],
"preferred_training_time": "morning",
"training_days_per_week": 5,
"access_card_number": "A-1042",
"biometric_enrolled": true,
"created_at": "2026-01-15T08:30:00Z",
"client": {
"id": "cli_uuid_001",
"full_name": "Ana Costa",
"email": "ana.costa@email.com",
"phone": "+5511999990001",
"cpf": "123.456.789-00",
"birth_date": "1995-06-20",
"gender": "female"
}
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 87,
"pages": 5
}
}POST /api/v1/members — Criar aluno
Cria um novo aluno na academia. Internamente, cria um registro de client e um member_profile associado. O status inicial do aluno será trial.
Body (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
full_name | string | Sim | Nome completo do aluno |
email | string | Não | |
phone | string | Não | Telefone fixo |
mobile_phone | string | Não | Celular |
cpf | string | Não | CPF (com ou sem formatação) |
birth_date | string | Não | Data de nascimento (YYYY-MM-DD) |
gender | string | Não | male, female ou other |
fitness_goals | string[] | Não | Objetivos (ex: ["hipertrofia", "emagrecimento"]) |
experience_level | string | Não | beginner, intermediate, advanced |
preferred_training_time | string | Não | morning, afternoon, evening, night |
training_days_per_week | integer | Não | Quantidade de dias por semana (1–7) |
injuries | string[] | Não | Lista de lesões (ex: ["joelho esquerdo"]) |
medical_conditions | string[] | Não | Condições médicas (ex: ["hipertensão"]) |
store_id | string | Não | UUID da unidade (filial) |
Exemplo de Requisição
curl -X POST "https://dashboard.octagym.ai/api/v1/members" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"full_name": "Lucas Mendes",
"email": "lucas.mendes@email.com",
"mobile_phone": "+5511988887777",
"cpf": "987.654.321-00",
"birth_date": "1990-03-15",
"gender": "male",
"fitness_goals": ["hipertrofia", "ganho de força"],
"experience_level": "beginner",
"preferred_training_time": "evening",
"training_days_per_week": 4,
"injuries": [],
"medical_conditions": []
}'Exemplo de Resposta
{
"success": true,
"data": {
"id": "mp_uuid_002",
"status": "trial",
"experience_level": "beginner",
"fitness_goals": ["hipertrofia", "ganho de força"],
"preferred_training_time": "evening",
"training_days_per_week": 4,
"injuries": [],
"medical_conditions": [],
"created_at": "2026-03-22T10:00:00Z",
"client": {
"id": "cli_uuid_002",
"full_name": "Lucas Mendes",
"email": "lucas.mendes@email.com",
"phone": null,
"mobile_phone": "+5511988887777",
"cpf": "987.654.321-00",
"birth_date": "1990-03-15",
"gender": "male"
}
}
}O status inicial do aluno é sempre trial. Para ativá-lo, crie uma
mensalidade associada a um plano.
GET /api/v1/members/:id — Buscar aluno
Retorna o perfil completo de um aluno, incluindo dados do cliente, mensalidades ativas (com plano) e instrutores associados.
Exemplo de Requisição
curl -X GET "https://dashboard.octagym.ai/api/v1/members/mp_uuid_001" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json"Exemplo de Resposta
{
"success": true,
"data": {
"id": "mp_uuid_001",
"status": "active",
"experience_level": "intermediate",
"fitness_goals": ["hipertrofia", "condicionamento"],
"preferred_training_time": "morning",
"training_days_per_week": 5,
"access_card_number": "A-1042",
"biometric_enrolled": true,
"facial_enrolled": false,
"medical_clearance": true,
"medical_clearance_date": "2026-01-10",
"medical_clearance_notes": "Liberado para todas as atividades",
"created_at": "2026-01-15T08:30:00Z",
"client": {
"id": "cli_uuid_001",
"full_name": "Ana Costa",
"email": "ana.costa@email.com",
"phone": "+5511999990001",
"cpf": "123.456.789-00",
"birth_date": "1995-06-20",
"gender": "female"
},
"active_memberships": [
{
"id": "mem_uuid_001",
"status": "active",
"start_date": "2026-01-15",
"end_date": "2026-07-15",
"plan": {
"id": "plan_uuid_001",
"name": "Plano Semestral Premium",
"billing_period": "semiannual"
}
}
],
"trainer_assignments": [
{
"trainer_id": "tr_uuid_001",
"trainer_name": "Carlos Silva",
"assigned_at": "2026-01-20T09:00:00Z"
}
]
}
}PATCH /api/v1/members/:id — Atualizar aluno
Atualiza campos específicos do perfil do aluno. Apenas os campos enviados serão alterados.
Campos permitidos
| Campo | Tipo | Descrição |
|---|---|---|
status | string | trial, active, frozen, cancelled |
fitness_goals | string[] | Objetivos de treino |
experience_level | string | beginner, intermediate, advanced |
preferred_training_time | string | morning, afternoon, evening, night |
training_days_per_week | integer | Dias por semana (1–7) |
medical_clearance | boolean | Possui atestado médico? |
medical_clearance_date | string | Data do atestado (YYYY-MM-DD) |
medical_clearance_notes | string | Observações do atestado |
injuries | string[] | Lista de lesões |
medical_conditions | string[] | Condições médicas |
access_card_number | string | Número do cartão de acesso |
biometric_enrolled | boolean | Biometria cadastrada? |
facial_enrolled | boolean | Reconhecimento facial cadastrado? |
referred_by_client_id | string | UUID do cliente que indicou |
Exemplo de Requisição
curl -X PATCH "https://dashboard.octagym.ai/api/v1/members/mp_uuid_001" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"fitness_goals": ["hipertrofia", "condicionamento", "flexibilidade"],
"training_days_per_week": 6,
"medical_clearance": true,
"medical_clearance_date": "2026-03-20",
"medical_clearance_notes": "Liberado sem restrições"
}'Exemplo de Resposta
{
"success": true,
"data": {
"id": "mp_uuid_001",
"status": "active",
"fitness_goals": ["hipertrofia", "condicionamento", "flexibilidade"],
"training_days_per_week": 6,
"medical_clearance": true,
"medical_clearance_date": "2026-03-20",
"medical_clearance_notes": "Liberado sem restrições",
"updated_at": "2026-03-22T11:00:00Z"
}
}GET /api/v1/members/:id/checkins — Histórico de check-ins
Retorna o histórico de check-ins (entradas na academia) de um aluno, ordenado por data decrescente.
Query Parameters
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
limit | integer | 30 | Quantidade de registros (máx 100) |
Exemplo de Requisição
curl -X GET "https://dashboard.octagym.ai/api/v1/members/mp_uuid_001/checkins?limit=10" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json"Exemplo de Resposta
{
"success": true,
"data": [
{
"id": "chk_uuid_001",
"checkin_at": "2026-03-22T07:15:00Z",
"checkout_at": "2026-03-22T08:45:00Z",
"method": "biometric",
"device_name": "Catraca Principal",
"store_id": "store_uuid_001"
},
{
"id": "chk_uuid_002",
"checkin_at": "2026-03-21T06:50:00Z",
"checkout_at": "2026-03-21T08:20:00Z",
"method": "card",
"device_name": "Catraca Principal",
"store_id": "store_uuid_001"
}
]
}GET /api/v1/members/:id/measurements — Listar medições corporais
Retorna as medições corporais registradas para o aluno, ordenadas por data decrescente.
Exemplo de Requisição
curl -X GET "https://dashboard.octagym.ai/api/v1/members/mp_uuid_001/measurements" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json"Exemplo de Resposta
{
"success": true,
"data": [
{
"id": "meas_uuid_001",
"measured_at": "2026-03-15T10:00:00Z",
"weight_kg": 78.5,
"height_cm": 175,
"body_fat_pct": 18.2,
"muscle_mass_pct": 42.1,
"chest_cm": 98,
"waist_cm": 82,
"hip_cm": 96,
"left_arm_cm": 33,
"right_arm_cm": 33.5,
"left_thigh_cm": 56,
"right_thigh_cm": 56.5,
"left_calf_cm": 37,
"right_calf_cm": 37,
"notes": "Avaliação trimestral"
},
{
"id": "meas_uuid_002",
"measured_at": "2026-01-15T10:00:00Z",
"weight_kg": 82.0,
"height_cm": 175,
"body_fat_pct": 22.5,
"muscle_mass_pct": 38.0,
"chest_cm": 100,
"waist_cm": 88,
"hip_cm": 99,
"left_arm_cm": 32,
"right_arm_cm": 32,
"left_thigh_cm": 55,
"right_thigh_cm": 55,
"left_calf_cm": 36,
"right_calf_cm": 36,
"notes": "Avaliação inicial"
}
]
}POST /api/v1/members/:id/measurements — Registrar medição corporal
Registra uma nova medição corporal para o aluno. Todos os campos são opcionais — envie apenas os que foram medidos.
Body (JSON)
| Campo | Tipo | Descrição |
|---|---|---|
weight_kg | number | Peso em quilogramas |
height_cm | number | Altura em centímetros |
body_fat_pct | number | Percentual de gordura corporal |
muscle_mass_pct | number | Percentual de massa muscular |
chest_cm | number | Circunferência do peito (cm) |
waist_cm | number | Circunferência da cintura (cm) |
hip_cm | number | Circunferência do quadril (cm) |
left_arm_cm | number | Circunferência do braço E (cm) |
right_arm_cm | number | Circunferência do braço D (cm) |
left_thigh_cm | number | Circunferência da coxa E (cm) |
right_thigh_cm | number | Circunferência da coxa D (cm) |
left_calf_cm | number | Circunferência da panturrilha E (cm) |
right_calf_cm | number | Circunferência da panturrilha D (cm) |
notes | string | Observações |
Exemplo de Requisição
curl -X POST "https://dashboard.octagym.ai/api/v1/members/mp_uuid_001/measurements" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"weight_kg": 77.0,
"body_fat_pct": 17.5,
"muscle_mass_pct": 43.0,
"chest_cm": 99,
"waist_cm": 80,
"notes": "Boa evolução no trimestre"
}'Exemplo de Resposta
{
"success": true,
"data": {
"id": "meas_uuid_003",
"member_profile_id": "mp_uuid_001",
"measured_at": "2026-03-22T14:30:00Z",
"weight_kg": 77.0,
"height_cm": null,
"body_fat_pct": 17.5,
"muscle_mass_pct": 43.0,
"chest_cm": 99,
"waist_cm": 80,
"hip_cm": null,
"left_arm_cm": null,
"right_arm_cm": null,
"left_thigh_cm": null,
"right_thigh_cm": null,
"left_calf_cm": null,
"right_calf_cm": null,
"notes": "Boa evolução no trimestre"
}
}Para acompanhar a evolução dos alunos, compare as medições ao longo do tempo. A ordem de retorno é sempre da mais recente para a mais antiga.