One API for every payment rail.

Routing intelligence for apps that move money. One API over the providers you already have deals with: Unirail picks the provider and rail for each payment and tells you what it costs and why. Your licences, your contracts, your money flow.

3 lines in service10 listed23 countries

The Unirail networkA transit-style diagram. Each payment provider is a coloured line and each country it covers is a station. All thirteen lines connect at the Unirail interchange, where routes are decided; the providers carry the payments. Plaid, Yapily and Enable Banking are in service; the other ten are listed in the marketplace. The line key below the map lists every line and what it covers.GBUnited KingdomUSUnited StatesFIEELVLTSKATDENLBEIEFRESPTITSESwedenNONorwayDKDenmarkSGSingaporeHKHong KongAUAustraliaJPJapanUnirailroutes decided here

Example route

Enable BankingIn service

From
payto://iban/••••0008
To
payto://iban/DE••••3000
Route
Decided by Unirail, run by Enable Banking on your contract: 1 leg, custody none
Status
created
UnirailOne API over every line you connect
  1. GBUnited KingdomPlaidYapilyTrueLayerEnableOpenPaydWiseAirwallexNium
  2. EUEurozoneAT BE DE EE ES FI FR IE IT LT LV NL PT SKNeonomicsEnableOpenPaydWiseAirwallex
  3. NO SE DKNorway, Sweden, DenmarkNeonomics
  4. USUnited StatesWiseAirwallexBridgeModern Treasury
  5. SGSingaporeAirwallexNiumPayNow
  6. HKHong KongAirwallex
  7. AUAustraliaAirwallex
  8. JPJapanMoneytree

3 in service · 10 listed · 23 countries

HHow it works

Four stops from connection to credited.

  1. Connect your deals

    Add the providers you already have contracts with, per environment. Your Infisical is wired in once, so a new provider needs no new environment variables.

    4 of 4 found, sandbox
  2. Get the decision

    Ask for routes between two payto:// accounts. Up to three quotes come back, each with legs, cost, ETA and custody, plus the routes that can’t run and why.

    routeQuotes.create()
  3. Bind the approval

    Your app binds your user’s approval, a passkey for instance, to the quote’s id and digest. If what they approved no longer holds, the intent fails with quote_changed.

    { quote, digest }
  4. Run it your way

    Your backend calls the provider through the SDK with your own credentials, or Unirail makes the call for you. Either way, legs report on one event stream as Standard Webhooks.

    leg.updated
RRoutes and quotes

Three ways there. Your user picks one.

Unirail returns at most three quotes, labelled cheapest, fastest and recommended, chosen from routes no other route beats on every axis. Each one lists its legs, cost, ETA and whether a provider holds the money in between. Routes that can’t run come back too, with the reason.

Choose a quote
Three routes between the same two accounts, and one route through Airwallex that is not offered because it would hold money in transit. RecommendedFastestCheapestPayerpayto://scan/••••0008Payeepayto://scan/••••4417 Three routes between the same two accounts, and one route through Airwallex that is not offered because it would hold money in transit. RecommendedFastestCheapestPayerpayto://scan/••••0008Payeepayto://scan/••••4417

Airwallex collection account: not offered, two legs with money held in transit.

Recommendedqt_9bQm71

Leg 1
••••0008 → ••••4417 via Yapily
Custody
none, account to account
Cost
ETA
Digest
d41f…9a07

Signs qt_9bQm71 + digest

Illustrative quotes. Which line wins depends on your contracts with each provider and the banks involved. Routes through meta-providers such as Airwallex hold money in transit, so they only appear where your routing policy admits that custody; a policy that admits only none gets them back as infeasible, with the reason.

MModes and credentials

Unirail decides. Your keys and your money stay yours.

Unirail is never in the money flow and never the regulated party. You keep your licences, your provider contracts and your own KYC and AML. Unirail decides the route; you choose who makes the call.

Decide

