Recipients

Recipients are payment destinations for your global transfers. Create once, use for multiple payments across traditional banking, mobile money networks, and cryptocurrency platforms.

Base URL
https://api.due.network/v1

Authentication required: Include your API key in Authorization header and account ID in Due-Account-Id header.



Core Concepts

TermDefinition
RecipientPayment destination with all required transfer details
SchemaField template for payment method (bank_us, bank_sepa, etc.)
ChannelComplete payment config (rail + currency + fees + timing+schemas)
Financial InstitutionBank/provider selection required for some schemas

📋 Payment Methods

  • Traditional Banking - ACH, SWIFT, SEPA, Faster Payments, local rails
  • Mobile Money - M-Pesa, MTN, Airtel, regional providers
  • Cryptocurrency - USDC/USDT on major networks (Ethereum, Polygon, etc.)

Get real-time channels: Use GET /channels for current fees, processing times, and availability.
Get field requirements: Use GET /schemas for up-to-date field definitions.


API Endpoints

MethodEndpointPurpose
POST/recipientsCreate new recipient
GET/recipientsList recipients (optional: include deleted)
GET/recipients/{id}Get recipient details
DELETE/recipients/{id}Delete recipient
GET/channelsAvailable payment channels
GET/schemasAll schema field definitions
GET/financial_institutions/{country}/{schema}Banks/providers for selection

1️⃣ Create Recipients

POST /v1/recipients
Authorization: Bearer {api_key}
Due-Account-Id: {account_id}
Content-Type: application/json

Core Fields

FieldTypeRequiredDescription
idstringYour unique recipient identifier
countrystringISO 3166-1 alpha-2 country code
namestringLegal name or business name
emailstringRecipient email
detailsobjectSchema-specific payment details
isExternalbooleanExternal recipient flag (default: false)
isActivebooleanActive status (default: true)

US Bank Transfer

curl -X POST https://api.due.network/v1/recipients \
  -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "emp_john_001",
    "country": "US",
    "name": "John Smith",
    "email": "[email protected]",
    "details": {
      "bankName": "JPMorgan Chase Bank",
      "accountName": "John Smith",
      "accountNumber": "123456789",
      "routingNumber": "021000021",
      "beneficiaryAddress": {
        "street_line_1": "123 Main Street",
        "city": "New York",
        "postal_code": "10001",
        "country": "USA",
        "state": "NY"
      }
    }
  }'

SEPA Transfer (Europe)

curl -X POST https://api.due.network/v1/recipients \
  -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "contractor_marie_fr",
    "country": "FR",
    "name": "Marie Dubois",
    "email": "[email protected]",
    "details": {
      "accountType": "individual",
      "firstName": "Marie",
      "lastName": "Dubois",
      "IBAN": "FR1420041010050500013M02606"
    }
  }'

SWIFT Transfer (International)

curl -X POST https://api.due.network/v1/recipients \
  -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "supplier_sg_001",
    "country": "SG",
    "name": "Singapore Tech Pte Ltd",
    "email": "[email protected]",
    "details": {
      "accountType": "business",
      "companyName": "Singapore Tech Pte Ltd",
      "bankName": "DBS Bank Ltd",
      "swiftCode": "DBSSSGSG",
      "accountNumber": "1234567890",
      "currency": "SGD"
    }
  }'

African Bank (with Institution Selection)

Step 1: Get available banks

curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/financial_institutions/NG/bank_africa

Step 2: Create recipient

curl -X POST https://api.due.network/v1/recipients \
  -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "vendor_ng_001",
    "country": "NG",
    "name": "Adebayo Okafor",
    "email": "[email protected]",
    "details": {
      "financialInstitutionId": "access_bank_ng",
      "accountNumber": "0123456789",
      "accountName": "Adebayo Okafor"
    }
  }'

Cryptocurrency

curl -X POST https://api.due.network/v1/recipients \
  -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "trader_eth_001",
    "country": "US",
    "name": "Alex Thompson",
    "email": "[email protected]",
    "details": {
      "address": "0x742d35Cc6665C6c175E8c7CaB7CeEf5634123456"
    }
  }'

2️⃣ List Recipients

# All active recipients
curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/recipients

# Include deleted recipients
curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  "https://api.due.network/v1/recipients?with_deleted=true"

3️⃣ Get Single Recipient

curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/recipients/emp_john_001

4️⃣ Delete Recipient

curl -X DELETE \
  -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/recipients/emp_john_001

5️⃣ Get Schemas & Channels

Get All Schema Definitions

curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/schemas

Get Available Channels

curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/channels

Get Financial Institutions

# Nigerian banks
curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/financial_institutions/NG/bank_africa

# Kenyan mobile money providers
curl -H "Authorization: Bearer your_api_key" \
  -H "Due-Account-Id: your_account_id" \
  https://api.due.network/v1/financial_institutions/KE/momo_africa

💻 Python SDK

import requests

