All proposals
OFP-010 DraftHigh impact

Make the transaction narrative a required field

Add TransactionInformation — the transaction narrative — to the required list on every transaction the data-sharing API returns. The narrative is what powers categorisation, affordability, and underwriting; without it the dataset is close to meaningless. This codifies what Nebras already enforces for CASA, and asks the ecosystem whether it is achievable for every product.

Proposed by
Nebras
Author
Nowaier AlQahtani
Target version
V2.2
Opened
30 Jul 2026
Closes
19 Aug 2026
Decision

Cast your vote

Sign in with the Trust Framework to vote — For, Against, or Abstain — recorded in the open with your reasoning. Your organisation and name come from your directory profile, and each person may vote once.

§ BallotOFP-010Closes 19 Aug 2026 ·
Where do you stand?
Pick a stance to add your name & a comment.
0%
in favour
0
votes cast
0
For
0
Against
0
Abstain
Voting not yet open
Voting opens 30 Jul 2026
The proposal
01 · Background

The narrative is the value — and it is optional

A transaction returned from GET /accounts/{AccountId}/transactions carries the structured essentials — an amount, a date, a credit/debit indicator, a type. What tells a TPP what the transaction was actually for is the narrative: the free-text TransactionInformation field. It is the single most important input to the use cases Open Finance exists to enable — categorisation, affordability assessment, and underwriting. Strip it out and a statement collapses into a column of amounts a TPP cannot reason about.

Yet in the specification the field is defined but not required. In the TPP Standards spec, TransactionInformation is a string of 1–500 characters described as “the transaction narrative, which is unstructured text”, but it does not appear in the AETransaction required list. The picture is the same on the LFI side: the Ozone Connect transactionInformation field is optional on CbuaeTransaction too. An LFI can therefore return a schema-valid transactions response with no narrative at all.

In practice Nebras has not accepted that. Where an LFI’s CASA transaction data has arrived without narratives, it has been treated as a functional-certification failure and a remediation plan has been required before sign-off — because a dataset without the narrative is not a functioning dataset. This proposal asks that we stop enforcing that case by case and write it into the standard.

The complication is scope. The remediation practice grew up around CASA — current and savings accounts, where a narrative is dependable. But the transactions endpoint is a single shared schema used for every product: credit cards, personal finance, mortgages, and SME / corporate accounts all report through it. We have not scrutinised the narrative for those products the way we have for CASA. Making the field technically required turns it on for all of them at once — so the honest question this proposal puts to the ecosystem is whether every LFI can actually supply it, for every product.

02 · Recommendation

Require it on the transaction object

Add TransactionInformation to the required list of the transaction object, on both sides of the Hub: AETransaction in the TPP Standards spec and transactionInformation on CbuaeTransaction in the Ozone Connect spec. The field already exists and is already sized — this is a one-line addition to a required array, not a new field or a shape change. Field bounds (1–500 characters) do not move.

Because the LFI is the producer of this data, the obligation binds the LFI. It is asserted primarily at functional certification — exactly where Nebras already asserts it for CASA — so that a narrative-less transactions response fails sign-off before production rather than being remediated ad hoc afterwards. Writing it into the schema makes the rule published and testable instead of discretionary.

The proposal deliberately recommends the uniform change — required across every product — because that is what a schema-level requirement means, and because a consistent narrative across LFIs is what makes the data comparable. But it does not assume every product can meet it. Whether that is achievable for credit cards, personal finance, mortgages, and SME accounts is the central open question below, and the answer may move us toward a product-scoped rule enforced at certification rather than in the schema. We would rather surface that trade-off than legislate through it.

03 · Technical changes

What changes in the spec

A single field added to the transaction object’s required list on each side — field definition and bounds unchanged.

01 · TPP Standards spec

Add TransactionInformation to AETransaction.required in uae-account-information-openapi.yaml. The field’s own definition (string, minLength 1, maxLength 500) is untouched.

02 · Ozone Connect spec

Add transactionInformation to CbuaeTransaction.required in uae-ozone-connect-bank-data-sharing-openapi.yaml, so the obligation binds the LFI as the data producer and the two sides stay in step.

03 · Align the Ozone Connect bounds

The Ozone Connect transactionInformation currently declares no length bounds. Add minLength 1 / maxLength 500 so both sides agree on what a valid narrative is — otherwise a field that is “required” could still be an empty string.

04 · Where it is enforced

