OmniPay UBA API

The Unified Banking API. Connect to US banks, retrieve accounts, balances, and transactions with a single integration. Secured with biometric authentication.

https://omniapi.omnipossolution.com/v1/connect

How It Works

#StepDescription
1Get API KeysRequest access below. We'll review and activate your keys.
2Connect a BankSend bank credentials via POST /execute. We handle the connection.
3Handle MFAIf the bank requires verification, submit the code via POST /mfa/:id.
4Get DataReceive accounts, balances, and transaction data in real-time.

Get API Keys

Request access to the OmniPay UBA API. You'll receive a test key for sandbox testing. Production keys are activated after review.

All API keys require admin approval. Test keys activate for sandbox. Production keys issued separately.

Authentication

All authenticated endpoints require an API key. Include it as a header on every request:

headers X-API-Key: nx_live_your_api_key_here

Key Types

PrefixTypeUse For
nx_test_Test KeySandbox testing, development
nx_live_Live KeyProduction data, real bank connections
Never expose API keys in client-side code, public repos, or browser JavaScript. Always proxy requests through your backend server.

Quickstart

Connect to a bank and retrieve account balances in under 5 minutes.

quickstart.js
const response = await fetch( 'https://omniapi.omnipossolution.com/v1/connect/execute', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': process.env.UBA_API_KEY, }, body: JSON.stringify({ bankId: 'target_bank', username: encryptedUser, password: encryptedPass, }), } ); const data = await response.json(); // { success: true, accounts: [{ name: "Checking", balance: 85194.23 }] }
terminal
curl -X POST https://omniapi.omnipossolution.com/v1/connect/execute \ -H "Content-Type: application/json" \ -H "X-API-Key: nx_live_your_key" \ -d '{"bankId":"target_bank","username":"user","password":"pass"}'
quickstart.py
import requests response = requests.post( "https://omniapi.omnipossolution.com/v1/connect/execute", headers={ "Content-Type": "application/json", "X-API-Key": UBA_API_KEY, }, json={ "bankId": "target_bank", "username": encrypted_user, "password": encrypted_pass, } ) data = response.json() for account in data["accounts"]: print(f"{account['name']}: ${account['availableBalance']}")

API Endpoints

All endpoints prefixed with https://omniapi.omnipossolution.com/v1/connect

GET/healthService health checkPUBLIC
GET/banksList supported banksPUBLIC
GET/plansView pricing plansPUBLIC
POST/request-accessRequest API keyPUBLIC
POST/executeConnect to bank & extract dataAPI KEY
GET/mfa/:sessionIdCheck MFA challenge statusAPI KEY
POST/mfa/:sessionIdSubmit MFA verification codeAPI KEY
GET/usageView your usage & billingAPI KEY

Connect Account

Connect to a bank and retrieve account data. This is the primary endpoint.

POST /execute
// Request { "bankId": "bcb_bank", // From GET /banks "username": "user123", // Bank login username "password": "encrypted_pass" // Bank login password } // Success Response { "success": true, "customerName": "Jane Doe", "accounts": [{ "name": "Business Checking", "type": "checking", "availableBalance": 85194.23, "category": "business" }] } // MFA Required Response { "mfaRequired": true, "sessionId": "sess_abc123", "mfaType": "sms", "mfaPrompt": "Enter code sent to (***) ***-1234" }

MFA Handling

When a bank requires multi-factor authentication, the /execute endpoint returns a session ID. Use it to submit the verification code.

POST /mfa/:sessionId
// Request { "code": "123456" } // Success โ€” same shape as /execute success { "success": true, "accounts": [ ... ] }
MFA sessions expire after 5 minutes. If expired, restart the connection with POST /execute.

List Banks

Retrieve the list of supported banks. No authentication required.

GET /banks
// Response { "ok": true, "count": 184, "banks": [ { "id": "bcb_bank", "name": "BCB Community Bank", "mfaType": "sms" }, ... ] }

Usage & Billing

GET /usage
{ "plan": "pro", "usage": { "total": 247, "limit": 10000, "remaining": 9753, "percentUsed": 2 } }

Error Codes

CodeErrorDescription
401missing_api_keyNo API key provided in request headers
401invalid_api_keyAPI key not recognized
403key_pending_approvalYour key is waiting for admin approval
403key_suspendedYour key has been suspended
429rate_limit_exceededToo many requests per minute
429monthly_limit_exceededMonthly request quota reached
400invalid_bank_idBank ID not found in supported banks
400missing_credentialsUsername or password not provided

Rate Limits

Response Headers
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 58 X-Monthly-Limit: 10000 X-Monthly-Remaining: 9753
PlanReq/MinReq/Month
Sandbox5100
Starter151,000
Pro6010,000
Enterprise200100,000

SDKs

PlatformLanguageStatus
Node.jsJavaScript / TypeScriptAvailable
PythonPython 3.8+Available
React NativeExpo / RNAvailable
iOSSwift 5.9+ / iOS 15+Available
AndroidKotlinComing Soon

๐Ÿ“ฑ OmniPay UBA Link โ€” iOS SDK

Bank account linking for iOS apps. Plaid-style UI with bank search, MFA verification, and account selection โ€” all in a native Swift package.

Install via Swift Package Manager
// Xcode โ†’ File โ†’ Add Package Dependencies https://github.com/juipatel27/omnipay-link-ios.git
SwiftUI Quick Start
import OmniPayLink let config = OmniPayLinkConfiguration( baseURL: "https://omniapi.omnipossolution.com" ) .sheet(isPresented: $showLink) { OmniPayLinkView( configuration: config, onSuccess: { result in print("Linked \(result.accounts.count) accounts") } ) }

GitHub Repo โ†’   v1.0.0 ยท Swift 5.9+ ยท iOS 15+

Pricing

PlanPriceReq/MonthRate LimitBanks
SandboxFree1005/min5
Starter$49/mo1,00015/min50
Pro$199/mo10,00060/minAll
Enterprise$499/mo100,000200/minAll + Custom

No per-connection fees. No per-transaction fees. Simple, predictable pricing.