curl --request POST \
--url https://api.malvo.io/items/{id}/mfa \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"parameters": {
"token": "123456"
}
}
'const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({parameters: {token: '123456'}})
};
fetch('https://api.malvo.io/items/{id}/mfa', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.malvo.io/items/{id}/mfa"
payload = { "parameters": { "token": "123456" } }
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.malvo.io/items/{id}/mfa",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'parameters' => [
'token' => '123456'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"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
},
"status": "UPDATING",
"executionStatus": "LOGIN_MFA_IN_PROGRESS",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:01:30.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": null
}{
"code": 400,
"message": "Item is not waiting for user input",
"data": {}
}{
"code": 404,
"message": "Item not found",
"codeDescription": "ITEM_NOT_FOUND"
}Enviar token MFA
Envia um token de MFA de dois fatores. Usado quando status = WAITING_USER_INPUT / executionStatus = WAITING_USER_INPUT; o campo parameter do item descreve a entrada esperada. Em sucesso, a execução retoma (LOGIN_MFA_IN_PROGRESS). Token errado/expirado leva ao executionStatus final INVALID_CREDENTIALS_MFA.
curl --request POST \
--url https://api.malvo.io/items/{id}/mfa \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"parameters": {
"token": "123456"
}
}
'const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({parameters: {token: '123456'}})
};
fetch('https://api.malvo.io/items/{id}/mfa', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.malvo.io/items/{id}/mfa"
payload = { "parameters": { "token": "123456" } }
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.malvo.io/items/{id}/mfa",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'parameters' => [
'token' => '123456'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"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
},
"status": "UPDATING",
"executionStatus": "LOGIN_MFA_IN_PROGRESS",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:01:30.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": null
}{
"code": 400,
"message": "Item is not waiting for user input",
"data": {}
}{
"code": 404,
"message": "Item not found",
"codeDescription": "ITEM_NOT_FOUND"
}Authorizations
Chave de API (apiKey, TTL ~2h) obtida via POST /auth. Enviada no header X-API-KEY.
Path Parameters
Identificador (UUID) do item.
Body
Corpo de envio de token MFA (POST /items/{id}/mfa). O token vai aninhado dentro de parameters.
Mapa de parâmetros de MFA preenchidos pelo usuário.
Show child attributes
Show child attributes
Response
Execução retomada (LOGIN_MFA_IN_PROGRESS). O corpo é o objeto Item completo (§4.1).
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).