Blog

Technical notes on transaction enrichment.

Concrete examples for builders who need merchant names, confidence, warnings, logo metadata, and privacy boundaries without turning the request path into live research.

How to parse processor-wrapped transaction descriptors Separate processor wrappers, merchant phrases, store tokens, and location hints before making a merchant identity claim. What a transaction enrichment API should return on a miss Return a readable fallback, confidence, signals, and warnings while omitting merchant metadata the evidence cannot support. Normalization vs. merchant identification: why the distinction matters Clean descriptor text is useful, but it is not the same as a reviewed merchant identity, website, or logo. Why one-descriptor API requests are easier to trust than ambiguous batches Keep validation, timeouts, confidence, warnings, retries, and failures attributable to one transaction at a time. How to test merchant enrichment with deterministic fixtures Test recognized, unresolved, and privacy-rejected cases with evidence-aware assertions instead of display-name checks alone. Why descriptor cleanup should return warnings, not fake certainty Confidence-aware enrichment lets product teams design fallback UI instead of trusting a guessed merchant identity. How to enrich transactions without sending sensitive financial data Reject statement-like and PII-heavy input before parsing, logging, matching, queueing, or third-party use. MCC is useful context. It is not merchant enrichment. MCC can help category confidence, but it cannot turn processor-wrapped descriptors into display-ready merchants by itself. Why TxnKit avoids live LLM calls during POST /v1/enrich A transaction row should not wait on a prompt, crawler, logo lookup, or third-party enrichment provider. Logo metadata belongs in transaction enrichment, not in a separate guessing step Logo variants need source, purpose, shape, size, theme, and confidence fields so client apps can choose safely.