Event SpecsFinance & Fintech

Finance & Fintech Event Spec

This page defines the recommended event taxonomy for finance and fintech products — including retail banking, payments, lending, and investment platforms.

đźš«

Privacy requirement. Financial products handle highly sensitive personal data. Never send raw PII as event properties. Email addresses and phone numbers must be SHA-256 hashed before tracking. Do not send account numbers, sort codes, card numbers, or national insurance / social security numbers in any form.

All event names use snake_case. Monetary amounts should be sent as numbers (not strings) with a separate currency property using ISO 4217 codes (e.g. 'GBP', 'EUR', 'USD').


Onboarding & KYC

Events covering account creation and identity verification flows.

account_opened

A customer has successfully opened a new account.

PropertyTypeRequiredDescription
account_typestringNoType of account: 'current', 'savings', 'investment', 'business'
channelstringNoChannel used to open the account: 'web', 'mobile', 'branch'
_df.track('account_opened', {
  account_type: 'current',
  channel: 'mobile'
})

account_closed

A customer has closed an account.

PropertyTypeRequiredDescription
account_typestringNoType of account closed
reasonstringNoClosure reason code (e.g. 'switching_provider', 'no_longer_needed')
_df.track('account_closed', {
  account_type: 'savings',
  reason: 'switching_provider'
})

kyc_started

A customer has started an identity or compliance verification flow.

PropertyTypeRequiredDescription
verification_typestringNoType of check: 'identity', 'address', 'income'
_df.track('kyc_started', {
  verification_type: 'identity'
})

kyc_completed

A KYC verification step has been completed and a result returned.

PropertyTypeRequiredDescription
verification_typestringNoType of check performed
outcomestringNoResult of the check: 'approved', 'pending', 'rejected'
_df.track('kyc_completed', {
  verification_type: 'identity',
  outcome: 'approved'
})

kyc_failed

A KYC verification step has failed.

PropertyTypeRequiredDescription
verification_typestringNoType of check that failed
failure_reasonstringNoReason code for the failure (e.g. 'document_expired', 'name_mismatch')
⚠️

Do not include failure details that could expose personally identifiable information. Use reason codes rather than free-text descriptions from the verification provider.

_df.track('kyc_failed', {
  verification_type: 'address',
  failure_reason: 'document_unreadable'
})

Authentication

Events covering secure login and access attempts.

login_attempted

A user has submitted credentials or initiated a login flow.

PropertyTypeRequiredDescription
methodstringNoAuthentication method: 'password', 'biometric', 'sms_otp', 'totp'
_df.track('login_attempted', {
  method: 'biometric'
})

login_succeeded

Authentication was successful.

PropertyTypeRequiredDescription
methodstringNoAuthentication method used
_df.track('login_succeeded', {
  method: 'biometric'
})

login_failed

Authentication attempt failed.

PropertyTypeRequiredDescription
methodstringNoAuthentication method attempted
failure_reasonstringNoReason code (e.g. 'wrong_password', 'otp_expired', 'account_locked')
_df.track('login_failed', {
  method: 'sms_otp',
  failure_reason: 'otp_expired'
})

Transactions

Events covering payment initiation, completion, and failure.

transaction_initiated

A financial transaction has been submitted by the customer.

PropertyTypeRequiredDescription
transaction_typestringNoType of transaction: 'payment', 'transfer', 'withdrawal', 'deposit'
amountnumberNoTransaction amount
currencystringNoISO 4217 currency code
channelstringNoOriginating channel: 'web', 'mobile', 'api'
_df.track('transaction_initiated', {
  transaction_type: 'payment',
  amount: 89.50,
  currency: 'GBP',
  channel: 'mobile'
})

transaction_completed

A transaction has been processed successfully.

PropertyTypeRequiredDescription
transaction_idstringNoUnique transaction reference
transaction_typestringNoType of transaction
amountnumberNoTransaction amount
currencystringNoISO 4217 currency code
_df.track('transaction_completed', {
  transaction_id: 'txn_8f3a2b1c',
  transaction_type: 'payment',
  amount: 89.50,
  currency: 'GBP'
})

transaction_failed

A transaction could not be processed.

PropertyTypeRequiredDescription
transaction_typestringNoType of transaction
amountnumberNoAttempted amount
currencystringNoISO 4217 currency code
failure_reasonstringNoReason code (e.g. 'insufficient_funds', 'card_declined', 'fraud_block')
_df.track('transaction_failed', {
  transaction_type: 'payment',
  amount: 350.00,
  currency: 'GBP',
  failure_reason: 'insufficient_funds'
})

payment_made

A payment to a merchant or payee has been made.

