https://www.brainiac.software/api/v1/payment-intelligence/open-banking-transaction-classify$0.04 USDCClassify open-banking transactions
Classify supplied transactions using description, merchant, category, and amount-sign hints. No bank connection is used.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-10-01",
"amount": 3200,
"currency": "GBP",
"description": "ACME payroll salary",
"direction": "credit",
"category": "income"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix subscription"
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-04",
"amount": -62.4,
"currency": "GBP",
"merchant": "Tesco",
"description": "Tesco groceries"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "classified",
"itemCount": 3,
"items": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-10-01",
"amount": 3200,
"amountSupplied": true,
"currency": "GBP",
"description": "ACME payroll salary",
"merchant": "",
"status": "",
"reference": "",
"category": "income",
"categorySource": "token_match",
"suppliedCategory": "income",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"amountSupplied": true,
"currency": "GBP",
"description": "Netflix subscription",
"merchant": "Netflix",
"status": "",
"reference": "",
"category": "subscription",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-04",
"amount": -62.4,
"amountSupplied": true,
"currency": "GBP",
"description": "Tesco groceries",
"merchant": "Tesco",
"status": "",
"reference": "",
"category": "groceries",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/open-banking-transaction-classify" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-10-01",
"amount": 3200,
"currency": "GBP",
"description": "ACME payroll salary",
"direction": "credit",
"category": "income"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix subscription"
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-04",
"amount": -62.4,
"currency": "GBP",
"merchant": "Tesco",
"description": "Tesco groceries"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/recurring-detect$0.05 USDCDetect recurring payments
Detect repeating merchant and amount patterns from supplied transaction dates. Cadence is labeled from spacing only.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-08-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-09-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix"
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix"
},
{
"id": "TX-4",
"accountId": "ACC-1",
"date": "2026-10-10",
"amount": -22.5,
"currency": "GBP",
"merchant": "Uber",
"description": "Uber trip"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "detected",
"recurringCount": 1,
"items": [
{
"key": "netflix|14.99|gbp",
"merchant": "Netflix",
"currency": "GBP",
"amount": 14.99,
"direction": "debit",
"occurrenceCount": 3,
"averageGapDays": 30.5,
"averageGapDaysSupplied": true,
"gapStdev": 0.71,
"gapStdevSupplied": true,
"cadence": "monthly_candidate",
"recurring": true,
"firstDate": "2026-08-03",
"lastDate": "2026-10-03",
"transactionIds": [
"TX-1",
"TX-2",
"TX-3"
],
"bankConnected": false,
"openBankingConnected": false
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [
{
"kind": "observation",
"code": "recurring_candidate",
"subject": "Netflix",
"detail": "A repeating amount and date spacing pattern was found in supplied transactions."
}
],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/recurring-detect" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-08-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-09-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix"
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix"
},
{
"id": "TX-4",
"accountId": "ACC-1",
"date": "2026-10-10",
"amount": -22.5,
"currency": "GBP",
"merchant": "Uber",
"description": "Uber trip"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/subscription-spend-identify$0.04 USDCIdentify subscription spend
Identify subscription candidates from recurring cadence and subscription wording in supplied merchants or descriptions.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"date": "2026-08-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "Spotify subscription"
},
{
"id": "TX-2",
"date": "2026-09-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "Spotify subscription"
},
{
"id": "TX-3",
"date": "2026-10-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "Spotify subscription"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "identified",
"subscriptionCount": 1,
"estimatedMonthlySpend": 9.99,
"estimatedMonthlySpendSupplied": true,
"items": [
{
"merchant": "Spotify Premium",
"amount": 9.99,
"currency": "GBP",
"occurrenceCount": 3,
"averageGapDays": 30.5,
"averageGapDaysSupplied": true,
"cadence": "monthly_candidate",
"estimatedMonthlySpend": 9.99,
"estimatedMonthlySpendSupplied": true,
"firstDate": "2026-08-01",
"lastDate": "2026-10-01",
"transactionIds": [
"TX-1",
"TX-2",
"TX-3"
],
"bankConnected": false,
"openBankingConnected": false
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [
{
"kind": "observation",
"code": "recurring_candidate",
"subject": "Spotify Premium",
"detail": "A repeating amount and date spacing pattern was found in supplied transactions."
}
],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/subscription-spend-identify" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"date": "2026-08-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "Spotify subscription"
},
{
"id": "TX-2",
"date": "2026-09-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "Spotify subscription"
},
{
"id": "TX-3",
"date": "2026-10-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "Spotify subscription"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/merchant-identity-resolve$0.04 USDCResolve merchant identity
Match transaction merchants against a caller-supplied directory. Unmatched names keep the supplied transaction text.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"merchants": [
{
"id": "MER-1",
"name": "Netflix",
"aliases": [
"NFLX",
"Netflix.com"
],
"category": "subscription"
}
],
"transactions": [
{
"id": "TX-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"description": "NFLX 1234",
"merchant": "NFLX"
},
{
"id": "TX-2",
"date": "2026-10-04",
"amount": -4.5,
"currency": "GBP",
"description": "LOCAL CAFE LTD"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "resolved",
"matchedCount": 1,
"items": [
{
"transactionId": "TX-1",
"accountId": "",
"date": "2026-10-03",
"rawMerchant": "NFLX",
"rawDescription": "NFLX 1234",
"merchantId": "MER-1",
"merchantName": "Netflix",
"matched": true,
"matchSource": "directory",
"directoryCategory": "subscription",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-2",
"accountId": "",
"date": "2026-10-04",
"rawMerchant": "",
"rawDescription": "LOCAL CAFE LTD",
"merchantId": "",
"merchantName": "LOCAL CAFE LTD",
"matched": false,
"matchSource": "transaction_text",
"directoryCategory": "",
"bankConnected": false,
"openBankingConnected": false
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [
{
"kind": "observation",
"code": "merchant_unmatched",
"subject": "TX-2",
"detail": "No supplied merchant directory entry matched. The transaction text was copied as the display name."
}
],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/merchant-identity-resolve" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"merchants": [
{
"id": "MER-1",
"name": "Netflix",
"aliases": [
"NFLX",
"Netflix.com"
],
"category": "subscription"
}
],
"transactions": [
{
"id": "TX-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"description": "NFLX 1234",
"merchant": "NFLX"
},
{
"id": "TX-2",
"date": "2026-10-04",
"amount": -4.5,
"currency": "GBP",
"description": "LOCAL CAFE LTD"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/income-stability-analyze$0.05 USDCAnalyze income stability
Summarize labeled income credits by month and report variability from supplied amounts only. Income is never invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"date": "2026-08-28",
"amount": 3000,
"currency": "GBP",
"description": "Employer payroll salary",
"direction": "credit"
},
{
"id": "TX-2",
"date": "2026-09-28",
"amount": 3000,
"currency": "GBP",
"description": "Employer payroll salary",
"direction": "credit"
},
{
"id": "TX-3",
"date": "2026-10-28",
"amount": 3100,
"currency": "GBP",
"description": "Employer payroll salary",
"direction": "credit"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "analyzed",
"creditCount": 3,
"monthCount": 3,
"averageMonthlyIncome": 3033.33,
"averageMonthlyIncomeSupplied": true,
"incomeStdev": 57.74,
"incomeStdevSupplied": true,
"coefficientOfVariation": 0.019,
"coefficientOfVariationSupplied": true,
"stability": "stable",
"months": [
{
"month": "2026-08",
"total": 3000
},
{
"month": "2026-09",
"total": 3000
},
{
"month": "2026-10",
"total": 3100
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/income-stability-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"date": "2026-08-28",
"amount": 3000,
"currency": "GBP",
"description": "Employer payroll salary",
"direction": "credit"
},
{
"id": "TX-2",
"date": "2026-09-28",
"amount": 3000,
"currency": "GBP",
"description": "Employer payroll salary",
"direction": "credit"
},
{
"id": "TX-3",
"date": "2026-10-28",
"amount": 3100,
"currency": "GBP",
"description": "Employer payroll salary",
"direction": "credit"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/affordability-data-calculate$0.05 USDCCalculate affordability data
Calculate inflow, outflow, subscription estimates, and income ratios from supplied transactions. No affordability decision is returned.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"date": "2026-08-28",
"amount": 3000,
"currency": "GBP",
"description": "salary payroll",
"direction": "credit"
},
{
"id": "TX-2",
"date": "2026-09-28",
"amount": 3000,
"currency": "GBP",
"description": "salary payroll",
"direction": "credit"
},
{
"id": "TX-3",
"date": "2026-10-28",
"amount": 3000,
"currency": "GBP",
"description": "salary payroll",
"direction": "credit"
},
{
"id": "TX-4",
"date": "2026-08-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "subscription"
},
{
"id": "TX-5",
"date": "2026-09-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "subscription"
},
{
"id": "TX-6",
"date": "2026-10-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "subscription"
},
{
"id": "TX-7",
"date": "2026-10-05",
"amount": -400,
"currency": "GBP",
"description": "rent landlord",
"direction": "debit"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "calculated",
"inflowTotal": 9000,
"inflowTotalSupplied": true,
"outflowTotal": 429.97,
"outflowTotalSupplied": true,
"netCashflow": 8570.03,
"netCashflowSupplied": true,
"averageOutflow": 107.49,
"averageOutflowSupplied": true,
"estimatedMonthlySubscriptions": 9.99,
"estimatedMonthlySubscriptionsSupplied": true,
"averageMonthlyIncome": 3000,
"averageMonthlyIncomeSupplied": true,
"outflowToIncomeRatio": 0.0392,
"outflowToIncomeRatioSupplied": true,
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [
{
"kind": "observation",
"code": "recurring_candidate",
"subject": "salary payroll",
"detail": "A repeating amount and date spacing pattern was found in supplied transactions."
},
{
"kind": "observation",
"code": "recurring_candidate",
"subject": "Spotify Premium",
"detail": "A repeating amount and date spacing pattern was found in supplied transactions."
}
],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/affordability-data-calculate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"date": "2026-08-28",
"amount": 3000,
"currency": "GBP",
"description": "salary payroll",
"direction": "credit"
},
{
"id": "TX-2",
"date": "2026-09-28",
"amount": 3000,
"currency": "GBP",
"description": "salary payroll",
"direction": "credit"
},
{
"id": "TX-3",
"date": "2026-10-28",
"amount": 3000,
"currency": "GBP",
"description": "salary payroll",
"direction": "credit"
},
{
"id": "TX-4",
"date": "2026-08-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "subscription"
},
{
"id": "TX-5",
"date": "2026-09-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "subscription"
},
{
"id": "TX-6",
"date": "2026-10-01",
"amount": -9.99,
"currency": "GBP",
"merchant": "Spotify Premium",
"description": "subscription"
},
{
"id": "TX-7",
"date": "2026-10-05",
"amount": -400,
"currency": "GBP",
"description": "rent landlord",
"direction": "debit"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/failure-pattern-analyze$0.04 USDCAnalyze payment failure patterns
Find failed, declined, or returned payment wording and statuses in supplied transactions and group counts by merchant text.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"date": "2026-10-02",
"amount": -50,
"currency": "GBP",
"merchant": "UtilityCo",
"description": "Direct debit failed insufficient funds",
"status": "failed"
},
{
"id": "TX-2",
"date": "2026-10-09",
"amount": -50,
"currency": "GBP",
"merchant": "UtilityCo",
"description": "Direct debit declined",
"status": "declined"
},
{
"id": "TX-3",
"date": "2026-10-10",
"amount": -12,
"currency": "GBP",
"merchant": "Shop",
"description": "Card purchase",
"status": "posted"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "analyzed",
"failureCount": 2,
"items": [
{
"id": "TX-1",
"accountId": "",
"date": "2026-10-02",
"amount": -50,
"amountSupplied": true,
"currency": "GBP",
"description": "Direct debit failed insufficient funds",
"merchant": "UtilityCo",
"status": "failed",
"reasonToken": "failed",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-2",
"accountId": "",
"date": "2026-10-09",
"amount": -50,
"amountSupplied": true,
"currency": "GBP",
"description": "Direct debit declined",
"merchant": "UtilityCo",
"status": "declined",
"reasonToken": "declined",
"bankConnected": false,
"openBankingConnected": false
}
],
"patterns": [
{
"merchant": "utilityco",
"failureCount": 2
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [
{
"kind": "observation",
"code": "payment_failures",
"subject": "",
"detail": "Failure-like statuses or wording were found in supplied transactions only."
}
],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/failure-pattern-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"date": "2026-10-02",
"amount": -50,
"currency": "GBP",
"merchant": "UtilityCo",
"description": "Direct debit failed insufficient funds",
"status": "failed"
},
{
"id": "TX-2",
"date": "2026-10-09",
"amount": -50,
"currency": "GBP",
"merchant": "UtilityCo",
"description": "Direct debit declined",
"status": "declined"
},
{
"id": "TX-3",
"date": "2026-10-10",
"amount": -12,
"currency": "GBP",
"merchant": "Shop",
"description": "Card purchase",
"status": "posted"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/transaction-categorization-correct$0.04 USDCCorrect transaction categorization
Apply caller-supplied category corrections to matching transaction ids or merchants without inventing categories.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"transactions": [
{
"id": "TX-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix",
"category": "shopping"
},
{
"id": "TX-2",
"date": "2026-10-04",
"amount": -20,
"currency": "GBP",
"merchant": "Tesco",
"description": "Tesco"
}
],
"corrections": [
{
"transactionId": "TX-1",
"from": "shopping",
"to": "subscription"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "corrected",
"correctionCount": 1,
"appliedCount": 1,
"items": [
{
"transactionId": "TX-1",
"merchant": "Netflix",
"from": "subscription",
"to": "subscription",
"applied": true,
"matchedBy": "transaction_id",
"bankConnected": false,
"openBankingConnected": false
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/transaction-categorization-correct" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"transactions": [
{
"id": "TX-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "Netflix",
"description": "Netflix",
"category": "shopping"
},
{
"id": "TX-2",
"date": "2026-10-04",
"amount": -20,
"currency": "GBP",
"merchant": "Tesco",
"description": "Tesco"
}
],
"corrections": [
{
"transactionId": "TX-1",
"from": "shopping",
"to": "subscription"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/account-cashflow-compare$0.05 USDCCompare account cashflow
Consolidate inflow and outflow by account and compare pairs only when currencies match.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"accounts": [
{
"id": "ACC-1",
"name": "Current",
"currency": "GBP"
},
{
"id": "ACC-2",
"name": "Savings",
"currency": "GBP"
}
],
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-10-01",
"amount": 1000,
"currency": "GBP",
"direction": "credit",
"description": "salary"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-10-02",
"amount": -200,
"currency": "GBP",
"direction": "debit",
"description": "rent"
},
{
"id": "TX-3",
"accountId": "ACC-2",
"date": "2026-10-01",
"amount": 100,
"currency": "GBP",
"direction": "credit",
"description": "interest credit"
},
{
"id": "TX-4",
"accountId": "ACC-2",
"date": "2026-10-03",
"amount": -20,
"currency": "GBP",
"direction": "debit",
"description": "fee"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "compared",
"accountCount": 2,
"compatiblePairCount": 1,
"accounts": [
{
"accountId": "ACC-1",
"name": "Current",
"currency": "GBP",
"transactionCount": 2,
"inflow": 1000,
"outflow": 200,
"net": 800,
"bankConnected": false,
"openBankingConnected": false
},
{
"accountId": "ACC-2",
"name": "Savings",
"currency": "GBP",
"transactionCount": 2,
"inflow": 100,
"outflow": 20,
"net": 80,
"bankConnected": false,
"openBankingConnected": false
}
],
"pairs": [
{
"leftAccountId": "ACC-1",
"rightAccountId": "ACC-2",
"compatible": true,
"reason": "Compared because both accounts share the same supplied currency.",
"leftNet": 800,
"rightNet": 80,
"netDelta": 720,
"netDeltaSupplied": true
}
],
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/account-cashflow-compare" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"accounts": [
{
"id": "ACC-1",
"name": "Current",
"currency": "GBP"
},
{
"id": "ACC-2",
"name": "Savings",
"currency": "GBP"
}
],
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-10-01",
"amount": 1000,
"currency": "GBP",
"direction": "credit",
"description": "salary"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-10-02",
"amount": -200,
"currency": "GBP",
"direction": "debit",
"description": "rent"
},
{
"id": "TX-3",
"accountId": "ACC-2",
"date": "2026-10-01",
"amount": 100,
"currency": "GBP",
"direction": "credit",
"description": "interest credit"
},
{
"id": "TX-4",
"accountId": "ACC-2",
"date": "2026-10-03",
"amount": -20,
"currency": "GBP",
"direction": "debit",
"description": "fee"
}
]
}
JSONhttps://www.brainiac.software/api/v1/payment-intelligence/financial-data-quality-audit$0.12 USDCAudit financial data quality
Combine classification, recurring spend, merchants, income, failures, corrections, cashflow, and missing-field checks from supplied records.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
accounts | No | array; Array |
transactions | No | array; Array |
merchants | No | array; Array |
corrections | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-01",
"accounts": [
{
"id": "ACC-1",
"name": "Current",
"currency": "GBP"
},
{
"id": "ACC-2",
"name": "Savings",
"currency": "GBP"
}
],
"merchants": [
{
"id": "MER-1",
"name": "Netflix",
"aliases": [
"NFLX"
],
"category": "subscription"
}
],
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-08-28",
"amount": 3000,
"currency": "GBP",
"description": "payroll salary",
"direction": "credit"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-09-28",
"amount": 3000,
"currency": "GBP",
"description": "payroll salary",
"direction": "credit"
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-28",
"amount": 3000,
"currency": "GBP",
"description": "payroll salary",
"direction": "credit"
},
{
"id": "TX-4",
"accountId": "ACC-1",
"date": "2026-08-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "NFLX",
"description": "Netflix subscription"
},
{
"id": "TX-5",
"accountId": "ACC-1",
"date": "2026-09-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "NFLX",
"description": "Netflix subscription"
},
{
"id": "TX-6",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "NFLX",
"description": "Netflix subscription"
},
{
"id": "TX-7",
"accountId": "ACC-1",
"date": "2026-10-09",
"amount": -50,
"currency": "GBP",
"merchant": "UtilityCo",
"description": "Direct debit failed",
"status": "failed"
},
{
"id": "TX-8",
"accountId": "ACC-2",
"date": "2026-10-01",
"amount": 50,
"currency": "GBP",
"description": "interest credit",
"direction": "credit"
}
],
"corrections": [
{
"transactionId": "TX-6",
"to": "subscription"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "audited",
"asOf": "2026-11-01",
"transactionCount": 8,
"recurringCount": 2,
"subscriptionCount": 1,
"matchedMerchantCount": 3,
"failureCount": 1,
"issueCount": 0,
"incomeStability": "stable",
"classification": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-08-28",
"amount": 3000,
"amountSupplied": true,
"currency": "GBP",
"description": "payroll salary",
"merchant": "",
"status": "",
"reference": "",
"category": "income",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-09-28",
"amount": 3000,
"amountSupplied": true,
"currency": "GBP",
"description": "payroll salary",
"merchant": "",
"status": "",
"reference": "",
"category": "income",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-28",
"amount": 3000,
"amountSupplied": true,
"currency": "GBP",
"description": "payroll salary",
"merchant": "",
"status": "",
"reference": "",
"category": "income",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-4",
"accountId": "ACC-1",
"date": "2026-08-03",
"amount": -14.99,
"amountSupplied": true,
"currency": "GBP",
"description": "Netflix subscription",
"merchant": "NFLX",
"status": "",
"reference": "",
"category": "subscription",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-5",
"accountId": "ACC-1",
"date": "2026-09-03",
"amount": -14.99,
"amountSupplied": true,
"currency": "GBP",
"description": "Netflix subscription",
"merchant": "NFLX",
"status": "",
"reference": "",
"category": "subscription",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-6",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"amountSupplied": true,
"currency": "GBP",
"description": "Netflix subscription",
"merchant": "NFLX",
"status": "",
"reference": "",
"category": "subscription",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-7",
"accountId": "ACC-1",
"date": "2026-10-09",
"amount": -50,
"amountSupplied": true,
"currency": "GBP",
"description": "Direct debit failed",
"merchant": "UtilityCo",
"status": "failed",
"reference": "",
"category": "utilities",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"id": "TX-8",
"accountId": "ACC-2",
"date": "2026-10-01",
"amount": 50,
"amountSupplied": true,
"currency": "GBP",
"description": "interest credit",
"merchant": "",
"status": "",
"reference": "",
"category": "income",
"categorySource": "token_match",
"suppliedCategory": "",
"bankConnected": false,
"openBankingConnected": false
}
],
"recurring": [
{
"key": "payroll salary|3000|gbp",
"merchant": "payroll salary",
"currency": "GBP",
"amount": 3000,
"direction": "credit",
"occurrenceCount": 3,
"averageGapDays": 30.5,
"averageGapDaysSupplied": true,
"gapStdev": 0.71,
"gapStdevSupplied": true,
"cadence": "monthly_candidate",
"recurring": true,
"firstDate": "2026-08-28",
"lastDate": "2026-10-28",
"transactionIds": [
"TX-1",
"TX-2",
"TX-3"
],
"bankConnected": false,
"openBankingConnected": false
},
{
"key": "netflix|14.99|gbp",
"merchant": "Netflix",
"currency": "GBP",
"amount": 14.99,
"direction": "debit",
"occurrenceCount": 3,
"averageGapDays": 30.5,
"averageGapDaysSupplied": true,
"gapStdev": 0.71,
"gapStdevSupplied": true,
"cadence": "monthly_candidate",
"recurring": true,
"firstDate": "2026-08-03",
"lastDate": "2026-10-03",
"transactionIds": [
"TX-4",
"TX-5",
"TX-6"
],
"bankConnected": false,
"openBankingConnected": false
}
],
"subscriptions": [
{
"merchant": "Netflix",
"amount": 14.99,
"currency": "GBP",
"occurrenceCount": 3,
"averageGapDays": 30.5,
"averageGapDaysSupplied": true,
"cadence": "monthly_candidate",
"estimatedMonthlySpend": 14.99,
"estimatedMonthlySpendSupplied": true,
"firstDate": "2026-08-03",
"lastDate": "2026-10-03",
"transactionIds": [
"TX-4",
"TX-5",
"TX-6"
],
"bankConnected": false,
"openBankingConnected": false
}
],
"merchants": [
{
"transactionId": "TX-1",
"accountId": "ACC-1",
"date": "2026-08-28",
"rawMerchant": "",
"rawDescription": "payroll salary",
"merchantId": "",
"merchantName": "payroll salary",
"matched": false,
"matchSource": "transaction_text",
"directoryCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-2",
"accountId": "ACC-1",
"date": "2026-09-28",
"rawMerchant": "",
"rawDescription": "payroll salary",
"merchantId": "",
"merchantName": "payroll salary",
"matched": false,
"matchSource": "transaction_text",
"directoryCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-28",
"rawMerchant": "",
"rawDescription": "payroll salary",
"merchantId": "",
"merchantName": "payroll salary",
"matched": false,
"matchSource": "transaction_text",
"directoryCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-4",
"accountId": "ACC-1",
"date": "2026-08-03",
"rawMerchant": "NFLX",
"rawDescription": "Netflix subscription",
"merchantId": "MER-1",
"merchantName": "Netflix",
"matched": true,
"matchSource": "directory",
"directoryCategory": "subscription",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-5",
"accountId": "ACC-1",
"date": "2026-09-03",
"rawMerchant": "NFLX",
"rawDescription": "Netflix subscription",
"merchantId": "MER-1",
"merchantName": "Netflix",
"matched": true,
"matchSource": "directory",
"directoryCategory": "subscription",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-6",
"accountId": "ACC-1",
"date": "2026-10-03",
"rawMerchant": "NFLX",
"rawDescription": "Netflix subscription",
"merchantId": "MER-1",
"merchantName": "Netflix",
"matched": true,
"matchSource": "directory",
"directoryCategory": "subscription",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-7",
"accountId": "ACC-1",
"date": "2026-10-09",
"rawMerchant": "UtilityCo",
"rawDescription": "Direct debit failed",
"merchantId": "",
"merchantName": "UtilityCo",
"matched": false,
"matchSource": "transaction_text",
"directoryCategory": "",
"bankConnected": false,
"openBankingConnected": false
},
{
"transactionId": "TX-8",
"accountId": "ACC-2",
"date": "2026-10-01",
"rawMerchant": "",
"rawDescription": "interest credit",
"merchantId": "",
"merchantName": "interest credit",
"matched": false,
"matchSource": "transaction_text",
"directoryCategory": "",
"bankConnected": false,
"openBankingConnected": false
}
],
"income": {
"averageMonthlyIncome": 3016.67,
"averageMonthlyIncomeSupplied": true,
"stability": "stable",
"months": [
{
"month": "2026-08",
"total": 3000
},
{
"month": "2026-09",
"total": 3000
},
{
"month": "2026-10",
"total": 3050
}
]
},
"affordability": {
"netCashflow": 8955.03,
"netCashflowSupplied": true,
"outflowToIncomeRatio": 0.0128,
"outflowToIncomeRatioSupplied": true
},
"failures": [
{
"id": "TX-7",
"accountId": "ACC-1",
"date": "2026-10-09",
"amount": -50,
"amountSupplied": true,
"currency": "GBP",
"description": "Direct debit failed",
"merchant": "UtilityCo",
"status": "failed",
"reasonToken": "failed",
"bankConnected": false,
"openBankingConnected": false
}
],
"corrections": [
{
"transactionId": "TX-6",
"merchant": "NFLX",
"from": "subscription",
"to": "subscription",
"applied": true,
"matchedBy": "transaction_id",
"bankConnected": false,
"openBankingConnected": false
}
],
"cashflow": [
{
"accountId": "ACC-1",
"name": "Current",
"currency": "GBP",
"transactionCount": 7,
"inflow": 9000,
"outflow": 94.97,
"net": 8905.03,
"bankConnected": false,
"openBankingConnected": false
},
{
"accountId": "ACC-2",
"name": "Savings",
"currency": "GBP",
"transactionCount": 1,
"inflow": 50,
"outflow": 0,
"net": 50,
"bankConnected": false,
"openBankingConnected": false
}
],
"quality": {
"missingAmountCount": 0,
"missingDateCount": 0,
"missingAccountCount": 0,
"missingCurrencyCount": 0,
"duplicateIdCount": 0,
"issueCount": 0
},
"bankConnected": false,
"openBankingConnected": false,
"credentialsRequired": false,
"incomeInvented": false,
"affordabilityDecision": false,
"findings": [
{
"kind": "observation",
"code": "recurring_candidate",
"subject": "payroll salary",
"detail": "A repeating amount and date spacing pattern was found in supplied transactions."
},
{
"kind": "observation",
"code": "recurring_candidate",
"subject": "Netflix",
"detail": "A repeating amount and date spacing pattern was found in supplied transactions."
},
{
"kind": "observation",
"code": "merchant_unmatched",
"subject": "TX-1",
"detail": "No supplied merchant directory entry matched. The transaction text was copied as the display name."
},
{
"kind": "observation",
"code": "merchant_unmatched",
"subject": "TX-2",
"detail": "No supplied merchant directory entry matched. The transaction text was copied as the display name."
},
{
"kind": "observation",
"code": "merchant_unmatched",
"subject": "TX-3",
"detail": "No supplied merchant directory entry matched. The transaction text was copied as the display name."
},
{
"kind": "observation",
"code": "merchant_unmatched",
"subject": "TX-7",
"detail": "No supplied merchant directory entry matched. The transaction text was copied as the display name."
},
{
"kind": "observation",
"code": "merchant_unmatched",
"subject": "TX-8",
"detail": "No supplied merchant directory entry matched. The transaction text was copied as the display name."
},
{
"kind": "observation",
"code": "payment_failures",
"subject": "",
"detail": "Failure-like statuses or wording were found in supplied transactions only."
}
],
"limitations": [
"Transactions, accounts, merchants, and category corrections are copied only from labeled fields supplied by the caller.",
"No bank account is connected and no Open Banking credentials are required or used.",
"Income, affordability, and merchant identity are derived only from supplied rows. Missing values are not invented.",
"Recurring and subscription detection use date spacing and description/merchant similarity from the supplied set only.",
"An affordability or credit decision is never produced."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/payment-intelligence/financial-data-quality-audit" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-01",
"accounts": [
{
"id": "ACC-1",
"name": "Current",
"currency": "GBP"
},
{
"id": "ACC-2",
"name": "Savings",
"currency": "GBP"
}
],
"merchants": [
{
"id": "MER-1",
"name": "Netflix",
"aliases": [
"NFLX"
],
"category": "subscription"
}
],
"transactions": [
{
"id": "TX-1",
"accountId": "ACC-1",
"date": "2026-08-28",
"amount": 3000,
"currency": "GBP",
"description": "payroll salary",
"direction": "credit"
},
{
"id": "TX-2",
"accountId": "ACC-1",
"date": "2026-09-28",
"amount": 3000,
"currency": "GBP",
"description": "payroll salary",
"direction": "credit"
},
{
"id": "TX-3",
"accountId": "ACC-1",
"date": "2026-10-28",
"amount": 3000,
"currency": "GBP",
"description": "payroll salary",
"direction": "credit"
},
{
"id": "TX-4",
"accountId": "ACC-1",
"date": "2026-08-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "NFLX",
"description": "Netflix subscription"
},
{
"id": "TX-5",
"accountId": "ACC-1",
"date": "2026-09-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "NFLX",
"description": "Netflix subscription"
},
{
"id": "TX-6",
"accountId": "ACC-1",
"date": "2026-10-03",
"amount": -14.99,
"currency": "GBP",
"merchant": "NFLX",
"description": "Netflix subscription"
},
{
"id": "TX-7",
"accountId": "ACC-1",
"date": "2026-10-09",
"amount": -50,
"currency": "GBP",
"merchant": "UtilityCo",
"description": "Direct debit failed",
"status": "failed"
},
{
"id": "TX-8",
"accountId": "ACC-2",
"date": "2026-10-01",
"amount": 50,
"currency": "GBP",
"description": "interest credit",
"direction": "credit"
}
],
"corrections": [
{
"transactionId": "TX-6",
"to": "subscription"
}
]
}
JSON