Conduit · XVI

One callback. Every rail.

Skip the button. Underneath, Coin Moebius is a rented webhook plus a few JSON endpoints. Point every payment rail at one URL, get back one normalized event shape, and build whatever you want on top. The SDK is open source, so you can run the whole thing yourself.

How the plumbing runs

StripePayPalNOWPaymentsSquarePay by mailCoin MoebiusOne normalized event

Every rail speaks its own dialect: different signatures, different payloads, different webhook shapes. We verify each one, normalize it, and hand your server a single event format. You write the handler once.

The shape you get back

Every rail, every status, collapses to this:

status is one of a fixed set: succeeded, pending, failed, refunded, disputed, and the pay-by-mail states. Same enum whether the money came from a card, a coin, or an envelope.

{
  "id": "tx_8f2a…",
  "projectId": "proj_xY…",
  "provider": "stripe",
  "status": "succeeded",
  "amount": 29.99,
  "currency": "USD",
  "metadata": { "customerRef": "user_42" },
  "isTest": false,
  "createdAt": "2026-05-14T01:04:21.000Z"
}

Three ways in

The buy button

A few lines of HTML. The fast path: drop it on a page and you are taking payments. Most sites never need anything else.

The JSON API

Call checkout, status, and the customer-portal endpoints from your own server. Build your own UI, your own flow, your own mobile app. The button is only our client; the API is the product.

The open SDK

Every provider, every signature check, every status code, published. Run it on your own server with no Cloud at all, or self-host the exact contract we run today.

What you do not build

  • Per-provider signature verification
  • Webhook retries and idempotency
  • A normalized event model across rails
  • Subscription lifecycle plumbing
  • A transactions store and dashboard
  • Secret storage for provider keys

All the parts that are the same for every merchant, and a common source of subtle bugs, are handled. You write the part that is actually yours.

You can leave, and you can prove it

The SDK on GitHub is the same code our Cloud runs. Clone it, point your providers at your own server, and your integration keeps working with no change to the contract. There is no proprietary format to escape and no data of yours we hold hostage. The exit ramp is not a promise. It is the repository.

Wire it up your way

Start with the button or go straight to the API. Free to start, no card.