Unirail receives masked metadata only, no personal data and no account numbers, and returns the decision: which provider and rail, what it costs and why. Your backend calls the provider through the SDK with your own credentials. Unirail never touches secrets or money, and the decision engine can be self-hosted.

Execute via Unirail

Unirail calls the provider for you, reading your credentials just in time from your own vault through OIDC federation. Your provider contracts stay yours, and nothing of yours is stored. Below is how the keys travel in this mode.

Execute via Unirail Credentials, read just in time

Secrets sit on sidings in your Infisical project. A read-only OIDC grant carries them to Unirail, where they live in isolate memory for at most five minutes. The line does not stop at storage: no database, KV, logs or traces. Your Infisical · project / env prod/unirail/plaid/CLIENT_ID/unirail/plaid/SECRET/unirail/yapily/APPLICATION_ID/unirail/yapily/APPLICATION_SECRET/unirail/enablebanking/PRIVATE_KEY_PEMOIDCread-onlyone folderStorageD1 · KV · logs · tracesNot stoppingUnirailisolate memoryTTL ≤ 5 min Secrets sit on sidings in your Infisical project. A read-only OIDC grant carries them to Unirail, where they live in isolate memory for at most five minutes. The line does not stop at storage: no database, KV, logs or traces. Your Infisical · env prod/unirail/plaid/CLIENT_ID/unirail/plaid/SECRET/unirail/yapily/APPLICATION_ID/unirail/yapily/APPLICATION_SECRET/unirail/enablebanking/PRIVATE_KEY_PEMOIDCread-only · one folderStorageD1 · KV · logs · tracesNot stoppingUnirailisolate memory · TTL ≤ 5 min

Trust by federation

Unirail runs its own OIDC issuer and mints a token per organisation and environment. Your Infisical machine identity trusts that issuer and that subject, read-only on one folder.

issuer
https://api.unirail.dev/oidc
subject
org:<orgId>:env:<envId>
scope
read-only · /unirail

Revoke with one delete

Delete the machine identity and access ends. Nothing to rotate on our side, because there is nothing of yours on our side. Non-secret settings, such as redirect URIs or enabled countries, live on the connection in the dashboard.

What “never stores” means

Values sit in isolate memory while a provider is called, for at most five minutes, and are never written to storage, logs or traces. A cold isolate adds one Infisical round trip before its first provider call.

LLines and capabilities

A marketplace of lines, banking first.

Every provider is a listing: what it covers by country, its roles, custody model, regulatory status and how onboarding works. You sign with the providers; Unirail routes across them. Capabilities layer outwards from banking, with several providers per capability and jurisdiction, so a route can change line when one degrades.

  • Banking

    Linking accounts and moving money between them: payments, pay-ins and payouts.

    • United Kingdom: PlaidYapilyTrueLayerEnableOpenPaydWiseAirwallexNium
    • Eurozone: Neonomics (FI)EnableOpenPaydWiseAirwallex
    • Norway, Sweden, Denmark: Neonomics
    • United States: WiseAirwallexBridgeModern Treasury
    • Singapore: AirwallexNiumPayNow
    • Hong Kong: Airwallex
    • Australia: Airwallex
    • Japan: Moneytree
  • Verification

    Checking account details belong to who you expect before money moves: UK Confirmation of Payee, EU Verification of Payee.

    • United Kingdom: OpenPaydAirwallexNium
    • Eurozone: Neonomics (FI)OpenPaydAirwallex
    • Norway, Sweden, Denmark: Neonomics
    • United States: AirwallexModern Treasury
    • Singapore: AirwallexNium
    • Hong Kong: Airwallex
    • Australia: Airwallex
    • Japan: Moneytree
  • Identity

    Knowing who your user is.

    • United Kingdom: Plaid
    • Eurozone: no providers yet
    • Norway, Sweden, Denmark: no providers yet
    • United States: no providers yet
    • Singapore: no providers yet
    • Hong Kong: no providers yet
    • Australia: no providers yet
    • Japan: no providers yet
  • Compliance

    Screening people and payments against sanctions, PEP and adverse-media lists.

    • United Kingdom: no providers yet
    • Eurozone: no providers yet
    • Norway, Sweden, Denmark: no providers yet
    • United States: no providers yet
    • Singapore: no providers yet
    • Hong Kong: no providers yet
    • Australia: no providers yet
    • Japan: no providers yet

    Placeholder Provider slots open. Screening joins the map as its first providers are listed.

