Journal · 12 Mar 2026

Why self-hosted payment software still wins.

A hosted processor is convenient until the Sunday you need the ledger and the vendor is a ticket.

Published
12 Mar 2026
Reading time
11 min
Readers
—
Topics
StablePayPaymentsOwnershipTreasury
On this page

Key takeaways

  • Hosted processors are the right default. Ownership becomes cheaper at a specific, recognisable moment.
  • The real question is who holds keys, who can replay an event, and who can explain the record without a vendor.
  • Self-hosting moves cost from a fee line to an operating line — decide with both numbers in view.
  • A self-hosted product is only fair if it ships with runbooks, upgrade paths, and honest boundaries.

Most teams do not start with a desire to run payment software. They start with a checkout that works, a vendor that answers Slack, and a promise that settlement is someone else's problem. That arrangement holds until the first weekend a webhook disappears and treasury cannot say what is owed.

This essay is about that weekend — what it tells you, when it arrives, and why we built StablePay as software you deploy rather than a service we run. It is not an argument against hosted processors. We tell teams to buy one all the time. It is an argument for noticing the moment the trade flips.

17 daysVellum: time to first live payment on StablePay
−64%Manual reconciliation after cutover
0Missed-webhook incidents in the first 90 days

The Sunday problem

Every treasury team we have worked with can describe the same scene. It is a weekend. A counterparty says a payment was sent. The application says nothing arrived. The vendor dashboard shows a status that could mean either. Someone opens a ticket, and the ticket is answered on Monday.

Nothing in that scene is a bug. The processor did what it was designed to do. The problem is structural: the record of what happened lives on a system you cannot inspect, and the person who can explain it is not on call for you.

At low volume that is a fine trade. You are paying someone to carry the operational burden, including the burden of being wrong at 2am. The trade changes when the cost of not knowing exceeds the cost of knowing.

CounterpartySays the payment was sent
Your appShows nothing arrived
Vendor dashboardA status that could mean either
Support ticketOpened on the weekend
MondayFirst real answer
The Sunday incident, step by step — every arrow is a hand-off to a system you cannot inspect

What ownership actually means

"Self-hosted" is often argued as a philosophy. It is more useful as a checklist of concrete operating questions:

QuestionHosted processorSelf-hosted software
Who holds the signing keys?The vendor, or a custodian they contractYou, in an environment you operate
Who can replay a missed event?Whoever the vendor's support process letsYour operators, with a replay token
Where does payment state live?A ledger you can export fromA database you run and can query
Who chooses networks and tokens?The vendor's roadmapYou, limited to what is implemented and tested
Who is on call?The vendor for the platform; you for the integrationYou, for everything — with a runbook
What changes when the vendor changes?Fees, limits, or behaviour, on their timelineNothing until you upgrade

The last row of that table is the one people underestimate. A vendor is a dependency with its own incentives. That is fine — until it is a dependency inside your settlement path.

When the trade flips

In our experience the flip is not a company size. It is one of four moments, and teams usually recognise them only in hindsight.

  1. The reconciliation moment. Finance is spending real hours stitching an export to an application log to a wallet. The manual work is the invoice for not owning the record.
  2. The constraint moment. A customer, regulator, or counterparty asks where keys live, or who can move funds. "A vendor, under a contract" stops being a complete answer.
  3. The behaviour moment. The processor changes a webhook, a limit, or a fee, and your roadmap is now someone else's Tuesday.
  4. The incident moment. A payment that looks confirmed on-chain is silent in the application and nobody on your side can prove which is right.

Vellum Markets hit the first and fourth at once. Settlement lived across a hosted processor, three wallets, and a nightly export nobody trusted after a missed webhook. Treasury could not answer, on a Sunday, what was owed, what was confirmed, and what was still in flight.

We stopped renting a processor and started running a system we could explain to our own engineers.

— Mira Adel, Head of Treasury, Vellum Markets

Ownership does not remove the cost of running payments. It moves that cost to a place you can see and measure.

The honest cost of owning it

Self-hosting is not free, and any vendor who tells you otherwise is selling something. What changes is where the cost sits.

Costs that move onto you

  • Running the deployment: Docker, PostgreSQL, backups, and upgrades.
  • RPC providers and node reliability for the networks you enable.
  • On-call. Someone on your side must be able to read the dashboard at 2am.
  • Keeping current: patch releases only help if you apply them.

Costs that go away

  • Per-transaction fees to a processor whose margin is your volume.
  • The reconciliation work created by a ledger you cannot query.
  • Adapter code that exists only to bridge a vendor's shape to yours.
  • The negotiation whenever the vendor changes a term.

Compare both lines

Do not compare a vendor's fee with zero. Compare the fee plus reconciliation hours against the operating cost of a deployment your team already knows how to run.

What a fair self-hosted product owes you

Owning infrastructure is only a good deal if the software makes it tractable. We hold StablePay to a short list, and we would hold anyone else's to it too:

  • A clear boundary. The studio is not in the path of funds. No hidden hosted signer, no "we can hold this for you" mode.
  • A documented event contract. Signed, versioned webhooks and a replay path, so a missed delivery is recoverable rather than a mystery.
  • A queryable record. Payment state in a database you run, plus an operator dashboard for tracking, confirmation, and settlement.
  • Honest scope. Networks and tokens are limited to what is implemented and tested. Anything not shipped is marked planned.
  • A handover. Runbooks for the ugly cases, not just an install guide.

