Transfers API
The Transfers API allows you to transfer funds between two customers on the Sznd platform.
Overview
Transfers enable peer-to-peer money transfers between users on the platform. You can transfer funds:
- Same Currency: Direct transfer between wallets of the same currency
Two Methods for Transfers
Method 1: Transfer via Quotes (Recommended)
Use the Quotes API with quote_type: TRANSFER to create transfers. This method includes fee calculations and provides better control over the transfer process.
Method 2: Direct Transfer
Use the direct transfer endpoint for same-currency transfers between wallets. This is simpler but only works for transfers within the same currency.
Method 1: Transfer via Quotes
Create a transfer quote and accept it to complete the transfer. This method provides detailed fee information.
Step 1: Look Up Recipient by User Tag
Before creating a transfer, you may want to verify the recipient's user tag.
Endpoint: GET /api/v1/client/users/by-tag
Authentication: Required (HMAC - Business API Key)
Include your API key and signature in the request headers:
Query Parameters:
tag(string, required) - User tag to look up (4-20 alphanumeric characters)
Success Response (200 OK):
Step 2: Create Transfer Quote
Endpoint: POST /api/v1/client/quotes
Authentication: Required (HMAC - Business API Key)
Include your API key and signature in the request headers:
Request Body:
Required Parameters:
source_currency(string) - Currency to transfer fromtarget_currency(string) - Currency to transfer tosource_amount(string) - Amount to transfer in source currencyquote_type(string) - Must beTRANSFERuser_tag(string) - User tag of the recipientfee_config_id(string, UUID) - Fee configuration IDtz(string) - Timezone (IANA format)
Optional Parameters:
narration(string) - Description for the transfer
Success Response (201 Created):
Step 3: Accept Transfer Quote
Endpoint: POST /api/v1/client/quotes/{id}/accept
Authentication: Required (HMAC - Business API Key)
Include your API key and signature in the request headers:
Path Parameters:
id(UUID) - Quote ID from Step 2
Success Response (200 OK):
Example: Complete Transfer Flow
Step 1: Verify recipient exists
Step 2: Create transfer quote
Step 3: Accept the quote
Example: HTTP Requests
Step 1: Look up user by tag
Step 2: Create transfer quote
Step 3: Accept quote
Method 2: Direct Transfer (Same Currency Only)
For same-currency transfers, you can use the direct transfer endpoint. This is simpler but only works when both wallets use the same currency.
Endpoint
Client API Endpoint: POST /api/v1/client/transactions/transfer
Note: This method is for same-currency transfers only.
Authentication
This endpoint requires HMAC authentication (Business API Key). Include your API key and signature in the request headers:
Note: For HMAC authentication details, see the Authentication guide.
Request Body
Parameters:
source_wallet_id(UUID, required) - Your wallet ID (must belong to authenticated user)target_wallet_id(UUID, required) - Recipient's wallet IDamount(string, required) - Amount to transfer (decimal string)idempotency_key(UUID, required) - Unique key to prevent duplicate transfers
Important Notes
- Same Currency Required: Both wallets must use the same currency
- Wallet Ownership: Source wallet must belong to the authenticated user
- Idempotency: Using the same
idempotency_keywill return the existing transaction instead of creating a duplicate
Success Response (201 Created)
Error Responses
Example: Direct Transfer
Example: HTTP Request
User Tags
User tags are unique identifiers that allow users to receive transfers without exposing their wallet IDs or email addresses. Each user can set a custom user tag.
Set User Tag
Endpoint: PUT /api/v1/client/users/tag
Authentication: Required (HMAC - Business API Key)
Include your API key and signature in the request headers:
Request Body:
Requirements:
- 4-20 alphanumeric characters
- Must be unique across the platform
- Pattern:
^[a-zA-Z0-9]+$
Success Response (200 OK):
Look Up User by Tag
Endpoint: GET /api/v1/client/users/by-tag?tag={user_tag}
Authentication: Required (HMAC - Business API Key)
Include your API key and signature in the request headers:
Query Parameters:
tag(string, required) - User tag to look up
Success Response (200 OK):
Transfer Requirements
Prerequisites
-
Source User must have:
- Active account
- Wallet in source currency
- Sufficient available balance
-
Recipient User must have:
- Active account
- Wallet in target currency (will be created automatically if needed)
- Valid user tag (for quote-based transfers)
-
Both users must be:
- KYC verified (if required for the currency/amount)
- In good standing
Transfer Limits
Transfer limits may apply based on:
- User verification status
- Currency-specific limits
- Daily/monthly transaction limits
Check the Exchange Rates API to see applicable limits for a transfer.
Currency Conversion
Exchange rate is locked when the quote is created and fees are calculated and included in the quote.
Transfer Status
Transfers go through the following statuses:
- PENDING - Transfer is pending processing
- PROCESSING - Transfer is being processed
- COMPLETED - Transfer completed successfully
- FAILED - Transfer failed
- CANCELLED - Transfer was cancelled
Check Transfer Status
Example: HTTP Request
Error Handling
Common Errors
Error Response Format
Best Practices
- Verify Recipient First - Always look up the user tag before creating a transfer to confirm the recipient
- Use Idempotency Keys - Always include unique idempotency keys to prevent duplicate transfers
- Check Balance - Verify sufficient balance before creating transfers
- Handle Errors - Implement proper error handling for failed transfers
- Monitor Status - Track transfer status and notify users of completion
- Use Quotes - Use the quote method when you only have the recipient's tag
- Store Transaction References - Save transaction references for reconciliation and support
Use Cases
- P2P Payments - Enable users to send money to each other
- Marketplace Payments - Process payments between buyers and sellers
- Gig Economy - Pay freelancers and contractors
- Remittances - Send money to family and friends
- Business Payments - Transfer funds between business accounts
Webhook Integration
Set up webhooks to receive real-time notifications when transfers complete or fail. This allows you to:
- Update your system automatically when transfers complete
- Handle failed transfers and notify users
- Reconcile transfers in your database
See the Webhooks documentation for more information.
Next Steps
- Quotes API - Learn more about creating and accepting quotes
- Transactions API - Track transfer status and history
- Virtual Wallets API - Manage virtual wallets and check balances
- Webhooks - Set up webhooks for transfer notifications