Categorizar e enriquecer transações
curl --request POST \
--url https://api.malvo.io/categorization \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"transactions": [
{
"id": "tx-001",
"amount": -89.9,
"date": "2026-04-12",
"description": "PAGTO PIX MERCADO PAO",
"accountType": "CHECKING_ACCOUNT",
"isBusinessAccount": false,
"paymentData": {
"payer": {
"document": "12345678900"
},
"receiver": {
"document": "11222333000181"
}
},
"creditCardMcc": 5411
}
]
}
'const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
transactions: [
{
id: 'tx-001',
amount: -89.9,
date: '2026-04-12',
description: 'PAGTO PIX MERCADO PAO',
accountType: 'CHECKING_ACCOUNT',
isBusinessAccount: false,
paymentData: {payer: {document: '12345678900'}, receiver: {document: '11222333000181'}},
creditCardMcc: 5411
}
]
})
};
fetch('https://api.malvo.io/categorization', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.malvo.io/categorization"
payload = { "transactions": [
{
"id": "tx-001",
"amount": -89.9,
"date": "2026-04-12",
"description": "PAGTO PIX MERCADO PAO",
"accountType": "CHECKING_ACCOUNT",
"isBusinessAccount": False,
"paymentData": {
"payer": { "document": "12345678900" },
"receiver": { "document": "11222333000181" }
},
"creditCardMcc": 5411
}
] }
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/categorization",
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([
'transactions' => [
[
'id' => 'tx-001',
'amount' => -89.9,
'date' => '2026-04-12',
'description' => 'PAGTO PIX MERCADO PAO',
'accountType' => 'CHECKING_ACCOUNT',
'isBusinessAccount' => false,
'paymentData' => [
'payer' => [
'document' => '12345678900'
],
'receiver' => [
'document' => '11222333000181'
]
],
'creditCardMcc' => 5411
]
]
]),
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;
}{
"results": [
{
"id": "tx-001",
"amount": -89.9,
"date": "2026-04-12",
"description": "Mercado Pão",
"type": "DEBIT",
"merchant": {
"name": "Mercado Pão",
"businessName": "Mercado Pão Ltda",
"cnpj": "11.222.333/0001-81"
},
"category": "Eating out"
}
]
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}Enrich
Categorizar e enriquecer transações
Executa transações de propriedade do cliente através do classificador (não requer item). Aceita até 5.000 transações por requisição (divida lotes maiores). Para cada transação são obrigatórios id, amount, date e description; os campos opcionais (accountType, isBusinessAccount, paymentData, creditCardMcc) melhoram materialmente a precisão. Retorna, por transação, a identificação do merchant, a description normalizada, a category e a tipagem DEBIT/CREDIT.
POST
/
categorization
Categorizar e enriquecer transações
curl --request POST \
--url https://api.malvo.io/categorization \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"transactions": [
{
"id": "tx-001",
"amount": -89.9,
"date": "2026-04-12",
"description": "PAGTO PIX MERCADO PAO",
"accountType": "CHECKING_ACCOUNT",
"isBusinessAccount": false,
"paymentData": {
"payer": {
"document": "12345678900"
},
"receiver": {
"document": "11222333000181"
}
},
"creditCardMcc": 5411
}
]
}
'const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
transactions: [
{
id: 'tx-001',
amount: -89.9,
date: '2026-04-12',
description: 'PAGTO PIX MERCADO PAO',
accountType: 'CHECKING_ACCOUNT',
isBusinessAccount: false,
paymentData: {payer: {document: '12345678900'}, receiver: {document: '11222333000181'}},
creditCardMcc: 5411
}
]
})
};
fetch('https://api.malvo.io/categorization', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.malvo.io/categorization"
payload = { "transactions": [
{
"id": "tx-001",
"amount": -89.9,
"date": "2026-04-12",
"description": "PAGTO PIX MERCADO PAO",
"accountType": "CHECKING_ACCOUNT",
"isBusinessAccount": False,
"paymentData": {
"payer": { "document": "12345678900" },
"receiver": { "document": "11222333000181" }
},
"creditCardMcc": 5411
}
] }
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/categorization",
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([
'transactions' => [
[
'id' => 'tx-001',
'amount' => -89.9,
'date' => '2026-04-12',
'description' => 'PAGTO PIX MERCADO PAO',
'accountType' => 'CHECKING_ACCOUNT',
'isBusinessAccount' => false,
'paymentData' => [
'payer' => [
'document' => '12345678900'
],
'receiver' => [
'document' => '11222333000181'
]
],
'creditCardMcc' => 5411
]
]
]),
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;
}{
"results": [
{
"id": "tx-001",
"amount": -89.9,
"date": "2026-04-12",
"description": "Mercado Pão",
"type": "DEBIT",
"merchant": {
"name": "Mercado Pão",
"businessName": "Mercado Pão Ltda",
"cnpj": "11.222.333/0001-81"
},
"category": "Eating out"
}
]
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}{
"code": 500,
"codeDescription": "INTERNAL_SERVER_ERROR",
"message": "Internal Server Error"
}Authorizations
Chave de API obrigatória em todas as operações.
Body
application/json
Lista de transações a enriquecer. Máximo de 5.000 itens por requisição.
Maximum array length:
5000Show child attributes
Show child attributes
Response
Resultados do enriquecimento, um por transação enviada.
Show child attributes
Show child attributes
⌘I