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. A entrega é at-least-once: uma retentativa pode chegar duas vezes, então trate o ID como chave de idempotência. |
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."
}
}Condições de Integração por API
Informações gerais
Acordo de Tratamento de Dados para Serviços B2B
Informações gerais
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.