Primarily at functional certification, against the LFI’s pre-production environment — the same gate at which Nebras already requires CASA narratives. Formalising it in the schema turns today’s case-by-case remediation into a standing conformance rule.

05 · Runtime behaviour

This is a response field, so strict runtime rejection is blunt: a single narrative missing from an LFI response would otherwise fail schema validation for a whole page of transactions. Certification is therefore the primary control; any runtime handling at the API Hub should be decided deliberately rather than defaulting to a hard reject.

Today — defined, but not required
# GET /accounts/{AccountId}/transactions · AETransaction — today
required:
  - TransactionId
  - CreditDebitIndicator
  - Status
  - BookingDateTime
  - Amount
  - TransactionDateTime
  - TransactionType
  - SubTransactionType
  # TransactionInformation is DEFINED but not required:
properties:
  TransactionInformation:
    description: The transaction narrative — unstructured text.
    type: string
    minLength: 1
    maxLength: 500
Proposed — one line added to required
# GET /accounts/{AccountId}/transactions · AETransaction — proposed
required:
  - TransactionId
  - CreditDebitIndicator
  - Status
  - BookingDateTime
  - Amount
  - TransactionDateTime
  - TransactionType
  - SubTransactionType
  - TransactionInformation        # ← added; field bounds unchanged (1–500)
Meaningful
  • CARREFOUR HYPERMARKET, DUBAI MALLDebit — merchant and location
  • SALARY — ACME TRADING LLCCredit — payer identified
  • ATM Withdrawal — ADCB, Sheikh Zayed RdCash — channel and site
  • Etisalat postpaid billBill payment — biller named
  • IB Transfer to A. Khan — rentTransfer — counterparty and reason
× Defeats the purpose
  • (field omitted)Fails: the field is now required and absent
  • -Passes schema, defeats intent — placeholder padding
  • N/APasses schema, defeats intent — no narrative
  • TransactionPasses schema, defeats intent — generic filler
  • TXNPasses schema, defeats intent — carries nothing

Only the first row on the right is caught by the schema (the field is now required and absent). The rest pass a presence check yet carry no narrative — which is precisely what the quality question below is about.

04 · Pros

What requiring the narrative buys

  • The dataset gains its meaning. The narrative is what turns a row of amounts and dates into something a TPP can act on — categorisation, affordability assessment, and underwriting all read from it. Without it the payload is close to inert.
  • Codifies a rule Nebras already enforces. Where CASA transaction data has arrived without narratives, Nebras has required remediation plans before functional sign-off. Making the field required turns that case-by-case remediation into a published, testable conformance rule.
  • One consistent expectation across every LFI — the narrative can no longer be silently dropped by some institutions and populated by others, which is what makes cross-LFI data comparable.
  • A missing narrative is caught at functional certification, before production, rather than surfacing as a data-quality gap once TPPs are live.
  • Minimal, additive spec change: the field already exists and is already sized (1–500 characters). This only adds it to the transaction object’s required list — no new fields, no shape changes.
05 · Cons

What it costs

  • ×The rule was shaped by CASA. Current and savings accounts reliably carry a narrative; credit cards, personal finance, mortgages, and SME / corporate accounts may source it differently — or, for some product cores, not populate it at all.
  • ×An LFI whose core does not emit a narrative for a given product line would need a core or mapping change to comply — a real remediation cost, not just a schema toggle.
  • ×A hard presence check guarantees the field is there, not that it is useful. It invites placeholder padding (“-”, “N/A”, “Transaction”) that passes validation while defeating the intent.
  • ×The transaction object is a single shared schema — required is all-or-nothing across products. It cannot, as written, say “required for CASA, optional for mortgages”.
  • ×Because this is a response field, strict runtime rejection is blunt: one transaction missing a narrative could fail validation for an entire page of results. Primary enforcement therefore sits at certification, not at every live call.
06 · Open questions

What we’re asking the ecosystem

The recommendation is uniform on purpose — but whether it is achievable everywhere is genuinely open. Settle this and it folds into the change.

  • Q1
    Cross-product achievability — this is the central question. The narrative is dependable for CASA, but the transactions endpoint is shared across credit cards, personal finance, mortgages, and SME / corporate accounts. For each of those, can your core reliably supply a meaningful narrative for every transaction? Where it cannot today, what would remediation involve, and how long would it take? Making the field required binds every product at once — we need to know where that is not achievable before we commit.