class DueRecipientsAPI:
    def __init__(self, api_key: str, account_id: str):
        self.base_url = "https://api.due.network/v1"
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Due-Account-Id": account_id,
            "Content-Type": "application/json"
        }
    
    def create_recipient(self, recipient_data: dict) -> dict:
        response = requests.post(f"{self.base_url}/recipients", 
                               headers=self.headers, json=recipient_data)
        response.raise_for_status()
        return response.json()
    
    def list_recipients(self, with_deleted: bool = False) -> dict:
        params = {"with_deleted": with_deleted} if with_deleted else {}
        response = requests.get(f"{self.base_url}/recipients", 
                              headers=self.headers, params=params)
        return response.json()
    
    def get_recipient(self, recipient_id: str) -> dict:
        response = requests.get(f"{self.base_url}/recipients/{recipient_id}", 
                              headers=self.headers)
        return response.json()
    
    def delete_recipient(self, recipient_id: str) -> dict:
        response = requests.delete(f"{self.base_url}/recipients/{recipient_id}", 
                                 headers=self.headers)
        return response.json()
    
    def get_schemas(self) -> list:
        response = requests.get(f"{self.base_url}/schemas", headers=self.headers)
        return response.json()
    
    def get_channels(self) -> list:
        response = requests.get(f"{self.base_url}/channels", headers=self.headers)
        return response.json()
    
    def get_financial_institutions(self, country: str, schema: str) -> list:
        response = requests.get(f"{self.base_url}/financial_institutions/{country}/{schema}", 
                              headers=self.headers)
        return response.json()

# Usage
api = DueRecipientsAPI("your_api_key", "your_account_id")

# Create US bank recipient
us_recipient = api.create_recipient({
    "id": "emp_sarah_001",
    "country": "US",
    "name": "Sarah Johnson", 
    "email": "[email protected]",
    "details": {
        "bankName": "Bank of America",
        "accountName": "Sarah Johnson",
        "accountNumber": "987654321",
        "routingNumber": "021000021",
        "beneficiaryAddress": {
            "street_line_1": "456 Oak St",
            "city": "Los Angeles",
            "state": "CA",
            "postal_code": "90210",
            "country": "USA"
        }
    }
})

# Get available schemas
schemas = api.get_schemas()
bank_schemas = [s for s in schemas if s['category'] == 'bank']
print(f"Available bank schemas: {[s['id'] for s in bank_schemas]}")

# Get Nigerian banks for institution selection
ng_banks = api.get_financial_institutions("NG", "bank_africa")
print(f"Nigerian banks: {[b['name'] for b in ng_banks]}")

📱 JavaScript SDK

class DueRecipientsAPI {
    constructor(apiKey, accountId) {
        this.baseURL = 'https://api.due.network/v1';
        this.headers = {
            'Authorization': `Bearer ${apiKey}`,
            'Due-Account-Id': accountId,
            'Content-Type': 'application/json'
        };
    }

    async createRecipient(recipientData) {
        const response = await fetch(`${this.baseURL}/recipients`, {
            method: 'POST',
            headers: this.headers,
            body: JSON.stringify(recipientData)
        });
        return response.json();
    }

    async listRecipients(withDeleted = false) {
        const params = withDeleted ? '?with_deleted=true' : '';
        const response = await fetch(`${this.baseURL}/recipients${params}`, {
            headers: this.headers
        });
        return response.json();
    }

    async getSchemas() {
        const response = await fetch(`${this.baseURL}/schemas`, {
            headers: this.headers
        });
        return response.json();
    }

    async getChannels() {
        const response = await fetch(`${this.baseURL}/channels`, {
            headers: this.headers
        });
        return response.json();
    }

    async getFinancialInstitutions(country, schema) {
        const response = await fetch(
            `${this.baseURL}/financial_institutions/${country}/${schema}`,
            { headers: this.headers }
        );
        return response.json();
    }
}

// Usage
const api = new DueRecipientsAPI('your_api_key', 'your_account_id');

// Create SWIFT recipient
const swiftRecipient = await api.createRecipient({
    id: 'supplier_hk_001',
    country: 'HK',
    name: 'Hong Kong Supplier Ltd',
    email: '[email protected]',
    details: {
        accountType: 'business',
        companyName: 'Hong Kong Supplier Ltd',
        bankName: 'HSBC Hong Kong',
        swiftCode: 'HSBCHKHHHKH',
        accountNumber: '123456789',
        currency: 'HKD'
    }
});

🔄 Institution Selection Workflow

For schemas requiring financial institution selection (bank_africa, momo_africa, etc.):

  1. Get institutions: Call /financial_institutions/{country}/{schema}
  2. User selects: Present options in your UI
  3. Create recipient: Use selected institution ID in financialInstitutionId field
# Complete workflow example
def create_african_recipient_with_selection(api, country, recipient_data):
    # Step 1: Get available institutions
    institutions = api.get_financial_institutions(country, "bank_africa")
    
    # Step 2: User selection (in real app, show dropdown)
    print("Available banks:")
    for i, inst in enumerate(institutions):
        print(f"{i+1}. {inst['name']}")
    
    selected_id = institutions[0]['id']  # Auto-select first for demo
    
    # Step 3: Create recipient with selected institution
    recipient_data['details']['financialInstitutionId'] = selected_id
    return api.create_recipient(recipient_data)

🚨 Important Notes

  • Financial Institution Selection: Required for bank_africa, momo_africa, bank_colombia, etc.
  • Schema Validation: Use /schemas endpoint to get current field requirements
  • Rate Limits: Standard limits apply (see endpoint table)
  • Deletion: Recipients with pending payments cannot be deleted
  • Updates: Recipient details cannot be modified after creation (delete and recreate instead)