How a cutover actually went

Ownership sounds like a big-bang migration. It was not. Vellum's route was deliberately boring, and the steps generalise.

  1. 01

    Map how money already moves

    Which invoices exist, how traders pay, and who is allowed to mark something settled. Written down before any code.

  2. 02

    Write the non-goals in the same document

    No custody, no new bank relationship, no rewrite of the trading engine. The non-goals kept the scope honest.

  3. 03

    Deploy beside the marketplace

    StablePay ran inside Vellum's existing VPC as software they operate — not as a service they rent.

  4. 04

    Wire payment intents to the order service

    The host application stayed in control of customer accounts; the gateway recorded payment state, retries, and exceptions.

  5. 05

    Replace the nightly export with signed webhooks

    Confirmation policy was made explicit per network, and the operator dashboard replaced the three-tool lookup.

  6. 06

    Hand over with a runbook

    Including the 2am case: a payment that looks confirmed on-chain and silent in the app.

Buy a processor when

  • Volume is low and nobody wants payment on-call
  • You need card acceptance or chargeback handling
  • Payments are not your differentiator

Self-host when

  • Reconciliation hours exceed the vendor fee
  • A counterparty asks where keys live
  • A vendor change would move your roadmap

A total-cost model you can copy

Most build-versus-rent arguments fail because each side counts different costs. A hosted vendor counts its fee. An engineer counts the build. Finance counts neither and asks why reconciliation takes three days. A useful model puts every cost on one sheet and assigns each to a named owner.

Cost lineHosted processorSelf-hosted softwareHow to measure it
Per-transaction feesPercentage or fixed fee per paymentNone to the software vendorFee schedule × forecast monthly volume
Licence or buildNoneOne-time or annual licenceVendor quote, or engineer-months × loaded cost
InfrastructureNoneCompute, PostgreSQL, backups, RPC providersCloud bill for the deployment, plus provider plans
IntegrationAdapter to the vendor's API shapeIntegration to your own gatewayEngineer-weeks, one-off, plus upkeep
Reconciliation labourOften high: exports, stitching, chasing ticketsLower when payment state is queryableFinance hours per month × loaded hourly cost
On-call and patchingVendor carries platform; you carry integrationYou carry bothRotation cost, or hours per month
Incident exposureBounded by vendor SLA, opaque to youBounded by your runbooks, visible to youExpected incidents × cost per incident

Fill it in for a two-year horizon rather than one. Licence and build costs are front-loaded; per-transaction fees are not. The crossover point — where cumulative hosted cost passes cumulative self-hosted cost — is the number that should drive the conversation. Below it, renting is rational. Above it, you are subsidising someone else's margin.

Illustrative worksheet — the numbers are placeholders, not benchmarksPlain text
HOSTED (24 months)
  fees            = monthly_volume * fee_rate * 24
  reconciliation  = finance_hours_per_month * hourly_cost * 24
  integration     = one_off_adapter_cost
  TOTAL_H         = fees + reconciliation + integration

SELF-HOSTED (24 months)
  licence         = one_off_licence
  infrastructure  = monthly_infra * 24
  operations      = ops_hours_per_month * hourly_cost * 24
  reconciliation  = (finance_hours_per_month * 0.4) * hourly_cost * 24
  integration     = one_off_gateway_integration
  TOTAL_S         = licence + infrastructure + operations + reconciliation + integration

CROSSOVER month = first month where cumulative(TOTAL_H) > cumulative(TOTAL_S)

Be honest about the 0.4

The reconciliation multiplier in the sheet above is an assumption, not a measurement. Estimate it from your own last three month-ends: how many finance hours were spent proving that records agree, and how many of those would disappear if the payment record were a database you could query?

The risk register: what you take on when you own it

Ownership transfers risk as well as cost. A vendor absorbs some of it contractually; a self-hosted deployment absorbs it operationally. Naming the risks is not an argument against self-hosting — it is what makes the decision defensible to a board, an auditor, or a counterparty.

RiskWhat it looks likeMitigation you ownDetection
Key exposureA leaked signing credentialSecret store, least privilege, rotation, logged use [3]Alerts on unexpected signing activity
Stale softwareA fixed vulnerability never deployedPatch cadence with a named ownerVersion drift report
RPC provider failurePayments look late or missingMultiple providers, health checks, lag alertsIndexer lag metric
Database lossPayment state unrecoverableBackups plus restore drills, point-in-time recoveryRestore test on a schedule
Operator errorA wrong manual correctionTwo-person rule for dangerous actions, closed reasonsAudit trail review
Key-person dependencyOnly one engineer understands itRunbooks, fire drills, shared rotaBus-factor review each quarter

Notice that every mitigation is dull. That is the point. Self-hosted payment software is safe to operate for the same reasons any production system is: boring discipline applied consistently. The twelve-factor methodology [2] — config in the environment, backing services as attached resources, logs as event streams — is a good baseline for the deployment itself.

