Leilão
A API de Leilão da Socinal permite consultar as solicitações de leilão em aberto, enviar propostas e acompanhar o resultado. O resultado é assíncrono. Você envia sua solicitação e recebe o resultado por webhook. Ou pode consultar o status a qualquer momento.
Todos os endpoints são versionados sob o prefixo /v1 e exigem
Authorization: Bearer <token>. A referência completa está em
Referência API → Leilão.
Autenticação
Use o mesmo token das demais APIs da Socinal. O token é sempre emitido
pelo backoffice (o provedor de autenticação): faça o
POST /v1/oauth/token na URL
da API Backoffice (https://econsignado-api.socinal.com.br), mesmo que as
outras chamadas sejam na API de Leilão. O mesmo token serve as duas. A
identidade do parceiro vem do próprio token (nunca do corpo da requisição).
Escopos
| Escopo | Permite |
|---|---|
leilao:read | Listar solicitações, consultar status e listar as propostas enviadas. |
leilao:enviar | Enviar propostas (POST /v1/propostas). |
Sem token válido: 401. Token sem o escopo exigido pelo endpoint: 403.
Fluxo de ponta a ponta
POST /v1/oauth/token→ token com escoposleilao:*.GET /v1/solicitacoes→ lista paginada das solicitações de leilão em aberto (janela pordataHoraInicio/dataHoraFimem ISO 8601).POST /v1/propostas→ envia uma ou mais propostas. Modelo assíncrono: a resposta é só o aviso de recebimento (recebido: true); o resultado (confirmada/recusada) chega por webhook.GET /v1/solicitacoes/{id}/status→ consulta o status atual de uma proposta enviada (PropostaDto+mensagemStatus).GET /v1/propostaseGET /v1/propostas/{id}→ consultam as propostas que você enviou.
Status das propostas
O campo statusSocinal reflete o status recebido (normalizado para
MAIÚSCULAS). O status resume o ciclo da proposta (enviada → resultado do
webhook). Os campos suaPontuacao e pontuacaoVencedora mostram a colocação da
proposta no leilão quando o resultado sai.
Webhook de status
O resultado da proposta chega de forma assíncrona por webhook: você cadastra uma
URL HTTPS e a Socinal faz um POST nela sempre que o status de uma proposta muda
(por exemplo, de ENVIADA para CONFIRMADA ou RECUSADA).
Você também pode consultar o status a qualquer momento com
GET /v1/solicitacoes/{id}/status.
O webhook evita ter que ficar consultando (polling).
Cadastro
O cadastro é self-service, pela própria API:
POST /v1/webhooks→ cadastra a URL e retorna osecret(exibido só nessa resposta — guarde-o).GET /v1/webhooks→ lista os webhooks ativos (sem osecret).DELETE /v1/webhooks/{id}→ remove um webhook.
Segurança (validação da assinatura)
Cada entrega é assinada com HMAC-SHA256 do corpo bruto usando o secret do
cadastro, no header X-Webhook-Signature. O header X-Webhook-Event traz o
nome do evento.
X-Webhook-Event: proposta.atualizada
X-Webhook-Signature: sha256=<hmac_hex>Para validar, recompute o HMAC do corpo recebido e compare (comparação em tempo constante). Rejeite se não bater — é o que garante que a chamada veio da Socinal.
import { createHmac, timingSafeEqual } from 'node:crypto';
const assinado = createHmac('sha256', SEU_SECRET).update(rawBody).digest('hex');
const recebido = req.headers['x-webhook-signature']?.replace('sha256=', '');
const ok =
recebido &&
timingSafeEqual(Buffer.from(assinado), Buffer.from(recebido));Corpo da entrega
O corpo é um envelope: metadados na raiz e a carga do evento em data.
{
"evento": "proposta.atualizada",
"timestamp": "2026-07-17T12:00:00.000Z",
"data": {
"id": "cmqb...",
"numero": "LEI-0091",
"idSolicitacao": "30808607",
"status": "CONFIRMADA",
"statusSocinal": "CONFIRMADA",
"mensagem": "Proposta vencedora.",
"suaPontuacao": 7,
"pontuacaoVencedora": 7
}
}Campo (data) | Tipo | Descrição |
|---|---|---|
id | string | ID interno da proposta (cuid). |
numero | string | Número de exibição (LEI-XXXX). |
idSolicitacao | string | ID da solicitação de leilão — correlaciona com a proposta enviada. |
status | string | Status normalizado (MAIÚSCULAS), ex.: CONFIRMADA, RECUSADA. |
statusSocinal | string | null | Status textual como recebido. |
mensagem | string | null | Observação sobre o resultado. |
suaPontuacao | number | null | Pontuação da sua proposta. |
pontuacaoVencedora | number | null | Pontuação da proposta vencedora. |
Resposta esperada e retries
Responda 2xx (ex.: 200) para confirmar o recebimento. Se o seu endpoint
falhar (timeout ou status ≥ 400), a entrega é reprocessada com backoff
exponencial (até 5 tentativas). Trate duplicatas sem efeito colateral
(idempotência), pois um reenvio pode repetir o mesmo evento.