Payment operations · Privately deployed

When the chargeback lands six weeks later, the evidence is already filed.

Lifecycle visibility, hashed evidence chain, and multi-gateway orchestration — deployed to a domain you own. Reserved for one merchant per instance.

PayOps evidence chain — hash-linked record of an order's lifecycle
Stripe · liveRazorpay · nextAuthorize.net · nextAdyen · roadmapPayPal · roadmapManual · wire / ACHSOC-style audit chainHashed evidenceHosted consentRealtime SSEStripe · liveRazorpay · nextAuthorize.net · nextAdyen · roadmapPayPal · roadmapManual · wire / ACHSOC-style audit chainHashed evidenceHosted consentRealtime SSE

Built for disputes that arrive six weeks late

When the chargeback lands, the evidence is already filed.

Banks want proof you delivered, the customer agreed, and the charge matches the order. PayOps captures every artefact inline — contesting a chargeback is a click, not a forensic exercise.

PayOps evidence chain for a disputed order

Webhook → evidence pack

charge.dispute.created → order auto-flagged → evidence chain frozen → operator notified → PDF ready to forward to the bank.

<60s

freeze

100%

captured

1 click

export

Every order persists a compliance-grade record. The moment a dispute webhook fires, PayOps freezes the chain, auto-flags risk, and prepares an exportable packet — long before the bank's evidence deadline.

  • Order audit chain

    append-only, typed

  • Payment intent + charge id

    gateway round-trip

  • Email correspondence

    rendered HTML + text

  • Hosted consent signature

    name + IP + UA

  • Hashed event timestamps

    SHA-256 chained

  • Gateway webhook receipts

    verified signatures

  • Lifecycle state transitions

    1..N sequence

  • PDF evidence export

    one-click forward

The lifecycle is the model

Every state of every order, captured in one canonical chain.

Operators stop asking 'is this paid yet'. The lifecycle is the answer — visible in realtime, derived from backend authority, with no UI shortcuts or optimistic guesses.

  1. 01

    Created

    Order is drafted. No gateway side-effects yet.

  2. 02

    Draft saved

    Manual save. No silent autosave to surprise you.

  3. 03

    Gateway selected

    Operator picks the gateway. Frozen onto the order from here.

  4. 04

    Payment link generated

    Gateway session created. URL persisted, expiry stamped.

  5. 05

    Email sent

    Request email dispatched. Consent record created in lockstep.

  6. 06

    Consent received

    Customer signs on the hosted page. IP + UA captured.

  7. 07

    Payment started

    Customer reaches the gateway checkout.

  8. 08

    Paid

    Webhook reconciles. Audit + event + outbox fire atomically.

  9. 09

    Confirmation sent

    Receipt delivered via durable outbox. Timeline goes green.

  10. 10

    Refunded / Failed

    Refund and failure paths preserve the full chain.

One operational hub

Twelve surfaces, zero duplicate truth.

The dashboard, order detail, email composer, and dispute log all read the same record at the same time. No shadow Postgres. No stale cache.

Payment requests

draft → send

Confirmations

receipt + retry

Gateway activity

webhook + reconcile

Customer consent

hosted + signed

Payment state

canonical lifecycle

Disputes

auto-flag + freeze

Evidence chain

hashed + exportable

Audit trails

append-only

Exports

CSV + PDF

Order notes

operator scratch

Email templates

versioned + active

Internal comms

team activity feed

Gateway-agnostic orchestration

One gateway in production. The rest, one adapter away.

Stripe handles every active charge today. The orchestration layer underneath was built gateway-agnostic from day one — adapters slot in without rewriting the order lifecycle, webhook contract, or audit chain.

SLive

Stripe

Checkout + webhook + dispute + refund in production.

RNext

Razorpay

Adapter scaffold ready · India-region routing.

ANext

Authorize.net

Adapter scaffold ready · activation on credentials.

YRoadmap

Adyen

Card-present + 3DS routing under design.

PRoadmap

PayPal

Marketplace flow under design.

MLive

Manual

Wire, ACH, or any out-of-band capture flow.

src/server/payments/gateway.tsinterface
interface PaymentGateway {  // Stable identifier + admin label.  key: PaymentGatewayKey;  label: string;  enabled: boolean;   // One contract, every adapter.  createSession(input): Promise<CreatedSession>;  verifyWebhook(body, sig): VerifiedPaymentEvent;  getSessionStatus(id): Promise<SessionStatus>;  expireSession(id): Promise<void>;}

Routing precedence: per-order override → org default → registry default. Normalised VerifiedPaymentEvent shape across providers.

Trust where it matters

The data model was designed for the conversation finance has with auditors and banks.

Compliance isn't an export feature added later. It's the schema. Every record on PayOps was designed assuming someone might ask, two years from now, exactly what happened on a specific order.

Webhook idempotency

0%

every gateway event collapses to one transition

Drift between surfaces

0

one record · realtime push + polling backstop

Evidence retention

paid, refunded, disputed — kept forever

01

Backend authority, never UI optimism

Every badge derives from the canonical record. Dashboard, order detail, and dispute log can never disagree.

02

Append-only audit log

Typed audit rows with actor, IP, user-agent, and metadata. Not editable, even by admins.

03

Hashed evidence chain

Per-order events chain-hash to the previous entry. Any rewrite breaks the chain — provable to disputes and regulators.

04

Atomic webhook handling

Idempotent, defensively ordered, conditional updates. Duplicate Stripe delivery is a no-op. Retried reconcile is a no-op.

05

Operations-grade idempotency

Consent recorded once. Confirmation emails sent once. Refunds ratchet forward, never backward.

06

Retention by design

Paid orders never delete. Refunded orders never delete. Risk-flagged orders persist through archive — surfaces dim, records stay.

Privately deployed · reserved per merchant

Not shrink-wrap SaaS. A managed deployment sized to your stack.

PayOps is reserved for one merchant per instance. After quotation, your deployment is scoped, branded, and provisioned on a domain you own — not a tenant on someone else's cluster.

01

Quotation

Share volume, current stack, and gateway preferences. We respond within one business day with a scoped proposal.

02

Customisation

Branding, policy snapshots, role matrix, gateway routing — configured to your org before the first deploy.

03

Private deployment

Provisioned on a domain you own. Reserved for one merchant per instance. No shared tenant, no public sign-up.

Included with every deployment

  • Branded customer-facing pages
  • Role + permission matrix to your spec
  • Gateway adapters (Stripe live, others on demand)
  • Audit-grade evidence chain
  • Hosted consent flow
  • PDF + CSV dispute exports
  • Realtime SSE — single instance ready
  • DigitalOcean / GCP / AWS targets

Start a quotation · or just email Vinay

Tell us about your payments stack.

A short brief is enough to get a tailored response from the team that builds and operates PayOps. We reply within one business day.

By submitting, you agree to be contacted by the PayOps team about your request. No marketing.