Documentação da API
REST. JSON. Bearer auth. Disponível para plano Business ou superior.
Início rápido
- 1. Faça upgrade para Business.
- 2. Em Conta → API Keys, clique em "Criar chave".
- 3. Copie a chave (só aparece uma vez).
- 4. Use em qualquer endpoint v1:
curl -H "Authorization: Bearer sl_live_xxxxx" \
https://sevenlicite.com.br/api/v1/fornecedor/12345678000190Autenticação
Toda requisição precisa do header Authorization: Bearer <chave>. As chaves começam com sl_live_.
Bearer token
Header Authorization padrão. Sem OAuth, sem refresh.
Hash + revogação
Guardamos só hash da chave. Revogue a qualquer momento.
Scopes
Por padrão 'read'. 'write' liberado sob demanda.
Endpoints
Base URL: https://sevenlicite.com.br/api/v1
/api/v1/healthpúblicoHealth check (sem auth)
{
"ok": true,
"service": "sevenlicite-api",
"version": "1.0.0",
"timestamp": "2026-04-27T10:00:00Z"
}/api/v1/fornecedor/{cnpj}Dossiê completo: empresa, score B2G, sanções (CEIS/CNEP/CEPIM), últimos 50 contratos
{
"cnpj": "12345678000190",
"empresa": {
"razao_social": "EMPRESA EXEMPLO S/A",
"cnae_descricao": "Comércio atacadista...",
"uf": "SP", "municipio": "São Paulo"
},
"score_b2g": 78,
"perfil": "VETERANO",
"kpis": {
"total_contratos": 142,
"valor_total": 45200000,
"ticket_medio": 318309,
"orgaos_distintos": 18,
"contratos_12m": 23,
"valor_12m": 8400000
},
"sancoes": { "ceis": [], "cnep": [], "cepim": [] },
"ultimos_contratos": [/* ... */]
}/api/v1/orgao/{codigo}Dossiê do órgão público + top 20 fornecedores
{
"codigo_orgao": "36000",
"nome_orgao": "MINISTERIO DA SAUDE",
"kpis": {
"total_contratos": 18429,
"valor_total": 5210000000,
"ticket_medio": 282765,
"ticket_mediano": 45000,
"fornecedores_distintos": 3201,
"contratos_12m": 2847,
"valor_12m": 980000000
},
"top_fornecedores": [
{ "rank": 1, "cnpj": "...", "nome_contratado": "...", "qtd_contratos": 124, "valor_total": 89000000 }
]
}/api/v1/licitacoesBusca paginada de licitações. Query params: q, uf, modalidade, valor_min, valor_max, apenas_abertas, limit (max 100), offset
{
"licitacoes": [
{
"id_licitacao": "...",
"numero_licitacao": "PE-001/2026",
"modalidade": "Pregão Eletrônico",
"objeto": "Aquisição de luminárias LED...",
"data_abertura": "2026-05-10",
"valor_licitacao": 250000,
"nome_orgao": "Prefeitura Municipal de XYZ",
"uf": "SP", "score_relevancia": 0.74
}
],
"meta": { "limit": 50, "offset": 0, "retornados": 50 }
}/api/v1/licitacoes/{id}Detalhe de uma licitação + dossiê do órgão + top 5 fornecedores recorrentes
{
"licitacao": { /* campos completos */ },
"dossie_orgao": { /* kpis */ },
"top_fornecedores_orgao": [/* top 5 */]
}Webhooks
Receba POST em sua URL toda vez que um evento relevante ocorrer — sem polling, sem rate limit. Configure em Conta → Webhooks.
Eventos disponíveis
licitacao.nova— uma licitação que casou com seu alerta foi publicadalicitacao.atualizada— situação ou valor mudoualerta.disparado— resumo (todas as licitações de um disparo de alerta)webhook.test— disparado manualmente pela UI para testar
Headers da entrega
X-SevenLicite-Event— nome do eventoX-SevenLicite-Signature—sha256=<hmac>calculado com seu secretX-SevenLicite-Webhook-Id— id do webhook que disparouUser-Agent: SevenLicite-Webhook/1.0
Payload de exemplo (licitacao.nova)
{
"event": "licitacao.nova",
"delivered_at": "2026-04-27T10:00:00Z",
"webhook_id": "8f3c…",
"data": {
"alerta": { "id": "…", "nome": "Iluminação LED em SP" },
"licitacao": {
"id_licitacao": "…",
"modalidade": "Pregão Eletrônico",
"objeto": "Aquisição de luminárias LED…",
"data_abertura": "2026-05-10",
"valor_licitacao": 250000,
"nome_orgao": "Prefeitura Municipal de…",
"uf": "SP"
}
}
}Validar a assinatura HMAC (Node)
import crypto from "node:crypto";
export function isAssinaturaValida(req: Request, body: string, secret: string) {
const recebida = req.headers.get("x-sevenlicite-signature") || "";
const esperada = "sha256=" + crypto
.createHmac("sha256", secret)
.update(body)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(recebida),
Buffer.from(esperada)
);
}Boas práticas
- Responda 2xx em <10s; processe assíncrono se demorar.
- Após 5 falhas consecutivas desativamos o webhook automaticamente — você recebe e-mail.
- Garanta idempotência: o mesmo
webhook_id/id_licitacaopode chegar duas vezes em caso de retry. - Ignore eventos que você não escuta — usamos um único pipeline.
Rate limit
- Business: 60 req/min por chave, 100k chamadas/mês
- Enterprise: 600 req/min por chave (ou custom), SLA 99,9%
Toda resposta inclui:
X-RateLimit-Limit— limite atualX-RateLimit-Remaining— restantes na janelaX-RateLimit-Reset— segundos até a janela rolar
Quando excedido, retornamos HTTP 429 com header Retry-After.
Códigos de erro
| Status | Quando acontece |
|---|---|
| 200 | Sucesso |
| 400 | Parâmetros inválidos (CNPJ malformado, etc.) |
| 401 | Falta header ou chave inválida/revogada |
| 402 | Plano sem permissão (não é Business+) |
| 403 | Scope insuficiente (write em chave read) |
| 404 | Recurso não encontrado |
| 429 | Rate limit |
| 500 | Erro interno (raro; reportar suporte) |
Exemplos
Node / TypeScript (fetch)
async function getFornecedor(cnpj: string) {
const r = await fetch(
"https://sevenlicite.com.br/api/v1/fornecedor/" + cnpj,
{ headers: { Authorization: "Bearer " + process.env.SEVENLICITE_KEY } }
);
if (!r.ok) throw new Error(`HTTP ${r.status}`);
return r.json();
}Python (requests)
import os, requests
def get_fornecedor(cnpj):
r = requests.get(
f"https://sevenlicite.com.br/api/v1/fornecedor/{cnpj}",
headers={"Authorization": f"Bearer {os.environ['SEVENLICITE_KEY']}"},
timeout=30,
)
r.raise_for_status()
return r.json()cURL — busca de licitações abertas em SP
curl -G "https://sevenlicite.com.br/api/v1/licitacoes" \
-H "Authorization: Bearer $SEVENLICITE_KEY" \
--data-urlencode "q=iluminação LED" \
--data-urlencode "uf=SP" \
--data-urlencode "limit=20"Pronto para integrar?
Faça upgrade para Business e crie chaves agora.