API

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/v1

GET /api/v1/workout-programs — Listar programas de treino

Retorna os programas de treino, com os dias e exercícios aninhados.

Query Parameters

ParâmetroTipoPadrãoDescrição
member_profile_idstringFiltrar por aluno (UUID)
statusstringactive 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)

CampoTipoObrigatórioDescrição
member_profile_idstringSimUUID do aluno
namestringSimNome do programa (ex: "Treino A/B/C")
daysarraySimLista de dias do treino (ver estrutura abaixo)
descriptionstringNãoDescrição do programa
weeks_durationintegerNãoDuração em semanas
starts_atstringNãoData de início (YYYY-MM-DD)
ends_atstringNãoData de fim (YYYY-MM-DD)
created_by_aibooleanNãoIndica se foi gerado por IA
ai_promptstringNãoPrompt usado para geração por IA
store_idstringNãoUUID da unidade (filial)

Estrutura de cada dia (days[])

CampoTipoObrigatórioDescrição
day_labelstringSimRótulo do dia (ex: "A", "B", "C")
namestringNãoNome descritivo (ex: "Peito e Tríceps")
muscle_groupsstring[]NãoGrupos musculares trabalhados
estimated_duration_minutesintegerNãoDuração estimada em minutos
notesstringNãoObservações do dia
exercisesarraySimLista de exercícios (ver estrutura abaixo)

Estrutura de cada exercício (days[].exercises[])

CampoTipoObrigatórioDescrição
exercise_idstringSimUUID do exercício (do catálogo)
sets_targetintegerNãoNúmero de séries
reps_targetstringNãoRepetições alvo (ex: "8-10", "12", "até a falha")
weight_kgnumberNãoCarga em quilogramas
rest_secondsintegerNãoDescanso entre séries (segundos)
tempostringNãoCadência do movimento (ex: "2-0-2-0")
notesstringNãoObservações do exercício
group_idstringNãoID do grupo (para agrupar exercícios em bi-set/tri-set)
group_typestringNãoTipo 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_typeDescrição
supersetDois exercícios executados sem descanso entre eles
dropsetSéries com redução progressiva de carga
giant_setTrê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çãoSignificadoExemplo
EFase excêntrica (descida)2
P1Pausa na posição alongada1
CFase concêntrica (subida)2
P2Pausa na posição contraída0

Exemplo: "2-1-2-0" = 2s descendo, 1s pausa embaixo, 2s subindo, sem pausa no topo.

On this page