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 HTTP | Significado | Exemplo |
|---|---|---|
| 401 | Unauthorized | Token ausente, inválido ou revogado |
| 400 | Bad Request | Dados inválidos ou obrigatórios ausentes |
| 404 | Not Found | Recurso não encontrado |
| 429 | Too Many Requests | Limite de recursos atingido |
| 500 | Internal Server Error | Erro inesperado no servidor |
// Estrutura de erro padrão
{
"error": "Unauthorized",
"message": "Provide a valid Bearer token in the Authorization header."
}Usuário
/api/v1/meRetorna 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
/api/v1/health-logsLista os registros de saúde do usuário com paginação e filtro de datas.
Query params
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| limit | number | não | Máximo de registros (padrão: 30, máximo: 100) |
| offset | number | não | Registros para pular (paginação) |
| from | YYYY-MM-DD | não | Data de início do filtro |
| to | YYYY-MM-DD | não | Data 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
}/api/v1/health-logsCria ou atualiza (upsert) o registro de saúde de uma data.
Body (JSON)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| date | YYYY-MM-DD | sim | Data do registro |
| steps | number | não | Passos caminhados |
| calories | number | não | Calorias queimadas (kcal) |
| waterLiters | number | não | Água ingerida (litros) |
| sleepHours | number | não | Horas de sono |
| weightKg | number | não | Peso corporal (kg) |
| bpm | number | não | Frequência cardíaca (bpm) |
| notes | string | não | Notas livres |
Resposta (200 OK)
{
"data": {
"id": 11,
"date": "2026-04-28T12:00:00.000Z",
"steps": 8000,
"calories": 350,
...
}
}Treinos na Academia
/api/v1/workoutsLista as sessões de treino com exercícios detalhados.
Query params
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| limit | number | não | Máximo de sessões (padrão: 20, máximo: 100) |
| offset | number | não | Sessõ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
/api/v1/leaguesRetorna 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
/api/v1/challengesLista 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