Documentação da API de Parceiros.
Integre financiamento de veículos ao seu site ou sistema. OAuth2, webhooks em tempo real e widget embarcado.
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 |
crm:read | Ler o funil de negócios (CRM) — dados sensíveis, mascarados |
crm:write | Gerenciar negócios do CRM (criar/editar/etapa/ganho/perda) — dados sensíveis |
crm:tasks:write | Gerenciar tarefas/lembretes dos negócios do CRM |
crm:financing:start | Iniciar financiamento a partir de um negócio (escopo isolado, mais privilegiado) |
marketplace:listings:read | Consultar anúncios de veículos da revenda no marketplace |
marketplace:listings:write | Criar, atualizar, publicar e remover anúncios de veículos |
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.
CRM (Negócios)#
Acesse o funil de vendas (CRM “Negócios”) da revenda vinculada ao seu parceiro: liste e gerencie negócios, mova etapas, registre ganho/perda, crie tarefas e inicie financiamentos — tudo de forma programática. Cada parceiro opera somente a revenda à qual está vinculado.
crm:* não são concedidos por padrão — precisam ser habilitados por um administrador; crm:financing:start é isolado e o mais privilegiado (origina um empréstimo).deal.id como identidade do negócio — o mesmo contato pode ter negociações independentes em linhas físicas diferentes. Leituras de negócio retornam whatsappLine como { connectionId, label, phoneNumber } quando já existe uma mensagem confirmada no WhatsApp; antes disso, o campo é null.GET /deals/{id}, GET /deals/pipeline-summary, GET /deals/analytics, GET /assignable-members, PATCH /deals/{id}, POST /deals/{id}/activities, POST /deals/from-inquiry/{inquiryId} e as tarefas (POST /deals/{id}/tasks, PATCH /tasks/{id}, DELETE /tasks/{id}, escopo crm:tasks:write). Eventos em tempo real deal.* estão na seção Webhooks. Referência completa no OpenAPI.Marketplace (Anúncios)#
Sincronize o estoque da revenda com o marketplace da Alethica de forma programática. Cada anúncio é identificado pelo seu próprio identificador (externalListingId) — o PUT é idempotente (cria ou atualiza), e a publicação é um passo explícito (/submit). Todos os anúncios pertencem à revenda vinculada ao parceiro.
vehicle_listing.approved e vehicle_listing.sold (seção Webhooks) notificam seu sistema quando um anúncio é aprovado para publicação ou marcado como vendido.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 — PDF selado fica disponível em /document/signed em segundos |
signature.declined | Solicitação de assinatura recusada por um signatário |
vehicle_listing.approved | Anúncio de veículo aprovado para publicação |
vehicle_listing.sold | Anúncio de veículo marcado como vendido |
deal.created | Novo negócio (CRM) criado — requer o escopo crm:read para assinar |
deal.stage_changed | Negócio mudou de etapa no funil — requer crm:read |
deal.won | Negócio ganho — requer crm:read |
deal.lost | Negócio perdido — requer crm:read |
deal.updated | Negócio atualizado — requer crm:read |
deal.deleted | Negócio excluído (soft delete) — pare de re-buscar e remova localmente; requer crm:read |
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="880"
></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/revenda vinculada configurada |
INSUFFICIENT_SCOPE | 403 | Token não possui o escopo necessário para a rota |
CRM_SCOPE_REQUIRED | 403 | Assinar eventos deal.* exige o escopo crm:read |
PARTNER_DEALER_MISCONFIGURED | 409 | Vínculo do parceiro com a revenda inválido — contate o suporte |
DEAL_NOT_FOUND | 404 | Negócio (CRM) não encontrado para a revenda vinculada |
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."
}
}Próximo passo
Pronto para integrar?
Entre em contato para receber suas credenciais de parceiro e começar a oferecer financiamento de veículos no seu sistema.