Insights Report

Feezback's layer of transactions identification, standartization, labeling and categorization.

Once an account holder has granted consent with a VIEW flow (srv: "view_ais/user"), Feezback computes an insights report based on the aggregated data from all connected accounts. The report provides a financial view into a person's (or organizations) aggregated assets, obligations, balances and cashflow. This page covers how to consume that report — either as JSON through the API, or as a hosted dashboard page.

How it fits in the flow

  1. Run the VIEW consent flow (view_ais/user) — see Open Banking Account Connection.
  2. The user grants consent and Feezback pulls their data.
  3. Feezback computes the insights report. Once ready, Feezback sends the UserInsightReady webhook — see Webhook Catalog.
  4. From here you have two independent options, and you can use either or both:
    • Pull the report as JSON via the Insights API — the same ais/tpp bearer token you already use for other data endpoints.
    • Generate a hosted dashboard link (srv: "view/user") and get a link to a View page with a user friendly dashboard. This link is purely for viewing — it doesn't return JSON to you.

Option A: Getting the report as JSON

  1. Create a bearer token.

    1. Create a JSON out of this payload:
{
  "sub": "sub",
  "iss": "tpp/{TPP_ID}",
  "srv": "ais/tpp",
  "iat": 1728986260,
  "exp": 1728986860,
  "ttl": 600
}
FieldTypeRequiredDescription
substringYesSubject used for the API user path. Do not include PII if the value may appear in a URL.
issstringYesIssuer in the format tpp/{TPP_ID}.
srvstringYesUse ais/tpp.
iatnumberYesIssued-at timestamp.
expnumberYesExpiration timestamp. Use current time plus 600 seconds.
ttlnumberYesToken TTL. Use 600.

b. Sign the JWT with the RS512 algorithm.
Convert the JSON from the previous step into a JWT (JSON Web Token):
Sign the JWT with the private key that matches the public key you sent to Feezback.

For manual JWT signing see https://www.jwt.io/.

SettingValue
AlgorithmRS512
Issuer formattpp/{TPP_ID}
Request originWhitelisted backend IP address

c. Send this JWT (from previous step) to the Token Generation API:

curl --location --request POST 'https://{ENVIRONMENT}.feezback.cloud/token' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "token": "{GENERATED_JWT_TOKEN}"
  }'

Replace {ENVIRONMENT} with one of these values:

EnvironmentToken endpoint
Integrationhttps://lgs-integ01.feezback.cloud/token
Productionhttps://lgs-prod.feezback.cloud/token
The response token is valid for 600 seconds.
  1. The JSON response will include a token.
    Use the token value from the body for authenticating as Bearer against the TPP API, for the next 600 seconds.

  1. Call the insights endpoint to get the insights report:

GET /tpp/v1/users/USERID/insights

This is a separate path from the hosted dashboard link below — getting the JSON uses the same ais/tpp bearer token / TPP API host pattern as any other data endpoint (accounts, transactions, etc.). See Data Aggregation & Enrichment for the token request.

curl --location 'https://{TPP_API_HOST}/tpp/v1/users/USERID/insights' \
  --header 'Authorization: Bearer {ACCESS_TOKEN}' \
  --header 'X-Tpp-Id: {TPP_ID}'

