Skip to main content
POST
/
withdraw
Create withdrawal addresses
curl --request POST \
  --url https://bridge.polymarket.com/withdraw \
  --header 'Content-Type: application/json' \
  --data '
{
  "address": "0x9156dd10bea4c8d7e2d591b633d1694b1d764756",
  "toChainId": "1",
  "toTokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "recipientAddr": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
}
'
import requests

url = "https://bridge.polymarket.com/withdraw"

payload = {
"address": "0x9156dd10bea4c8d7e2d591b633d1694b1d764756",
"toChainId": "1",
"toTokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"recipientAddr": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
address: '0x9156dd10bea4c8d7e2d591b633d1694b1d764756',
toChainId: '1',
toTokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
recipientAddr: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
})
};

fetch('https://bridge.polymarket.com/withdraw', 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://bridge.polymarket.com/withdraw",
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([
'address' => '0x9156dd10bea4c8d7e2d591b633d1694b1d764756',
'toChainId' => '1',
'toTokenAddress' => '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
'recipientAddr' => '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
]),
CURLOPT_HTTPHEADER => [
"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://bridge.polymarket.com/withdraw"

payload := strings.NewReader("{\n \"address\": \"0x9156dd10bea4c8d7e2d591b633d1694b1d764756\",\n \"toChainId\": \"1\",\n \"toTokenAddress\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"recipientAddr\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n}")

req, _ := http.NewRequest("POST", url, payload)

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://bridge.polymarket.com/withdraw")
.header("Content-Type", "application/json")
.body("{\n \"address\": \"0x9156dd10bea4c8d7e2d591b633d1694b1d764756\",\n \"toChainId\": \"1\",\n \"toTokenAddress\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"recipientAddr\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://bridge.polymarket.com/withdraw")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"address\": \"0x9156dd10bea4c8d7e2d591b633d1694b1d764756\",\n \"toChainId\": \"1\",\n \"toTokenAddress\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n \"recipientAddr\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n}"

response = http.request(request)
puts response.read_body
{
  "address": {
    "evm": "0x23566f8b2E82aDfCf01846E54899d110e97AC053",
    "svm": "CrvTBvzryYxBHbWu2TiQpcqD5M7Le7iBKzVmEj3f36Jb",
    "btc": "bc1q8eau83qffxcj8ht4hsjdza3lha9r3egfqysj3g"
  },
  "note": "Send funds to these addresses to bridge to your destination chain and token."
}
{
"error": "<string>"
}
{
"error": "<string>"
}

Headers

X-Builder-Code
string

Optional builder code (bytes32 hex) attributing this request to your integration so transfer issues can be traced to your app. Omitting it still succeeds but returns a missing_builder_code warning; a malformed code returns 400. Get your code at https://polymarket.com/settings?tab=builder

Pattern: ^0x[a-fA-F0-9]{64}$
Example:

"0x00000000000000000000000000000000000000000000000000000000abcd1234"

Body

application/json
address
string
required

Source Polymarket wallet address on Polygon

Pattern: ^0x[a-fA-F0-9]{40}$
Example:

"0x56687bf447db6ffa42ffe2204a05edaa20f55839"

toChainId
string
required

Destination chain ID (e.g., "1" for Ethereum, "8453" for Base, "1151111081099710" for Solana)

Example:

"1"

toTokenAddress
string
required

Destination token contract address

Example:

"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"

recipientAddr
string
required

Destination wallet address where funds will be sent

Example:

"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"

Response

Withdrawal addresses created successfully

address
object

Bridge addresses for different blockchain networks

note
string

Additional information about the bridge addresses

Example:

"Only certain chains and tokens are supported. See /supported-assets for details."