curl --request POST \
--url https://api.malvo.io/items \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"connectorId": 0,
"parameters": {
"user": "user-ok",
"password": "password-ok"
},
"clientUserId": "my-user-42",
"webhookUrl": "https://your.app/webhooks/malvo",
"products": [
"ACCOUNTS",
"TRANSACTIONS"
]
}
'{
"id": "a8f4f3e1-7b2c-4d4e-8f9a-0b1c2d3e4f5a",
"connector": {
"id": 612,
"name": "Nubank",
"type": "PERSONAL_BANK",
"imageUrl": "https://malvo.io/connectors/nubank.svg",
"primaryColor": "820AD1",
"isOpenFinance": true,
"isSandbox": false,
"oauth": true,
"oauthUrl": "https://auth.example/authorize"
},
"status": "LOGIN_IN_PROGRESS",
"executionStatus": "USER_AUTHORIZATION_PENDING",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:00:00.000Z",
"lastUpdatedAt": null,
"nextAutoSyncAt": null,
"clientUserId": "my-user-42",
"webhookUrl": "https://your.app/webhooks/malvo",
"products": [
"ACCOUNTS",
"TRANSACTIONS"
],
"consentExpiresAt": null,
"consecutiveFailedLoginAttempts": 0,
"statusDetail": null,
"error": null,
"parameter": null,
"userAction": null,
"oauthRedirectUri": "https://your.app/oauth/callback"
}{
"code": 400,
"message": "Invalid parameters",
"errors": [
{
"code": "INVALID_PARAMETER",
"message": "cpf must match pattern ^\\d{11}$",
"parameter": "cpf"
}
]
}{
"code": 402,
"message": "Prepaid credits exhausted",
"codeDescription": "CREDITS_EXHAUSTED"
}{
"code": 409,
"message": "Item creation limit exceeded",
"codeDescription": "ITEM_CREATION_LIMIT_EXCEEDED",
"data": {}
}{
"code": 500,
"message": "Internal server error",
"codeDescription": "INTERNAL_SERVER_ERROR",
"data": {}
}{
"code": 501,
"message": "Connector not supported",
"codeDescription": "CONNECTOR_NOT_SUPPORTED",
"data": {}
}{
"code": 503,
"message": "Open Finance not available",
"codeDescription": "OPEN_FINANCE_NOT_AVAILABLE",
"data": {}
}Criar item
Cria um Item para um Connector. Envie connectorId e somente os campos declarados em connector.credentials: mocks locais podem pedir user/password, enquanto Connectors Open Finance usam os identificadores ou seleções de jornada anunciados pelo catálogo. A Malvo expõe exclusivamente Connectors Open Finance nas rotas operacionais; Connectors diretos não são expostos. Para retornar à sua própria aplicação, informe oauthRedirectUri; sem ele, o fluxo usa a finalização hospedada. A resposta traz a URL efêmera em connector.oauthUrl quando houver OAuth; durante a autorização, o Item usa status=LOGIN_IN_PROGRESS e executionStatus=USER_AUTHORIZATION_PENDING.
No Brasil, a carga inicial busca até 365 dias; no Open Banking internacional busca o maior histórico permitido pelo ASPSP. Use clientUserId estável e avoidDuplicates: true para reaproveitar a conexão sem duplicar o Item.
curl --request POST \
--url https://api.malvo.io/items \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"connectorId": 0,
"parameters": {
"user": "user-ok",
"password": "password-ok"
},
"clientUserId": "my-user-42",
"webhookUrl": "https://your.app/webhooks/malvo",
"products": [
"ACCOUNTS",
"TRANSACTIONS"
]
}
'{
"id": "a8f4f3e1-7b2c-4d4e-8f9a-0b1c2d3e4f5a",
"connector": {
"id": 612,
"name": "Nubank",
"type": "PERSONAL_BANK",
"imageUrl": "https://malvo.io/connectors/nubank.svg",
"primaryColor": "820AD1",
"isOpenFinance": true,
"isSandbox": false,
"oauth": true,
"oauthUrl": "https://auth.example/authorize"
},
"status": "LOGIN_IN_PROGRESS",
"executionStatus": "USER_AUTHORIZATION_PENDING",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:00:00.000Z",
"lastUpdatedAt": null,
"nextAutoSyncAt": null,
"clientUserId": "my-user-42",
"webhookUrl": "https://your.app/webhooks/malvo",
"products": [
"ACCOUNTS",
"TRANSACTIONS"
],
"consentExpiresAt": null,
"consecutiveFailedLoginAttempts": 0,
"statusDetail": null,
"error": null,
"parameter": null,
"userAction": null,
"oauthRedirectUri": "https://your.app/oauth/callback"
}{
"code": 400,
"message": "Invalid parameters",
"errors": [
{
"code": "INVALID_PARAMETER",
"message": "cpf must match pattern ^\\d{11}$",
"parameter": "cpf"
}
]
}{
"code": 402,
"message": "Prepaid credits exhausted",
"codeDescription": "CREDITS_EXHAUSTED"
}{
"code": 409,
"message": "Item creation limit exceeded",
"codeDescription": "ITEM_CREATION_LIMIT_EXCEEDED",
"data": {}
}{
"code": 500,
"message": "Internal server error",
"codeDescription": "INTERNAL_SERVER_ERROR",
"data": {}
}{
"code": 501,
"message": "Connector not supported",
"codeDescription": "CONNECTOR_NOT_SUPPORTED",
"data": {}
}{
"code": 503,
"message": "Open Finance not available",
"codeDescription": "OPEN_FINANCE_NOT_AVAILABLE",
"data": {}
}Authorizations
Chave de API (apiKey, TTL ~2h) obtida via POST /auth. Enviada no header X-API-KEY.
Body
Corpo de criação de item (POST /items).
Id do connector (de GET /connectors).
Pares exigidos por connector.credentials. No Brasil normalmente use CPF/CNPJ; em jornadas sem entrada prévia use {} salvo quando o Connector anunciar uma seleção de método. As rotas operacionais aceitam somente Connectors Open Finance, nunca credenciais de Connectors diretos. Nomes iniciados por _ são reservados.
Identificador estável do usuário no sistema integrador. Recomendado nas rotas de compatibilidade e internacional para correlação e avoidDuplicates.
Notificado nos eventos deste item (item/created, item/updated, item/error, item/waiting_user_input, item/waiting_user_action, item/login_succeeded, transactions/*).
Destino final depois do callback Malvo. Use HTTPS absoluto ou deep link de esquema seguro; a Malvo anexa itemId/status/message e, quando o redirect veio de um Connect Token, o malvoFlowId reservado.
Subconjunto anunciado por connector.products. Os conectores podem oferecer ACCOUNTS, TRANSACTIONS, CREDIT_CARDS, INVESTMENTS, INVESTMENTS_TRANSACTIONS, IDENTITY e LOANS; quando TRANSACTIONS é solicitado, a Malvo também ativa internamente PAYMENT_DATA se o Connector oferecer esse enriquecimento. O Open Banking internacional oferece ACCOUNTS e TRANSACTIONS.
Se true, reutiliza uma conexão existente da mesma instituição/documento; nas rotas de compatibilidade e internacional, usa clientUserId quando ainda não existe CPF/CNPJ.
Response
Item criado. O corpo é o objeto Item completo (§4.1). Para connectors regulados aguardando OAuth, status=LOGIN_IN_PROGRESS e executionStatus=USER_AUTHORIZATION_PENDING até o usuário concluir o consentimento.
Objeto Item completo (§4.1).
Identificador do item. Sempre inclua-o ao reportar problemas — o suporte não investiga sem ele.
Connector embutido no Item. Na criação/reconsentimento OAuth, oauthUrl contém a URL efêmera de autorização.
Show child attributes
Show child attributes
{
"id": 612,
"name": "Nubank",
"type": "PERSONAL_BANK",
"imageUrl": "https://malvo.io/connectors/nubank.svg",
"primaryColor": "820AD1",
"isOpenFinance": true,
"isSandbox": false
}
Estado do item (nível do item).
CREATING: registro criado, execução ainda não iniciada (não terminal).UPDATING: conexão sincronizando com o provedor (não terminal).LOGIN_IN_PROGRESS: autenticando na instituição (não terminal).WAITING_USER_INPUT: pausado aguardando uma entrada do usuário, tipicamente token MFA.WAITING_USER_ACTION: pausado aguardando uma ação fora do formulário, como aprovar no aplicativo da instituição.UPDATED: último sync concluído com sucesso (possivelmente parcial — verifiqueexecutionStatusestatusDetail); terminal até o próximo sync.OUTDATED: parâmetros validados mas a execução falhou; retriável; terminal até nova tentativa.LOGIN_ERROR: credenciais inválidas; o usuário deve reautenticar; terminal até atualizar as credenciais.
CREATING, UPDATING, LOGIN_IN_PROGRESS, WAITING_USER_INPUT, WAITING_USER_ACTION, UPDATED, OUTDATED, LOGIN_ERROR Estado detalhado da última execução.
Transitivos (em andamento): CREATED (execução na fila), LOGIN_IN_PROGRESS (autenticando, até 5 minutos), LOGIN_MFA_IN_PROGRESS (validando token MFA), ACCOUNTS_IN_PROGRESS (coletando contas), CREDITCARDS_IN_PROGRESS (coletando cartões), TRANSACTIONS_IN_PROGRESS (coletando transações), INVESTMENT_TRANSACTIONS_IN_PROGRESS (coletando transações de investimento), PAYMENT_DATA_IN_PROGRESS (coletando metadados de pagamento das transações — ainda agregação de dados, NÃO iniciação), IDENTITY_IN_PROGRESS (coletando identidade), MERGING (analisando e armazenando dados coletados).
Intermediários (bloqueados): WAITING_USER_INPUT (aguardando entrada do usuário — tipicamente token MFA), WAITING_USER_ACTION (aguardando ação na instituição) e USER_AUTHORIZATION_PENDING (aguardando autorização — aprovação de dispositivo ou redirect regulado ainda não concluído).
Finais — sucesso: SUCCESS (todos os produtos solicitados recuperados), PARTIAL_SUCCESS (alguns produtos falharam — inspecione statusDetail por produto).
Finais — erro: ERROR (erro de conexão inesperado), MERGE_ERROR (dados coletados mas falha ao armazenar/mesclar), INVALID_CREDENTIALS (autenticação falhou), INVALID_CREDENTIALS_MFA (token MFA incorreto ou expirado), USER_INPUT_TIMEOUT (a entrada pedida ao usuário expirou), ALREADY_LOGGED_IN (sessão ativa na instituição bloqueia novo login), SITE_NOT_AVAILABLE (instituição fora do ar), ACCOUNT_LOCKED (conta bloqueada na instituição), ACCOUNT_NEEDS_ACTION (ação manual necessária na instituição — veja userAction), ACCOUNT_CREDENTIALS_RESET (instituição força reset de senha), USER_NOT_SUPPORTED (tipo de conta não suportado pelo connector), CONNECTION_ERROR (não foi possível alcançar a instituição), USER_AUTHORIZATION_NOT_GRANTED (usuário rejeitou o consentimento), USER_AUTHORIZATION_REVOKED (usuário revogou o consentimento na instituição).
CREATED, LOGIN_IN_PROGRESS, LOGIN_MFA_IN_PROGRESS, ACCOUNTS_IN_PROGRESS, CREDITCARDS_IN_PROGRESS, TRANSACTIONS_IN_PROGRESS, INVESTMENT_TRANSACTIONS_IN_PROGRESS, PAYMENT_DATA_IN_PROGRESS, IDENTITY_IN_PROGRESS, MERGING, WAITING_USER_INPUT, WAITING_USER_ACTION, SUCCESS, PARTIAL_SUCCESS, ERROR, MERGE_ERROR, INVALID_CREDENTIALS, INVALID_CREDENTIALS_MFA, USER_INPUT_TIMEOUT, ALREADY_LOGGED_IN, SITE_NOT_AVAILABLE, ACCOUNT_LOCKED, ACCOUNT_NEEDS_ACTION, ACCOUNT_CREDENTIALS_RESET, USER_NOT_SUPPORTED, CONNECTION_ERROR, USER_AUTHORIZATION_PENDING, USER_AUTHORIZATION_NOT_GRANTED, USER_AUTHORIZATION_REVOKED Horário de criação do item.
Última mutação do registro do item.
Produtos que este item coleta.
Contagem de execuções de login que falharam consecutivamente; volta a 0 em login bem-sucedido. Usado pelos clientes para parar de insistir e solicitar ação ao usuário.
Horário de conclusão do último sync bem-sucedido; null até o primeiro sucesso. Âncora do delta-sync.
Próximo auto-sync agendado; null quando o auto-sync está desativado para este item/plano.
Eco do identificador de usuário fornecido pelo caller.
Destino de webhook específico do item.
Expiração conhecida do consentimento/sessão. No fluxo internacional, respeita a validade máxima informada pelo ASPSP.
Detalhamento por produto (§4.4). null até a primeira execução completar.
Show child attributes
Show child attributes
Presente quando a última execução terminou em erro. null caso contrário.
Show child attributes
Show child attributes
{
"code": "INVALID_CREDENTIALS",
"message": "The provided credentials are incorrect",
"providerMessage": "Senha inválida. Você tem mais 2 tentativas.",
"attributes": { "remainingAttempts": "2" }
}
Descritor da credencial pendente quando status = WAITING_USER_INPUT. null caso contrário.
Presente quando a instituição exige uma ação externa para continuar; null caso contrário.
Show child attributes
Show child attributes
Eco da URI de redirect quando fornecida (fluxos OF).