Treinos (Workout Programs)
Gerenciar programas de treino dos alunos.
Treinos (Workout Programs)
Endpoints para listar e criar programas de treino (fichas) dos alunos.
Base URL
https://dashboard.octagym.ai/api/v1GET /api/v1/workout-programs — Listar programas de treino
Retorna os programas de treino, com os dias e exercícios aninhados.
Query Parameters
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
member_profile_id | string | — | Filtrar por aluno (UUID) |
status | string | — | active ou archived |
Exemplo de Requisição
curl -X GET "https://dashboard.octagym.ai/api/v1/workout-programs?member_profile_id=mp_uuid_001" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json"curl -X GET "https://dashboard.octagym.ai/api/v1/workout-programs?status=active" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json"Exemplo de Resposta
{
"success": true,
"data": [
{
"id": "wp_uuid_001",
"member_profile_id": "mp_uuid_001",
"name": "Treino A/B/C — Hipertrofia",
"description": "Programa de hipertrofia com divisão de 3 dias",
"status": "active",
"weeks_duration": 8,
"starts_at": "2026-03-01",
"ends_at": "2026-04-26",
"created_by_ai": false,
"ai_prompt": null,
"created_at": "2026-03-01T09:00:00Z",
"days": [
{
"id": "day_uuid_001",
"day_label": "A",
"name": "Peito e Tríceps",
"muscle_groups": ["chest", "triceps"],
"estimated_duration_minutes": 60,
"notes": "Foco em cargas progressivas",
"sort_order": 1,
"exercises": [
{
"id": "de_uuid_001",
"exercise_id": "ex_uuid_001",
"exercise_name": "Supino Reto com Barra",
"sets_target": 4,
"reps_target": "8-10",
"weight_kg": 60,
"rest_seconds": 90,
"tempo": "2-0-2-0",
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 1
},
{
"id": "de_uuid_002",
"exercise_id": "ex_uuid_002",
"exercise_name": "Supino Inclinado com Halteres",
"sets_target": 3,
"reps_target": "10-12",
"weight_kg": 22,
"rest_seconds": 75,
"tempo": "2-1-2-0",
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 2
},
{
"id": "de_uuid_003",
"exercise_id": "ex_uuid_010",
"exercise_name": "Tríceps Pulley",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 25,
"rest_seconds": 60,
"tempo": "2-0-2-0",
"notes": "Manter cotovelos fixos",
"group_id": "grp_001",
"group_type": "superset",
"sort_order": 3
},
{
"id": "de_uuid_004",
"exercise_id": "ex_uuid_011",
"exercise_name": "Tríceps Testa",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 15,
"rest_seconds": 60,
"tempo": "2-1-2-0",
"notes": null,
"group_id": "grp_001",
"group_type": "superset",
"sort_order": 4
}
]
},
{
"id": "day_uuid_002",
"day_label": "B",
"name": "Costas e Bíceps",
"muscle_groups": ["back", "biceps"],
"estimated_duration_minutes": 55,
"notes": null,
"sort_order": 2,
"exercises": [
{
"id": "de_uuid_005",
"exercise_id": "ex_uuid_003",
"exercise_name": "Puxada Frontal",
"sets_target": 4,
"reps_target": "8-10",
"weight_kg": 55,
"rest_seconds": 90,
"tempo": "2-1-2-0",
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 1
}
]
}
]
}
]
}POST /api/v1/workout-programs — Criar programa de treino
Cria um novo programa de treino para um aluno. Se o aluno já possuir um programa ativo, o anterior será automaticamente arquivado.
Body (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
member_profile_id | string | Sim | UUID do aluno |
name | string | Sim | Nome do programa (ex: "Treino A/B/C") |
days | array | Sim | Lista de dias do treino (ver estrutura abaixo) |
description | string | Não | Descrição do programa |
weeks_duration | integer | Não | Duração em semanas |
starts_at | string | Não | Data de início (YYYY-MM-DD) |
ends_at | string | Não | Data de fim (YYYY-MM-DD) |
created_by_ai | boolean | Não | Indica se foi gerado por IA |
ai_prompt | string | Não | Prompt usado para geração por IA |
store_id | string | Não | UUID da unidade (filial) |
Estrutura de cada dia (days[])
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
day_label | string | Sim | Rótulo do dia (ex: "A", "B", "C") |
name | string | Não | Nome descritivo (ex: "Peito e Tríceps") |
muscle_groups | string[] | Não | Grupos musculares trabalhados |
estimated_duration_minutes | integer | Não | Duração estimada em minutos |
notes | string | Não | Observações do dia |
exercises | array | Sim | Lista de exercícios (ver estrutura abaixo) |
Estrutura de cada exercício (days[].exercises[])
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
exercise_id | string | Sim | UUID do exercício (do catálogo) |
sets_target | integer | Não | Número de séries |
reps_target | string | Não | Repetições alvo (ex: "8-10", "12", "até a falha") |
weight_kg | number | Não | Carga em quilogramas |
rest_seconds | integer | Não | Descanso entre séries (segundos) |
tempo | string | Não | Cadência do movimento (ex: "2-0-2-0") |
notes | string | Não | Observações do exercício |
group_id | string | Não | ID do grupo (para agrupar exercícios em bi-set/tri-set) |
group_type | string | Não | Tipo de agrupamento: superset, dropset, giant_set |
Exemplo de Requisição
curl -X POST "https://dashboard.octagym.ai/api/v1/workout-programs" \
-H "Authorization: Bearer og_live_sua_chave_aqui" \
-H "Content-Type: application/json" \
-d '{
"member_profile_id": "mp_uuid_001",
"name": "Treino A/B — Iniciante",
"description": "Programa introdutório para adaptação muscular",
"weeks_duration": 4,
"starts_at": "2026-03-22",
"days": [
{
"day_label": "A",
"name": "Superior",
"muscle_groups": ["chest", "back", "shoulders"],
"estimated_duration_minutes": 45,
"notes": "Cargas leves, foco na execução",
"exercises": [
{
"exercise_id": "ex_uuid_001",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 30,
"rest_seconds": 60,
"tempo": "2-0-2-0"
},
{
"exercise_id": "ex_uuid_003",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 35,
"rest_seconds": 60
}
]
},
{
"day_label": "B",
"name": "Inferior",
"muscle_groups": ["quadriceps", "hamstrings", "glutes", "calves"],
"estimated_duration_minutes": 45,
"exercises": [
{
"exercise_id": "ex_uuid_020",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 40,
"rest_seconds": 60
},
{
"exercise_id": "ex_uuid_021",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 30,
"rest_seconds": 60
}
]
}
]
}'Exemplo de Resposta
{
"success": true,
"data": {
"id": "wp_uuid_002",
"member_profile_id": "mp_uuid_001",
"name": "Treino A/B — Iniciante",
"description": "Programa introdutório para adaptação muscular",
"status": "active",
"weeks_duration": 4,
"starts_at": "2026-03-22",
"ends_at": null,
"created_by_ai": false,
"ai_prompt": null,
"created_at": "2026-03-22T09:00:00Z",
"archived_previous": "wp_uuid_001",
"days": [
{
"id": "day_uuid_010",
"day_label": "A",
"name": "Superior",
"muscle_groups": ["chest", "back", "shoulders"],
"estimated_duration_minutes": 45,
"notes": "Cargas leves, foco na execução",
"sort_order": 1,
"exercises": [
{
"id": "de_uuid_020",
"exercise_id": "ex_uuid_001",
"exercise_name": "Supino Reto com Barra",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 30,
"rest_seconds": 60,
"tempo": "2-0-2-0",
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 1
},
{
"id": "de_uuid_021",
"exercise_id": "ex_uuid_003",
"exercise_name": "Puxada Frontal",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 35,
"rest_seconds": 60,
"tempo": null,
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 2
}
]
},
{
"id": "day_uuid_011",
"day_label": "B",
"name": "Inferior",
"muscle_groups": ["quadriceps", "hamstrings", "glutes", "calves"],
"estimated_duration_minutes": 45,
"notes": null,
"sort_order": 2,
"exercises": [
{
"id": "de_uuid_022",
"exercise_id": "ex_uuid_020",
"exercise_name": "Agachamento Livre",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 40,
"rest_seconds": 60,
"tempo": null,
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 1
},
{
"id": "de_uuid_023",
"exercise_id": "ex_uuid_021",
"exercise_name": "Leg Press 45°",
"sets_target": 3,
"reps_target": "12-15",
"weight_kg": 30,
"rest_seconds": 60,
"tempo": null,
"notes": null,
"group_id": null,
"group_type": null,
"sort_order": 2
}
]
}
]
}
}Ao criar um novo programa de treino, qualquer programa ativo anterior do mesmo aluno sera
automaticamente arquivado (status: "archived"). O campo archived_previous na resposta indica o
ID do programa que foi arquivado.
Sobre agrupamento de exercícios
Use group_id e group_type para criar bi-sets, tri-sets ou supersets. Exercícios com o mesmo group_id serão executados em sequência sem descanso entre eles.
group_type | Descrição |
|---|---|
superset | Dois exercícios executados sem descanso entre eles |
dropset | Séries com redução progressiva de carga |
giant_set | Três ou mais exercícios executados em sequência |
Sobre o campo tempo
O campo tempo define a cadência do movimento no formato E-P1-C-P2:
| Posição | Significado | Exemplo |
|---|---|---|
| E | Fase excêntrica (descida) | 2 |
| P1 | Pausa na posição alongada | 1 |
| C | Fase concêntrica (subida) | 2 |
| P2 | Pausa na posição contraída | 0 |
Exemplo: "2-1-2-0" = 2s descendo, 1s pausa embaixo, 2s subindo, sem pausa no topo.