PropertyTypeRequiredDescription
payment_idstringNoUnique payment reference
amountnumberNoPayment amount
currencystringNoISO 4217 currency code
payment_methodstringNoMethod used (e.g. 'card', 'direct_debit', 'open_banking')
merchant_categorystringNoMerchant category code or label (e.g. 'groceries', 'travel')
_df.track('payment_made', {
  payment_id: 'pay_9d2c1a3e',
  amount: 24.99,
  currency: 'GBP',
  payment_method: 'card',
  merchant_category: 'groceries'
})

payment_failed

A payment attempt failed.

PropertyTypeRequiredDescription
payment_idstringNoPayment reference
amountnumberNoAttempted amount
currencystringNoISO 4217 currency code
failure_reasonstringNoReason code for the failure
_df.track('payment_failed', {
  payment_id: 'pay_4b7e9f0d',
  amount: 199.00,
  currency: 'GBP',
  failure_reason: 'card_declined'
})

transfer_initiated

A funds transfer between accounts has been initiated.

PropertyTypeRequiredDescription
transfer_idstringNoUnique transfer reference
amountnumberNoTransfer amount
currencystringNoISO 4217 currency code
destination_typestringNoDestination type: 'internal', 'external', 'international'
_df.track('transfer_initiated', {
  transfer_id: 'trf_c3d5e8f2',
  amount: 500.00,
  currency: 'GBP',
  destination_type: 'external'
})

transfer_completed

A transfer has settled successfully.

PropertyTypeRequiredDescription
transfer_idstringNoUnique transfer reference
amountnumberNoTransferred amount
currencystringNoISO 4217 currency code
_df.track('transfer_completed', {
  transfer_id: 'trf_c3d5e8f2',
  amount: 500.00,
  currency: 'GBP'
})

Cards & Lending

Events covering card applications and loan lifecycle.

card_applied

A customer has submitted an application for a card product.

PropertyTypeRequiredDescription
card_typestringNoCard type: 'credit', 'debit', 'prepaid'
credit_limit_requestednumberNoRequested credit limit (credit cards only)
_df.track('card_applied', {
  card_type: 'credit',
  credit_limit_requested: 3000
})

card_approved

A card application has been approved.

PropertyTypeRequiredDescription
card_typestringNoCard type approved
credit_limitnumberNoApproved credit limit
_df.track('card_approved', {
  card_type: 'credit',
  credit_limit: 2500
})

card_activated

A card has been activated by the customer.

PropertyTypeRequiredDescription
card_typestringNoType of card activated
channelstringNoActivation channel: 'app', 'web', 'ivr'
_df.track('card_activated', {
  card_type: 'credit',
  channel: 'app'
})

loan_applied

A customer has submitted a loan application.

PropertyTypeRequiredDescription
loan_typestringNoLoan type: 'personal', 'mortgage', 'auto', 'business'
amount_requestednumberNoAmount requested
currencystringNoISO 4217 currency code
term_monthsnumberNoRequested loan term in months
_df.track('loan_applied', {
  loan_type: 'personal',
  amount_requested: 10000,
  currency: 'GBP',
  term_months: 36
})

loan_approved

A loan application has been approved.

PropertyTypeRequiredDescription
loan_typestringNoLoan type
amount_approvednumberNoApproved loan amount
currencystringNoISO 4217 currency code
interest_ratenumberNoAnnual interest rate as a percentage (e.g. 6.9 for 6.9% APR)
term_monthsnumberNoApproved loan term in months
_df.track('loan_approved', {
  loan_type: 'personal',
  amount_approved: 8000,
  currency: 'GBP',
  interest_rate: 6.9,
  term_months: 36
})

loan_funded

The approved loan amount has been disbursed to the customer.

PropertyTypeRequiredDescription
loan_idstringNoUnique loan identifier
amountnumberNoDisbursed amount
currencystringNoISO 4217 currency code
_df.track('loan_funded', {
  loan_id: 'loan_7e4a1f2b',
  amount: 8000,
  currency: 'GBP'
})

Account Management

Events covering account self-service and financial management features.

statement_viewed

A customer has viewed an account statement.

PropertyTypeRequiredDescription
account_typestringNoType of account the statement relates to
periodstringNoStatement period in YYYY-MM format (e.g. '2026-02')
_df.track('statement_viewed', {
  account_type: 'current',
  period: '2026-02'
})

alert_created

A customer has set up a balance or activity alert.

PropertyTypeRequiredDescription
alert_typestringNoAlert type: 'low_balance', 'large_transaction', 'unusual_activity'
thresholdnumberNoAmount threshold that triggers the alert
_df.track('alert_created', {
  alert_type: 'low_balance',
  threshold: 100
})

budget_created

A customer has created a spending budget for a category.

PropertyTypeRequiredDescription
budget_idstringNoUnique identifier for the budget
categorystringNoSpending category (e.g. 'eating_out', 'transport', 'subscriptions')
amountnumberNoBudget limit
currencystringNoISO 4217 currency code
_df.track('budget_created', {
  budget_id: 'bgt_2a3f9c1d',
  category: 'eating_out',
  amount: 200,
  currency: 'GBP'
})