Every listing moves down the same line

  1. ListedResearched from public documentation; no adapter yet.10 lines
  2. In developmentAdapter being built against the provider’s sandbox.
  3. IntegratedAdapter shipped, sandbox verified, routable today.3 lines
  4. CertifiedA live payment proven by at least one platform.
Browse providers

3 integrated, 10 listed, 23 countries, straight from the Unirail catalogue. Listed providers are researched from public documentation; a claim nobody has verified says so.

DDevelopers

The whole journey fits in one timetable.

The SDK runs in your backend. One call gets the routing decision, one creates the intent, and everything after arrives as events, in the same shapes whichever provider ran the payment. Adding a provider is configuration, not a rewrite.

Timetablepay.ts · TypeScript

            
            import { createUnirail } from "@unirail/sdk";
            
          
            
             
            
          
            
            const unirail = createUnirail({ apiKey: process.env.UNIRAIL_SECRET_KEY });
            
          
            
             
            
          
            
            const { quotes } = await unirail.routeQuotes.create({
            
          
            
              from: payer,
            
          
            
              to: payee,
            
          
            
              amount: { value: "5000", asset: "iso4217:GBP" },
            
          
            
            });
            
          
            
             
            
          
            
            const intent = await unirail.paymentIntents.create(
            
          
            
              { quote: quotes[0].id, digest: quotes[0].digest, returnUri },
            
          
            
              { context: { idempotencyKey: `pay:${id}` } },
            
          
            
            );
            
          
  1. Boardline 1@unirail/sdk
  2. Departline 3the key decides test or live
  3. Quotesline 5masked metadata in, up to three routes out
  4. Intentline 11bound to the quote’s id + digest
  5. Arriveline 14events below

Arrivals

One event stream, signed with Standard Webhooks.

  1. payment_intent.requires_actionyour user approves at their bank
  2. leg.updatedsubmitted → accepted
  3. payment_intent.processingthe rail has it
  4. leg.updatedcredited
  5. payment_intent.succeededdone
webhook-id
evt_…
webhook-timestamp
unix seconds
webhook-signature
v1,…
Unirail-Version
dated, on every request
Read the docsur_test_sk_… · ur_live_sk_…
CControl plane

Run the network from one dashboard.

Everything a platform used to build in its own back office to operate rails lives at app.unirail.dev: environments, keys, provider connections, routing policy, your provider deals, the event log and a route explorer.

Test zone

Provider sandboxes only.

ur_test_sk_…
  1. sandbox
  2. staging and any you add

A test key can never touch live data, and a live key never touches test. A misconfigured connection fails at setup, not on a payment.

Live zone

Provider production only.

ur_live_sk_…
  1. production
  • Connections

    One provider in one environment, health-checked: credentials resolve, a cheap authenticated call succeeds, webhooks are registered, certificates aren’t near expiry.

  • Routing policy

    Bindings by jurisdiction and stage, plus preferences. “Plaid in GB at stage ga” makes that connection eligible for GB payments.

  • API keys

    Secret and publishable keys per environment, scoped, shown once and stored as a hash. The key’s environment decides where a call runs.

  • Deals and leverage

    Your contracts, fees and volume tiers next to live routing data, so you go into every negotiation knowing what switching would save.

  • Event log and webhooks

    Every normalised event for links, accounts, intents and legs, in order, and the signed endpoints they’re delivered to.

  • Route explorer

    The routes a payment could take between two accounts, and the reasons the others can’t run.

Open the dashboardPlaceholder Dashboard screenshots land here once the control plane UI is final.