API · v1.1

A API da TAFeito

Tudo que a plataforma sabe sobre um aluno — treinos prescritos, check-ins semanais, assinatura e agenda — disponível para ler e para escrever. É a mesma API que conecta o Claude à operação pelo servidor MCP.

https://app.tafeitoconcurso.com.br/api/v1
Especificação OpenAPI 3.1

Autenticação

Toda chamada leva uma chave de API no cabeçalho. Não há login nem cookie: a API foi feita para cliente de máquina, que não tem navegador para renovar sessão.

cabeçalho
Authorization: Bearer SUA_CHAVE
read

Consulta tudo: alunos, treinos, check-ins, assinaturas, agenda e histórico de notificações. Não altera nada.

write

Tudo de read, mais montar e corrigir treinos e cadastros. Uma chave read recebe 403 ao tentar escrever.

Nenhum endpoint envia WhatsApp ao aluno. O que se escreve aqui aparece no app dele, mas o disparo de mensagem continua sendo do app e do agendador — uma integração não toca no celular de ninguém.

Convenções

Quatro decisões que valem para a API inteira. Elas existem porque do outro lado costuma haver um modelo de linguagem, que sabe o nome do aluno e não o identificador dele.

Aluno por nome, não por UUID

Onde a rota pede {aluno}, vale UUID, e-mail, telefone ou parte do nome. Se o nome for ambíguo, a resposta é 409 com os candidatos — nunca o palpite errado.

Datas em português comum

Além de YYYY-MM-DD, os campos de data aceitam today, tomorrow, +7d, -14d, e as janelas aceitam week=current | next | previous.

Toda resposta se localiza no tempo

Cada resposta traz generated_at, today e timezone. Use o today da resposta como referência em vez de presumir a data atual.

Erro que ensina a corrigir

Erros vêm com code, message e um hint acionável — o que faltou e como refazer a chamada, para a segunda tentativa dar certo.

Endpoints

Todos relativos a https://app.tafeitoconcurso.com.br/api/v1.

Leitura · escopo read

GET/overview

Panorama da operação: alunos ativos, inadimplentes, treinos e check-ins da semana, aderência e as notificações recentes.

GET/students

Índice de alunos com o resumo da semana, plano, situação da assinatura e último check-in. Aceita q, status e limit.

GET/students/{aluno}

Dossiê completo: perfil, assinatura com dias até o corte, plano ativo, estatísticas, semana corrente e último check-in.

GET/students/{aluno}/sessions

Treinos do aluno num período, com os blocos e a prescrição já formatada. Padrão: semana corrente.

GET/students/{aluno}/checkins

Check-ins semanais com as respostas já pareadas ao enunciado da pergunta.

GET/students/{aluno}/metrics

Série temporal de uma métrica de check-in (peso, sono, PSE) com mínimo, máximo e variação.

GET/students/{aluno}/subscription

Assinatura, vencimento, ciclo de falhas de pagamento e a trilha de eventos do provedor.

GET/students/{aluno}/notifications

Histórico de disparos de WhatsApp para o aluno, com situação de entrega e erro.

GET/agenda

Treinos de toda a base agrupados por dia — responde “quem treina amanhã?” numa chamada.

GET/sessions/{id}

Um treino com os blocos prescritos e, colado a cada bloco, o que o aluno executou.

GET/modalities

Catálogo de modalidades do TAF e como cada uma é medida.

GET/checkin-questions

Enunciados e códigos das perguntas do check-in semanal.

Escrita · escopo write

POST/students/{aluno}/sessions

Cria um treino com os blocos já prescritos, numa chamada só. O aluno passa a ver o treino na data indicada.

POST/students/{aluno}/sessions/duplicate-week

Copia a semana de treinos para a seguinte. Recusa se a semana de destino já tiver treinos.

PATCH/sessions/{id}

Muda data, título, foco, orientação ou situação do treino. Só os campos enviados são tocados.

DELETE/sessions/{id}

Apaga o treino, seus blocos e os resultados registrados. Definitivo — para só tirar da conta, use status skipped.

POST/sessions/{id}/blocks

Acrescenta um bloco de prescrição a um treino existente. Sem order, vai para o fim.

PATCH/sessions/{id}/blocks/{bloco}

Corrige a prescrição de um bloco: distância, pace, séries, descanso.

DELETE/sessions/{id}/blocks/{bloco}

Remove um bloco. O treino continua, com os demais blocos.

POST/students

Cadastra um aluno e o vincula a um professor. Sem password, a senha provisória é o próprio e-mail.

PATCH/students/{aluno}

Corrige dados do aluno, troca o professor responsável e liga/desliga cada tipo de aviso.

POST/students/{aluno}/access

Libera ou corta o acesso. Cortar bloqueia o login e tira o aluno do WhatsApp — e exige informar o motivo.

Um exemplo inteiro

Prescrever um treino para amanhã. Repare que a resposta devolve a frase de prescrição já montada — a mesma que o aluno lê no app e no PDF do WhatsApp.

requisição
curl -X POST "https://app.tafeitoconcurso.com.br/api/v1/students/joao@email.com/sessions" \
  -H "Authorization: Bearer SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "date": "tomorrow",
    "title": "Intervalado 6x800m",
    "focus": "Resistência aeróbia",
    "blocks": [
      { "label": "Aquecimento", "duration_seconds": 600 },
      {
        "modality": "corrida",
        "sets": 6,
        "distance_m": 800,
        "target_pace": "3:20/km",
        "rest_seconds": 120
      }
    ]
  }'
resposta (resumida)
{
  "generated_at": "2026-08-03T12:00:00.000Z",
  "today": "2026-08-03",
  "timezone": "America/Sao_Paulo",
  "created": true,
  "blocks_created": 2,
  "session": {
    "date": "2026-08-04",
    "weekday": "Terça-feira",
    "title": "Intervalado 6x800m",
    "status_label": "Planejado",
    "blocks": [
      { "title": "Aquecimento", "prescription": "10min" },
      {
        "title": "Corrida",
        "prescription": "6 × 800 m · 3:20/km · descanso 2min"
      }
    ]
  }
}
Model Context Protocol

A mesma API dentro do Claude

Existe um servidor MCP que transforma cada endpoint desta página em uma ferramenta do Claude. Dá para perguntar “quem treina amanhã?” e mandar montar a semana de um aluno, em português, sem escrever chamada nenhuma.

URL do servidor MCP
https://tafeito-mcp.torresgw1.workers.dev/mcp

A conexão é por OAuth e o acesso é nominal: quem entra como owner lê e escreve; quem entra como colaborador só lê. A chave da API nunca sai do servidor.

Como conectar

Precisa de uma chave para integrar? contato@tafeitoconcurso.com.br