Prepare a withdrawal
curl --request POST \
--url https://api.sx.bet/user/multisig/withdraw/prepare \
--header 'Content-Type: application/json' \
--header 'x-sx-api-key: <api-key>' \
--data '
{
"safeAddress": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8",
"proxyWallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"to": "0x52adf738AAD93c31f798a30b2C74D658e1E9a562",
"token": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"amount": "100000000"
}
'import requests
url = "https://api.sx.bet/user/multisig/withdraw/prepare"
payload = {
"safeAddress": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8",
"proxyWallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"to": "0x52adf738AAD93c31f798a30b2C74D658e1E9a562",
"token": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"amount": "100000000"
}
headers = {
"x-sx-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-sx-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
safeAddress: '0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8',
proxyWallet: '0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A',
to: '0x52adf738AAD93c31f798a30b2C74D658e1E9a562',
token: '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
amount: '100000000'
})
};
fetch('https://api.sx.bet/user/multisig/withdraw/prepare', 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.sx.bet/user/multisig/withdraw/prepare",
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([
'safeAddress' => '0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8',
'proxyWallet' => '0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A',
'to' => '0x52adf738AAD93c31f798a30b2C74D658e1E9a562',
'token' => '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
'amount' => '100000000'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-sx-api-key: <api-key>"
],
]);
$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.sx.bet/user/multisig/withdraw/prepare"
payload := strings.NewReader("{\n \"safeAddress\": \"0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8\",\n \"proxyWallet\": \"0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A\",\n \"to\": \"0x52adf738AAD93c31f798a30b2C74D658e1E9a562\",\n \"token\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"amount\": \"100000000\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-sx-api-key", "<api-key>")
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.sx.bet/user/multisig/withdraw/prepare")
.header("x-sx-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"safeAddress\": \"0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8\",\n \"proxyWallet\": \"0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A\",\n \"to\": \"0x52adf738AAD93c31f798a30b2C74D658e1E9a562\",\n \"token\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"amount\": \"100000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sx.bet/user/multisig/withdraw/prepare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-sx-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"safeAddress\": \"0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8\",\n \"proxyWallet\": \"0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A\",\n \"to\": \"0x52adf738AAD93c31f798a30b2C74D658e1E9a562\",\n \"token\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"amount\": \"100000000\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"safeAddress": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8",
"safeTxHash": "0x9c8f5b21e4d0a7c3f18b6e94d2a05c7318fa4b62d9e0173c5a8b2f4e6019d3c7",
"typedData": {
"primaryType": "SafeTx",
"domain": {
"chainId": 4162,
"verifyingContract": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8"
},
"message": {
"to": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"value": "0",
"operation": 0,
"nonce": 3
}
},
"safeTransactionData": {
"to": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"value": "0",
"data": "0x",
"operation": 0,
"nonce": 3
}
}
}{
"message": "HAS_OPEN_ORDERS",
"error": "Bad Request",
"statusCode": 400
}{
"message": "BAD_AUTH",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "the target Safe is not associated with your account",
"error": "Forbidden",
"statusCode": 403
}{
"message": "your proxy wallet is not deployed yet",
"error": "Conflict",
"statusCode": 409
}Advanced Wallet
Prepare a withdrawal
Build the Safe transaction that withdraws funds from your proxy.
POST
/
user
/
multisig
/
withdraw
/
prepare
Prepare a withdrawal
curl --request POST \
--url https://api.sx.bet/user/multisig/withdraw/prepare \
--header 'Content-Type: application/json' \
--header 'x-sx-api-key: <api-key>' \
--data '
{
"safeAddress": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8",
"proxyWallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"to": "0x52adf738AAD93c31f798a30b2C74D658e1E9a562",
"token": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"amount": "100000000"
}
'import requests
url = "https://api.sx.bet/user/multisig/withdraw/prepare"
payload = {
"safeAddress": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8",
"proxyWallet": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"to": "0x52adf738AAD93c31f798a30b2C74D658e1E9a562",
"token": "0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956",
"amount": "100000000"
}
headers = {
"x-sx-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-sx-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
safeAddress: '0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8',
proxyWallet: '0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A',
to: '0x52adf738AAD93c31f798a30b2C74D658e1E9a562',
token: '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
amount: '100000000'
})
};
fetch('https://api.sx.bet/user/multisig/withdraw/prepare', 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.sx.bet/user/multisig/withdraw/prepare",
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([
'safeAddress' => '0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8',
'proxyWallet' => '0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A',
'to' => '0x52adf738AAD93c31f798a30b2C74D658e1E9a562',
'token' => '0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956',
'amount' => '100000000'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-sx-api-key: <api-key>"
],
]);
$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.sx.bet/user/multisig/withdraw/prepare"
payload := strings.NewReader("{\n \"safeAddress\": \"0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8\",\n \"proxyWallet\": \"0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A\",\n \"to\": \"0x52adf738AAD93c31f798a30b2C74D658e1E9a562\",\n \"token\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"amount\": \"100000000\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-sx-api-key", "<api-key>")
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.sx.bet/user/multisig/withdraw/prepare")
.header("x-sx-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"safeAddress\": \"0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8\",\n \"proxyWallet\": \"0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A\",\n \"to\": \"0x52adf738AAD93c31f798a30b2C74D658e1E9a562\",\n \"token\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"amount\": \"100000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sx.bet/user/multisig/withdraw/prepare")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-sx-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"safeAddress\": \"0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8\",\n \"proxyWallet\": \"0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A\",\n \"to\": \"0x52adf738AAD93c31f798a30b2C74D658e1E9a562\",\n \"token\": \"0x1BC6326EA6aF2aB8E4b6Bc83418044B1923b2956\",\n \"amount\": \"100000000\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"safeAddress": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8",
"safeTxHash": "0x9c8f5b21e4d0a7c3f18b6e94d2a05c7318fa4b62d9e0173c5a8b2f4e6019d3c7",
"typedData": {
"primaryType": "SafeTx",
"domain": {
"chainId": 4162,
"verifyingContract": "0x8E4c91A7D2b0f35e6A19c84d70B2e5F1a3c6D9e8"
},
"message": {
"to": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"value": "0",
"operation": 0,
"nonce": 3
}
},
"safeTransactionData": {
"to": "0x4361123dbdc1D812fdf7D27045aF358C9C8AA70A",
"value": "0",
"data": "0x",
"operation": 0,
"nonce": 3
}
}
}{
"message": "HAS_OPEN_ORDERS",
"error": "Bad Request",
"statusCode": 400
}{
"message": "BAD_AUTH",
"error": "Unauthorized",
"statusCode": 401
}{
"message": "the target Safe is not associated with your account",
"error": "Forbidden",
"statusCode": 403
}{
"message": "your proxy wallet is not deployed yet",
"error": "Conflict",
"statusCode": 409
}POST /user/multisig/withdraw/prepare builds the withdrawal. You sign typedData with your signer
key, then submit that signature to
POST /user/multisig/withdraw/execute.
Cancel open orders first. A
PENDING or ACTIVE order returns 400 HAS_OPEN_ORDERS.Authorizations
API key, sent as the x-sx-api-key header.
Body
application/json
Your proxy's Safe, from multisigSafeAddress on GET /user/proxy.
Your proxy wallet. Must be the proxy that this Safe governs.
Bridge session to pay. The destination and amount are read from the session. Do not also send to or amount.
Required string length:
2 - 128Where the funds are sent. Required, with amount, when glideSessionId is omitted.
ERC-20 token to withdraw. Omit, or pass the zero address, for the native token.
Amount in the token's base units, as a decimal string. Required, with to, when glideSessionId is omitted.
Last modified on October 1, 2026