DisputeShield gives your customers a dispute-filing interface and your compliance team an SLA-tracked, immutably audited case system — without you building a ticketing product. One script tag, one server-side call to mint a session token. No database changes.
There is no clock.
Nobody knows which complaint is closest to breaching until it has already breached.
Complaint handling in fintech is regulated: mandated acknowledgement and resolution windows, mandated record-keeping, and a supervisory expectation that you can produce evidence of exactly how a complaint was handled and when. In practice complaints arrive by email, chat, WhatsApp and phone into a shared inbox; transaction context is not attached, so an agent asks an engineer and waits hours; the audit trail is whatever the email thread happens to contain, and every message in it is editable and deletable.
It records an outcome, including a refund amount, and it has no code path to a payment. That is a permanent scope decision, not a v1 limitation, and it is enforced with a call-graph test — because the credibility of an evidence system depends on it having no ability to act on the thing it holds evidence about.
It holds no card data. The SDK strips it at source and the server independently rejects any payload containing a 13–19 digit string that passes a Luhn check. PCI-DSS is out of scope by design, and the claim holds because it is enforced rather than asserted.
It is not an omnichannel helpdesk. The moment it handles “where is my card?” it competes with Zendesk on Zendesk’s terms and loses the regulated-dispute focus that is the entire argument.
The widget runs cross-origin and sandboxed, and the publishable key can read nothing.
submitted customer files via the widget → acknowledged automatic — the ack clock stops here investigating transaction context already attached ⚠ sla_warning fired BEFORE the breach, not after resolved outcome recorded, refund amount noted — and no code path to a payment every transition hash-chained, append-only, exportable
| Before | With DisputeShield | |
|---|---|---|
| Standing up regulated dispute handling | 3–6 engineer-months | 30 minutes |
| SLA breaches per month | unmeasured | measured, alerted before breach |
| Median time to first response | hours to days | minutes — acknowledgement is automatic |
| Producing a regulatory evidence pack | days | one export |
| Agent time gathering context | ~40% of handling time | near zero — attached at filing |
A pausable clock is an abusable clock. The resolution clock does stop while you are legitimately waiting on the customer — and every pause requires a reason, writes an audit record, and is reported as a pause-duration metric by agent.
The iframe cannot reach the host page, and the publishable key can read nothing — every data operation needs a session token your own backend mints, scoped to exactly one customer.
Hash-chained on the write path, immutability enforced by database trigger. An admin cannot quietly edit history.
The alert fires while there is still time to act. An alert after the breach is a report, not a control.
Enforced by a call-graph test, not by convention. An evidence system that can act on its own subject is not evidence.
One command produces the pack, rather than assembling it by hand under time pressure after the request arrives.
make up && make hello
<script src="https://your-host/loader.js"></script>
<script>DisputeShield.init({ publishableKey: "pk_live_…", sessionToken })</script>