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
# Step Description
1 Get API Keys Request access below. We'll review and activate your keys.
2 Connect a Bank Send bank credentials via POST /execute. We handle the connection.
3 Handle MFA If the bank requires verification, submit the code via POST /mfa/:id.
4 Get Data Receive 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.
Request API Keys โ
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
Prefix Type Use For
nx_test_Test Key Sandbox testing, development
nx_live_Live Key Production 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.
Node.js
cURL
Python
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 /health Service health check PUBLIC
GET /banks List supported banks PUBLIC
GET /plans View pricing plans PUBLIC
POST /request-access Request API key PUBLIC
POST /execute Connect to bank & extract data API KEY
GET /mfa/:sessionId Check MFA challenge status API KEY
POST /mfa/:sessionId Submit MFA verification code API KEY
GET /usage View your usage & billing API 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
Code Error Description
401missing_api_key No API key provided in request headers
401invalid_api_key API key not recognized
403key_pending_approval Your key is waiting for admin approval
403key_suspended Your key has been suspended
429rate_limit_exceeded Too many requests per minute
429monthly_limit_exceeded Monthly request quota reached
400invalid_bank_id Bank ID not found in supported banks
400missing_credentials Username or password not provided
Rate Limits
Response Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-Monthly-Limit: 10000
X-Monthly-Remaining: 9753
Plan Req/Min Req/Month
Sandbox 5 100
Starter 15 1,000
Pro 60 10,000
Enterprise 200 100,000
SDKs
Platform Language Status
Node.js JavaScript / TypeScript Available
Python Python 3.8+ Available
React Native Expo / RN Available
iOS Swift 5.9+ / iOS 15+ Available
Android Kotlin Coming 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
Plan Price Req/Month Rate Limit Banks
Sandbox Free 100 5/min 5
Starter $49/mo 1,000 15/min 50
Pro $199/mo 10,000 60/min All
Enterprise $499/mo 100,000 200/min All + Custom
No per-connection fees. No per-transaction fees. Simple, predictable pricing.