Skip to main content
Pay remote employees and contractors in Africa without the delays and fees of traditional wire transfers. Load stablecoins into your Breet account, then withdraw directly to employees’ bank accounts in NGN or GHS, or send stablecoins to their crypto wallets. Breet handles the conversion and payout so you can run payroll on your own schedule.

How it works

1

Fund your Breet account with stablecoins

Deposit USDT or USDC into your Breet wallet. You can generate a deposit address via the API or fund directly from your dashboard.
2

Add employee bank details

Collect each employee’s bank account information (account number, bank name) or crypto wallet address. Store these in your payroll system.
3

Initiate withdrawals

Call the withdraw-to-bank endpoint for each employee. Breet converts the stablecoins to local currency and sends the payout to the employee’s bank account.
4

Track payout status via webhooks

Breet sends webhook notifications as each withdrawal progresses: withdrawal.pending, withdrawal.completed, withdrawal.reversed, or withdrawal.rejected.

Withdraw to an employee’s bank account

curl -X POST "https://api.breet.io/v1/payments/withdraw/bank/BANK_ACCOUNT_ID" \
  -H "x-app-id: YOUR_APP_ID" \
  -H "x-app-secret: YOUR_APP_SECRET" \
  -H "X-Breet-Env: production" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 500,
    "narration": "March 2026 salary - Jane Doe"
  }'
Replace BANK_ACCOUNT_ID with the ID of the employee’s saved bank account. The amount is in USD, and Breet converts it to the employee’s local currency (NGN or GHS) based on their country. The narration is optional (max 32 characters) and appears on the bank statement.
To pay an employee in stablecoins instead, use POST /payments/withdraw/address with their wallet address and the token amount.

What Breet handles

  • Converting stablecoins to NGN or GHS at current rates
  • Processing bank payouts to employee accounts
  • Sending webhook notifications for each withdrawal status change
  • Processing crypto-to-wallet withdrawals for employees who prefer stablecoins

What you handle

  • Funding your Breet account with sufficient stablecoin balance
  • Storing employee bank account details or wallet addresses
  • Initiating individual withdrawal requests per employee
  • Listening for and processing webhook events to confirm payout status
  • Communicating payout confirmations to employees
  • Scheduling and automating payroll runs on your preferred cadence

Example user journey

  1. A remote-first startup employs five contractors across Nigeria and Ghana.
  2. On the last Friday of the month, the finance team triggers a payroll run from their internal tool.
  3. The tool calls Breet’s withdraw-to-bank endpoint for each contractor with their bank account ID, amount, and a narration like “March 2026 salary.”
  4. Breet converts the USDT to NGN or GHS and initiates bank transfers.
  5. Each contractor receives a withdrawal.completed webhook, and the tool marks the payout as confirmed.
  6. Contractors see the funds in their bank accounts within minutes.
  7. The finance team reviews a summary of all payouts and statuses in their dashboard.

FAQ

Breet processes withdrawals individually. To run payroll, make a separate withdrawal request for each employee. You can call the API programmatically in a loop or batch from your payroll system. All requests are processed concurrently on Breet’s side.
Employees with bank accounts in Nigeria receive NGN. Employees in Ghana receive GHS. If an employee prefers stablecoins, use POST /payments/withdraw/address to send USDT or USDC directly to their crypto wallet.
Yes. Since all payouts are made via API, you can call the withdrawal endpoints programmatically on any schedule (weekly, biweekly, or monthly). Integrate with your existing payroll system or build a simple cron job that triggers withdrawals on payday.
Breet sends webhooks for every withdrawal status change. Listen for withdrawal.completed to confirm a successful payout, withdrawal.reversed if the bank returned the funds, or withdrawal.rejected if it failed. You can also call GET /payments/withdrawal/{id} to check withdrawal status at any time.