simpla.fydocs
Hub API

Quickstart

Faça seu primeiro request end-to-end na Hub API: autentique com email e senha, receba um access token JWT e chame um endpoint protegido.

Quickstart

Este guia leva você do zero ao primeiro request autenticado na Hub API em poucos minutos. Você vai trocar suas credenciais por um access token JWT e usá-lo para chamar um endpoint protegido.

A base URL de produção é https://hub.simplafy.com.br/api/v1. Toda chamada autenticada usa o cabeçalho Authorization: Bearer <access_token>.

Pré-requisitos

Antes de começar, você precisa de:

  • Uma conta Simplafy Hub com email e senha. Se você ainda não tem acesso, peça ao administrador da sua organização para criar um convite.
  • Pertencer a pelo menos uma organização no Hub. O login falha com 403 se o usuário não tem nenhuma membership ativa.
  • Um cliente HTTP — cURL, Postman, Insomnia, ou um runtime como Node.js / Python no seu ambiente.

A documentação OpenAPI interativa (Swagger UI) está disponível em hub.simplafy.com.br/docs. Use-a para explorar todos os endpoints e schemas.

Obter token (login)

O endpoint POST /api/v1/auth/login recebe email e senha e retorna um access token JWT (válido por 15 minutos) junto com um refresh token entregue via cookie httpOnly.

Request:

curl -X POST https://hub.simplafy.com.br/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "sua-senha-aqui"
  }'

Response 200:

{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expiresAt": 1735689600,
  "user": {
    "id": "clx...",
    "email": "[email protected]",
    "name": "Seu Nome",
    "language": "pt-BR"
  },
  "org": {
    "id": "clx...",
    "name": "Sua Organização",
    "role": "OWNER"
  }
}

O campo accessToken é o JWT que você vai usar no header Authorization das próximas chamadas. O campo expiresAt é um Unix timestamp (segundos) indicando o momento de expiração.

O access token expira em 15 minutos. Quando expirar, use POST /api/v1/auth/refresh para obter um novo, sem precisar reenviar email e senha. O refresh token vive em cookie httpOnly por 7 dias e é rotacionado a cada uso.

Erros comuns:

  • 400 — payload inválido (email malformado ou senha com menos de 8 caracteres).
  • 401Invalid credentials (email não existe ou senha incorreta).
  • 403User has no organization membership (conta sem org vinculada).

Primeira chamada

Com o accessToken em mãos, chame GET /api/v1/auth/me para recuperar o perfil do usuário autenticado e suas memberships. Esse endpoint é o "hello world" da Hub API: confirma que seu token é válido e devolve o contexto multi-tenant.

ACCESS_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

curl https://hub.simplafy.com.br/api/v1/auth/me \
  -H "Authorization: Bearer $ACCESS_TOKEN"
const accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...";

const response = await fetch(
  "https://hub.simplafy.com.br/api/v1/auth/me",
  {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  },
);

if (!response.ok) {
  throw new Error(`Hub API error: ${response.status}`);
}

const { user } = await response.json();
console.log(user);
import requests

access_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

response = requests.get(
    "https://hub.simplafy.com.br/api/v1/auth/me",
    headers={"Authorization": f"Bearer {access_token}"},
    timeout=10,
)
response.raise_for_status()

data = response.json()
print(data["user"])

Response 200:

{
  "user": {
    "id": "clx...",
    "email": "[email protected]",
    "name": "Seu Nome",
    "firstName": "Seu",
    "lastName": "Nome",
    "companyName": "Sua Empresa",
    "language": "pt-BR",
    "image": null,
    "emailVerified": "2026-01-15T10:30:00.000Z",
    "memberships": [
      {
        "id": "clx...",
        "role": "OWNER",
        "organizationId": "clx...",
        "organization": {
          "id": "clx...",
          "name": "Sua Organização",
          "slug": "sua-org",
          "avatarUrl": null
        }
      }
    ]
  }
}

Se o token estiver expirado ou inválido, a resposta é 401. Nesse caso, chame /auth/refresh para rotacionar o token.

Próximos passos

Você fez login, recebeu um JWT e chamou um endpoint protegido. A partir daqui:

On this page