Skip to main content

Overview

Bread provides comprehensive cryptocurrency wallet management capabilities. Each wallet supports both EVM (Ethereum Virtual Machine) and SVM (Solana Virtual Machine) networks, giving you access to a wide range of blockchain ecosystems with complete automation options.

Key Features

  • Multi-chain Support: Every wallet includes both EVM and SVM addresses
  • Wallet Types: Basic, Offramp, Transfer and Swap wallets for different use cases
  • Fully Automated: Configure automatic operations based on incoming deposits
  • Secure Management: Enterprise-grade security for wallet creation and management
  • 100% Gasless: Transactions across supported chains without worrying about gas fees

Automation

Bread offers various wallets, each designed for specific use cases:
Use Case: Manual control over all operationsBasic wallets provide full manual control without any automation. Perfect for applications that need to handle transfers, swaps, and offramps programmatically via API calls.
curl -X POST "https://api.bread.africa/wallet" \
  -H "x-service-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "reference": "user-123-basic-wallet"
  }'
Features:
  • Manual transfers via API
  • Manual swaps via API
  • Manual offramps via API
  • Full programmatic control
Use Case: Automatically convert crypto to fiatOfframp wallets automatically convert any incoming cryptocurrency deposits to fiat currency and transfer funds to a specified bank account.
curl -X POST "https://api.bread.africa/wallet" \
  -H "x-service-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "offramp": true,
      "beneficiary_id": "68bf2eba196a18d7bd166184",
      "reference": "user-123-offramp-wallet"
  }'
Features:
  • Automatic crypto-to-fiat conversion
  • Direct bank transfers
  • Real-time exchange rates
  • Single beneficiary per wallet
Use Case: Centralized asset managementTransfer wallets automatically transfer all incoming deposits to your internal settlement wallet for centralized management.
curl -X POST "https://api.bread.africa/wallet" \
  -H "x-service-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "transfer": true,
      "reference": "user-123-transfer-wallet"
  }'
Features:
  • Automatic asset consolidation
  • Transfer to settlement wallet
  • Centralized fund management
  • Simplified accounting
Use Case: Automatic asset conversionSwap wallets automatically convert incoming deposits to your preferred cryptocurrency asset across different blockchains.
curl -X POST "https://api.bread.africa/wallet" \
  -H "x-service-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "swap": true,
      "reference": "user-123-swap-wallet"
  }'
Features:
  • Automatic crypto-to-crypto conversion
  • Cross-chain swaps
  • Configurable target assets
  • Optimal exchange rates
Target asset configuration is managed via the dashboard or asset configuration API endpoint.
Response Format:
{
  "success": true,
  "status": 201,
  "message": "Wallet created successfully",
  "timestamp": "2025-09-08T02:03:46.201Z",
  "data": {
    "reference": "user-123-basic-wallet",
    "wallet_id": "68be398168e841ce24c576af",
    "address": {
      "evm": "0x77373761e1a69BB6daF15eFb8dD3959BEE34E98D",
      "svm": "ekKeWZ6x3xDs1sdVQ4KHfZ5Eq5p6UyitHQtCemTtLgn"
    }
  }
}

Set Automation

Change automation settings for existing wallets:
curl -X POST "https://api.bread.africa/automate" \
  -H "x-service-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "wallet_id": "68bc290df51feea8c53f5275",
      "offramp": true,
      "beneficiary_id": "68bf2eba196a18d7bd166184",
      "transfer": false,
      "swap": false
  }'

Supported Assets

Bread supports USDC, USDT, and CNGN across multiple blockchains. For list of supported assets and their blockchain networks, Check here. A dual-address system that allows your users to receive assets across the most popular blockchains without needing separate wallets.
You can use amount: -1 to indicate all available balance of an asset.

Integration

const axios = require('axios');

