Documentação da API

Integre dados do HealthPro com seus apps, wearables e scripts usando nossa REST API.

🔑 Autenticação

Todos os endpoints requerem um Bearer token no cabeçalho Authorization. Gere sua chave em Dashboard → Chaves de API.

# Exemplo com curl
curl https://healthpro.rafa.rip/api/v1/me \
  -H "Authorization: Bearer hpro_SUA_CHAVE_AQUI"

# Exemplo com JavaScript
const res = await fetch("https://healthpro.rafa.rip/api/v1/me", {
  headers: { "Authorization": "Bearer hpro_SUA_CHAVE_AQUI" }
});
const data = await res.json();

Base URL

https://healthpro.rafa.rip

Versão

v1

Formato

JSON (application/json)

⚠️ Respostas de erro

Código HTTPSignificadoExemplo
401UnauthorizedToken ausente, inválido ou revogado
400Bad RequestDados inválidos ou obrigatórios ausentes
404Not FoundRecurso não encontrado
429Too Many RequestsLimite de recursos atingido
500Internal Server ErrorErro inesperado no servidor
// Estrutura de erro padrão
{
  "error": "Unauthorized",
  "message": "Provide a valid Bearer token in the Authorization header."
}

Usuário

GET/api/v1/me

Retorna os dados do usuário autenticado e estatísticas gerais.

Resposta (200 OK)

{
  "id": 1,
  "name": "Rafael",
  "email": "rafael@email.com",
  "role": "MEMBER",
  "stats": {
    "healthLogs": 42,
    "workouts": 18,
    "challenges": 3
  }
}

Registros de Saúde

GET/api/v1/health-logs

Lista os registros de saúde do usuário com paginação e filtro de datas.

Query params

CampoTipoObrigatórioDescrição
limitnumbernãoMáximo de registros (padrão: 30, máximo: 100)
offsetnumbernãoRegistros para pular (paginação)
fromYYYY-MM-DDnãoData de início do filtro
toYYYY-MM-DDnãoData de fim do filtro

Resposta (200 OK)

{
  "data": [
    {
      "id": 10,
      "date": "2026-04-28T12:00:00.000Z",
      "steps": 9843,
      "calories": 420,
      "waterLiters": 2.5,
      "sleepHours": 7.5,
      "weightKg": 74.2,
      "bpm": 68,
      "notes": null,
      "createdAt": "2026-04-28T18:32:10.000Z"
    }
  ],
  "total": 42,
  "limit": 30,
  "offset": 0
}
POST/api/v1/health-logs

Cria ou atualiza (upsert) o registro de saúde de uma data.

Body (JSON)

CampoTipoObrigatórioDescrição
dateYYYY-MM-DDsimData do registro
stepsnumbernãoPassos caminhados
caloriesnumbernãoCalorias queimadas (kcal)
waterLitersnumbernãoÁgua ingerida (litros)
sleepHoursnumbernãoHoras de sono
weightKgnumbernãoPeso corporal (kg)
bpmnumbernãoFrequência cardíaca (bpm)
notesstringnãoNotas livres

Resposta (200 OK)

{
  "data": {
    "id": 11,
    "date": "2026-04-28T12:00:00.000Z",
    "steps": 8000,
    "calories": 350,
    ...
  }
}

Treinos na Academia

GET/api/v1/workouts

Lista as sessões de treino com exercícios detalhados.

Query params

CampoTipoObrigatórioDescrição
limitnumbernãoMáximo de sessões (padrão: 20, máximo: 100)
offsetnumbernãoSessões para pular (paginação)

Resposta (200 OK)

{
  "data": [
    {
      "id": 5,
      "date": "2026-04-27T12:00:00.000Z",
      "name": "Push — Peito e Ombro",
      "duration": 60,
      "notes": null,
      "exercises": [
        {
          "name": "Supino Reto",
          "sets": 4,
          "reps": 10,
          "weightKg": 80,
          "durationSecs": null,
          "restSecs": 90,
          "notes": null
        }
      ]
    }
  ],
  "total": 18,
  "limit": 20,
  "offset": 0
}

Liga Semanal

GET/api/v1/leagues

Retorna o ranking semanal de passos com posição do usuário autenticado.

Resposta (200 OK)

{
  "weekStart": "2026-04-27T00:00:00.000Z",
  "weekEnd": "2026-05-03T23:59:59.999Z",
  "myRank": 3,
  "leaderboard": [
    { "rank": 1, "userId": 7, "name": "Ana", "steps": 68432, "isCurrentUser": false },
    { "rank": 2, "userId": 2, "name": "Carlos", "steps": 52100, "isCurrentUser": false },
    { "rank": 3, "userId": 1, "name": "Rafael", "steps": 49800, "isCurrentUser": true }
  ]
}

Desafios em Grupo

GET/api/v1/challenges

Lista os desafios em que o usuário autenticado participa.

Resposta (200 OK)

{
  "data": [
    {
      "id": 3,
      "title": "Semana dos 70 mil passos",
      "metric": "steps",
      "goal": 70000,
      "startDate": "2026-04-27",
      "endDate": "2026-05-03",
      "code": "AB3D9F",
      "isPublic": false,
      "creator": { "id": 1, "name": "Rafael" },
      "_count": { "participants": 4 }
    }
  ]
}

📊 Limites

  • Máximo de 5 chaves de API por conta
  • Máximo de 100 registros por requisição (parâmetro limit)
  • Uso da API não tem limite de requisições por minuto no momento