Payments and billing | TraceX

Payments and billing

Every refund, charge and payout, explained.

Payment problems are the ones customers notice first. TraceX follows the money through your database, your payment code and your logs, and shows exactly where it went.


The problem

Sound familiar?

“Where is my refund?”

The answer is spread across the refunds table, a worker's logs and last week's deploy.

Double charges

Retries, webhooks, and timeouts make duplicate charges hard to find and harder to explain.

Finance needs numbers now

How many customers were affected, and for how much, means yet another ad-hoc query.


Follow the money

See exactly what happened to every payment.

TraceX queries your payment tables read-only and follows each record through its states, so you can see where a refund or charge got stuck.

PostgreSQL · production · read-only

SELECT id, order_id, state, created_at FROM refunds WHERE state = 'pending' AND created_at > '2026-10-21'
id order_id state created_at
rf_9921 48213 pending Oct 21 09:12
rf_9934 48190 pending Oct 21 11:40
rf_9958 48236 pending Oct 22 08:03
rf_9987 48271 pending Oct 23 16:55
… … … …

34 rows · read-only query · no rows stored

34 refunds are stuck in pending, every one created after Oct 21.


Ask about any order

Answers where your team already is.

Ask TraceX in Slack why an order was charged twice, and get the cause and who else was affected, with citations.

#support · Slack

Priya 2:14 PM
@TraceX why was order 48190 charged twice?
TraceX APP
A card error retried the charge without an idempotency key, so the second attempt charged again 1. 6 orders were hit on Oct 22 2.


Numbers for finance

The impact, with the rows behind it.

When finance asks how many customers were affected and for how much, TraceX answers with the total and the records behind it, ready to export.

How many customers were charged twice on Oct 22, and for how much?

Queried payments · 12 rows
Checked the total against the rows
6 customers were charged twice, $1,284.00 in total 1.

Order Amount
48190 $249.00
48197 $189.00
… …

Hypotheses

Why it happened, proven.

For every payment problem, TraceX tests the likely explanations against your data and logs, and shows which one holds and why the others don't.

Why was #48190 charged twice? 3 tested The customer clicked Pay twice
Ruled out
The provider sent a duplicate webhook
Ruled out
A retry charged again without an idempotency key
Confirmed


How it fits

Set up once. Useful every day.

01

Connect read-only

Your payments database with read-only credentials, your repositories and your logs.

02

Ask about any payment

From a ticket, in Slack or in the dashboard: what happened to this refund, this charge, this payout?

03

Act on the evidence

Reply to the customer, give finance the numbers, and review the fix.


What you get

Built for how you work.


FAQ

Does TraceX connect to our payment provider?

TraceX reads your own database, code and logs, where your payment records and provider responses are stored. It doesn't need access to move money, and never could.

Is financial data stored?

No copy of your tables is kept. Answers keep what was looked up and where, and exports are deleted after 24 hours.

Can finance use it directly?

Yes. Anyone your admins invite can ask in plain English, read-only.


Find the root cause. Ship the fix.

TraceX is free during the private beta. Connect a database and a repository and ask your first question in minutes.