Migrating without a big bang

The fear that stops most teams is the cutover: the week where money flows through a system that has never carried real load. The answer is the same pattern used to replace any legacy component — the strangler fig [1]. Route a small, well-understood slice of traffic to the new path, prove it, then widen.

ShadowGateway watches, does not decide
SliceOne product, one network, low limits
ParallelOld and new reconcile side by side
ShiftMajority of volume moves
RetireOld adapter and vendor exit
A strangler-style migration for payments
  1. 01

    Shadow mode

    Deploy the gateway beside the existing flow. Create matching intents but let the old system remain authoritative. Compare what each records. The goal is not payments, it is agreement.

  2. 02

    Choose a slice

    Pick the smallest slice that is still real: one product line, one token, a capped amount. Real money, low stakes.

  3. 03

    Run a full reconciliation cycle in parallel

    Close a period from both records. Investigate every difference until you can explain it.

  4. 04

    Move volume in steps

    Raise limits deliberately. Keep the old path warm for rollback until a full month-end has closed cleanly.

  5. 05

    Retire the adapter

    Remove vendor-specific code, cancel the contract, and archive the exports. Only then is the migration finished.

Vellum's cutover followed this shape and reached a first live payment in seventeen days. The lesson was less about speed than about sequencing: agreement before authority.

Regulatory and counterparty posture, honestly

Self-hosting changes who holds keys and runs infrastructure. It does not change your regulatory obligations, and it does not make you compliant by default. Two things are worth saying plainly.

  • We are not your counsel. StablePay is payment gateway software. The studio does not provide legal, tax, or compliance advice, and it is not a custodian or a bank. Whether your operating model meets your obligations is a question for your own advisers.
  • Ownership makes the answers easier to give. When a counterparty, auditor, or regulator asks where keys live, who can move funds, and how a payment was approved, a self-hosted deployment lets you answer from your own records instead of forwarding a vendor's PDF.

Signals that it is time to revisit the decision

Review the rent-or-own decision when

  • Monthly volume has doubled since the last review.
  • Finance spends more than a working day each month reconciling payment records.
  • A counterparty or regulator asks a question your vendor cannot answer in writing.
  • The vendor announces a pricing, limits, or webhook change.
  • You have had a weekend incident where nobody could say what was in flight.

When you should still buy a processor

We say this plainly because it builds more trust than any feature list:

  • You process low volume and nobody on the team wants to be the payment on-call.
  • You need fiat card acceptance, chargeback handling, or a compliance posture a vendor already carries.
  • Your differentiator is not payments, and a settlement incident would be inconvenient rather than existential.

StablePay is stablecoin payment gateway software. It is not a hosted processor, a custodian, or a bank, and it does not provide legal or compliance services. If those are what you need, a hosted provider is the honest answer.

A short decision test

Answer these without looking at a dashboard. If you cannot, you are close to the flip.

  1. Right now, what is owed, what is confirmed, and what is in flight?
  2. Who on your team could replay a missed payment event, and how?
  3. Where do the signing keys live, and who can move funds?
  4. If the vendor changed a webhook next quarter, how much of your roadmap moves?

Frequently asked questions

Is self-hosted cheaper?

Not at low volume. The licence and operating burden are real. It tends to win when volume is high enough that per-transaction margin exceeds operating cost, or when the cost of not knowing — reconciliation labour, incident exposure — is already large.

Do we need a dedicated payments team?

No, but you need a named owner and a rota. In practice that is an existing platform or infrastructure engineer with a runbook, not a new department.

What if the studio disappears?

You keep the deployment and the data, and the software keeps running. Patch releases stop, so plan for that in your risk register. This is exactly why the boundary matters: you are not depending on us to move funds.

Closing

The catalog is not a sermon against hosted services. It is a product for the moment ownership becomes cheaper than rental — usually later than the pitch deck, and earlier than the incident report. If you are reading this because a Sunday has already happened, the product page is the next stop.

References & further reading

  1. 1
    Bliki: Strangler Fig Application — Martin Fowler, martinfowler.com
  2. 2
    The Twelve-Factor App — Adam Wiggins, 12factor.net
  3. 3
    Secrets Management Cheat Sheet — OWASP Cheat Sheet Series
  4. 4
    Being On-Call — Betsy Beyer et al., Google SRE Book
  5. 5
    Designing Data-Intensive Applications — Martin Kleppmann, O'Reilly MediaBackground on replication, consistency, and why records disagree.
Found this useful? Share it

Get the next essay in your inbox

Practical writing on payments infrastructure, operations software, and shipping real systems. No spam, no sales sequence.

We only use your email to send the studio's writing. See the privacy policy.

About the author

Product behaviour described here reflects what is implemented and tested; anything else is marked as planned. Code samples are illustrative.

All writing

Have a system like this to run?

Explore the catalog, or write down the problem and the constraints. We respond when the fit is real.

Free apps from the studio. Enter your email, get a private download link. Free for personal use.

Get them free

Have a product to sell? We review, list, and sell it for you — you keep 90% of every sale.

Apply to sell with us