Sandbox Internal Transfer
curl --request POST \
--url https://api.openxswitch.com/v1/sandbox/sub-wallet/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fromWalletId": "<string>",
"toWalletId": "<string>",
"amount": "<string>",
"coin": "<string>",
"clientTxId": "<string>"
}
'import requests
url = "https://api.openxswitch.com/v1/sandbox/sub-wallet/transfer"
payload = {
"fromWalletId": "<string>",
"toWalletId": "<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({
fromWalletId: '<string>',
toWalletId: '<string>',
amount: '<string>',
coin: '<string>',
clientTxId: '<string>'
})
};
fetch('https://api.openxswitch.com/v1/sandbox/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/sandbox/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([
'fromWalletId' => '<string>',
'toWalletId' => '<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/sandbox/sub-wallet/transfer"
payload := strings.NewReader("{\n \"fromWalletId\": \"<string>\",\n \"toWalletId\": \"<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/sandbox/sub-wallet/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fromWalletId\": \"<string>\",\n \"toWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openxswitch.com/v1/sandbox/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 \"fromWalletId\": \"<string>\",\n \"toWalletId\": \"<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
Sandbox Internal Transfer
Transfer funds from one sub-wallet to another sub-wallet or from one sub-wallet to a prime wallet within the same system. This operation is free, and no fees are collected for these internal transfers.
POST
/
v1
/
sandbox
/
sub-wallet
/
transfer
Sandbox Internal Transfer
curl --request POST \
--url https://api.openxswitch.com/v1/sandbox/sub-wallet/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fromWalletId": "<string>",
"toWalletId": "<string>",
"amount": "<string>",
"coin": "<string>",
"clientTxId": "<string>"
}
'import requests
url = "https://api.openxswitch.com/v1/sandbox/sub-wallet/transfer"
payload = {
"fromWalletId": "<string>",
"toWalletId": "<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({
fromWalletId: '<string>',
toWalletId: '<string>',
amount: '<string>',
coin: '<string>',
clientTxId: '<string>'
})
};
fetch('https://api.openxswitch.com/v1/sandbox/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/sandbox/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([
'fromWalletId' => '<string>',
'toWalletId' => '<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/sandbox/sub-wallet/transfer"
payload := strings.NewReader("{\n \"fromWalletId\": \"<string>\",\n \"toWalletId\": \"<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/sandbox/sub-wallet/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fromWalletId\": \"<string>\",\n \"toWalletId\": \"<string>\",\n \"amount\": \"<string>\",\n \"coin\": \"<string>\",\n \"clientTxId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openxswitch.com/v1/sandbox/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 \"fromWalletId\": \"<string>\",\n \"toWalletId\": \"<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 Wallet/Sub wallet
The unique identifier of the destination Wallet/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)