Documentação da API de Parceiros
Introdução#
A API de Parceiros Alethica permite que concessionárias, plataformas de veículos e sistemas de gestão integrem financiamento veicular diretamente em seus fluxos. Submeta solicitações, acompanhe status em tempo real via webhooks e ofereça uma experiência nativa com o widget embarcado.
OAuth2
Client credentials seguro
Webhooks
Eventos em tempo real
Widget
Iframe pronto para usar
Base URL
https://api.alethica.co/api/v1Escopos disponíveis
| Escopo | Descrição |
|---|---|
applications:write | Criar e submeter solicitações de financiamento |
applications:read | Consultar status e timeline de solicitações |
signatures:write | Criar solicitações de assinatura digital em PDF |
signatures:read | Consultar solicitações, evidências e documentos de assinatura |
webhooks:manage | Gerenciar endpoints e entregas de webhooks |
usage:read | Consultar métricas de uso da API |
widget:session | Criar sessões do widget embarcado |
Autenticação#
A API utiliza OAuth2 com o fluxo client_credentials. Você recebe um client_id e client_secret ao registrar-se como parceiro. Use-os para obter um token JWT com validade de 1 hora.
Aplicações#
O recurso de aplicações permite submeter solicitações de financiamento, consultar status e acompanhar a timeline completa de eventos.
Assinaturas#
Crie solicitações de assinatura para PDFs próprios, acompanhe o status dos signatários e consulte evidências de auditoria pela API de parceiros.
Webhooks#
Receba notificações em tempo real quando o status de uma solicitação muda. Registre endpoints, escolha os eventos de interesse e receba payloads assinados via HMAC-SHA256.
Eventos disponíveis
| Evento | Descrição |
|---|---|
loan.approved | Empréstimo aprovado pela análise de crédito |
loan.rejected | Empréstimo rejeitado pela análise de crédito |
loan.funded | Empréstimo totalmente financiado pelos investidores |
loan.offer_accepted | Oferta aceita pelo tomador |
loan.offer_rejected | Oferta rejeitada pelo tomador |
loan.completed | Empréstimo quitado integralmente |
signature.completed | Solicitação de assinatura concluída (todos signatários assinaram) |
signature.declined | Solicitação de assinatura recusada por um signatário |
Verificação de assinatura (HMAC-SHA256)
Cada entrega inclui headers que permitem verificar a autenticidade. O header X-Alethica-Signature contém o HMAC-SHA256 de timestamp.payload usando seu signingSecret.
| Header | Descrição |
|---|---|
X-Alethica-Event | Tipo do evento (ex: loan.funded) |
X-Alethica-Event-Id | ID único do evento |
X-Alethica-Timestamp | Timestamp ISO 8601 da emissão |
X-Alethica-Signature | HMAC-SHA256 de timestamp.payload |
import crypto from "crypto";
function verifyWebhookSignature(payload, headers, signingSecret) {
const timestamp = headers["x-alethica-timestamp"];
const signature = headers["x-alethica-signature"];
const expected = crypto
.createHmac("sha256", signingSecret)
.update(`${timestamp}.${JSON.stringify(payload)}`)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}timingSafeEqual para comparação de assinaturas. Comparações simples com === são vulneráveis a timing attacks.Widget Embarcado#
O widget permite que seus clientes preencham a solicitação de financiamento diretamente no seu site, sem redirecionamentos. A integração é feita via iframe seguro com um token de sessão temporário.
Fluxo de integração
Seu servidor solicita um token de sessão via API (server-to-server)
Inclua o script embed.js na página com o token de sessão
O widget é renderizado dentro de um iframe seguro no container indicado
O cliente preenche e submete — você recebe o resultado via webhook
Embed via script
A forma mais simples de integrar o widget é via nosso script de bootstrap. Ele cria automaticamente o iframe e gerencia a comunicação entre janelas.
<!-- Adicione o container onde o widget será renderizado -->
<div id="alethica-widget"></div>
<!-- Inclua o script com os atributos de configuração -->
<script
src="https://api.alethica.co/api/v1/widget/embed.js"
data-session-token="SESSION_TOKEN_AQUI"
data-container-id="alethica-widget"
data-height="760"
></script>origin na criação da sessão deve corresponder exatamente ao domínio do site que renderiza o widget. Origens não autorizadas receberão erro ORIGIN_NOT_ALLOWED.Analytics de Uso#
Monitore o uso da API com métricas detalhadas de requisições, latência e distribuição por status code e endpoint.
Códigos de Erro#
Todos os erros retornam um JSON com o campo error contendo um código de erro padronizado e uma mensagem descritiva.
{
"success": false,
"error": {
"code": "TOKEN_EXPIRED",
"message": "Access token has expired. Please request a new token."
}
}| Código | HTTP | Descrição |
|---|---|---|
INVALID_CLIENT | 401 | Credenciais OAuth inválidas (client_id ou client_secret incorretos) |
INVALID_SCOPE | 400 | Escopo solicitado não permitido para este client |
NO_TOKEN | 401 | Token Bearer ausente no header Authorization |
TOKEN_EXPIRED | 401 | Token JWT expirado — solicite um novo via /oauth/token |
INVALID_TOKEN | 401 | Token JWT inválido (assinatura ou formato incorreto) |
PARTNER_NOT_FOUND | 404 | Parceiro associado ao token não encontrado |
PARTNER_INACTIVE | 403 | Parceiro com status inativo — contate o suporte |
PARTNER_NOT_CONFIGURED | 400 | Parceiro sem dealer padrão configurado |
APPLICATION_NOT_FOUND | 404 | Solicitação com o externalApplicationId não encontrada |
SIGNATURE_NOT_FOUND | 404 | Solicitação de assinatura não encontrada para o parceiro |
NO_FILE | 400 | Arquivo PDF obrigatório não enviado no formulário |
INVALID_FILE_TYPE | 400 | Tipo de arquivo inválido (apenas PDF é aceito) |
INVALID_SIGNERS | 400 | Estrutura de signatários inválida no campo signers |
ORIGIN_NOT_ALLOWED | 403 | Origem do widget não está na lista de origens permitidas |
INVALID_WIDGET_TOKEN | 401 | Token de sessão do widget inválido ou expirado |
Rate Limiting#
Cada parceiro possui um limite de requisições por minuto configurável. Ao exceder o limite, a API retorna 429 Too Many Requests. Os headers de resposta incluem informações sobre o estado do rate limit.
| Header | Descrição |
|---|---|
X-RateLimit-Limit | Limite total por minuto |
X-RateLimit-Remaining | Requisições restantes na janela atual |
Retry-After | Segundos até o reset (somente quando 429) |
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
Retry-After: 45
Content-Type: application/json
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after 45 seconds."
}
}Pronto para integrar?
Entre em contato para receber suas credenciais de parceiro e começar a oferecer financiamento de veículos no seu sistema.