Intelligent Payments
Intelligent Payments is Yaspa's flagship financial intelligence solution. It uses the data access a customer grants during the Yaspa hosted journey to give day-zero and ongoing visibility into the customer's account activity along with derived insights.
Intelligent Payments is highly configurable. Yaspa works with you to make sure the solution fits your existing tools, with an appropriate balance of raw data and derived insights.
Integration
Intelligent Payments doesn't require changes to an existing payments integration, particularly to the APIs and redirects. Yaspa offers several ways for merchants to receive insights.
Insights dashboards in the Admin Dashboard
Operational teams can view aggregated insights and drill down into individual customer data with Yaspa's interactive tools. As with other Admin Dashboard functions, role-based security controls and individual permissions define which teams can access each insight group.
Example views populated with synthetic data can be configured in Sandbox on request.
Insights Webhooks
Yaspa can also send insights data as webhook notifications at the customer's first transaction and at configurable intervals after that. Configure these webhooks in the Insight Groups section of the Admin Dashboard. Insights webhooks available today are specified in the child pages of this document and include:
- Transaction History: details all transactions within a specified time period
- Categorized Transaction History: adds transaction-level categorization to the Transaction History webhook
Insights webhooks follow the same practical conventions and use the same header and envelope structure as payment webhooks. They also reuse many of the same parameters. The structure differs slightly to fit the nature of the data. Complete examples can be found in the dedicated insight webhook specifications nested beneath this page.
Data Object
| Field | Type | Description |
|---|---|---|
metadata | object | Who and what the insights are for. See Metadata. |
insightGroup | object | The insight group configuration that was evaluated. See Insight group. |
insights | object | Insight results keyed by insight name as defined in the dedicated insights webhook nested beneath this page. Arrayed if there are multiple. |
Metadata Object
| Field | Type | Description |
|---|---|---|
merchantId | string | Yaspa-assigned merchant identifier |
customerIdentifier | string | Customer identifier the merchant sent in the customerIdentifier request parameter |
reference | string | Merchant-assigned payment identifier for the originating transaction |
transactionId | string | Yaspa transaction ID the insights were generated from |
merchantTradingName | string | The merchant's trading or doing-business-as name |
Insight Group Object
| Field | Type | Description |
|---|---|---|
id | string | Insight group identifier assigned by Yaspa |
name | string | Display name of the insight group |
insights | array of strings | Names of the insights in the group |
period | array of strings | Aggregation period(s): one or more of MONTHLY, WEEKLY and DAILY, as configured. Defaults to MONTHLY. |
fromDate | string | ISO 8601 datetime of the start of the analyzed window |
toDate | string | ISO 8601 datetime of the end of the analyzed window |
Consent Revocation
Yaspa's payment and insights products rely on transaction and account information retrieved over open banking. The customer establishes this connection the first time they go through the hosted journey, such as their first Yaspa pay-in with the merchant. Once the customer agrees to share their transaction and account information, Yaspa regularly retrieves updated data in anticipation of further payment activity and to derive the insights provided through Intelligent Payments.
From time to time the connection is disrupted. Causes include an MFA challenge from the customer's bank, degraded service upstream of Yaspa's products, or the customer proactively ending the connection. Yaspa calls this consent revocation. As insights are consumed on an ongoing basis separately from payment activity, consider consent revocation when integrating Intelligent Payments.
When Yaspa detects that a consent has been revoked, the affected insights stop. For example, insights dashboards reflect data retrieved up to the revocation and then drop to zero, and any related insights webhooks stop. Merchants can subscribe to a dedicated "type": "CONSENT_REVOKED" webhook to be notified as soon as Yaspa detects the condition. Use the customerIdentifier and accountIds to accounts on file from payment activity to map the consent revocation to the customer and their impacted account(s).
For the avoidance of doubt, the payment flows handle consent revocation natively as specified; payment is in fact the ideal moment to repair a revoked consent.
Consent Revoked Webhook
Webhooks are sent as HTTPS POST requests, and a typical example of the request body is as follows:
{
"type": "CONSENT_REVOKED",
"data": {
"transactionId": "d7941707-fe9f-fa8d-2491-3da414",
"consentId": "cons_2b4d6f8h",
"accountIds": ["CHECKING"],
"merchantId": "69bbee7367f8982c81665203",
"customerIdentifier": "xekzyz3lorw9",
"reference": "3pdcj42fpn9t",
"bank": "US Test Bank",
"bankProvider": "MX",
"territory": "US",
"consentCreatedAt": "2026-10-02T21:27:58.510Z",
"reason": "Consent was revoked through the bank",
"revocationDetectedAt": "2026-10-05T11:20:43.117Z"
}
}As with other Yaspa webhooks, it is critically important that webhook handlers do not use strict mode parsing on the example above or samples from testing. Relevant parameters are defined in the table below:
| Field | Type | Description |
|---|---|---|
transactionId | string | Yaspa identifier for the account verification that created the consent |
consentId | string | Open banking provider's consent identifier |
accountIds | array of strings | Identifiers of the accounts affected by the revocation |
merchantId | string | Yaspa-assigned merchant identifier |
customerIdentifier | string | Customer identifier the merchant sent in the customerIdentifier request parameter |
reference | string | Merchant-assigned payment identifier for the originating transaction |
bank | string | Yaspa bank ID |
bankProvider | string | Open banking provider that holds the consent |
territory | string | Bank territory code |
consentCreatedAt | string | ISO 8601 datetime when the consent was created |
consentExpiresAt | string | ISO 8601 datetime when the consent would have expired, if known |
reason | string | Human-readable revocation reason |
revocationDetectedAt | string | ISO 8601 datetime when the revocation was detected |
Transaction History webhook
The Transaction History webhook details all transactions on each account a user has shared with Yaspa. The content is data-rich and intended for analysis, not for immediate action on receipt.
Yaspa coordinates configuration during integration. Typically merchants choose to receive 90-day windows of data, organized into monthly periods (statements) and delivered weekly or monthly after the user's first payment.
Insights object: Transaction History
| Field | Type | Description |
|---|---|---|
fromDate | string | ISO 8601 datetime of the start of the analyzed window |
toDate | string | ISO 8601 datetime of the end of the analyzed window |
accounts | array | Account-level insights, one entry per account eligible for insight generation. See Accounts. |
insight | string | CATEGORIZED_TRANSACTION_HISTORY by default, or TRANSACTION_HISTORY when categorization is excluded |
Accounts object
| Field | Type | Description |
|---|---|---|
account | object | The user's account information. Same fields as the Account object on Webhook Structure. |
fromDate | string | ISO 8601 datetime of the start of the window reported |
toDate | string | ISO 8601 datetime of the end of the window reported |
currency | string | ISO 4217 currency code, USD |
moneyIn | decimal | Sum of all incoming (credit) transaction amounts in the window |
moneyOut | decimal | Sum of all outgoing (debit) transaction amounts in the window, as a positive number |
closingBalance | decimal | Account balance at the end of the window, zero if undefined |
openingBalance | decimal | Account balance at the start of the window, zero if undefined |
statements | object | Transactions and summaries, grouped by the requested period type(s). See Statements. |
Statements object
| Field | Type | Description |
|---|---|---|
period | object | Transaction data aggregated by period type. See Period. |
Period object
| Field | Type | Description |
|---|---|---|
<period> | array | Collections of data organized into DAILY, WEEKLY and/or MONTHLY, as configured. Sorted most recent first. See Period data. |
Period data object
| Field | Type | Description |
|---|---|---|
fromDate | string | ISO 8601 (UTC) start of this period |
toDate | string | ISO 8601 (UTC) end of this period |
description | string | Human-readable label for the period, for example 2026-02 for monthly, WEEK 5, 2026 for weekly, 2026-02-04 for daily |
moneyIn | decimal | Sum of all incoming (credit) transaction amounts in this period |
moneyOut | decimal | Sum of all outgoing (debit) transaction amounts in this period, as a positive number |
closingBalance | decimal | Balance at the end of this period, zero if undefined |
openingBalance | decimal | Balance at the start of this period, zero if undefined |
transactions | array | Individual transactions during this period. See Transaction. |
Transaction object
| Field | Type | Description |
|---|---|---|
date | string | ISO 8601 (UTC) timestamp of the transaction's most recent update |
description | string | Cleaned merchant and/or transaction description |
originalDescription | string | Raw description as retrieved, before any relabeling |
category | string | Transaction category interpreted by Yaspa, unless disabled |
status | string | Transaction status at the time of the report: POSTED or PENDING |
amount | decimal | Negative for outgoing (debit), positive for incoming (credit) |
merchantCategoryCode | integer | Merchant category code (MCC), if available |
checkNumber | string | Check number. Present only for check transactions. |
balanceAfterTransaction | decimal | Running account balance immediately after this transaction |
Example payload
Insights webhooks are HTTPS POST requests. A typical request body:
{
"type": "INSIGHTS",
"data": {
"metadata": {
"merchantId": "6ac021de351a3351401565cb",
"customerIdentifier": "xekzyz3lorw9",
"reference": "3pdcj42fpn9t",
"transactionId": "d7941707-fe9f-fa8d-2491-3da414",
"merchantTradingName": "example.com"
},
"insightGroup": {
"id": "6650a3aac3b4d5e6f7a8b9d1",
"name": "Insight Group 1",
"insights": ["CATEGORIZED_TRANSACTION_HISTORY"],
"period": ["MONTHLY"],
"fromDate": "2026-01-01T00:00:00Z",
"toDate": "2026-02-28T23:59:59Z"
},
"insights": {
"CATEGORIZED_TRANSACTION_HISTORY": {
"fromDate": "2026-01-01T00:00:00Z",
"toDate": "2026-02-28T23:59:59Z",
"accounts": [
{
"account": {
"identifier": "CHECKING",
"financialInstitution": "US Test Bank",
"type": "CHECKING",
"holderName": "John Smith",
"numberLastFour": "7890",
"routingNumber": "222222226",
"dataAccessStatus": "CONNECTED",
"dataLastUpdated": "2026-03-01T09:14:22Z"
},
"fromDate": "2026-02-01T00:00:00Z",
"toDate": "2026-02-28T23:59:59Z",
"currency": "USD",
"moneyIn": 500.00,
"moneyOut": 40.00,
"closingBalance": 960.00,
"openingBalance": 500.00,
"statements": {
"period": {
"MONTHLY": [
{
"fromDate": "2026-02-01T00:00:00Z",
"toDate": "2026-02-28T23:59:59Z",
"description": "2026-02",
"moneyIn": 500.00,
"moneyOut": 40.00,
"closingBalance": 960.00,
"openingBalance": 500.00,
"transactions": [
{
"date": "2026-02-14T19:42:05Z",
"description": "Olive Garden",
"originalDescription": "OLIVE GARDEN #1123 AUSTIN TX",
"category": "Other",
"status": "POSTED",
"amount": -40.00,
"merchantCategoryCode": 5812,
"balanceAfterTransaction": 960.00
},
{
"date": "2026-02-13T08:00:00Z",
"description": "Payroll",
"originalDescription": "ACME CORP PAYROLL PPD ID 1234567",
"category": "Income",
"status": "POSTED",
"amount": 500.00,
"balanceAfterTransaction": 1000.00
}
]
}
]
}
}
}
],
"insight": "CATEGORIZED_TRANSACTION_HISTORY"
}
}
}
}Updated 4 days ago
