# Introdução Erros são irritantes - nós sabemos. É por isso que temos artigos dedicados para cada erro em nosso DevPortal para ajudá-lo a resolvê-los. Dê uma olhada no erro abaixo ou simplesmente procure o código de erro que você está encontrando para ir direto às causas e soluções. ## Códigos de Resposta Usamos o seguinte código de status HTTP na resposta, dependendo do sucesso ou falha: | Código de Status | Descrição | | --- | --- | | `200` | ✅ **Sucesso** - O conteúdo está disponível no corpo da resposta. | | `201` | ✅ **Sucesso** - O conteúdo foi criado com sucesso no Belvo. | | `204` | ✅ **Sucesso** - Nenhum conteúdo para retornar. | | `400` | ❌ **Erro de Solicitação Inválida** - A solicitação retornou um erro, detalhe no conteúdo. | | `401` | ❌ **Não Autorizado** - As credenciais do Belvo fornecidas não são válidas. | | `403` | ❌ **Proibido** - Você não tem as permissões necessárias para realizar esta ação. | | `404` | ❌ **Não Encontrado** - O recurso que você tentou acessar não pode ser encontrado. | | `405` | ❌ **Método Não Permitido** - O método HTTP que você está usando não é aceito para este recurso. | | `408` | ❌ **Tempo de Solicitação Esgotado** - A solicitação expirou e foi encerrada pelo servidor. | | `409` | ❌ **Conflito** - A solicitação não pôde ser concluída devido a um conflito com o estado atual do recurso. | | `428` | ❌ **Token MFA Necessário** - O token MFA foi exigido pela instituição para conectar. | | `500` | ❌ **Erro Interno do Servidor** - O detalhe do erro está disponível no corpo da resposta. | Os erros da API do Belvo são retornados no formato JSON. Por exemplo, um erro pode ser assim: ```json Exemplo de um erro 400 de Solicitação Inválida [ { "request_id": "a6e1c493d7a29d91aed4338e6fcf077d", "message": "Este campo é obrigatório.", "code": "required", "field": "link" } ] ``` Normalmente, uma resposta de erro terá os seguintes parâmetros: - `request_id`: um ID único para a solicitação, você deve compartilhá-lo com a equipe de suporte do Belvo para investigações. - `message`: descrição do erro em linguagem humana. - `code`: um código único para o erro. Verifique a tabela abaixo para ver como lidar com cada código de erro. - `field` *(opcional)*: O campo específico no corpo da solicitação que tem um problema. ## Notas gerais sobre tratamento de erros Aqui está nossa recomendação em termos de nova tentativa em caso de erros: ### Erros 50x Implemente uma retentativa automática com backoff exponencial de até cinco tentativas. Recomendamos que você use um intervalo base de três segundos com um fator de dois. Por exemplo, a primeira tentativa de retentativa deve ser após três segundos, a segunda tentativa de retentativa é após 6 segundos (2*3), a terceira tentativa de retentativa é após 12 segundos (2*6), a quarta tentativa de retentativa é após 24 segundos (2*12), e a quinta tentativa de retentativa é após 48 segundos (2*24). ### Erros 40x Você não deve tentar novamente fazer solicitações se receber uma resposta 40x, pois isso é um erro do cliente. A única exceção é o erro "Too Many Sessions", pois isso significa que seu usuário final está acessando a conta de outro navegador ao mesmo tempo. Nesse caso, implemente a mesma política de repetição que com erros 50x. Armazene o request_id Ao implementar sua integração com a Belvo, certifique-se de considerar o armazenamento do `request_id` quando você receber um erro. Dessa forma, quando você fornecer o ID aos nossos engenheiros, eles poderão solucionar o problema rapidamente e fazer com que você volte a funcionar. ## 400 activation_failed | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Institution | Não* | | Enrichment | Institution | Não* | | Payment Initiation | N/A | N/A | * Este erro normalmente não é exibido no widget. No entanto, há exceções em que ele é refletido no widget para algumas instituições, como o BBVA no México. Entre em contato conosco em support@belvo.com se tiver alguma dúvida. ```json Activation Failed Example [ { "code": "activation_failed", "message": "The credentials provided were not accepted by the institution.", "request_id": "3e7b283c6efa449c9c028a16b5c249gg" } ] ``` **Causa** Este erro ocorre quando a Belvo não conseguiu ativar automaticamente o acesso ao internet banking para o usuário devido a informações ausentes (por exemplo, o 🇲🇽 CVV ou 🇲🇽 NIP estavam ausentes ou foram fornecidos incorretamente). **Solução** Peça ao usuário para primeiro ativar o acesso ao internet banking (seja entrando em contato diretamente com o banco ou tentando fazer login na conta de internet banking) e, em seguida, peça para conectar a conta novamente. ## 400 already_exists | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | N/A | N/A | | Enrichment | N/A | N/A | | Payment Initiation | Request | Não | ```json Already Exists Example [ { "field": "details", "request_id": "a0c3b0e58e58409d9b1d49de9be35a3d", "pix_key": { "value": { "message": "This `pix_key__value` already exists. It is linked to BankAccount: d5c8cb5f-7845-4a23-a1fa-76c7ae7e5e36", "code": "already_exists" } } } ] ``` **Causa** Você está tentando registrar uma conta bancária fornecendo um valor que já está vinculado a uma conta bancária registrada no Belvo. Isso pode incluir: - O identificador da chave PIX da conta bancária - O número da conta bancária ```json Bank Account Error Example { "institution": "f512d996-583a-4a91-8b5b-eba2e103b068", "holder": { "type": "BUSINESS", "information": { "identifier_type": "CNPJ", "name": "Caetano Veloso Entertainment Universe", "identifier": "231.002.990-00" } }, "details": { "country": "BRA", "account_type": "CHECKINGS", "agency": "0444", "number": "45722-01" // Número da conta já registrado no Belvo. } } ``` **Solução** Faça uma solicitação para obter todas as contas bancárias para receber uma lista de todas as contas bancárias que você registrou, filtrando os resultados pelos últimos quatro dígitos da conta bancária para obter os detalhes. ## 400 em branco | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | | Payment Initiation | Request | Não | ```json Exemplo de Erro em Branco [ { "field": "institution", "request_id": "b9abda13c9afbbc64a265c6d4f937d06", "message": "Este campo não pode estar em branco.", "code": "null" } ] ``` **Causa** Você enviou uma solicitação com uma string vazia para um campo obrigatório. Por exemplo: ```json Exemplo de Solicitação com Campo em Branco { "institution": "", // Este campo é obrigatório e não pode ser uma string vazia. "username": "bnk100", "password": "full", } ``` **Solução** - Verifique a mensagem de erro para ver qual campo você precisa fornecer. Se você não tiver certeza de qual informação fornecer ou o formato, basta verificar nossa documentação de referência da API. ## 400 cancellation_error | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Iniciação de Pagamento | Solicitação | Não | Exemplo de Erro de Payment Intent Não Agendado ```json [ { "request_id": "b9abda13c9afbbc64a265c6d4f937d06", "message": "Payment Intent cannot be canceled because it is not SCHEDULED", "code": "cancellation_error" } ] ``` Exemplo de Erro de Tempo Limite de Payment Intent Ultrapassado ```json [ { "request_id": "b9abda13c9afbbc64a265c6d4f937d06", "message": "Payment Intent cannot be canceled as the cutoff time (23:59:00) has passed.", "code": "cancellation_error" } ] ``` **Causa** Este erro pode ocorrer quando: - Você tentou cancelar uma payment intent que não estava agendada. - Você enviou sua solicitação de cancelamento após o horário limite de 23:59:00 (GMT-3) do dia anterior à data de liquidação agendada. ## 400 does_not_exist | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | ```json Does Not Exist Example [ { "field": "institution", "request_id": "744da6621cb09b3cbb8271d89fe09060", "message": "Object with name=narnia does not exist.", "code": "does_not_exist" } ] ``` **Causa** Você enviou uma solicitação onde forneceu um valor que não existe no banco de dados da Belvo. Por exemplo: ```json Request with Non-Existent Institution Example { "institution": "narnia", // Esta instituição não existe no banco de dados da Belvo. "username": "bnk100", "password": "full" } ``` **Solução** Verifique a mensagem de erro para ver em qual campo você forneceu um valor incorreto. Então: - Certifique-se de que não cometeu nenhum erro de digitação. - Verifique se o valor que você está fornecendo deve estar presente em nosso banco de dados (por exemplo, se você fizer uma solicitação para um link que ainda não foi registrado, você receberá um erro). ## 400 duplicado | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregação | Solicitação | Sim | | Enriquecimento | Solicitação | Não | ```json Exemplo de Link Duplicado [ { "request_id": "744da6621cb09b3cbb8271d89fe09060", "message": "Link já existe", "code": "duplicated", "institution_user_id": "4jlgn6vL7yifxMlhwFwTjbbzYxYoEEkJqK_CJhhZetI=" } ] ``` **Causa** Este erro pode ocorrer quando: - Você tentou criar um link que já foi associado à sua conta. - Seu usuário tentou criar um link com uma conta que já conectou. **Solução** Você pode: - Consultar seu banco de dados para encontrar o `institution_user_id` e verificar se o link associado `id` ainda é válido usando a solicitação Obter detalhes de um link. Se o `status` não for `valid`, então solicite ao seu usuário que atualize suas credenciais usando o widget da Belvo no modo de atualização. - Consultar seu banco de dados para encontrar o `institution_user_id` e usar o `id` do link associado para deletar o link do banco de dados da Belvo usando a solicitação Deletar um link. Depois de deletar o link, você pode pedir ao seu usuário para conectar a conta novamente. ## 400 null | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | ```json Null Field Example [ { "field": "institution", "request_id": "b9abda13c9afbbc64a265c6d4f937d06", "message": "This field may not be null.", "code": "null" } ] ``` **Causa** Você fez uma solicitação sem fornecer dados em um campo obrigatório. Por exemplo: ```json Null Field Request Example { "institution": , // Este campo é obrigatório. "username": "bnk100", "password": "full", } ``` **Solução** Verifique a mensagem de erro para ver qual campo você precisa fornecer. Se você não tiver certeza de qual informação fornecer ou o formato, basta verificar nossa documentação de referência da API. ## 400 required | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | | Payment Initiation | Request | Não | ```json Required Field Example [ { "field": "username", "request_id": "b9abda13c9afbbc64a265c6d4f937d06", "message": "This field is required.", "code": "required" } ] ``` **Causa** Você enviou uma solicitação sem um campo obrigatório. Por exemplo: ```json Required Field Request Example { "institution": "erebor_mx_retails", "password": "full" // Quando você está registrando um novo link, deve fornecer um username. } ``` **Solução** - Verifique a mensagem de erro para ver qual campo você precisa fornecer. Se você não tiver certeza de qual informação fornecer ou o formato, basta verificar nossa documentação de referência da API. ## 400 institution_down | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Institution | Sim | | Enrichment | Institution | Sim | | Payment Initiation | N/A | N/A | ```json Institution Down Example [ { "code": "institution_down", "message": "The financial institution is down, try again later", "request_id": "3e7b283c6efa449c9c028a16b5c249fd" } ] ``` **Causa** Este erro ocorre quando o site da instituição que você está tentando acessar está fora do ar devido a manutenção ou outros problemas, o que significa que a Belvo não consegue criar novos links ou recuperar novos dados. **Solução** Você pode tentar acessar a instituição novamente mais tarde. Certifique-se de assinar nossa Página de Status das Instituições para saber assim que uma instituição estiver indisponível. Você pode remover uma instituição que atualmente não está disponível usando o parâmetro `institutions` na configuração de inicialização e omitindo a instituição da lista. **Mensagem de erro do widget** | Idioma | Título do erro | Descrição do erro | | --- | --- | --- | | 🇬🇧 Inglês | Something went wrong | The institution you tried to access is temporarily unavailable. Please come back in a bit and we will be able to process your request | | 🇧🇷 Português | Ocorreu um erro | Esta instituição está temporariamente inacessível. Tente novamente mais tarde e poderemos processar sua solicitação | | 🇪🇸 Espanhol | Ha habido un error | Esta institución está temporalmente inaccesible. Por favor, inténtalo de nuevo más tarde y podremos procesar tu petición | ## 400 institution_inactive | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Institution | Sim | | Enrichment | Institution | Sim | | Payment Initiation | N/A | N/A | ```json Institution Inactive Example [ { "code": "institution_inactive", "message": "The institution has been temporarily deactivated", "request_id": "3e7b283c6efa449c9c028a16b5c249fd" } ] ``` **Causa** Este erro ocorre quando nós (Belvo) desativamos a instituição em nossa API. **Solução** Você pode tentar novamente mais tarde, assim que a Belvo reativar a instituição. ## 400 institution_unavailable | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Institution | Sim | | Enrichment | Institution | Sim | | Payment Initiation | N/A | N/A | ```json Institution Unavailable Example [ { "code": "institution_unavailable", "message": "The financial institution is unavailable", "request_id": "3e7b283c6efa449c9c028a16b5c249fd" } ] ``` **Causa** Este erro ocorre quando o site da instituição que você está tentando acessar está fora do ar devido a manutenção ou outros problemas, o que significa que a Belvo não consegue criar novos links ou recuperar novos dados. **Solução** Você pode tentar acessar a instituição novamente mais tarde. Certifique-se de assinar nossa Página de Status das Instituições para saber assim que uma instituição estiver indisponível. Você pode remover uma instituição que atualmente não está disponível usando o parâmetro `institutions` na configuração de inicialização e omitindo a instituição da lista. **Mensagem de erro do widget** | Idioma | Título do erro | Descrição do erro | | --- | --- | --- | | 🇬🇧 Inglês | Something went wrong | The institution you tried to access is temporarily unavailable. Please come back in a bit and we will be able to process your request. | | 🇧🇷 Português | Ocorreu um erro | O serviço está temporariamente inacessível. Tente novamente mais tarde e poderemos processar sua solicitação | | 🇪🇸 Espanhol | Ha habido un error | Esta institución está temporalmente inaccesible. Por favor, inténtalo de nuevo más tarde y podremos procesar tu petición | ## 400 inválido | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Agregação | Requisição | Não | | Enriquecimento | Requisição | Não | | Iniciação de Pagamento | Requisição | Não | Exemplo de Formato de Data Incorreto ```json Exemplo de Formato de Data Incorreto [ { "field": "date_to", "request_id": "a7ad9a4ad8b13f8f800f8f5b69c7856f", "message": "Date has wrong format. Use one of these formats instead: YYYY-MM-DD.", "code": "invalid" } ] ``` Exemplo de Formato de UUID Incorreto ```json Exemplo de Formato de UUID Incorreto [ { "field": "link", "request_id": "448f2b58fc88b2c5a9db6c9175494950", "message": "YTZjMDA3YjktZTk5Yy00MDczLTgzNGItOGM3NzA1MTMyZGU3 is not a valid UUID.", "code": "invalid" } ] ``` Exemplo de Recursos de Busca Incorretos ```json Exemplo de Recursos de Busca Incorretos [ { "field": "resources", "request_id": "a7ad9a4ad8b13f8f800f8f5b69c7856f", "message": "The institution only supports the following resources: {1}, {2}", "code": "invalid" } ] ``` **Causa** Você enviou uma requisição onde forneceu um valor em um formato inválido. Isso pode incluir: - O formato das credenciais de login está incorreto. - O formato da data está incorreto. - O UUID não é válido. - O terminal_id não é válido. - O form_id não é válido. - Os recursos que você incluiu em `fetch_resources` não são suportados pela instituição. Por exemplo: Exemplo de Requisição com Formato de Data Incorreto ```json Exemplo de Formato de Data Incorreto { "link": "a6c007b9-e99c-4073-834b-8c7705132de7", "date_from": "2020-01-01", "date_to": "2020-02" // Aqui, o formato da data deve ser YYYY-MM-DD } ``` Exemplo de Requisição com Formato de UUID Incorreto ```json Exemplo de Formato de UUID Incorreto { "link": "a6c007b9-e99c" // Aqui, o ID do link não é um UUID válido. } ``` **Solução** Verifique a mensagem de erro para ver qual campo é inválido e por quê. Então, se precisar de mais informações, consulte nossa documentação da API para saber qual é o formato válido para o campo. ## 400 invalid_choice | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregação | Solicitação | Não | | Enriquecimento | Solicitação | Não | ```json Invalid Choice Example [ { "field": "access_mode", "request_id": "ce49b6af6710bb0c7a2a456c223dde21", "message": "\"Dominik\" is not a valid choice.", "code": "invalid_choice" } ] ``` **Causa** Você fez uma solicitação onde em um dos campos você forneceu um valor que não era válido (por exemplo, pode aceitar apenas certas strings, assim como um enum). Por exemplo: ```json Invalid Choice Request Example { "institution": "erebor_mx_retail", "username": "bnk100", "password": "full", "access_mode": "Australia" // Este não é um valor válido, conforme a documentação afirma que é um enum: single ou recurrent } ``` **Solução** - Verifique a mensagem de erro para ver em qual campo você forneceu um valor incorreto. Em seguida, consulte nossa documentação para ver qual valor você deve fornecer para este campo. ## 400 invalid_credentials_storage | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | ```json Exemplo de Armazenamento de Credenciais Inválido [ { "request_id": "ce49b6af6710bb0c7a2a456c223dde21", "message": "Recurrent links must store the credentials", "code": "invalid_credentials_storage" } ] ``` **Causa** Você fez uma solicitação onde para um link recorrente você definiu o parâmetro `credentials_storage` como `nostore` ou para um intervalo de datas entre `1d` a `365d`. ```json Exemplo de Solicitação de Armazenamento de Credenciais Inválido { "institution": "tatooine_mx_fiscal", "username": "PFIS010101000", "password": "individual", "access_mode": "recurrent", "credentials_storage": "nostore" // Para links recorrentes, isso deve ser definido como store } ``` **Solução** - Se você deseja criar um link recorrente, altere o valor de `credentials_storage` para `store`. - Se você deseja criar um link único e não armazenar credenciais, altere o `access_mode` para `single`. ## 400 invalid_fetch_resources | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | ```json Exemplo de Recursos de Busca Inválidos [ { "request_id": "ce49b6af6710bb0c7a2a456c223dde21", "message": "Single links without stored credentials must fetch resources", "code": "invalid_fetch_resources" } ] ``` **Causa** Você tentou criar um link onde definiu o parâmetro `credentials_storage` como `nostore` e não passou nenhum recurso no parâmetro `fetch_resources`. Para links onde não armazenamos credenciais, você deve passar pelo menos um recurso em `fetch_resources`. ```json Exemplo de Solicitação de Recursos de Busca Inválidos { "institution": "tatooine_mx_fiscal", "username": "PFIS010101000", "password": "individual", "access_mode": "recurrent", "credentials_storage": "nostore", "fetch_resources": [] } ``` **Solução** Liste os recursos que você deseja recuperar no parâmetro `fetch_resources`. Por exemplo: `"fetch_resources": ["ACCOUNTS", "OWNERS", "TRANSACTIONS"]`. ## 400 invalid_link | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Link | Não | | Enrichment | Link | Não | | Payment Initiation | N/A | N/A | ```json Exemplo de Link Inválido [ { "code": "invalid_link", "message": "The link has been invalidated. You may need to update link credentials", "request_id": "9b7b283c6efa449c9c028a16b5c249fd" } ] ``` **Causa** Este erro ocorre quando você tenta acessar uma conta, mas as credenciais do usuário não são mais válidas, resultando em um erro da instituição. O status de um Link muda de `valid` para `invalid` após seis solicitações POST malsucedidas **Solução** Peça ao seu usuário para fornecer suas credenciais atualizadas. Para facilitar, recomendamos fortemente que você use nosso Widget em Modo de Atualização. ## 400 invalid_period | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | Belvo | Não | | Payment Initiation | N/A | N/A | ```json Exemplo de Período Inválido [ { "message": "The number of days between date_from and date_to must be at least 90 days", "code": "invalid_period", "request_id": "a66a4fdae4ab8cfc1ed9ee9246aa6890" } ] ``` **Causa** Este erro ocorre quando você solicita rendimentos para um link dentro de um determinado intervalo de datas, no entanto, o período entre `date_from` e `date_to` é inferior a 90 dias. **Solução** Certifique-se de que o período entre `date_from` e `date_to` seja igual ou superior a 90 dias. ## 400 login_error Estamos atualmente refinando nossas mensagens de `login_error` para fornecer maior granularidade e melhorar a resolução de problemas. | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Link | Sim | | Enrichment | Link | Sim | ```json Exemplo de Erro de Login [ { "code": "login_error", "message": "Invalid credentials provided to login to the institution.", "request_id": "3e7b283c6efa449c9c028a16b5c249fd" } ] ``` **Causa** Este erro pode ocorrer quando: - as credenciais que seu usuário fornece estão incorretas ou ausentes. - o token MFA que seu usuário fornece não é suportado pelo Belvo. - há um problema com a instituição que impede logins. - a conta do usuário está bloqueada ou o usuário não tem permissão para acessar seu internet banking. Abaixo está uma lista de possíveis mensagens de erro que você pode receber: - Invalid credentials provided to login to the institution. - A MFA token is required by the institution, but it’s not supported yet by Belvo. - Impossible to login, something unexpected happened while logging into the institution. Try again later. - Login not attempted due to invalid credentials. - Missing credentials to login to the institution. - The user account access was forbidden by the institution. - The user account is locked, user needs to contact the institution to unlock it. **Solução** - Peça ao seu usuário para fornecer suas credenciais corretas ou token MFA. Use nosso widget para tornar isso ainda mais fácil (nós fazemos todo o trabalho pesado para você). - Peça ao seu usuário para confirmar com seu banco se a conta está ativa e não está bloqueada. - Se houver um problema com a instituição, tente fazer login em um momento posterior. ## 400 max_digits | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | N/A | N/A | | Enrichment | N/A | N/A | | Payment Initiation | Request | Não | ```json Wrong Amount Format Example [ { "field": "amount", "request_id": "a0c3b0e58e58409d9b1d49de9be35a3d", "message": "Ensure that there are no more than 12 digits in total.", "code": "max_digits" } ] ``` **Causa** Você enviou uma solicitação com o formato de quantia incorreto. **Solução** Verifique a mensagem de erro para ver por que o formato da quantia é inválido. Se você não tiver certeza de quais informações fornecer ou o formato, basta verificar nossa documentação de referência da API para saber qual é o formato válido para o campo. ## 400 max_decimal_places | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | N/A | N/A | | Enrichment | N/A | N/A | | Payment Initiation | Request | Não | ```json Exemplo de Casas Decimais em Excesso [ { "field": "amount", "request_id": "a0c3b0e58e58409d9b1d49de9be35a3d", "message": "Ensure that there are no more than 2 decimal places.", "code": "max_decimal_places" } ] ``` **Causa** Você enviou uma solicitação com o formato de quantia incorreto (muitas casas decimais). **Solução** Verifique a mensagem de erro para ver por que o formato da quantia é inválido. Se você não tiver certeza de quais informações fornecer ou o formato, basta verificar nossa documentação de referência da API para saber qual é o formato válido para o campo. ## 400 min_value | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | N/A | N/A | | Enrichment | N/A | N/A | | Payment Initiation | Request | Não | ```json Exemplo de Valor Mínimo [ { "field": "amount", "request_id": "a0c3b0e58e58409d9b1d49de9be35a3d", "message": "Ensure this value is greater than or equal to 0.01.", "code": "min_value" } ] ``` **Causa** Você enviou uma solicitação com o formato de valor incorreto (o valor é menor que o valor mínimo permitido). **Solução** Verifique a mensagem de erro para ver por que o formato do valor é inválido. Se você não tem certeza de quais informações fornecer ou o formato, basta verificar nossa documentação de referência da API para saber qual é o formato válido para o campo. ## 400 not_a_list | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | | Payment Initiation | Request | Não | ```json Not a List Example [ { "message": "Expected a list but got type \"str\".", "code": "not_a_list", "request_id": "d5af76cc66e0231e2be7f7be5c41170a" } ] ``` **Causa** Você enviou uma solicitação onde, em vez de enviar um array de dados, você enviou apenas uma lista. Por exemplo: Exemplo Incorreto ```json Exemplo Incorreto { "fetch_resources": "ACCOUNTS,OWNERS" // Aqui, fetch_resources deve ser um array de valores } ``` Exemplo Correto ```json Exemplo Correto { "fetch_resources": ["ACCOUNTS", "OWNERS"] } ``` **Solução** Verifique sua solicitação JSON e consulte nossa documentação para ver qual campo deve ser um array. ## 400 parse_error | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | | Payment Initiation | Request | Não | ```json Exemplo de Erro de Análise [ { "message": "JSON parse error - Expecting property name enclosed in double quotes: line 3 column 1 (char 54)", "code": "parse_error", "request_id": "d5af76cc66e0231e2be7f7be5c41170a" } ] ``` **Causa** Você enviou uma solicitação com JSON inválido. Por exemplo: ```json Exemplo de Solicitação com Erro de Análise { "link": "a6c007b9-e99c-4073-834b-8c7705132de7", // Aqui, o JSON não é válido porque tem uma vírgula no final } ``` **Solução** Verifique o payload JSON (talvez você esteja apenas esquecendo uma vírgula ou aspas) e tente novamente. ## 400 session_expired | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Sim | | Enrichment | Request | Sim | ```json Session Expired Example [ { "code": "session_expired", "message": "The session you are trying to resume has expired, please start again from register/retrieve endpoint", "request_id": "6e7b283c6efa449c9c028a16b5c249fa" } ] ``` **Causa** Este erro ocorre quando você tenta retomar uma sessão de solicitação que já expirou. Isso geralmente acontece porque o usuário demorou muito para fornecer seu token de autenticação. > Para solicitações que exigem um token, há um período de tempo em que o usuário pode fornecer seu token. O período varia de instituição para instituição. Você pode verificar quanto tempo o usuário tem para inserir seu token usando o parâmetro `expiry` na resposta 428 `token_required`. **Solução** Infelizmente, você precisará iniciar todo o processo de login com seu usuário novamente. **Mensagem de erro do widget** | Idioma | Título do erro | Descrição do erro | | --- | --- | --- | | 🇬🇧 Inglês | Please try again! | Please try again to link your account as the session with this institution just expired | | 🇧🇷 Português | Por favor, faça login novamente | A sessão com essa instituição expirou. Por favor, digite suas credenciais novamente | | 🇪🇸 Espanhol | Por favor, ingresa de nuevo | Por favor, ingresa de nuevo tus credenciales ya que la sesión con esta institución ha expirado | ## 400 session_expired_ob | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Sim | ```json Exemplo de Sessão Expirada OB [ { "code": "session_expired_ob", "request_id": "6e7b283c6efa449c9c028a16b5c249fa" } ] ``` **Causa** Você pode receber este erro devido aos seguintes motivos: 1. O `access_token` que você gerou não foi usado dentro do período de expiração de 10 minutos. 2. Em vez de gerar um novo `access_token` para o widget para o usuário dado, você usou um `access_token` gerado para outro usuário que já criou um link usando o widget. 3. Seu usuário não clicou no botão **Ir para a instituição** no widget dentro de 60 segundos após a tela aparecer. **Solução** Infelizmente, você precisará iniciar o processo do widget com seu usuário novamente. Por favor, certifique-se de que você: 1. Garanta que você use o `access_token` para gerar o widget assim que ele for criado. Se passarem 10 minutos ou mais, você precisará criar um novo `access_token`. 2. Garanta que você sempre crie um novo `access_token` para cada usuário. 3. Nossa equipe de UX está melhorando o fluxo para solicitar ao usuário que continue o fluxo dentro dos 60 segundos permitidos. **Mensagem de erro do widget** | Idioma | Título do erro | Descrição do erro | | --- | --- | --- | | 🇬🇧 Inglês | Session expired | Your connection session expired, please refresh the page to try again to link your account | | 🇧🇷 Português | Sessão expirada | Sua sessão expirou, atualize a página e tente vincular sua conta novamente. | ## 400 too_many_sessions | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Link | Sim | | Enrichment | Link | Sim | | Payment Initiation | Link | Sim | ```json Too Many Sessions Example [ { "code": "too_many_sessions", "message": "Impossible to login, a session is already opened with the institution for these credentials", "request_id": "3e7b283c6efa449c9c028a16b5c249fd" } ] ``` **Causa** Este erro ocorre quando: - um usuário está tentando fazer login na sua instituição via Belvo enquanto já está logado na sua instituição em um navegador web ou aplicativo móvel. - você faz uma solicitação de informações enquanto a Belvo está extraindo dados da instituição para esse usuário. **Solução** Tente: - Informar seu usuário para fechar suas sessões web e de aplicativo para a instituição em questão. - Esperar 120 segundos e tentar novamente sua solicitação, garantindo que a Belvo tenha terminado o processo de extração de dados. **Mensagem de erro do widget** | Idioma | Título do erro | Descrição do erro | | --- | --- | --- | | 🇬🇧 Inglês | A session is already open | It seems you are logged in to your account with another device. This institution only allows one logged in session at a time. Log out and try linking your account again. | | 🇧🇷 Português | Muitas sessões abertas | Parece que já existe uma sessão aberta nesta instituição com seu usuário. Esta instituição permite apenas uma sessão aberta por vez | | 🇪🇸 Espanhol | Demasiadas sesiones abiertas | Parece que ya hay una sesión abierta en esta institución con tu usuario. Esta institución solo permite una sesión abierta a la vez. | ## 400 unavailable_data | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | N/A | Não | | Payment Initiation | N/A | N/A | ```json Unavailable Data Example [ { "message": "The institution did not return any data for the request.", "code": "unavailable_data", "request_id": "c76f4d0320b923eb3068f5e2c0fab18f" } ] ``` **Causa** Este erro ocorre quando sua solicitação foi corretamente formada e enviada, no entanto, a instituição não retornou nenhum dado para sua solicitação. **Solução** Recomendamos primeiro verificar nossa Página de Status da Instituição para ver se há algum incidente com a instituição que está impedindo a extração de dados. Se não houver incidentes ativos para a instituição, você pode tentar novamente a solicitação. Se continuar recebendo este erro, entre em contato com nossa equipe de suporte, certificando-se de incluir o `request_id` que você recebe na mensagem. ## 400 unconfirmed_link | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Link | Não | | Enrichment | Link | Não | | Payment Initiation | N/A | N/A | ```json Exemplo de Link Não Confirmado [ { "message": "A criação do link ainda não foi concluída", "code": "unconfirmed_link", "request_id": "c76f4d0320b923eb3068f5e2c0fab18f" } ] ``` **Causa** Este erro ocorre quando você tenta acessar um link que foi pausado anteriormente (e, como tal, não está ativo agora). O status de um Link é definido como `unconfirmed_link` quando o seu usuário não completou o processo de criação do Link com sucesso (por exemplo, ele pode não ter fornecido um token MFA válido) **Solução** Peça ao seu usuário para fornecer um token MFA através do nosso widget em modo de atualização para completar um primeiro login. Após o usuário completar o processo com sucesso, você poderá recuperar os dados. ## 400 unsupported_operation | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | Belvo | Não | | Payment Initiation | N/A | N/A | Exemplo de Erro de Recurso Não Suportado ```json Exemplo de Recurso Não Suportado [ { "message": "The resource you are trying to access is not supported by this institution", "code": "unsupported_operation", "request_id": "a66a4fdae4ab8cfc1ed9ee9246aa6890" } ] ``` Exemplo de Erro de Fetch Historical ```json Exemplo de Erro de Fetch Historical [ { "message": "For single links, you must set fetch_historical to true when using the resources request parameter.", "code": "unsupported_operation", "request_id": "a66a4fdae4ab8cfc1ed9ee9246aa6890" } ] ``` **Causa** Este erro ocorre quando: - Você tenta acessar alguma operação de dados que a Belvo não suporta para uma instituição. Por exemplo, tentar acessar o recurso **Transactions** para instituições Fiscais. - Você faz uma solicitação que requer que alguma lógica de negócios seja concluída. Por exemplo, ao usar o parâmetro `fetch_resources` na criação de um único link, você também deve definir `fetch_historical` como true **Solução** Certifique-se de que: - A operação de recurso (por exemplo, solicitar Transactions) é suportada para essa instituição. - Sua solicitação atende a toda a lógica de negócios necessária. **Mensagem de erro do widget** | Idioma | Título do erro | Descrição do erro | | --- | --- | --- | | 🇬🇧 Inglês | Something went wrong | There was an error with your request. Please try again, and if the problem persists, we will try to fix it as soon as possible | | 🇧🇷 Português | Ocorreu um erro | Ocorreu um erro com a sua solicitação. Tente novamente e, se o problema persistir, o corrigiremos o mais breve possível | | 🇪🇸 Espanhol | Ha habido un error | Hemos tenido un error con tu petición. Por favor, inténtalo de nuevo y si el problema persiste, lo arreglaremos lo más pronto posible | ## 400 validation_error | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Request | Não | | Enrichment | Request | Não | | Payment Initiation | N/A | N/A | ```json Validation Error Example [ { "message": "Bad request", "code": "validation_error", "request_id": "e912d014d7976c3172bb8e65c7a22194" } ] ``` **Causa** Você enviou uma solicitação onde: - As credenciais fornecidas não corresponderam aos campos esperados, levando a um erro de validação de campo da instituição. Por exemplo: ```json Validation Error Request Example { "link": "a6c007b9-e99c-4073-834b-8c7705132de7", "date_from": "2020-01-01", "date_to": "2021-03-30" // Entre date_from e date_to há mais de 365 dias } ``` **Solução** Obtenha os detalhes da instituição usando nosso endpoint de Instituições e verifique o objeto `form_fields` para obter informações sobre quais campos precisam ser fornecidos e seu formato. ## 401 authentication_failed | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | Belvo | Não | | Payment Initiation | N/A | N/A | ```json Exemplo de Falha de Autenticação [ { "message": "Invalid Secret Keys", "code": "authentication_failed", "request_id": "5c09677ecf78e1d4501547252a0c4e77" } ] ``` **Causa** Este erro ocorre quando você tenta fazer uma chamada de API usando credenciais incorretas da API da Belvo (ou sua chave secreta ou senha secreta, ou ambos, estão incorretos). **Solução** Verifique as credenciais que você está usando em comparação com as do seu dashboard. Talvez você esteja usando suas credenciais de sandbox para acessar dados de produção (ou vice-versa). Nota: Se você não tiver certeza sobre sua secretPassword, verifique o e-mail de confirmação que você recebeu da Belvo. ## 401 consent_without_accounts | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | N/A | N/A | | Payment Initiation | N/A | N/A | ```json Consent Without Accounts Example [ { "message": "Information cannot be retrieved as the consent has no associated accounts", "code": "consent_without_accounts", "request_id": "5c09677ecf78e1d4501547252a0c4e77" } ] ``` **Causa** Este erro ocorre quando o seu usuário removeu contas associadas ao consentimento que eles forneceram. Por exemplo, quando o seu usuário gerou o consentimento pela primeira vez, ele tinha uma conta corrente e uma conta de empréstimo na instituição, mas desde então fechou essas contas. **Solução** Entre em contato com o seu usuário para confirmar se ele removeu a conta e peça para gerar um novo consentimento na instituição atual. ## 403 access_to_production_denied | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | Belvo | Não | | Payment Initiation | Belvo | Não | ```json Exemplo de Acesso à Produção Negado [ { "message": "You don’t have access to production API.", "code": "access_to_production_denied", "request_id": "d5af76cc66e0231e2be7f7be5c41170a" } ] ``` **Causa** Este erro ocorre quando você tenta acessar o ambiente de produção da Belvo sem as permissões corretas. **Solução** Entre em contato com nossa equipe de vendas para solicitar acesso ao ambiente de produção. ## 403 access_to_resource_denied | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | Belvo | Não | | Payment Initiation | N/A | N/A | ```json Exemplo de Acesso ao Recurso Negado [ { "message": "You don't have access to this resource.", "code": "access_to_resource_denied", "request_id": "d5af76cc66e0231e2be7f7be5c41170a" } ] ``` **Causa** Este erro ocorre quando você tenta acessar um recurso da Belvo sem as permissões corretas. **Solução** Entre em contato com nossa equipe de vendas para solicitar acesso a este recurso. ## 403 Forbidden | API | Tipo de erro | Refletido no widget? | | --- | --- | --- | | Aggregation | Belvo | Não | | Enrichment | Belvo | Não | ```html