Toda resposta não-2xx da API da Malvo usa o mesmo envelope de erro, o GlobalErrorResponse. Seus clientes devem ramificar pelo codeDescription (estável), nunca pelo texto de message.

O envelope GlobalErrorResponse

Status HTTP

codeDescription conhecidos

Brancheie por estes valores estáveis do contrato público.

Erros de validação (errors[])

As falhas de validação de parâmetros em POST /items e PATCH /items/{id} retornam 400 com um array errors[] além dos campos padrão do envelope:
Mapeie cada parameter ao campo do formulário e mostre message ao usuário.

Rastreamento: x-request-id / requestId

Toda resposta da API carrega um identificador de requisição — no header x-request-id e no campo requestId do corpo. Guarde-o em logs: é o que o suporte usa para localizar a requisição exata.

Códigos de erro de Item (conexão)

Erros de conexão chegam pelo campo error.code do Item (GET /items/{id}) e pelo webhook item/error. Veja como resolver cada um:
Usuário digitou usuário/senha errados. Envie-o pelo widget em modo de atualização com o mesmo itemId para reinserir as credenciais.
Token MFA errado ou expirado. Reinicie o fluxo de MFA no modo de atualização.
Sessão do provedor presa em outro dispositivo. Peça ao usuário para sair das outras sessões e tente de novo.
Conta bloqueada na instituição após muitas tentativas. Exige intervenção manual do usuário no app do banco; não é recuperável via API.
A instituição pede que o usuário aceite termos ou atualize o perfil. Ele faz isso no app do banco e então você reexecuta o Item.
Provedor fora do ar (correlaciona com connector/status_updatedOFFLINE). Aguarde, acompanhe a página de status e tente mais tarde.
Fluxo de consentimento do Open Finance não concluído (ou consentimento revogado). Reemita o consentimento via widget em modo de atualização; se expirou, é preciso um novo consentimento. Veja Consentimentos.
O conector não suporta esse perfil de usuário (ex.: conta PJ num conector PF). Use o conector correto.
Conector temporariamente desativado pela plataforma. Aguarde a reativação; não tente programaticamente.
Erro transitório genérico de rede/provedor. Repita com backoff exponencial.
Após a recuperação, o Item flui UPDATINGUPDATED e dispara um webhook item/updated.

Abrir um ticket de suporte

Inclua o máximo possível. O itemId é obrigatório para qualquer problema de conexão — sem ele o suporte não consegue analisar.
1

itemId (obrigatório)

O identificador do Item afetado.
2

requestId

Do header x-request-id ou do campo requestId do corpo da resposta com falha.
3

Timestamp

Data/hora da tentativa que falhou, em ISO 8601 com fuso.
4

Código e mensagem do erro

De item.error, do onError do widget, do corpo JSON da API ou do payload do webhook.
5

Status HTTP e corpo

Para falhas de API: o status e o corpo completo da resposta.
6

connectorId e passos para reproduzir

O connectorId quando for específico de instituição, mais os passos e a frequência (sempre vs. intermitente).
A lista completa de códigos está em Códigos de erro.