An open, machine-readable dataset of payment-rail capabilities — limits, cut-off times, settlement speed, operating hours, irrevocability, scheme owner and the account-identifier format — across UK, EU, US and Canada, with thin typed accessors.
Every fact carries a source URL and a verification date, so you can see where a figure came from and how fresh it is.
import { getRail, findRails, instantRails } from '@pametan/rails-matrix';
getRail('uk-fps')?.limits.perTransaction; // { amount: 1000000, currency: 'GBP' }
instantRails().map((r) => r.id); // real-time rails
findRails({ region: 'US', realTime: true }); // FedNow, RTP, Fedwire
⚠️ Read this before relying on a figure. Payment-rail rules change, and a scheme limit is not the same as the limit your PSP sets for you — PSP/customer limits are usually lower. Treat this dataset as a well-sourced reference, not advice, and confirm against the scheme operator (and your provider) before you depend on a value. Each rail'ssource.urlandsource.verifiedOntell you what to check and when it was last reviewed.
npm install @pametan/rails-matrixRequires Node 24+. Ships ESM + types, and the raw dataset at
@pametan/rails-matrix/data.
| Region | Rails |
|---|---|
| UK | Faster Payments (FPS), Bacs, CHAPS |
| EU | SEPA Credit Transfer (SCT), SEPA Instant (SCT Inst) |
| US | ACH, FedNow, RTP, Fedwire |
| CA | Interac e-Transfer, EFT/AFT, Real-Time Rail (RTR — forthcoming) |
Forthcoming rails are included and clearly flagged with status: 'forthcoming'.
id, name, region, status, schemeOwner, currencies, realTime,
clearing (real-time / batch / rtgs), settlement (speed + finality),
limits (per-transaction in major units + currency, with a note where scheme
and PSP limits differ), operatingHours, a structured cutOff (days + time +
IANA timezone) for non-24/7 rails, irrevocable, accountIdentifier (with a
validatedBy cross-link where a validator exists, e.g. @pametan/modulus-check-uk),
and source (url + verifiedOn). See
schema/rails.schema.json for the full contract.
| Export | Description |
|---|---|
rails() |
All rails. |
getRail(id) |
One rail by id (e.g. 'us-rtp'). |
byRegion(region) / byCurrency(code) |
Filter by region / currency (currency is case-insensitive). |
instantRails() |
Real-time rails. |
findRails(filter) |
Filter by region/currency/realTime/clearing/status. |
staleRails(maxAgeDays, now?) |
Rails not verified within N days — a maintenance aid. |
dataAsOf() |
The dataset's last review date. |
Types Rail, RailsDataset, RailFilter, Money, CutOff, Region,
Clearing, Finality, RailStatus are exported.
- Each rail has
source.url+source.verifiedOn; the dataset hasdataAsOf. staleRails(180)surfaces records due for re-checking.- The data lives in
data/rails.json(the source of truth);npm run build:dataregenerates the typedsrc/generated.ts. SeeDATA.mdfor the update process.
npm install
npm run build:data # regenerate src/generated.ts from data/rails.json
npm run typecheck
npm test # data integrity + accessors + generated-in-sync
npm run buildReference data provided as-is, not financial, legal or compliance advice. Figures
change and vary by provider — verify with the scheme operator before relying on
them. MIT licensed — see LICENSE.
We're Pametan — a specialist fintech/regtech engineering agency working across UK, US and Canadian rails (FCA · CFPB · FCAC). We build the rail integrations behind this data — routing, limits enforcement, cut-off-aware scheduling and settlement reconciliation.