Pular para o conteúdo principal

Visão Geral da API

URL Base: https://channel.ozzieapp.com/v1

A Channel API é o único ponto de integração para todos os aplicativos para consumidores. Ela é stateful — gerencia usuários, autenticação OTP, onboarding, histórico de chat e transações.

informação

A camada de inteligência está disponível em api.ozzieapp.com, mas é um serviço interno. Aplicativos para consumidores — incluindo o Lovable — não a chamam diretamente. Todas as requisições passam por channel.ozzieapp.com.


Endpoints

MétodoCaminhoDescrição
POST/v1/auth/otp/requestSolicitar um código OTP de 6 dígitos (WhatsApp ou e-mail)
POST/v1/auth/otp/verifyVerificar código OTP — retorna user_id + onboarding_stage
POST/v1/usersCriar identidade de usuário
GET/v1/users/:user_idObter usuário
GET/v1/users/:user_id/profileObter perfil de usuário do canal (onboarding_stage, plan_speed, etc.)
PATCH/v1/users/:user_id/onboarding/completeAvançar onboarding de plan → active
POST/v1/users/:user_id/financial-intakeEnviar intake financeiro
GET/v1/users/:user_id/financial-intakeObter intake
POST/v1/users/:user_id/plan/generateGerar plano — aceita personality_type no corpo
GET/v1/users/:user_id/planObter plano
GET/v1/users/:user_id/financial-profileAlocações de envelopes — aceita ?personality_type=
POST/v1/users/:user_id/chat/completionInferência de chat com IA sem estado
GET/v1/users/:user_id/chat/messagesRecuperar histórico de chat
POST/v1/transactions/parseAnálise de transação com IA sem estado
GET/v1/personality/questionsCatálogo de perguntas do quiz (sem user_id obrigatório)
POST/v1/personality/scorePontuar respostas do quiz e retornar tipo de personalidade
POST/v1/money-moves/generateGerar recomendações semanais de movimentos financeiros

Autenticação

HTTP Bearer com token client_id:client_secret codificado em base64.

Formato do token:

base64(client_id + ":" + client_secret)

Header:

Authorization: Bearer <base64_encoded_credentials>

Gerando o token:

const token = Buffer.from(`${clientId}:${clientSecret}`).toString('base64');
// Authorization: `Bearer ${token}`
Mantenha as credenciais no servidor

Nunca exponha seu client_secret em código client-side, aplicativos móveis ou repositórios públicos. Todas as chamadas à API devem originar do seu backend.


Convenções de requisição e resposta

Headers de requisição

HeaderObrigatórioValor
AuthorizationSimBearer <token>
Content-TypeSim (POST/PATCH)application/json
Idempotency-KeyNãoUUID v4 — para requisições POST idempotentes

Envelope de resposta

{
"object": "object_type_name",
"data": { ... }
}

Códigos de status HTTP

StatusSignificado
200 OKRequisição bem-sucedida
201 CreatedRecurso criado
400 Bad RequestJSON malformado ou erro de validação
401 UnauthorizedCredenciais ausentes ou inválidas
403 ForbiddenCredenciais válidas, permissões insuficientes
404 Not FoundRecurso não existe
409 ConflictRecurso já existe
422 Unprocessable EntityErro de lógica de negócio (ex.: intake ausente)
429 Too Many RequestsLimite de taxa excedido
500 Internal Server ErrorErro no servidor

Códigos de erro

Todos os erros seguem este formato:

{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable explanation."
}
}
CódigoHTTPDescrição
INVALID_JSON400O corpo da requisição não é JSON válido
VALIDATION_ERROR400Campo falhou na validação
INVALID_CODE400Código OTP incorreto ou já utilizado
CODE_EXPIRED400Código OTP ultrapassou o TTL de 10 minutos
UNAUTHORIZED401Credenciais ausentes ou inválidas
FORBIDDEN403Credenciais válidas, mas acesso negado
NOT_FOUND404Recurso não existe
CONFLICT409Conflito de constraint única (ex.: external_user_id duplicado)
INTAKE_REQUIRED422O intake financeiro deve ser enviado primeiro
PLAN_REQUIRED422O plano deve ser gerado primeiro
RATE_LIMIT_EXCEEDED429Limite de taxa excedido — veja o header Retry-After
INTERNAL_ERROR500Erro inesperado no servidor

Rate limiting

Os limites de taxa são aplicados por client_id. Quando excedidos, a API retorna HTTP 429:

HTTP/1.1 429 Too Many Requests
Retry-After: 15
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1746460800
TierRequisições por minuto
Standard120
Growth600
EnterprisePersonalizado

Sempre implemente backoff exponencial ao lidar com respostas 429.