API v1 · Produção

Spectrium Hub API

API REST para integração de profissionais de saúde, clínicas e escolas com o ecossistema Spectrium Hub. Acesse dados de famílias conectadas, gerencie assinaturas e automatize fluxos de pagamento.

Base URL https://api.spectriumhub.com.br/v1
Formato JSON
Auth Bearer JWT
Rate limit 60 req/min
🔐

Autenticação JWT

Obtenha um token com email e senha. Todos os endpoints exigem Authorization: Bearer.

🔗

Conexões

Profissionais solicitam acesso às famílias. Dados só são acessíveis após conexão ativa e aceita.

💳

Pagamentos

Gere links de checkout via Mercado Pago ou Asaas. Suporte a cartão, PIX e boleto.

Rate Limiting

60 requisições por minuto por IP. Respostas 429 indicam limite atingido — aguarde 60s.

Autenticação

Como autenticar

Todas as requisições (exceto /auth/token) exigem um JWT válido no header:

HTTP Header
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Fluxo de autenticação

Obtenha o token com POST /v1/auth/token e inclua-o nas próximas chamadas. Tokens expiram em 1 hora — use /v1/auth/refresh para renovar sem pedir a senha novamente.

cURL
curl -X POST https://api.spectriumhub.com.br/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"email": "voce@exemplo.com", "password": "sua_senha"}'
Quick Start

Exemplo completo: listar pacientes

Sequência para um profissional autenticado listar suas famílias conectadas:

Python
import httpx

BASE = "https://api.spectriumhub.com.br/v1"

# 1. Autenticar
resp = httpx.post(f"{BASE}/auth/token", json={
    "email": "terapeuta@clinica.com",
    "password": "sua_senha"
})
token = resp.json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}

# 2. Ver meu perfil
perfil = httpx.get(f"{BASE}/professionals/me", headers=headers).json()
print(f"Profissional: {perfil['full_name']}")

# 3. Listar famílias conectadas
pacientes = httpx.get(f"{BASE}/professionals/me/patients", headers=headers).json()
for p in pacientes:
    print(f"  Família: {p['family_id']}")
Auth
POST /v1/auth/token Autenticar usuário

Autentica com email e senha. Retorna JWT para uso nos demais endpoints.

Request Body
email string obrigatório Email do usuário
password string obrigatório Senha do usuário
Resposta 200
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "v1.Mf3..."
}
▶ Testar
Resposta

            
POST /v1/auth/refresh Renovar token

Renova o JWT usando o refresh_token sem precisar informar a senha novamente.

Request Body
refresh_token string obrigatório Token de renovação retornado em /auth/token
Resposta 200
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "v1.new..."
}
Professionals
GET /v1/professionals/me Perfil do profissional autenticado

Retorna o perfil completo do profissional autenticado.

Resposta 200
{
  "id": "uuid",
  "user_id": "uuid",
  "full_name": "Dra. Maria Silva",
  "specialty": "Fonoaudiologia",
  "crp_crfa_crm": "CRFa 1234/SP",
  "bio": "Especialista em comunicação infantil...",
  "city": "São Paulo",
  "state": "SP",
  "accepts_online": true,
  "profile_photo_url": "https://...",
  "org_id": null
}
▶ Testar
Resposta

            
GET /v1/professionals/me/patients Famílias conectadas

Retorna todas as famílias com conexão ativa para o profissional autenticado.

Resposta 200
[
  {
    "id": "uuid",
    "family_id": "uuid",
    "professional_id": "uuid",
    "status": "active",
    "created_at": "2026-01-15T10:00:00Z",
    "families": {
      "id": "uuid",
      "name": "Família Santos"
    }
  }
]
GET /v1/professionals/me/connections Todas as conexões

Retorna conexões em qualquer status. Use o parâmetro status_filter para filtrar.

Query Params
status_filter string opcional active | pending_family | pending_pro | rejected | revoked
POST /v1/professionals/connections Solicitar conexão com família

Envia uma solicitação de conexão para uma família. O status inicial é pending_family — a família precisa aceitar.

Request Body
family_id string (uuid) obrigatório ID da família alvo
message string opcional Mensagem para a família
Resposta 201
{
  "id": "uuid",
  "professional_id": "uuid",
  "family_id": "uuid",
  "status": "pending_family",
  "created_at": "2026-04-03T14:00:00Z",
  "updated_at": null
}
PATCH /v1/professionals/connections/{connection_id} Atualizar status da conexão

Aceita, rejeita ou revoga uma conexão.

Path Params
connection_id string (uuid) obrigatório ID da conexão
Request Body
status string obrigatório active | rejected | revoked
Families
GET /v1/families/{family_id}/members Membros da família

Requer conexão ativa com a família. Retorna membros com status active.

Resposta 200
[
  {
    "id": "uuid",
    "user_id": "uuid",
    "family_id": "uuid",
    "role": "owner",
    "status": "active"
  }
]
GET /v1/families/{family_id}/children Perfis das crianças

Requer conexão ativa. Retorna crianças cadastradas na família com seus perfis e condições.

Resposta 200
[
  {
    "id": "uuid",
    "family_id": "uuid",
    "full_name": "Lucas Santos",
    "birthdate": "2018-05-12",
    "conditions": ["TEA", "TDAH"],
    "notes": "Acompanhamento fonoaudiológico em andamento"
  }
]
GET /v1/families/{family_id}/records Registros médicos

Requer conexão ativa. Retorna prescrições e registros médicos em ordem decrescente de data.

GET /v1/families/{family_id}/documents Documentos do cofre

Requer conexão ativa. Retorna documentos armazenados no cofre da família.

Subscriptions
GET /v1/subscriptions/me Status da assinatura

Retorna a assinatura ativa do usuário autenticado (familiar ou profissional).

Resposta 200
{
  "id": "uuid",
  "plan": "essencial",
  "billing_period": "monthly",
  "status": "active",
  "payment_provider": "mercadopago",
  "current_period_end": "2026-05-03T00:00:00Z",
  "cancel_at_period_end": false
}
POST /v1/subscriptions/checkout Iniciar checkout

Gera a URL de pagamento. Redirecione o usuário para checkout_url para concluir.

Request Body
plan string obrigatório essencial | familia | pro | premium
provider string obrigatório mercadopago | asaas
period string opcional monthly (padrão) | quarterly | semiannual | annual
subscriber_type string opcional family (padrão) | professional | organization
Resposta 200
{
  "checkout_url": "https://www.mercadopago.com.br/subscriptions/checkout?preapproval_plan_id=..."
}