Overview
Permanent Virtual Accounts are long-lived NGN bank accounts that remain active indefinitely. They’re ideal for users who deposit regularly.This onramp type is planned for future release. The current v0.1 focuses on throwaway virtual accounts.
Use Cases
Recurring Payments
Users who deposit monthly (e.g., salary, subscriptions)
Known Customers
Established users with consistent deposit patterns
Reduced Friction
No need to generate new VAs for each transaction
Long-term Relationships
Users who value convenience over transaction-specific rates
Characteristics
| Property | Value | Description |
|---|---|---|
| TTL | None (permanent) | Virtual account never expires |
| FX Rate | Current rate at settlement | Uses latest rate, not locked to rate_id |
| VA Reuse | Yes | Same VA used for all deposits |
| Rate Guarantee | No | Subject to current market rate |
| Settlement | AUTO_WITHDRAW only | Permanently bound to one destination address |
FX Behavior
Unlike throwaway onramps, permanent VAs do not lock to a specificrate_id:
Settlement Configuration
Permanent VAs require AUTO_WITHDRAW mode with a fixed destination address:If a user needs to change their destination address, you must create a new permanent onramp.
Creating a Permanent VA Onramp
expires_at is null for permanent VAs, indicating no expiry.User Experience
For users:- One-time setup: Merchant creates permanent onramp
- Save details: User saves the virtual account details
- Recurring deposits: User transfers NGN anytime (no expiry)
- Automatic settlement: USDC sent to their wallet each time
Your Daya Account
Transfer NGN to this account anytime:
| Bank: | Wema Bank |
| Account Number: | 1234567890 |
| Account Name: | Daya - [email protected] |
✓ This account never expires
Lifecycle
State changes:- ACTIVE: Can receive deposits indefinitely
- DISABLED: Manually disabled by merchant or operations
- FLAGGED: Risk or compliance issue detected
Late Deposit Handling
Since permanent VAs never expire, there’s no concept of “late deposits” due to expiry. However, deposits can still be flagged for:- Limits exceeded
- Risk triggers
- Suspicious activity
When to Use
- ✅ Use Permanent VAs When
- ❌ Avoid Permanent VAs When
- User deposits regularly (weekly, monthly)
- User wants to save VA details for future use
- Rate volatility is acceptable
- Reducing onramp creation overhead
- Building trust with long-term users
Comparison: Permanent vs Throwaway
| Feature | Permanent VA | Throwaway VA |
|---|---|---|
| Expiry | Never | 25 minutes |
| FX Rate | Current rate | Locked to rate_id |
| VA Reuse | Yes | No (365-day cooldown) |
| Rate Guarantee | No | Yes (within validity) |
| Use Case | Recurring deposits | One-time transactions |
| Destination | Fixed | Per-onramp |
Best Practices
One VA per user per destination
One VA per user per destination
Create one permanent VA per user per destination address. Don’t create multiple for the same user.
Educate users about rate variability
Educate users about rate variability
Clearly communicate that rates may change between deposits.
Store onramp_id with user records
Store onramp_id with user records
Link
onramp_id to user profiles for easy lookup and reuse.Monitor for flagged deposits
Monitor for flagged deposits
Set up alerts for
deposit.flagged events on permanent VAs.Disable VAs when users churn
Disable VAs when users churn
When a user closes their account, disable their permanent VA to prevent accidental deposits.
Limits
Permanent VAs are subject to the same limits as throwaway onramps:- Per-onramp limit: $1,000 per deposit
- Per-merchant daily limit: $10,000
- System-wide limit: $100,000/day
Disabling Permanent VAs
To disable a permanent VA, contact support or use the admin API (if available). When to disable:- User account closed
- Suspicious activity detected
- Compliance requirement
- User requested