Regular Transactions Schema for Egress
Field reference for regular transaction series messages on the Kafka egress topic.
Message envelope
The Kafka message value is a JSON object produced by the regular-transactions worker:
| Field | Type | Optional | Description |
|---|---|---|---|
| accountId | String (max 36) | No | Account identifier for which series were computed. |
| predictions | Array<Object> | No | Array of regular transaction series objects (schema below). May be empty. |
Series object (predictions[])
predictions[])Each element matches the object built in the worker’s result-formatting stage.
| Field | Type | Optional | Description |
|---|---|---|---|
| seriesId | String (max 36) | No | The ID of the regular transaction series. UUID format. |
| accountId | String (max 36) | No | The ID of the account the transactions belong to. |
| userId | String (max 36) | Yes | The ID of the user the transactions belong to. |
| type | String (max 7) | No | Whether the series contains income or payment transactions (income or payment). |
| subtype | String (max 21) | Yes | Subtype: directDebit, standingOrder, frequentVisit, committedCardPayment, or other. |
| frequency | String (max 11) | No | Frequency: yearly, quarterly, monthly, fortnightly, or weekly. |
| description | String (max 256) | No | The full description of the latest transaction in the series. Same limit as enriched transaction description. |
| cleanedDescription | String (max 256) | No | The cleaned description of the latest transaction in the series. |
| matchMethod | String (max 64) | No | The method used to match transactions in the series. |
| stitched | Boolean | No | Whether the series has been stitched together from multiple series. |
| numTxMatchedInSeries | Integer | No | The number of transactions contained in the series. |
| gapLengthInFreqUnits | Integer | No | If the series contains a gap, the number of whole frequency units that are missing. |
| dateAnomaliesCount | Integer | No | The number of date anomalies detected in the series. |
| numReturnedTxs | Integer | No | The number of returned transactions (reversed or declined) contained in the series. |
| lastDate | String (max 10) | No | The date of the latest transaction in the series (yyyy-MM-dd). |
| predictedDate | String (max 10) | No | The predicted date of the next transaction in the series (yyyy-MM-dd). |
| predictedDateEarliest | String (max 10) | Yes | The earliest predicted date at which the next transaction could occur (null if not set). |
| predictedDateLatest | String (max 10) | Yes | The latest predicted date at which the next transaction could occur (null if not set). |
| predictedDateMethod | String (max 64) | No | The method used to predict the next transaction date. |
| predictedTxLateOrNotDetected | Boolean | Yes | Whether the next predicted transaction is overdue or not detected. May be omitted if not set. |
| predictedAmount | Number | No | The predicted amount of the next transaction (as emitted by detection; currency base units where applicable). |
| predictedAmountLower | Number | Yes | Lower bound of the predicted amount. |
| predictedAmountUpper | Number | Yes | Upper bound of the predicted amount. |
| predictedAmountMethod | String (max 64) | No | The method used to predict the next transaction amount. |
| currency | String (max 3) | Yes | ISO 4217 currency code. Same limit as enriched transaction currency. |
| counterpartyId | String (max 36) | Yes | L3 counterparty identifier from the first matched transaction that has counterparty enrichment. UUID format. |
| predictedCategoryId | String (max 3) | No | The ID of the predicted category. Same limit as enriched transaction l2CategoryId. |
| analysisCategory | String (max 32) | Yes | The analysis category for the series. Same limit as counterparty l3CounterpartyCategory. |
| transactions | String | No | JSON string encoding an array of transaction objects (see below). Not a native JSON array on the wire. |
Parsed shape of transactions
transactionsAfter JSON.parse on the transactions string, each element has:
| Field | Type | Description |
|---|---|---|
| uid | String (max 36) | Transaction identifier. |
| date | String (max 10) | Transaction date (yyyy-MM-dd). |
| description | String (max 256) | Transaction description. |
| amount | Number | Transaction amount. |
| categoryId | String (max 3) | Category ID. |
| cleanedDescription | String (max 256) | Cleaned description. |
| txCode | String (max 64) | Provider transaction type code. |
| cardPresent | Boolean | Whether the transaction was card-present. |
| analysisCategory | String (max 32) | Counterparty analysis category identifier. May be omitted when not available. |
Example (Kafka message body)
{
"accountId": "090ea264-eb48-494c-9d59-1b10b322c3e1",
"predictions": [
{
"seriesId": "45f004dc-254f-5d09-b07f-8d4de4487781",
"accountId": "090ea264-eb48-494c-9d59-1b10b322c3e1",
"userId": null,
"type": "payment",
"subtype": "frequentVisit",
"frequency": "quarterly",
"description": "Dentist Checkup",
"cleanedDescription": "Dentist Checkup",
"matchMethod": "default",
"stitched": false,
"numTxMatchedInSeries": 4,
"gapLengthInFreqUnits": 0,
"dateAnomaliesCount": 0,
"numReturnedTxs": 0,
"lastDate": "2026-01-20",
"predictedDate": "2026-04-20",
"predictedDateEarliest": "2026-04-20",
"predictedDateLatest": "2026-04-21",
"predictedDateMethod": "sameDay",
"predictedTxLateOrNotDetected": false,
"predictedAmount": -65,
"predictedAmountLower": -65,
"predictedAmountUpper": -65,
"predictedAmountMethod": "sameAmount",
"currency": "GBP",
"counterpartyId": "203d5a9a-d4dd-5ce5-ab60-60f740336dea",
"predictedCategoryId": "11",
"analysisCategory": null,
"transactions": "[{\"uid\":\"TXN-090ea264-775\",\"date\":\"2026-01-20\",\"description\":\"Dentist Checkup\",\"amount\":-65,\"categoryId\":\"11\",\"cleanedDescription\":\"Dentist Checkup\"},{\"uid\":\"TXN-090ea264-774\",\"date\":\"2025-10-20\",\"description\":\"Dentist Checkup\",\"amount\":-65,\"categoryId\":\"11\",\"cleanedDescription\":\"Dentist Checkup\"}]"
}
]
}The transactions value above is one string; parsed it is equivalent to:
[
{
"uid": "TXN-090ea264-775",
"date": "2026-01-20",
"description": "Dentist Checkup",
"amount": -65,
"categoryId": "11",
"cleanedDescription": "Dentist Checkup"
},
{
"uid": "TXN-090ea264-774",
"date": "2025-10-20",
"description": "Dentist Checkup",
"amount": -65,
"categoryId": "11",
"cleanedDescription": "Dentist Checkup"
}
]