SANDBOX.
O Sandbox usa o mesmo host
https://api.malvo.io; o isolamento vem de uma aplicação Malvo com
environment: SANDBOX e seu próprio clientId/clientSecret. Não há subdomínio ou base URL
de API separados.Opt-in: como ligar o Sandbox
Uma aplicaçãoSANDBOX enxerga somente conectores com isSandbox: true. Em listagens feitas com
uma aplicação de produção, os mocks locais ficam ocultos por padrão e podem ser incluídos
explicitamente para desenvolvimento. Os conectores PJ de Open Finance (8 e 20–22) são a
exceção: só funcionam em aplicações SANDBOX, veja Empresas (PJ).
Conectores mockados locais
A faixa de IDs0–99 é reservada para conectores locais de sandbox. Os ativos são 0 a 8
(conectores Malvo), 10 a 19 (bancos brasileiros de pessoa física) e 20 a 22 (bancos
brasileiros de pessoa jurídica). Todos têm isSandbox: true.
Os conectores
0–6 usam um fluxo de credenciais no campo parameters do POST /items — apenas para exercitar cenários de teste (MFA, conta conjunta, QR etc.) no sandbox. Os conectores 7 (pessoa física) e 8 (empresa) simulam o fluxo de redirecionamento do Open Finance, que é como todas as conexões de produção funcionam.
Credenciais default
Use estes valores para todos os conectores de fluxo básico:
Qualquer password diferente de
password-ok resulta em INVALID_CREDENTIALS → LOGIN_ERROR. Qualquer MFA token diferente de 123456 resulta em INVALID_CREDENTIALS_MFA.
Gatilhos por username
Ousername enviado controla o desfecho da execução. É assim que você reproduz, sob demanda, cada estado terminal do Item.
Testar uma conexão no sandbox
1
Liste os conectores de sandbox
Chame
GET /connectors?sandbox=true para ver os conectores de sandbox e escolher o fluxo que quer testar.2
Crie um Item com as credenciais de teste
Use o gatilho
user-ok com a password default para uma conexão bem-sucedida no conector 0.3
Responda ao MFA, se houver
Em conectores de MFA de duas etapas (ex.
4), o Item pausa em WAITING_USER_INPUT. Leia item.parameter para saber o campo esperado e envie o token default.4
Faça polling até o estado final
Consulte
GET /items/{id} (ou consuma webhooks) até o status sair de UPDATING/LOGIN_IN_PROGRESS. Com user-ok, o Item chega a UPDATED / SUCCESS e você já pode ler contas e transações.5
Reproduza erros à vontade
Repita a criação trocando o
username (user-locked, user-unavailable, user-error) para exercitar os caminhos de recuperação da sua integração.Sandbox de Open Finance (conector 7)
O conector7 simula o fluxo regulado de Open Finance, com redirecionamento e consentimento:
1
Informe apenas o CPF
O conector
7 não pede user/password no formulário inicial — apenas o CPF.2
Autorize no banco mock
O usuário é redirecionado para a página de login de um banco mock. Use as credenciais do banco mock:
3
Volte pelo oauthRedirectUri
Após autorizar, o usuário é redirecionado de volta pelo
oauthRedirectUri, o Item executa e chega a UPDATED. O fluxo exercita o consentimento completo: autorizar → redirect → executar.Empresas (PJ)
Os conectores de empresa geram um dataset de pessoa jurídica: identidade com CNPJ e sócios, conta corrente empresarial e movimentações B2B com contrapartes estáveis, para você validar folha de pagamento, pagamento de fornecedores, recebimentos e conciliação antes de ir para produção.Conectores PJ
Todos têm
type: BUSINESS_BANK. Os conectores 8 e 20–22 pedem as mesmas credenciais dos
conectores PJ de Open Finance de produção, com a mesma validação:
Sem
cnpj ou sem cpf, POST /items responde 400 com codeDescription VALIDATION_ERROR
e a mesma mensagem da produção, por exemplo Parameter cnpj is required.
8 e 20–22 seguem o mesmo redirect
simulado do conector 7. O conector 2 aceita os mesmos gatilhos por username
dos demais conectores de fluxo básico.
Credenciais de teste
Use CNPJs e CPFs sintéticos com dígitos verificadores válidos. Estes servem para qualquer conector PJ:
O CNPJ informado vira o
document da identidade e o taxNumber da conta. Se ele tiver dígitos
verificadores inválidos, o sandbox usa um CNPJ válido gerado para o Item. O CPF informado aparece
entre os sócios em relations.
Porte da empresa
O porte define o tamanho da empresa simulada. Ele é escolhido pela ordem do CNPJ (os quatro dígitos depois da barra) ou, no conector legado2, pelo sufixo do user:
O porte também muda o volume diário de recebimentos e de vendas no cartão, o saldo médio, os
valores de pró-labore, folha, fornecedores e empréstimos, e os tributos gerados.
Dados gerados
Tudo é determinístico por Item: os mesmos sócios, funcionários, fornecedores e clientes aparecem todo mês, com os mesmos documentos e dados bancários, e osids seguem as regras de
IDs estáveis.
Movimentações da conta
Seguem a convenção de sinal da conta: débito negativo, crédito positivo.Os valores de tributos são sintéticos: percentuais fixos sobre a folha e a receita do mês
anterior, só para que a conciliação tenha lançamentos realistas. Eles não são cálculo tributário.
contractNumber do empréstimo em
GET /loans. O pagamento da fatura tem o mesmo valor e data do payments da fatura em GET /bills.
paymentData
Toda movimentação PIX, TED ou BOLETO traz paymentData.payer e paymentData.receiver. Um
dos lados é a própria empresa e o outro é a contraparte. Cada participante tem:
Boletos trazem
paymentData.boletoMetadata com barcode (44 dígitos), digitableLine (47
dígitos) e baseAmount. Os tributos CONVENIO_ARRECADACAO (DAS e DARF) não têm payer nem
receiver: trazem só boletoMetadata.barcode (44 dígitos) e digitableLine (48 dígitos) de
arrecadação.
A GFD do FGTS Digital é recolhida só por Pix
(Portaria MTE nº 240/2024, art. 27).
No sandbox, ela vem como PIX, sem boletoMetadata: o payer é a empresa e o receiver é a
Caixa Econômica Federal, agente operador do FGTS, com CNPJ, COMPE e ISPB, sem agência e conta.
Nenhuma guia ou pagamento real é gerado.
Dias úteis
Os tributos, os fornecedores, os recebimentos e as tarifas seguem os dias úteis bancários: não caem em sábados, domingos, feriados nacionais (inclusive 20 de novembro, desde 2024), Carnaval (segunda e terça), Sexta-feira Santa e Corpus Christi. A folha segue o prazo salarial: até o 5º dia útil do mês seguinte ao trabalhado (CLT, art. 459, § 1º). Nessa contagem o sábado é dia útil (MTE, dúvidas frequentes); domingos e feriados nacionais (inclusive Sexta-feira Santa) não contam, e Carnaval e Corpus Christi contam. O salário porPIX cai no próprio 5º dia útil, mesmo num sábado. Como TED só
liquida em dia útil bancário, salários por TED e o pró-labore são antecipados para o último dia
útil bancário até o prazo. Em setembro de 2026, o 5º dia útil é sábado, 05/09: os PIX saem em
05/09 e as TED em sexta, 04/09.
Feriados estaduais e municipais não são considerados.
Sandbox internacional
Quando o ambiente internacional está em modoSANDBOX, o catálogo inclui ASPSPs de simulação.
Eles aparecem como conectores
isOpenFinance: true, isSandbox: true, sem credenciais bancárias no objeto e com os produtos
ACCOUNTS e TRANSACTIONS.
Ciclo do cartão de crédito no sandbox
Os conectores mockados locais geram cartões com um ciclo de fatura fixo, no fusoAmerica/Sao_Paulo:
Ciclo aberto e ciclo fechado
Quando o ciclo fecha, as mesmas transações (mesmo
id) passam de PENDING para POSTED e
recebem o billId. A transição dispara o webhook transactions/updated. O Bill.totalAmount é a
soma dos amount das transações do ciclo, com compras positivas e pagamentos ou estornos
negativos, conforme a convenção de sinal do cartão.
Por exemplo, uma compra de 173.90 e um estorno de -10.00 no mesmo ciclo dão
totalAmount: 163.90.
Isso segue o Open Finance Brasil: só uma fatura já fechada é informada (Credit Cards API 2.4.0-beta.1,
GET /accounts/{creditCardAccountId}/bills; PRD de Cartão de Crédito v2.4.0, §3.4.1).
Diferença em relação a produção. Em produção, as transações
PENDING de cartão vêm da janela
de transações correntes, que cobre só os últimos 7 dias. No sandbox, todo o ciclo aberto aparece
como PENDING, do dia seguinte ao último fechamento até hoje. Não use o sandbox para testar o
comportamento da janela de 7 dias.Fechar a fatura agora
Para não esperar o dia 8, feche o ciclo aberto sob demanda comPOST /items/{id}/sandbox/close-bill. A chamada usa o mesmo X-API-KEY do
POST /items/{id}/refresh e não tem corpo.
200 traz o Item, como no refresh. O calendário simulado do Item avança até o dia
seguinte ao próximo fechamento (dia 9) e uma sincronização entra na fila. Quando ela termina:
- as transações do ciclo que estava aberto ficam
POSTED, com obillIdda nova fatura, e você recebetransactions/updated; - a nova fatura aparece em
GET /bills?accountId={accountId}.
ids que
teriam quando esses dias chegassem.
Os erros usam o envelope padrão da API:
code é o status HTTP numérico, codeDescription traz o
identificador da tabela e requestId identifica a requisição. Por exemplo, com uma aplicação
PRODUCTION:
IDs estáveis e janela de 365 dias
- O refresh (
POST /items/{id}/refresh) e a sincronização automática não criamidnovo para uma transação que já existe. Rodar de novo no mesmo dia não cria transações; no dia seguinte, só as transações do novo dia são criadas. - Cada sincronização emite as transações dos últimos 365 dias. Uma transação que sai dessa janela continua gravada e pode ser lida normalmente.
Valores em reais
amount, creditCardMetadata.totalAmount e Bill.totalAmount são números decimais em reais,
com até duas casas. R$ 173,90 (17.390 centavos) chega no JSON como 173.90, e não como o inteiro
17390. A unidade é a mesma no sandbox e em produção. Em produção, um valor que a instituição
envia como "184.2700" chega como 184.27.
O que o sandbox não simula
- A janela de 7 dias das transações correntes de cartão em produção (veja a nota acima).
Garantias do Sandbox
- Items de sandbox inativos por mais de 30 dias são permanentemente removidos por garbage collection. Não conte com a persistência de longo prazo de Items de teste.
- Não há ITP, pagamentos ou iniciação de qualquer tipo no Sandbox — assim como na API de produção, esses recursos não existem na Malvo.
Próximos passos
Connectors
A convenção de IDs e o shape do objeto Connector.
Items
A máquina de estados e os caminhos de recuperação que você vai exercitar no sandbox.
Connect Widget
Ative
includeSandbox para testar o fluxo completo na UI.Quickstart
Conecte um banco de teste de ponta a ponta em minutos.