Skip to main content
Before processing transactions, you need to set up recipients and their associated destinations. Recipients represent entities that can receive payments, while destinations specify the exact accounts (crypto addresses, bank accounts) where funds should be sent.

Overview

The Dakota Platform uses a two-level structure for payment routing:
  • Recipients: Business entities or individuals that can receive payments
  • Destinations: Specific accounts (crypto addresses, bank accounts) associated with recipients
This structure allows you to manage multiple payment destinations for the same recipient while maintaining clear records for compliance and reporting.

Conceptual Model: The Payment Chain

Understanding the complete payment chain is crucial for successful integration:

The Three-Level Hierarchy

  1. Customer (Your User)
    • Your application’s user who wants to send money
    • Must complete KYB verification
    • Can have multiple recipients
    • Example: “Acme Corp” (your business customer)
  2. Recipient (Payment Target Entity)
    • Legal entity that will receive the payment
    • Has compliance information (name, address)
    • Can have multiple destinations for different asset types
    • Example: “Supplier XYZ Ltd” (the business being paid)
  3. Destination (Specific Account)
    • The actual account where money is sent
    • Can be crypto address, bank account, etc.
    • Linked to exactly one recipient
    • Example: “0x742d…” (USDC wallet address)

Why This Structure?

Compliance & Reporting
  • Recipients provide legal entity information for compliance
  • Clear audit trail for who is being paid
  • Supports anti-money laundering requirements
Flexibility
  • One recipient can have multiple destinations (different currencies/networks)
  • Easy to add new payment methods to existing relationships
  • Supports complex business relationships
Organization
  • Group related payment accounts by business relationship
  • Cleaner user interfaces for managing multiple accounts
  • Better record-keeping for accounting purposes

Real-World Example

Let’s say your customer “Acme Corp” wants to pay their supplier “Global Manufacturing Ltd”:
When processing a transaction, you specify:
  • Customer ID: Who is paying (31Tgw0zSyDVo4Az66kmzUjMuwxx)
  • Destination ID: Where money should go (31TgvweTHSjWNxfARrnhjmBKSem)
The system automatically knows the recipient context through the destination relationship.

Complete Workflow Guide

Follow this step-by-step process to set up the complete payment chain:

Step 1: Start with an Approved Customer

First, verify that your customer exists and has been KYB-approved:
cURL
JavaScript
Python
Go
Rust
Java
Expected response:

Step 2: Create a Recipient

cURL
JavaScript
Python
Go
Rust
Java

Step 3: Add Payment Destinations

Crypto Destination

cURL
JavaScript
Python
Go
Rust
Java

Bank Destination

cURL
JavaScript
Python
Go
Rust
Java

Step 4: Create Transaction Accounts

Crypto Transaction

cURL
JavaScript
Python
Go
Rust
Java

Bank Transaction

cURL
JavaScript
Python
Go
Rust
Java

Best Practices for Payment Chain Management

Recipient Organization

  • Use clear, descriptive recipient names matching legal business names
  • Keep recipient addresses current for compliance
  • Group destinations by recipient to maintain clear relationships

Destination Naming

  • Use descriptive destination names: “Primary USDC Wallet”, “Backup Bank Account”
  • Include asset type in names for clarity: “EUR Business Account”, “USDC Wallet”
  • Maintain consistent naming conventions across your application

Relationship Management

  • One recipient per business entity (don’t create duplicates)
  • Multiple destinations per recipient for different payment methods
  • Delete old destinations for security

Error Prevention

  • Validate crypto addresses before creating destinations
  • Test small transactions to new destinations first
  • Implement approval workflows for new high-value destinations
  • Monitor destination usage patterns for anomalies
This hierarchical structure provides the foundation for secure, compliant, and organized payment processing through Dakota Platform’s API.

Recipients

Recipients represent the entities that will receive payments. Each recipient must have a name and physical address for compliance purposes.

Creating Recipients

Create a recipient for a customer.

Recipient Fields

Address Fields

Request Example

cURL
JavaScript
Python
Go
Rust
Java
Response:

Listing Recipients

Get all recipients for a customer:
cURL
JavaScript
Python
Go
Rust
Java
Response:

Destinations

Destinations are the specific accounts where funds will be sent. Each destination is associated with a recipient and specifies either a cryptocurrency address or traditional bank account details.

Destination Types

Dakota Platform supports three destination types:
  • Crypto: Cryptocurrency addresses on supported networks
  • Fiat US: US bank accounts (ACH transfers)
  • Fiat IBAN: International bank accounts

Creating Crypto Destinations

Add a cryptocurrency destination to a recipient.

Crypto Destination Fields

Supported Networks

In sandbox, replace each mainnet ID with its testnet equivalent (ethereum-sepolia, polygon-amoy, arbitrum-sepolia, base-sepolia, solana-devnet); mainnet IDs are rejected. See Testing — Sandbox restrictions.

Request Example

cURL
JavaScript
Python
Go
Rust
Java

Response Example

API Reference: For complete details on crypto destination creation, see Create Crypto Destination

Creating US Bank Account Destinations

Add a US bank account destination.

US Bank Account Destination Fields

Request Example

cURL
JavaScript
Python
Go
Rust
Java

Response Example

API Reference: For complete details on US bank account destination creation, see Create US Bank Destination

Creating IBAN Destinations

Add an IBAN destination for international transfers.

IBAN Destination Fields

Request Example

cURL
JavaScript
Python
Go
Rust
Java

Response Example

API Reference: For complete details on IBAN destination creation, see Create IBAN Destination

Listing Destinations

Get all destinations for a recipient:
cURL
JavaScript
Python
Go
Rust
Java

Response Example

Best Practices

Recipient Management

  • Use descriptive names for recipients
  • Keep address information current for compliance
  • Organize recipients logically (e.g., by business relationship)
  • Regular audits of recipient data

Destination Security

  • Validate cryptocurrency addresses before saving
  • Use test transactions for new crypto destinations
  • Implement approval workflows for new destinations
  • Monitor destination usage for suspicious activity

Compliance Considerations

  • Maintain accurate recipient addresses for reporting
  • Document the business relationship with each recipient
  • Regular compliance reviews of recipient and destination data
  • Implement proper access controls for destination management

Next Steps

Once you have recipients and destinations set up:
  1. Create Transactions - Process payments to your configured destinations
  2. Webhook Integration - Get notified about payment status changes (see the full event list for all available events)
  3. Testing - Test your integration with sandbox data
For detailed API reference information, see the Recipients API Reference and Destinations API Reference sections.