The response is a list of insight objects:
Category
Field
Description
Accounts
mainAccounts
Returns details of every account identified as a main account based on Feezback's proprietary model. a user may have several main accounts, or none at all.
Accounts
additionalAccounts
Details of every account the user shared that isn't a main account.
Accounts
hasMainAccount
Boolean field — returns true when at least one main account has been identified.
Balances
totalBalances
Total balance across all connected checking accounts.
Balances
accountBalances
List of end-of-day balances by date, going back up to one year. Calculated separately per account and per currency.
Credit Score
creditScore
Numeric underwriting score (out of 762) band label, and recommended credit amount. Contact Feezback to adjust recommended credit amount according to your risk preferences.
Income
months
Number of full months included in the calculation. Only full months are counted (to avoid skew from the day-of-month the consent was granted) — typically ~11 months.
Income
avgMonthlyIncome
User's average monthly income across all available full months, up to one year back. Income excludes: money coming in from deposits/savings, returned/reversed payments, taking out loans, FX conversion, selling securities.
Income
avgSixMonthsMonthlyIncome
Same as avgMonthlyIncome, calculated over the trailing six full months.
Income
avgMonthlyRecurringIncome
Average monthly recurring income over the last year. "Recurring" = repeats at least 3 times in the last 4 months.
Income
avgSixMonthsMonthly
RecurringIncome
Same as avgMonthlyRecurringIncome, over the trailing six months.
Income
totalFullMonthsIncome
Sum of the user's total income across all full months. Same exclusions as avgMonthlyIncome.
Income
recurringIncomeDetails
Per-transaction breakdown of everything classified as recurring income (12 months): receiving account, currency, transaction name, category, last month seen, number of months, average amount.
Income
recurringSixMonths
IncomeDetails
Same as recurringIncomeDetails, over the trailing 6 full months.
Income
monthlyIncome
Per full month: total income (income) and total recurring income (recurringIncome).
Expenses
avgMonthlyExpense
Average monthly expense across all available full months. Expenses exclude: buying securities, transfers to savings, pension contributions, FX, cash withdrawals, reversed transactions, and loan repayments.
Expenses
avgSixMonthsMonthly
Expense
Same as avgMonthlyExpense, over the trailing six full months.
Expenses
total12MonthExpense
Sum of the user's total expenses across all full months. Same exclusions as avgMonthlyExpense.
Expenses
avgMonthlyRecurring
Expense
Average monthly recurring expense over the last year. Same exclusions as avgMonthlyExpense.
Expenses
avgSixMonthsMonthly
RecurringExpense
Same as avgMonthlyRecurringExpense, over the trailing six months.
Expenses
avgMonthlyCcExpense
Average monthly credit-card charges across all available full months.
Expenses
avgSixMonthsMonthly
CCExpense
Same as avgMonthlyCcExpense, over the trailing six full months.
Expenses
avgMonthlyChequeExpense
Average monthly cheque charges across all available full months.
Expenses
avgMonthlyOtherExpense
Average monthly charges that are neither credit-card nor cheque.
Expenses
monthlyExpense
Per full month: total expense and total recurring expense.
Expenses
recurringExpenseDetails
Per-transaction breakdown of everything classified as recurring expense (12 months), with full transaction detail.
Expenses
recurringSixMonths
ExpenseDetails
Same as recurringExpenseDetails, over the trailing 6 full months.
Savings & Deposits
accounts
Detail for each deposit/savings product: name, balance, interest rate, start/end date, next withdrawal window.
Savings & Deposits
total
Total amount held across all of the user's deposit and savings products.
Savings & Deposits
externalInvestment
OrSavings
Average monthly transfers to non-bank savings/investment products.
Securities
totalBalance
Total value of securities holdings in the account as of the data-retrieval date.
Securities
applicableFees
Breakdown of the account's fee pricing across the different securities fee types.
Loans & Mortgages
total
Sum of balances across all loans the user shared, excluding mortgages.
Loans & Mortgages
mortgageTotal
Sum of balances across all mortgages the user shared.
Loans & Mortgages
loan
Loan summary: name, remaining balance, interest rate, start date, original amount, expected end date, liens.
Loans & Mortgages
monthlyPayment
Average monthly transfers to loans over the last three months.
Loans & Mortgages
monthlyMortgage
Payment
Total mortgage payments made in each month.
Loans & Mortgages
avgMonthlyMortgage
Payment
Average monthly mortgage payment.
Credit Limits
creditLimit
Summary of credit-facility info: limit amount, utilization, interest rate per limit tier.
Fees
monthlyFees
Total fees charged each month, broken down by category: checking account, credit cards, FX, cheques, securities, loans and deposits.
Financial Events
nsfEvents
NSF events including transaction name, amount, currency, date, account, additional info.
Financial Events
technicalCheck
BounceEvents
Charge/cheque bounces for technical reasons (not NSF).
Financial Events
warningEvents
Bank warning events, including fees for warning letters, lawyer warning letters, notice of unusual balance.
Financial Events
loanPaymentDelayEvents
delayed loan interest payment, bounced charge from non-bank lenders, arrears-clearing transactions.
Financial Events
unemploymentPaymentEvents
Transactions identified as unemployment-benefit payments.
  • Each field is calculated separately per currency.
  • If a section is missing from the response, it means that insight isn't enabled on your plan — not that the user has no data for it.
  • Like other AIS data endpoints, this call can return 307 while the report is still being computed — poll using the same X-Request-Wait / transactionId pattern described in Data Aggregation & Enrichment.

Option B: Generating an expiring hosted dashboard link

Create a JSON with srv: "view/user" and send it to /link.

Unlike the consent-granting JWT, this one doesn't need a flow block — the user has already consented.

{
  "sub": "user-123",
  "iss": "tpp/{TPP_ID}",
  "srv": "view/user",
  "userWasAuthenticated": true,
  "insightType": "private"
}
FieldRequiredNotes
subYesUser identifier — must match the identifier used for the original VIEW consent.
issYestpp/{TPP_ID}
srvYesview/user
userWasAuthenticatedYesConfirms you've already authenticated the user.
insightTypeNoprivate (default) or corporate.

Sign the JWT with RS512, ES256, or EdDSA — same as any other LGS request. The response is JWE-encrypted, same as every /link response — see Security.

Call the relevant env. to get a VIEW link.

curl --location --request POST 'https://{ENVIRONMENT}.feezback.cloud/link' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "token": "{GENERATED_JWT_TOKEN}"
  }'

The link points to Feezback's hosted VIEW dashboard, carrying the encrypted token, your TPP ID, and the insight type as query parameters. Send the user to this link to view their report as a page.

The link expires 30 minutes after issuance and is reusable within that window — the user can open it more than once before it expires. Generate a new link once it expires.

Common questions

QuestionAnswer
Do I need a separate consent for the hosted dashboard vs. the JSON API?No — both read from the same VIEW consent. view/user just generates a link into the existing report; it doesn't create new consent.
A section is missing from my JSON responseThat insight isn't configured for your organization. Talk to your Feezback contact to enable it.
I got a 307 from the insights endpointThe report is still computing — poll with transactionId from the Location header, same as other AIS endpoints
Can I brand the hosted dashboard page?Yes — it's a themeable surface. Talk to your integration contact about customizing it
The dashboard link expiredGenerate a new one with srv: "view/user" — links are valid for 30 minutes

Did this page help you?