Enable employers to pay employees and contractors globally by creating a wallet and virtual account for the employer and a wallet for each employee. Fiat deposits into the virtual account are converted to stablecoins and held in the employer’s wallet. Use the Transfers API to pay out funds from the employer to the employee. Payroll.png

Step 1: Generate your API Keys

Head over to dashboard.bridge.xyz. Once logged in, click on the “API Keys” tab on the top menu bar and generate a new API key. Bridge will make your API key available only once, so make sure to immediately copy and save the key safely and securely.

Your key is used to authenticate into our APIs and is highly sensitive. If it ever gets compromised, you can immediately revoke key access from our dashboard and generate a new key.

Step 2: Onboard a customer

Create a customer ID for each employer to manage payroll. Customers will need to accept our terms of service and complete KYC. Check out this guide for a full in depth explanation on onboarding customers. The below example walks you through using a KYC link to onboard your customer.
Request
curl --location --request POST 'https://api.bridge.xyz/v0/kyc_links' \
--header 'Content-Type: application/json' \
--header 'Api-Key: <API Key>' \
--header 'Idempotency-Key: <generate a uuid>' \
--data-raw '{
  "full_name": "John Doe",
  "email": "johndoe@example.com",
  "type": "individual"
}'
Response
{
  "id": "uuid",
  "full_name": "John Doe",
  "email": "johndoe@example.com",
  "type": "individual", // or "business"
  "kyc_link": "https://bridge.withpersona.com/verify?",
  "tos_link": "https://dashboard.bridge.xyz/accept-terms-of-service?",
  "kyc_status": "not_started", // or "under_review", "incomplete", "approved" or "rejected"
  "rejection_reasons": [],
  "tos_status": "pending", // or "approved"
  "created_at": "2025-07-16T18:28:25.970Z",
  "customer_id": "customer_id",
  "persona_inquiry_type": "gov_id_db"
}
Guide the user through:
  1. Visiting the tos_link and accepting terms of service
  2. Completing identity verification via the kyc_link
This process typically takes less than a minute and updates automatically once complete.

Step 3: Create a wallet for the employer

Create a wallet to hold the employer’s payroll funds.
Request
curl --request POST \
     --url https://api.bridge.xyz/v0/customers/{employer-customer-id}/wallets \
     --header 'Api-Key: <API Key>' \
     --header 'Idempotency-Key: <Unique Idempotency Key>' \
     --header 'Content-Type: application/json' \
     --data '{
       "chain": "solana"
     }'
Response
{
  "id": "employer-wallet-id-123",
  "chain": "solana",
  "address": "0x353253250000000001340033",
  "created_at": "2024-09-01T02:03:04.567Z",
  "updated_at": "2024-09-01T02:03:04.567Z"
}

Step 4: Create a wallet for an employee

Create a wallet for each employee to get paid in stablecoins.
Request
curl --request POST \
     --url https://api.bridge.xyz/v0/customers/{employee-customer-id}/wallets \
     --header 'Api-Key: <API Key>' \
     --header 'Idempotency-Key: <Unique Idempotency Key>' \
     --header 'Content-Type: application/json' \
     --data '{
       "chain": "solana"
     }'
Response
{
  "id": "employee-wallet-id-abc",
  "chain": "solana",
  "address": "0x444415153153500000120",
  "created_at": "2024-09-01T02:03:04.567Z",
  "updated_at": "2024-09-01T02:03:04.567Z"
}

Step 5: Create a virtual account

Create a USD or EUR account for the employer. Provide them with the bank instructions so they can deposit payroll. Deposits are converted to stablecoins and sent to their wallet. Use the Virtual Accounts API to provision permanent fiat deposit addresses for your customers. You define the source currency for the account and configure the destination to specify where Bridge should deliver the converted funds. Bridge handles the fiat-to-crypto conversion and sends the funds on-chain automatically.
Request
curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
--header 'Content-Type: application/json' \
--header 'Api-Key: <Api-Key>' \
--header 'Idempotency-Key: <Unique Idempotency Key>' \
--data-raw '{
  # The source object specifies a USD virtual account.
  "source": {
    "currency": "usd",
  },
  # You can specify the employer's wallet as the destination to receive funds
  "destination": {
    "payment_rail": "solana",
    "currency": "usdc",
    "bridge_wallet_id": "employer-wallet-id-123"
  }
}'

Step 6: Make a transfer

Use the Transfers API to move funds from the employer’s wallet to the employee’s wallet. You will need to call the API for each employee. Use the Transfers API with the employer’s bridge_wallet as the source and the employee’s bridge_wallet as the destination.
Request
curl --location --request POST 'https://api.bridge.xyz/v0/transfers' \
  --header 'Api-Key: <API Key>' \
  --header 'Idempotency-Key: <Unique Key>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "amount": "10.0",
    "on_behalf_of": "<customer_id>",
    "developer_fee": "0.0",
    "source": {
      "payment_rail": "bridge_wallet",
      "currency": "usdc",
      "bridge_wallet_id": "employer-wallet-id-123"
    },
    "destination": {
      "payment_rail": "solana",
      "currency": "usdc",
      "bridge_wallet_id": "employee-wallet-id-abc"
    }
  }'
Bridge will then initiate a crypto transfer from between the two specified bridge wallets.