Change one line. Change the rail.
One API for ACH, wires, RTP, USDC and cards, with KYC and AML already on the line. Try it in the sandbox Console: change the rail and watch the payment re-route.
1import Omniwire from "@omniwire/sdk";2const ow = new Omniwire(process.env.KEY);34const payment = await ow.payments.create({5 amount: 184000,6 currency: "usd",7 rail: "rtp",8 to: "acct_7Qm1Xe",9});1import Omniwire from "@omniwire/sdk";2const ow = new Omniwire(process.env.KEY);34app.post("/hooks/omniwire", async (req, res) => {5 const event = ow.webhooks.verify(req);67 if (event.type === "payment.settled") {8 await markPaid(event.data.id);9 }10 res.sendStatus(200);11});Line 7 is the only change. The route redraws as you type.
Line 7 again: one handler for every rail. It never changes.
Route preview · updates as you type
Screened ✓
- ACHSame day or next day
- WireFedwire, same day
- RTPInstant, 24/7
- USDCUSD in, USDC out
- CardsDebit card issuing
Response
201 Created{
"id": "pay_9Hk2vQx7Lm",
"status": "settled",
"rail": "rtp",
"amount": 184000,
"settled_in_ms": 1812
}On the wire
- Created0 ms
- KYC, sanctions, limits38 ms
- Submitted to RTP96 ms
- Settled1,812 ms
Webhook
Same event shape on every rail, so your handler never changes when the rail does.
Routes
Pick oneOpen in the sandbox right now. Choosing a route rewrites line 7.
Events
pay_9Hk2vQx7LmEvery event carries the same shape, whichever rail carried the money.
Try it: switch rail to ach or usdc, then press Run.
F for full screen · Esc to exit
Rails· Every U.S. money rail
Pick the rail by the job, not the vendor.
Each rail is one value in the same call. Set it yourself, or use auto and Omniwire picks the fastest rail that's open right now.
| Rail | Speed | Hours | Good for | In code |
|---|---|---|---|---|
| Auto | Fastest open rail | Always | When you care that it lands, not how | rail: "auto" |
| ACH | Same day or next day | Banking days | Payroll, bill pay, account funding | rail: "ach" |
| Wire | Same day | Fedwire hours | Large, final settlements | rail: "wire" |
| RTP | Seconds | 24/7, every day | Instant payouts and transfers | rail: "rtp" |
| USDC | Minutes | 24/7, every day | USD to USDC and back | rail: "usdc" |
| Cards | At authorization | 24/7, every day | Debit cards, accepted worldwide | rail: "card" |
| Open banking | Instant account link | 24/7, every day | Verify and link 8,000+ institutions | ow.accounts.link() |
Speeds and hours are typical for each network. Open banking links accounts; it doesn't move money on its own.
Checks· Compliance on the line
Checked before it moves.
Every payment passes the same gates in milliseconds. Anything a rule flags waits on the wire until your team decides.
pay_9Hk2vQx7Lmpay_3Td8wKp2NsEvents· Webhooks
One event shape. Every rail.
The same payment.settled event arrives whichever rail carried the money. One line changes. Your handler doesn't.
- ACHpayment.settled
{ "type": "payment.settled", "data": { "id": "pay_4Bn7...", "amount": 184000, "rail": "ach", "status": "settled" }} - RTPpayment.settled
{ "type": "payment.settled", "data": { "id": "pay_9Hk2...", "amount": 184000, "rail": "rtp", "status": "settled" }} - USDCpayment.settled
{ "type": "payment.settled", "data": { "id": "pay_2Qe5...", "amount": 184000, "rail": "usdc", "status": "settled" }}
Illustrative payloads. Full schema in the API reference.
Time to market· The clock
18 months to 3 weeks.
Sponsor bank, compliance, ledger and every rail are already wired. You build the product on top.
Take the other 75 weeks back.
- Independently audited
- SOC 2
- Institutions via open banking
- 8,000+
Questions· Before you build
Questions engineers ask first.
Which rails does SuperAPI cover?
ACH, wires, RTP, stablecoins (USDC, EURC and USDG) and debit card issuing, plus open banking account links, all behind one key and one event shape.
Do we need our own sponsor bank?
No. Omniwire brings the partner bank and runs the compliance program on top, so you integrate one API instead of negotiating a bank relationship.
What does SuperAPI cost?
SuperAPI is a monthly plan, and the sandbox is included with every plan. Plans and pricing are shared when you request access. You pay only after your business is approved. Prefer to talk first? Talk to an engineer.
How long until we're in production?
Business verification typically takes 48 hours. From your first sandbox call to live money, about 3 weeks is typical. Plan it with an engineer.
Can we test everything in the sandbox first?
Yes. Sandbox keys are issued once your plan is active, and every rail, event and compliance check runs in the sandbox with test money. Request access to get started.
Is Omniwire a bank?
No. Omniwire Inc. is a financial technology company, not a bank. Accounts, cards and payment services are provided by licensed partner institutions.
Your turn· End of the wire
Make the first call.
Install the SDK, drop in your sandbox key and move test money on any rail. Sandbox included with every plan, and no sales call to start.
SDKs forNode · Python · Ruby · PHP · Java
$ npm i @omniwire/sdkadded 1 package in 1.4sawait ow.payments.create({
amount: 184000,
currency: "usd",
rail: "auto",
to: "acct_7Qm1Xe",
});