Transfer between Sub-Wallets
curl --request POST \
--url https://api.openxswitch.com/v1/sub-wallet/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fromSubWalletId": "<string>",
"toSubWalletId": "<string>",
"amount": "<string>",
"coin": "<string>",
"clientTxId": "<string>"
}
'import requests
url = "https://api.openxswitch.com/v1/sub-wallet/transfer"
payload = {
"fromSubWalletId": "<string>",
"toSubWalletId": "<string>",
"amount": "<string>",
"coin": "<string>",
"clientTxId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fromSubWalletId: '<string>',
toSubWalletId: '<string>',
amount: '<string>',
coin: '<string>',
clientTxId: '<string>'
})
};
fetch('https://api.openxswitch.com/v1/sub-wallet/transfer', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openxswitch.com/v1/sub-wallet/transfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fromSubWalletId' => '<string>',
'toSubWalletId' => '<string>',
'amount' => '<string>',
'coin' => '<string>',
'clientTxId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openxswitch.com/v1/sub-wallet/transfer"
payload := strings.NewReader("{\n \"fromSubWalletId\": \"<string>\",\n \"toSubWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openxswitch.com/v1/sub-wallet/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fromSubWalletId\": \"<string>\",\n \"toSubWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openxswitch.com/v1/sub-wallet/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromSubWalletId\": \"<string>\",\n \"toSubWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "wd_001",
"workspaceId": "67804918f2b05ac82a129441",
"clientTxId": null,
"fromWalletId": "678a39d6b731ad1ad8832c8a",
"toWalletId": "731ad1ad8832c8a....",
"coin": "USDT",
"amount": 100,
"status": "success",
"networkFee": 0,
"tagMemo": null,
"confirmed": false,
"confirmedAt": null,
"createdAt": null
}
}{
"statusCode": 400,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": "......"
}{
"statusCode": 404,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": "Cannot GET /v1/..."
}{
"statusCode": 422,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": [
"param is required"
]
}{
"statusCode": 500,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": "......"
}Sub Wallet Endpoints
Transfer between Sub-Wallets
Transfer funds from one sub-wallet to another sub-wallet within the same system. This operation is free, and no fees are collected for these internal transfers.
POST
/
v1
/
sub-wallet
/
transfer
Transfer between Sub-Wallets
curl --request POST \
--url https://api.openxswitch.com/v1/sub-wallet/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fromSubWalletId": "<string>",
"toSubWalletId": "<string>",
"amount": "<string>",
"coin": "<string>",
"clientTxId": "<string>"
}
'import requests
url = "https://api.openxswitch.com/v1/sub-wallet/transfer"
payload = {
"fromSubWalletId": "<string>",
"toSubWalletId": "<string>",
"amount": "<string>",
"coin": "<string>",
"clientTxId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fromSubWalletId: '<string>',
toSubWalletId: '<string>',
amount: '<string>',
coin: '<string>',
clientTxId: '<string>'
})
};
fetch('https://api.openxswitch.com/v1/sub-wallet/transfer', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openxswitch.com/v1/sub-wallet/transfer",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'fromSubWalletId' => '<string>',
'toSubWalletId' => '<string>',
'amount' => '<string>',
'coin' => '<string>',
'clientTxId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openxswitch.com/v1/sub-wallet/transfer"
payload := strings.NewReader("{\n \"fromSubWalletId\": \"<string>\",\n \"toSubWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openxswitch.com/v1/sub-wallet/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fromSubWalletId\": \"<string>\",\n \"toSubWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openxswitch.com/v1/sub-wallet/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fromSubWalletId\": \"<string>\",\n \"toSubWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "wd_001",
"workspaceId": "67804918f2b05ac82a129441",
"clientTxId": null,
"fromWalletId": "678a39d6b731ad1ad8832c8a",
"toWalletId": "731ad1ad8832c8a....",
"coin": "USDT",
"amount": 100,
"status": "success",
"networkFee": 0,
"tagMemo": null,
"confirmed": false,
"confirmedAt": null,
"createdAt": null
}
}{
"statusCode": 400,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": "......"
}{
"statusCode": 404,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": "Cannot GET /v1/..."
}{
"statusCode": 422,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": [
"param is required"
]
}{
"statusCode": 500,
"path": "/v1/...",
"timestamp": "2025-03-13T12:34:56.789Z",
"message": "......"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
The unique identifier of the source Sub wallet
The unique identifier of the destination Sub wallet
The amount to be transferred
The token name. Only rechargeable currencies are accepted.
Refer to the Get Recharge Currencies endpoint for the list of supported currencies.
Unique ID for tracking the client's request.
⌘I
.png?fit=max&auto=format&n=ML35RDblT1Ol-zJb&q=85&s=062e79ad9c4540929eec204aff020178)
.png?fit=max&auto=format&n=ML35RDblT1Ol-zJb&q=85&s=f6328956931c9664a2a070c2edb6e9b3)