API pública B2B

Integre relatórios de background check aos seus sistemas

A API é sempre assíncrona: você solicita uma checagem, recebe um identificador na hora e busca o relatório quando ele terminar — por consulta (polling) ou por webhook. Esta página explica o fluxo; a referência técnica completa de cada campo fica no Swagger, sempre atualizado.

1. Autenticação

Toda chamada leva um token de cobrança no header X-Billing-Token, entregue pelo nosso time na hora de fechar a integração — identifica a empresa contratante e a operação que vai consumir o crédito de cada checagem. Se sua empresa tiver mais de uma operação cadastrada, informe qual delas no header opcional X-Operacao-Codigo.

Header em toda requisição
X-Billing-Token: bgt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2. Solicitar um relatório (assíncrono)

O relatório completo consulta várias fontes com tempos de resposta bem diferentes — algumas respondem em menos de 1 segundo, outras (certidões que dependem de captcha) levam dezenas de segundos. Por isso o fluxo é sempre em duas etapas.

Passo 1 — criar a checagem

Responde na hora com 202 e um check_request_id — o processamento continua em segundo plano.

POST /v1/checks
curl -X POST 'https://bgc.xtrategyai.com.br/v1/checks' \
  -H 'X-Billing-Token: bgt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "cpf": "22009982878"
  }'

Para pessoa jurídica, envie cnpj no lugar de cpf — nunca os dois campos juntos. O relatório de PJ é solicitado da mesma forma, pelo mesmo endpoint.

POST /v1/checks — pessoa jurídica
curl -X POST 'https://bgc.xtrategyai.com.br/v1/checks' \
  -H 'X-Billing-Token: bgt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "cnpj": "05386606000120"
  }'
Resposta — 202 Accepted
{
  "check_request_id": "b3f1a2c4-...-9e21",
  "status": "pendente",
  "credits_charged": "1.00"
}

Passo 2 — buscar o resultado (polling)

Sempre responde 200. Enquanto não termina, report vem nulo — não é erro, é o estado normal de quem está aguardando. Consulte de novo em alguns segundos.

GET /v1/checks/{check_request_id}/report
curl 'https://bgc.xtrategyai.com.br/v1/checks/b3f1a2c4-...-9e21/report' \
  -H 'X-Billing-Token: bgt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Resposta — em andamento
{
  "check_request_id": "b3f1a2c4-...-9e21",
  "status": "processando",
  "report": null
}
Resposta — concluído
{
  "check_request_id": "b3f1a2c4-...-9e21",
  "status": "concluido",
  "report": {
    "verdict": "verde",
    "verdict_label": "Regular",
    "document_number": "DUE-2026-000123",
    "control_code": "A1B2C3D4",
    "pdf_url": "https://bgc.xtrategyai.com.br/v1/checks/b3f1a2c4-.../report?format=pdf",
    "source_results": [ /* ... 1 item por fonte consultada ... */ ],
    "rule_firings": [ /* ... trilha de decisão das regras ... */ ]
  }
}

Status possíveis

StatusSignificado
pendenteAceito, aguardando um worker livre para processar.
processandoFontes sendo consultadas agora.
concluidoRelatório pronto — campo report preenchido.
erroFalha inesperada no processamento — não consumiu crédito indevidamente; fale com o suporte informando o check_request_id.

3. Alternativa ao polling: webhook

Em vez de consultar repetidamente, informe callback_url ao criar a checagem — assim que ela terminar (sucesso ou erro), enviamos um POST pra essa URL com um resumo do resultado.

POST /v1/checks — com callback_url
{
  "cpf": "22009982878",
  "callback_url": "https://seusistema.exemplo.com/webhooks/background-check"
}

O corpo vem assinado no header X-Background-Signature, um HMAC-SHA256 do corpo bruto calculado com o segredo da sua empresa (entregue junto com o token de cobrança). Valide antes de confiar no conteúdo — evita que alguém forje uma notificação de "relatório pronto" pra sua URL.

Verificação (Python)
import hmac, hashlib

def valido(corpo_bruto: bytes, assinatura_recebida: str, segredo: str) -> bool:
    esperado = hmac.new(segredo.encode(), corpo_bruto, hashlib.sha256).hexdigest()
    return hmac.compare_digest(f"sha256={esperado}", assinatura_recebida)

Entrega best-effort: uma única tentativa, timeout de 10s. Se seu endpoint estiver fora do ar no momento exato, a checagem continua concluída normalmente — busque o resultado por polling nesse caso.

4. Validação pública do PDF

Todo relatório emitido traz um número de documento, um código de controle e um QR code. Quem recebe o PDF (não precisa de token) pode confirmar que ele é autêntico e não foi alterado:

GET /checks/validate (público, sem autenticação)
curl 'https://bgc.xtrategyai.com.br/checks/validate?document_number=DUE-2026-000123&control_code=A1B2C3D4'

Essa URL não muda com a versão da API — fica estável mesmo em PDFs emitidos há muito tempo, porque já está impressa no documento.

Referência técnica completa

Todo campo, todo tipo de dado e cada checagem individual — de pessoa física (situação do CPF, processos criminais e trabalhistas, pendências financeiras, mandados de prisão e mais) e de pessoa jurídica (situação do CNPJ, QSA, sanções, FGTS, CNDs estaduais e mais) — tem sua própria rota documentada no Swagger, sempre a versão exata do que está em produção.

Abrir https://bgc.xtrategyai.com.br/docs

Perguntas frequentes

Versionamos só o que é contrato de integração (criar checagem, consultar resultado, lotes). Se um dia precisarmos mudar algo de forma incompatível, /v2 nasce ao lado sem quebrar quem já integrou em /v1.

Sim, POST /v1/batches aceita um arquivo (.csv/.xlsx/.txt) ou uma lista separada por vírgula. Cada CPF do lote vira uma checagem, processada pelo mesmo mecanismo — só com prioridade menor que checagens sob demanda.

A mesma rota de polling aceita ?format=pdf quando o status já é "concluido" — devolve o arquivo direto, com o header Content-Disposition apontando o nome do arquivo.

Sim, há um limite de criação de checagens por identidade de cobrança para conter abuso — consultas de status (polling) não entram nesse limite, já que fazem parte do uso normal do fluxo assíncrono. Fale com nosso time se seu volume esperado for alto.

Fale com nosso time de vendas — entregamos um X-Billing-Token e o segredo do webhook junto com o onboarding da sua conta.