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'
})