Skip to main content
POST
https://api.karmapay.xyz/v0
/
v0
/
virtual-accounts
curl -X POST 'https://api.karmapay.xyz/v0/virtual-accounts' \
  -H 'Authorization: Bearer karma_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalUserId": "user_123",
    "source": {
      "currency": "usd"
    },
    "destination": {
      "payment_rail": "solana",
      "currency": "usdc",
      "address": "7XqBhBKXy1S3ufMXLCv9QhcRj8f2kKKnXYYYdZnJ5jrB"
    },
    "developer_fee_percent": "0.5"
  }'
{
  "data": {
    "id": "va_abc123",
    "bankName": "Example Bank",
    "bankAccountNumber": "1234567890",
    "bankRoutingNumber": "021000021",
    "beneficiaryName": "Bridge XYZ",
    "beneficiaryAddress": "123 Bank St, New York, NY 10001",
    "destinationAddress": "7XqBhBKXy1S3ufMXLCv9QhcRj8f2kKKnXYYYdZnJ5jrB",
    "destinationPaymentRail": "solana",
    "destinationCurrency": "usdc"
  }
}
Authentication: Business API Key
Create a virtual account that generates bank deposit instructions for your end-user. When they deposit fiat currency to these bank details, it’s automatically converted to cryptocurrency and sent to their specified wallet address.

Request Body

externalUserId
string
required
Your internal user ID
source
object
required
destination
object
required
developer_fee_percent
string
Optional fee percentage (e.g., “0.5” for 0.5%)
curl -X POST 'https://api.karmapay.xyz/v0/virtual-accounts' \
  -H 'Authorization: Bearer karma_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "externalUserId": "user_123",
    "source": {
      "currency": "usd"
    },
    "destination": {
      "payment_rail": "solana",
      "currency": "usdc",
      "address": "7XqBhBKXy1S3ufMXLCv9QhcRj8f2kKKnXYYYdZnJ5jrB"
    },
    "developer_fee_percent": "0.5"
  }'
{
  "data": {
    "id": "va_abc123",
    "bankName": "Example Bank",
    "bankAccountNumber": "1234567890",
    "bankRoutingNumber": "021000021",
    "beneficiaryName": "Bridge XYZ",
    "beneficiaryAddress": "123 Bank St, New York, NY 10001",
    "destinationAddress": "7XqBhBKXy1S3ufMXLCv9QhcRj8f2kKKnXYYYdZnJ5jrB",
    "destinationPaymentRail": "solana",
    "destinationCurrency": "usdc"
  }
}

How It Works

1

Create virtual account

Call this endpoint with user’s details and destination wallet
2

Provide bank details to user

Give the user the bank account details from the response
3

User deposits fiat

User sends fiat (USD/EUR/MXN) to the provided bank account
4

Automatic conversion

Bridge automatically converts fiat to crypto and sends to destination address
5

Webhook notification

You receive webhook event when deposit completes
The user should initiate a bank transfer (ACH, wire, SEPA, etc.) to the bank account details provided in the response. Once the funds arrive, they’re automatically converted and sent to the destination wallet.