curl --request POST \
--url https://api.malvo.io/recurring-payments \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"itemId": "aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}
'const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({itemId: 'aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa'})
};
fetch('https://api.malvo.io/recurring-payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.malvo.io/recurring-payments"
payload = { "itemId": "aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa" }
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/recurring-payments",
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([
'itemId' => 'aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
]),
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;
}[
{
"description": "netflix",
"averageAmount": -58,
"occurrences": [
"a8534c85-53ce-4f21-94d7-50e9d2ee4957",
"05c693bf-c196-47ea-a28c-8251d6bb8a06",
"ff9ed929-edc4-408c-a959-d51f79ab1814"
],
"regularityScore": 0.97
},
{
"description": "salario empresa xyz",
"averageAmount": 7500,
"occurrences": [
"6ec156fe-e8ac-4d9a-a4b3-7770529ab01c",
"123456bf-c196-47ea-a28c-8251d6bb8777",
"abced929-edc4-408c-a959-d51f79ab1123"
],
"regularityScore": 0.88
}
]{
"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"
}Detectar pagamentos recorrentes
Detecta assinaturas, salários, contas (utilities) e outros movimentos de caixa repetitivos a partir das transações de um item. Regras de detecção: ao menos 3 ocorrências; cadência aproximadamente mensal dentro de uma janela de ±5 dias; variância de valor ≤ 10%; descrições são convertidas para minúsculas e têm caracteres especiais removidos antes do casamento. A resposta é um array de padrões recorrentes.
curl --request POST \
--url https://api.malvo.io/recurring-payments \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"itemId": "aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}
'const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({itemId: 'aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa'})
};
fetch('https://api.malvo.io/recurring-payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.malvo.io/recurring-payments"
payload = { "itemId": "aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa" }
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/recurring-payments",
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([
'itemId' => 'aaaaaaa1-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
]),
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;
}[
{
"description": "netflix",
"averageAmount": -58,
"occurrences": [
"a8534c85-53ce-4f21-94d7-50e9d2ee4957",
"05c693bf-c196-47ea-a28c-8251d6bb8a06",
"ff9ed929-edc4-408c-a959-d51f79ab1814"
],
"regularityScore": 0.97
},
{
"description": "salario empresa xyz",
"averageAmount": 7500,
"occurrences": [
"6ec156fe-e8ac-4d9a-a4b3-7770529ab01c",
"123456bf-c196-47ea-a28c-8251d6bb8777",
"abced929-edc4-408c-a959-d51f79ab1123"
],
"regularityScore": 0.88
}
]{
"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
Identificador primário do item cujas transações serão analisadas.
Response
Array de padrões de pagamento recorrente detectados.
Rótulo normalizado do merchant/pagamento (minúsculo, sem caracteres especiais).
Valor médio entre as ocorrências. Negativo = despesa recorrente; positivo = renda recorrente.
Ids das transações de origem que casam com o padrão (ao menos 3).
Pontuação de regularidade entre 0 e 1. Quanto maior, mais previsível a cadência.
0 <= x <= 1