class BreadWallet {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseURL = 'https://api.bread.africa';
    this.headers = {
      'x-service-key': apiKey,
      'Content-Type': 'application/json'
    };
  }

  async createBasicWallet(reference) {
    const response = await axios.post(`${this.baseURL}/wallet`, {
      reference
    }, { headers: this.headers });
    return response.data;
  }

  async createOfframpWallet(beneficiaryId, reference) {
    const response = await axios.post(`${this.baseURL}/wallet`, {
      offramp: true,
      beneficiary_id: beneficiaryId,
      reference
    }, { headers: this.headers });
    return response.data;
  }

  async getWallet(walletId) {
    const response = await axios.get(`${this.baseURL}/wallet`, {
      headers: { 'x-service-key': this.apiKey },
      params: { wallet_id: walletId }
    });
    return response.data;
  }

  async getWalletBalances(walletId) {
    const response = await axios.get(`${this.baseURL}/balances`, {
      headers: { 'x-service-key': this.apiKey },
      params: { wallet_id: walletId }
    });
    return response.data;
  }

  async transferAssets(walletId, amount, receiver, asset) {
    const response = await axios.post(`${this.baseURL}/transfer`, {
      wallet_id: walletId,
      amount,
      receiver,
      asset
    }, { headers: this.headers });
    return response.data;
  }

  async updateAutomation(walletId, automation) {
    const response = await axios.post(`${this.baseURL}/automate`, {
      wallet_id: walletId,
      ...automation
    }, { headers: this.headers });
    return response.data;
  }
}

// Usage example
const bread = new BreadWallet('your-api-key');

// Create different wallet types
const basicWallet = await bread.createBasicWallet('user-123-basic');
const offrampWallet = await bread.createOfframpWallet(
  '68bf2eba196a18d7bd166184',
  'user-123-offramp'
);

// Get wallet info
const walletInfo = await bread.getWallet(basicWallet.data.wallet_id);

// Check balances
const balances = await bread.getWalletBalances(basicWallet.data.wallet_id);

// Transfer assets
const transfer = await bread.transferAssets(
  basicWallet.data.wallet_id,
  100,
  '0x4ad21FA456Bb297f505B2718ba87ad63D8a95E6B',
  'base:usdc'
);
import requests

class BreadWallet:
    def __init__(self, api_key):
        self.api_key = api_key
        self.base_url = 'https://api.bread.africa'
        self.headers = {
            'x-service-key': api_key,
            'Content-Type': 'application/json'
        }

    def create_basic_wallet(self, reference):
        response = requests.post(
            f'{self.base_url}/wallet',
            headers=self.headers,
            json={'reference': reference}
        )
        return response.json()

    def create_offramp_wallet(self, beneficiary_id, reference):
        response = requests.post(
            f'{self.base_url}/wallet',
            headers=self.headers,
            json={
                'offramp': True,
                'beneficiary_id': beneficiary_id,
                'reference': reference
            }
        )
        return response.json()

    def get_wallet(self, wallet_id):
        response = requests.get(
            f'{self.base_url}/wallet',
            headers={'x-service-key': self.api_key},
            params={'wallet_id': wallet_id}
        )
        return response.json()

    def get_wallet_balances(self, wallet_id):
        response = requests.get(
            f'{self.base_url}/balances',
            headers={'x-service-key': self.api_key},
            params={'wallet_id': wallet_id}
        )
        return response.json()

    def transfer_assets(self, wallet_id, amount, receiver, asset):
        response = requests.post(
            f'{self.base_url}/transfer',
            headers=self.headers,
            json={
                'wallet_id': wallet_id,
                'amount': amount,
                'receiver': receiver,
                'asset': asset
            }
        )
        return response.json()

    def update_automation(self, wallet_id, **automation):
        response = requests.post(
            f'{self.base_url}/automate',
            headers=self.headers,
            json={'wallet_id': wallet_id, **automation}
        )
        return response.json()

# Usage example
bread = BreadWallet('your-api-key')

# Create different wallet types
basic_wallet = bread.create_basic_wallet('user-123-basic')
offramp_wallet = bread.create_offramp_wallet(
    '68bf2eba196a18d7bd166184',
    'user-123-offramp'
)

# Get wallet info
wallet_info = bread.get_wallet(basic_wallet['data']['wallet_id'])

# Check balances
balances = bread.get_wallet_balances(basic_wallet['data']['wallet_id'])

# Transfer assets
transfer = bread.transfer_assets(
    basic_wallet['data']['wallet_id'],
    100,
    '0x4ad21FA456Bb297f505B2718ba87ad63D8a95E6B',
    'base:usdc'
)

Need Help?

Our team is here to help you succeed with wallet integration:
Need help? Contact our team at hello@bread.africa or Twitter.
I