---
title: 1.1. Primeiros Passos
url: https://docs.vehub.com.br/Emiss%C3%A3o%20de%20Ativos/API/Bureau/1.%20In%C3%ADcio/1.1.%20Primeiros%20Passos/
---
# 1.1. Primeiros Passos
Esta área documenta a **API Pública de Bureau**, que hoje oferece a **consulta ao SCR** — o Sistema
de Informações de Crédito do Banco Central do Brasil.
Nesta seção apresentamos as **APIs** que permitem consultar o SCR de um titular — pessoa física ou
jurídica — direto do seu sistema, via VeTrust, com o resultado devolvido **mês a mês**.
A integração tem poucas etapas: conferir se o SCR está habilitado para o seu grupo econômico,
solicitar a consulta com o aceite do titular, aguardar o processamento e ler o resultado.
!!! danger "Cada consulta pode gerar custo e o resultado é sigiloso"
Cada solicitação aceita é uma consulta nova e pode gerar custo, conforme os meses consultados com
sucesso — **inclusive em homologação**. Uma consulta encerrada como `NAO_DESPACHADA` não gera
custo. O resultado é dado pessoal sob sigilo bancário. Leia [1.2. Conceitos](1.2.%20Conceitos.md)
antes de integrar: o aceite do titular, a cobrança por mês consultado e quem pode ver cada
consulta estão descritos lá.
---
## 1.1.1 Acesso aos Serviços
Para obter acesso aos serviços, entre em contato com nosso time pelo e-mail:
**[contato@vertrau.capital](mailto:contato@vertrau.capital)**
A liberação é feita em duas partes:
1. **A credencial de integração** (`clientId` e `clientSecret`), vinculada ao seu **grupo
econômico**. Uma credencial só opera os grupos aos quais está vinculada.
2. **A habilitação do SCR no grupo econômico**, feita pelo time comercial, porque cada consulta gera
cobrança. Não há autoatendimento para habilitar o SCR.
> **A habilitação vale para o grupo inteiro.** Com o SCR habilitado, **todas** as credenciais
> vinculadas ao grupo podem solicitar consultas. Se o seu grupo usa mais de uma credencial, combine
> internamente quais sistemas podem consultar.
Para conferir o que está liberado para a sua credencial, use
[3.1. Bureaus Habilitados](../3.%20Consulta%20SCR/3.1.%20Bureaus%20Habilitados.md).
Se a habilitação do SCR for retirada do grupo, todas as rotas `/bureaus/scr` passam a responder
`403` — inclusive a leitura de consultas já feitas e já cobradas. Antes de encerrar o uso, combine
com o nosso time para que as consultas em andamento terminem e os resultados sejam lidos.
---
## 1.1.2 Autenticação
Todas as requisições exigem os seguintes headers:
| Header | Tipo | Descrição |
|--------|------|-----------|
| `Authorization` | Bearer Token | Token obtido no endpoint de login |
| `GrupoEconomico` | string | Nome do grupo econômico. **Obrigatório em todas as rotas** |
| `Idempotency-Key` | string | **Obrigatório** na solicitação de consulta (`POST /bureaus/scr/consultas`). Ver 1.1.7 |
### Obtenção do Token
```bash
curl -X POST "https://api.vehub.com.br/public/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{
"clientId": "seu-client-id",
"clientSecret": "seu-client-secret"
}'
```
#### Resposta
A resposta vem em **snake_case**, no formato do provedor de identidade:
```json
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR...",
"expires_in": 300,
"refresh_expires_in": 0,
"token_type": "Bearer"
}
```
O token expira em `expires_in` segundos. Renove-o antes do vencimento e **reaproveite o token entre
chamadas** — não solicite um token por requisição. Outros campos que venham na resposta podem ser
ignorados.
---
## 1.1.3 Ambientes
| Ambiente | URL Base |
|----------|----------|
| Homologação (Sandbox) | `https://api.dev.vehub.com.br/public/v1` |
| Produção | `https://api.vehub.com.br/public/v1` |
Nas tabelas de endpoint mostramos apenas o **caminho** (ex.: `/bureaus/scr/consultas`), que deve ser
concatenado à URL base do ambiente. Os exemplos de cURL trazem a URL completa.
!!! danger "Homologação consulta o SCR real e tem custo"
Não existe SCR simulado. Uma consulta aceita em homologação vai ao provedor do SCR como em
produção e **é cobrada nas mesmas condições**. Use em homologação apenas os documentos
combinados com o nosso time e não automatize testes que solicitem consultas em laço.
**Ler o resultado não custa:** as consultas por `GET` podem ser repetidas à vontade.
---
## 1.1.4 Padrões de Resposta
| Padrão | Formato | Exemplo |
|--------|---------|---------|
| Mês (período do SCR) | `yyyy-MM` | `2026-04` |
| Data e hora devolvida pela API | ISO 8601 em UTC, com `Z` | `2026-10-23T13:00:41.512345Z` |
| Data e hora informada por você | ISO 8601 **com fuso** (`Z` ou `±hh:mm`) | `2026-10-23T09:58:00-03:00` |
| Valores monetários | `number` sem separador de milhar | `15234.56` |
| Percentuais | `number` — `98.5` significa 98,5% | `98.5` |
| Status e enumerados | objeto `{ id, nome }` | `{ "id": 3, "nome": "Concluída" }` |
| Documento | só dígitos e letras, sem pontuação | `12345678900` |
| Atributos | `camelCase` em português | `mesInicial`, `dataAceiteTitular` |
As datas e horas devolvidas podem ter frações de segundo, de até 6 casas
(`2026-10-23T13:00:41.512345Z`), ou nenhuma (`2026-10-23T12:58:00Z`). Leia-as com um *parser*
ISO 8601, não com um formato fixo.
### Respostas de sucesso
As respostas de sucesso trazem o **próprio recurso**, sem envelope: a solicitação devolve os dados da
consulta criada, a leitura devolve a consulta e a listagem devolve o envelope de listagem abaixo.
### Envelope de listagem
Toda listagem é paginada e aceita `pagina` (a partir de `1`) e `quantidade` (de `1` a **100**,
padrão `10`):
```json
{
"registros": [ ],
"paginacao": {
"paginaAtual": 1,
"paginaTotal": 3,
"paginaQuantidadeRegistro": 10,
"quantidadeRegistros": 27,
"temPaginaAnterior": false,
"temProximaPagina": true
},
"mensagem": null
}
```
| Campo | Descrição |
|-------|-----------|
| paginacao.paginaAtual | Página devolvida |
| paginacao.paginaTotal | Total de páginas com a `quantidade` pedida |
| paginacao.paginaQuantidadeRegistro | Registros por página (a `quantidade` pedida) |
| paginacao.quantidadeRegistros | Total de registros que atendem aos filtros |
| paginacao.temPaginaAnterior / temProximaPagina | Se há página antes e depois desta |
Uma página além da última responde `200` com `registros` vazio.
---
## 1.1.5 Estrutura de Erros
Todas as respostas de erro seguem o padrão abaixo. Quando o erro é de validação de campo, cada item
de `errors` identifica **qual** campo foi recusado:
```json
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"status": 400,
"errors": [
{ "campo": "mesFinal", "mensagem": "O mês final não pode ser posterior ao mês corrente (2026-10)." }
]
}
```
| Campo | Descrição |
|-------|-----------|
| `type` | URI do tipo de problema (RFC 9110) |
| `status` | Código HTTP do erro |
| `errors` | Lista de erros; `campo` é nulo quando o erro não se refere a um campo específico |
As mensagens de erro **nunca repetem o documento do titular** — um documento recusado aparece como
"CPF inválido", sem o CPF.
### Códigos utilizados
| Código | Quando ocorre |
|--------|---------------|
| `200` | Sucesso nas consultas (`GET`) — inclusive quando a consulta ao SCR terminou em falha |
| `202` | Consulta aceita e em processamento — ver [1.3. Operações Assíncronas](1.3.%20Operações%20Assíncronas.md) |
| `400` | Corpo, parâmetro ou header inválido; regra de validação de campo |
| `401` | Token ausente, expirado ou inválido; header `GrupoEconomico` ausente |
| `403` | Credencial sem vínculo com o grupo, SCR não habilitado no grupo ou solicitação temporariamente suspensa |
| `404` | Consulta não encontrada para a sua credencial |
| `409` | A primeira execução com a mesma `Idempotency-Key` ainda está em processamento (ver 1.1.7) |
| `415` | `Content-Type` diferente de `application/json` no corpo |
| `422` | `Idempotency-Key` reutilizada com um corpo diferente (ver 1.1.7) |
| `500` | Erro interno. Ver 1.1.7 para saber se a consulta foi registrada |
### Os `403` desta área
| Situação | Mensagem em `errors[0].mensagem` |
|---|---|
| A credencial não está vinculada ao grupo informado em `GrupoEconomico` | `A credencial {clientId} não está habilitada para o grupo econômico {grupoEconomico}.` |
| O SCR não está habilitado para o grupo econômico | `O Bureau/Consulta SCR não está habilitado para este grupo econômico.` |
| A solicitação de novas consultas está temporariamente suspensa (só no `POST`) | `A solicitação de novas consultas SCR está temporariamente indisponível. As consultas já solicitadas continuam disponíveis para leitura.` |
Para separar os três casos, chame [3.1. Bureaus Habilitados](../3.%20Consulta%20SCR/3.1.%20Bureaus%20Habilitados.md):
- se ela também responder `403`, o problema é o **vínculo da credencial**;
- se responder `200` sem o SCR na lista, falta a **habilitação do grupo**;
- se responder `200` com o SCR na lista e só o `POST` responder `403`, é a **suspensão temporária**.
Nos dois primeiros casos, fale com o nosso time. Na suspensão temporária, as leituras (`GET`)
continuam funcionando: os resultados já obtidos seguem disponíveis. Aguarde e tente de novo mais
tarde.
### Os `401` desta área
| Situação | Mensagem em `errors[0].mensagem` |
|---|---|
| Requisição sem o header `Authorization` | `Token JWT não foi informado. Por favor, forneça um token válido.` |
| Requisição sem o header `GrupoEconomico` | `Header GrupoEconomico não informado. Por favor, forneça um Grupo Econômico válido.` |
Token expirado ou inválido também responde `401`: obtenha um token novo em
[1.1.2 Autenticação](#112-autenticacao). No `GrupoEconomico`, informe o nome do grupo exatamente
como foi entregue pelo nosso time.
---
## 1.1.6 Limites de Uso
Hoje a API **não aplica limite diário de consultas por credencial**. Cada consulta aceita pode gerar
custo: controle no seu sistema quantas solicitações são feitas e não as automatize em laço.
As leituras (`GET`) não têm custo, mas não faça *polling* agressivo: siga o ritmo sugerido em
[1.3. Operações Assíncronas](1.3.%20Operações%20Assíncronas.md).
---
## 1.1.7 Idempotência
Na solicitação de consulta (`POST /bureaus/scr/consultas`) o header `Idempotency-Key` é
**obrigatório**, com um identificador único gerado por você (recomendamos UUID v4):
```http
Idempotency-Key: 8f14e45f-ea4f-4e2c-9c3e-9b1a72d0c5f1
```
Como cada consulta pode gerar custo, a chave é o que impede que um *timeout* de rede seguido de
*retry* gere **uma segunda consulta e um segundo custo**. A regra é simples:
- **uma chave por consulta**, gerada **antes** da primeira tentativa;
- em toda repetição daquela consulta, **a mesma chave e o mesmo corpo**.
### Desfechos de uma chamada com `Idempotency-Key`
A chave vale **por credencial e por grupo econômico**: a mesma chave usada por outra credencial do seu
grupo, ou pela mesma credencial em outro grupo, é uma operação diferente.
| Situação | Resposta | O que fazer |
|---|---|---|
| Requisição sem o header | `400`, antes de qualquer execução | Envie a chave |
| Chave com mais de **200 caracteres** | `400`, antes de qualquer execução | Corrija a chave (recomendamos UUID v4) |
| Primeira chamada com a chave | A consulta é registrada: `202` | Guarde o `idConsulta` |
| Mesma chave e mesmo corpo, primeira execução **concluída com sucesso** | A resposta da primeira execução, sem consultar de novo, com o header `Idempotent-Replay: true` | Use o `idConsulta` devolvido |
| Mesma chave depois de **24 horas** | Tratada como chave nova: a consulta é registrada de novo (`202`), com custo novo | Procure antes a consulta pela `referenciaExterna` em [3.4. Listar Consultas](../3.%20Consulta%20SCR/3.4.%20Listar%20Consultas.md) |
| Mesma chave e mesmo corpo, primeira execução **ainda em processamento** | `409` | Aguarde e repita **com a mesma chave**. Se o `409` persistir por mais de **10 minutos**, procure antes a consulta pela `referenciaExterna` em [3.4. Listar Consultas](../3.%20Consulta%20SCR/3.4.%20Listar%20Consultas.md) |
| Mesma chave com um **corpo diferente** | `422` | Não repita: a chave pertence a outra consulta. Use uma chave nova |
| A API não conseguiu registrar a chave | `500`: **nada foi executado** | Repita com a mesma chave |
Nos erros `400`, `409` e `422` de chave, o primeiro item de `errors` traz `campo` igual a
`Idempotency-Key`:
```json
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.21",
"status": 422,
"errors": [
{ "campo": "Idempotency-Key", "mensagem": "Esta chave de idempotência já foi usada nesta rota com um corpo diferente. Use uma chave nova para uma operação nova." }
]
}
```
A resposta de uma execução concluída fica memorizada por **24 horas**. **A repetição devolve a
resposta original** — com o status `Pendente` do momento da criação. Para saber o status atual, use o
`GET` da consulta. Depois das 24 horas, a mesma chave é tratada como uma chave nova: a repetição
cria uma consulta nova, com custo novo.
Só respostas de sucesso são memorizadas: uma chamada que falhou libera a chave, e a repetição com a
mesma chave executa de novo. Enquanto a primeira execução corre, a chave fica reservada por até
**10 minutos**. Passado esse prazo, a reserva vence e uma repetição pode executar de novo — por isso
um `409` que persiste por mais de 10 minutos deve ser conferido pela `referenciaExterna` antes de
repetir.
!!! warning "Chave nova depois de um *timeout* = consulta nova e custo novo"
Se você perdeu a resposta e não guardou a chave, **não gere uma chave nova de imediato**.
Procure antes a consulta pela sua `referenciaExterna` em
[3.4. Listar Consultas](../3.%20Consulta%20SCR/3.4.%20Listar%20Consultas.md). Só crie uma consulta
nova se ela não estiver lá.
Um `500` depois de a consulta ser registrada pode deixar uma consulta que nunca foi enviada ao
provedor do SCR. Ela termina sozinha em `Falha`, com o motivo `NAO_DESPACHADA` e **sem custo** —
ver [1.3. Operações Assíncronas](1.3.%20Operações%20Assíncronas.md).
---
## 1.1.8 Fluxo Geral da Integração
```mermaid
flowchart TD
A[Autenticar] --> B[Conferir bureaus habilitados]
B --> C{SCR na lista?}
C -- Não --> Z[Falar com o nosso time]
C -- Sim --> D[Coletar o aceite do titular]
D --> E[Solicitar a consulta
com Idempotency-Key]
E --> F[202: guardar idConsulta]
F --> G{Webhook recebido?}
G -- Sim --> H[Ler a consulta]
G -- Não --> I[Polling na consulta]
I --> H
H --> J{Status}
J -- Pendente ou Processando --> I
J -- Concluída --> K[Ler os períodos
e tratar meses em Falha]
J -- Falha --> L[Ler motivoFalha
e decidir se refaz]
```
O passo a passo com os comandos está em
[5.1. Roteiro - Consulta SCR ponta a ponta](../5.%20Roteiros/5.1.%20Roteiro%20-%20Consulta%20SCR%20ponta%20a%20ponta.md).