Enriquece uma empresa e devolve o resultado na própria resposta, sem webhook e sem polling.
É o mesmo enriquecimento de /b2b/companies/enrich — mesma base, mesma cascata de fornecedores, mesmo custo e mesmo formato de retorno. A única diferença é que a resposta vem no corpo em vez de chegar depois.
Quando usar: quando você não tem (ou não quer manter) um endereço público para receber webhook. Para volume, continue usando /b2b/companies/enrich/bulk, que é assíncrono por desenho.
Uma empresa por chamada. O endpoint aceita exatamente um; para vários, use o /bulk.
Custo: 1 crédito por registro, debitado na entrada e estornado automaticamente quando o registro não retorna dado — igual ao caminho assíncrono.
| HTTP | Significado | O que fazer |
|---|---|---|
200 | Concluído. O corpo traz o registro enriquecido. | Usar o resultado. |
202 | Não concluiu a tempo e segue processando. | Consultar GET /b2b/status/{id_processamento} (o header Location já traz o caminho). |
429 | Sem vaga para execução síncrona neste momento. Nenhum crédito é debitado. | Repetir depois do Retry-After (5s) ou usar o endpoint assíncrono. |
O 429 é controle de carga, não limite de plano nem de requisições: a execução síncrona mantém a conexão aberta enquanto consulta os fornecedores, então há um teto de chamadas simultâneas. Ele protege o tempo de resposta de quem já está sendo atendido. O endpoint assíncrono (POST /b2b/persons/enrich) não tem esse teto — em cargas grandes, prefira ele, que aceita até 10.000 contatos por chamada.
O 202 não é erro e não significa trabalho perdido: o crédito continua debitado, o enriquecimento continua rodando e o resultado fica disponível no status — exatamente como no caminho assíncrono. Ele acontece quando a empresa precisa da cascata completa de fornecedores, que pode levar mais tempo do que uma requisição HTTP deve ficar aberta.
Empresa que já existe enriquecida na base responde em poucos segundos.
Envie o header Idempotency-Key com um valor único por tentativa de negócio (um UUID, por exemplo). Se a chamada já tiver respondido e você repetir com a mesma chave, recebe a resposta original — mesmo corpo, mesmo status — sem ser cobrado de novo. A resposta repetida vem com o header Idempotency-Replayed: true.
A chave vale por 24 horas e é isolada por conta. Três limites que valem conhecer antes de desenhar o retry:
A chave é guardada quando a resposta sai, não quando a chamada entra. Reenviar enquanto a primeira ainda está em curso executa (e cobra) de novo. Como o servidor pode segurar a chamada por até 50 segundos, use um timeout de cliente maior que isso e, num
202, espere oRetry-Afterem vez de reenviar.A chave não é ligada ao corpo nem ao endpoint — só à sua conta. Reutilizar a mesma chave em uma chamada diferente devolve a resposta da anterior, não a nova. Gere uma chave por chamada.
Chaves são truncadas em 200 caracteres. Duas chaves que só diferem depois do caractere 200 são tratadas como a mesma.
Sem esse header, cada chamada é uma execução nova e um débito novo.
curl -X POST https://api.datastone.com.br/v1/b2b/companies/enrich/sync \
-H "Authorization: Token SUA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3d9a7f10-4c2b-4e8f-9a61-0b7c5e2d4a83" \
-d '{"cnpj": "29128179000149"}'
Chave única da tentativa, isolada por conta e válida por 24h. Repetir a chamada com a mesma chave devolve a resposta original sem cobrar de novo, desde que a primeira já tenha respondido. Acima de 200 caracteres a chave é truncada, não recusada.
Informe pelo menos um identificador. Aceita os campos direto na raiz ou dentro de contato (contact também é aceito).
Use exatamente os nomes abaixo. Um campo com nome diferente é descartado em silêncio, não recusado: {"cnpj": "...", "company_id": 123} responde 200 usando só o CNPJ, e cobra o crédito. Se o nome errado for o único identificador, a resposta é 400. Em particular, linkedin_url e company_id não são aceitos — os nomes válidos são url_linkedin e id_empresa. (cnpj se escreve igual nos dois idiomas.)
Empresa não é enriquecida por e-mail. Não há campo email aqui: se enviado, é ignorado — a chamada segue pelos outros campos, ou volta 400 se não houver nenhum.
- https://api.datastone.com.br/v1https://api.datastone.com.br/v1/b2b/companies/enrich/sync
curl -i -X POST \
https://api.datastone.com.br/v1/b2b/companies/enrich/sync \
-H 'Authorization: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 6f1c0b2e-6a1e-4a5e-9d3a-2b8f5c1d7e42' \
-d '{
"cnpj": "29128179000149"
}'{ "id_processamento": "string", "concluido": true, "status": "completed", "total_registros": 0, "sucesso": 0, "falhou": 0, "aguardou_segundos": 0, "timestamp": 0, "rota": { "enriched": 0, "already_complete": 0 }, "contatos": [ { … } ] }