Offloader Wallets API now available  View changelog

Payroll

Pay employees and contractors in stablecoins or fiat using SpherePay.

Use SpherePay to disburse payroll in stablecoins or convert stablecoin payments to fiat for employees and contractors. This is common for companies with globally distributed teams or crypto-native workforces.


Overview

SpherePay supports two payroll models:

ModelFlowBest For
Stablecoin PayrollUSD → USDC → Employee WalletCrypto-native employees, international contractors
Fiat PayrollUSDC → USD → Employee BankTraditional employees who prefer fiat

Third-Party Transactions

Payroll disbursements are third-party transactions—you're moving funds on behalf of another party (your employees or contractors).

Caution

Important: Each payee must be a verified customer in SpherePay with completed KYC/KYB before they can receive funds.


Setup Requirements

Before processing payroll:

  1. Verify your company — Complete KYB
  2. Verify each payee — Each employee/contractor needs KYC
  3. Register payment instruments:

Model 1: Stablecoin Payroll

Flow

Your Bank → [SpherePay On-Ramp] → USDC → Employee Wallet

Implementation

For each payee:

curl -X POST https://api.spherepay.co/v2/transfer \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "customer_employee_123",
    "type": "onRamp",
    "sourceAmount": "5000.00",
    "sourceCurrency": "USD",
    "destinationCurrency": "USDC",
    "destinationNetwork": "solana",
    "bankAccountId": "bank_company",
    "walletId": "wallet_employee_123"
  }'

Batch Processing

For multiple employees, create transfers in parallel:

const employees = [
  { customerId: 'customer_employee_1', amount: '5000.00', walletId: 'wallet_1' },
  { customerId: 'customer_employee_2', amount: '4500.00', walletId: 'wallet_2' },
  { customerId: 'customer_employee_3', amount: '6000.00', walletId: 'wallet_3' },
];

const transfers = await Promise.all(
  employees.map(emp =>
    createTransfer({
      customerId: emp.customerId,
      type: 'onRamp',
      sourceAmount: emp.amount,
      sourceCurrency: 'USD',
      destinationCurrency: 'USDC',
      destinationNetwork: 'solana',
      bankAccountId: COMPANY_BANK_ID,
      walletId: emp.walletId,
    })
  )
);

Model 2: Fiat Payroll (via Off-Ramp)

Flow

Your USDC Treasury → [SpherePay Off-Ramp] → USD → Employee Bank

Implementation

For each payee:

curl -X POST https://api.spherepay.co/v2/transfer \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "customer_employee_123",
    "type": "offRamp",
    "sourceAmount": "5000.00",
    "sourceCurrency": "USDC",
    "sourceNetwork": "ethereum",
    "destinationCurrency": "USD",
    "walletId": "wallet_company",
    "bankAccountId": "bank_employee_123"
  }'

Automated Payroll with Off-Loader Wallet

For recurring payroll, use Off-Loader Wallets:

  1. Create an off-loader wallet for each employee
  2. Send stablecoins to their off-loader address
  3. SpherePay auto-converts to fiat and deposits to their bank

This eliminates the need to create individual transfers each pay period.


Tracking Payroll Status

Polling

Poll transfer status to track each payment:

curl "https://api.spherepay.co/v2/transfer/transfer_xxx" \
  -H "Authorization: Bearer YOUR_API_KEY"

Compliance Considerations

  1. KYC all payees: Every recipient must be a verified customer
  2. Collect tax information: You're responsible for tax reporting (W-9, W-8BEN, etc.)
  3. Document transfers: Maintain records of all payroll disbursements

Best Practices

  1. Batch carefully: Group transfers to minimize API calls
  2. Handle failures gracefully: Build retry logic for failed transfers
  3. Use idempotency keys: Prevent duplicate payments with idempotency keys
  4. Communicate with payees: Let employees know expected settlement times

Settlement Times

Payment TypeMethodSettlement
USD → USDCACH2-3 business days
USD → USDCWireSame/next business day
USDC → USDACH2-3 business days
USDC → USDWireSame/next business day

Last updated on