← All work
Client name withheld under NDA

Fintech

Payment API Rebuild

Client name withheld under NDA · Fintech payments platform

Overview

The engagement redesigned a payment processing API that handled transaction initiation, provider communication, status tracking, and webhook processing. The prior system ran as a single synchronous flow with limited retry behavior and limited auditability.

System Architecture

architecture — payment-service

Client App

React SPA

API Gateway

Rate limiting + auth

Webhook Receiver

External events

Payment Service

Event-driven · Idempotent

PostgreSQL

Transactions

Event Bus

Async processing

Audit Log

Compliance trail

Payment Provider

Stripe / ACH

Notification Service

Email + Slack

The Problem

Peak-load failures were difficult to contain because the synchronous pipeline lacked queueing, backpressure, and dependable retry behavior.

Webhook handling was tightly coupled to the main transaction flow, which made out-of-order provider events harder to process safely.

Investigation depended on unstructured application logs rather than a searchable audit trail.

Compliance review required stronger traceability for transaction state changes.

Technical Approach

01

Mapped the existing transaction lifecycle

We traced payment states and transitions to identify race conditions and failure points before changing architecture.

02

Separated the pipeline into discrete events

The process was broken into independent events such as initiation, provider submission, confirmation, and settlement, each with its own handler.

03

Added idempotency and retry logic

Handlers were designed to be idempotent. Failed events retry with backoff and move to a dead-letter path for review after repeated failure.

04

Built a compliance-oriented audit log

State transitions, external API calls, and webhook receipts were recorded with timestamps and payload context for end-to-end investigation.

05

Rebuilt the webhook handler as a separate path

Incoming webhooks are validated, logged, and queued instead of being processed inline with the primary transaction request.

Tech Stack

backend

Node.jsTypeScriptExpress

data

PostgreSQLRedis (queue + cache)

integrations

Stripe APIACH providerSlack notifications

infrastructure

DockerAWS ECSGitHub Actions CI/CD

Engagement Details

Timeline

Approximately 10 weeks (subject to verification)

Team

Senior Axionvex Tech engineer with client engineering counterparts

Outcomes

Design and control changes are listed below. Numeric claims stay unpublished until measurement is verified.

Load resilience

Design change
Before

Synchronous path with limited failure isolation

After

Queued, idempotent processing with retry and dead-letter handling

Traceability

Design change
Before

Unstructured logs for incident reconstruction

After

Structured audit history for transaction investigation

Measured production results

Pending verification
Before

Baseline metrics not yet published

After

Numeric outcomes withheld pending verification

Architecture, controls, and implementation notes are published. Measured before/after figures and client attribution remain pending verification.

Have a similar workflow?