Skip to main content
POST
/
api
/
sdk
/
wallet
/
link
Wallet Link
curl --request POST \
  --url https://api.simmer.markets/api/sdk/wallet/link \
  --header 'Content-Type: application/json' \
  --data '
{
  "address": "<string>",
  "signature": "<string>",
  "nonce": "<string>",
  "signature_type": 0,
  "confirm_replace_managed": false,
  "confirm_orphan_deposit_wallet": false
}
'
{
  "success": true,
  "wallet_address": "<string>",
  "wallet_ownership": "<string>",
  "message": "<string>",
  "error": "<string>"
}

Body

application/json

Request to link an external wallet after signing challenge.

address
string
required

Wallet address being linked

signature
string
required

Signature of the challenge message

nonce
string
required

Challenge nonce from GET /wallet/link/challenge

signature_type
integer
default:0

0=EOA, 1=Polymarket proxy, 2=Gnosis Safe

confirm_replace_managed
boolean
default:false

Required (true) when this link would replace an existing managed wallet with a different external wallet. Default false so SDK auto-relink paths (_ensure_wallet_linked) cannot silently overwrite a managed account when a stale WALLET_PRIVATE_KEY is left in the bot env. Explicit user calls to client.link_wallet() from simmer-sdk >= 0.16 pass this true. SIM-1574.

confirm_orphan_deposit_wallet
boolean
default:false

Required (true) when the user has an active Polymarket deposit wallet (wallet_uses_deposit_wallet=true) and the linking address differs from the current wallet_address. The DW is owned on-chain by the CURRENT EOA via CREATE2; relinking to a new address would orphan the DW (the new key can't sign WALLET batches against it — funds and positions get stuck). Default false so silent orphaning is impossible. SIM-1611. Surfaced after the 2026-05-07 audit found 3 already-orphaned DWs from prior relinks (da2185e0, ydir.tomas@, raynojam@). See _dev/active/_polymarket-dw-phase-2/.

Response

Successful Response

Response from wallet linking attempt.

success
boolean
required
wallet_address
string | null
wallet_ownership
string | null
message
string | null
error
string | null