NEW: Live arbitrage across 10+ prediction markets.Arbitrage →
← Index
APISep 19, 2026

Polymarket Proxy Wallet: Find It and Use It via API

Polymarket Proxy Wallet: Find It and Use It via API

The Short Answer

On Polymarket the address that signs your orders and the address that holds your funds are usually not the same address, and that single fact causes most failed API integrations. Polymarket now names three wallet types: Deposit Wallet for every account wallet deployed on or after 4 May 2026, and two legacy types, Proxy Wallet for accounts created through Magic Link or Google, and Safe Wallet for accounts created with an external signer such as MetaMask. Find your account wallet address in the profile menu, pass it as the wallet while your private key stays the signer, and queries and orders both attribute correctly.

Key Takeaways

  • Signing key and funded address are different things. Querying the signer returns empty positions even when the account clearly holds them.
  • "Proxy Wallet" is now a legacy classification. New accounts get a Deposit Wallet.
  • The current SDKs take wallet and signer as separate parameters, which makes the split explicit.
  • Older clients expressed the same idea as signature_type plus a funder address.
  • A Relayer API key authorizes gasless wallet operations and is created in your Polymarket settings.
  • Session keys let a Deposit Wallet owner grant a separate signer scoped, time-limited trading access.

Why does Polymarket separate the signer from the wallet?

Because most Polymarket accounts are smart contract wallets rather than plain externally owned accounts.

When you sign up with an email, Polymarket provisions a smart wallet for you. Your key authorizes actions; the smart wallet holds the collateral and the positions. That arrangement is what makes email signup possible without handing a user a seed phrase, and it is why a naive integration that only knows about one address fails. To analyze other wallets rather than your own, see Predictefy vs Predicts.guru.

The symptom is nearly always the same. You query positions for the address your private key derives, get an empty array, and conclude the account is empty. It is not. You asked the wrong address.

Which wallet type do you have?

Wallet typeWhen it applies
Deposit WalletEvery Polymarket account wallet deployed on or after 4 May 2026
Proxy WalletLegacy smart wallet created through Magic Link or Google authentication
Safe WalletLegacy smart wallet created with an external signer such as MetaMask or Rabby

This matters for reading older material. Most of what is written about Polymarket "proxy wallets" predates the Deposit Wallet and describes the legacy path. The underlying idea did not change, only the naming and the API surface.

How do you find your account wallet address?

The profile menu on polymarket.com shows it directly. That string, not the address your signing key derives, is the one that holds funds and positions.

Two checks worth doing before you write any code. Confirm the address you copied has a balance you recognize, and confirm it is different from your signer address. If they match, you have an externally owned account and none of the rest of this applies to you.

How do you connect with the current SDK?

The unified client takes the two addresses as separate arguments, which makes the distinction impossible to miss.

import { createSecureClient, relayerApiKey } from "@polymarket/client";
import { privateKey } from "@polymarket/client/viem";

const client = await createSecureClient({
  wallet: process.env.POLYMARKET_WALLET_ADDRESS,
  signer: privateKey(process.env.SIGNER_PRIVATE_KEY),
  apiKey: relayerApiKey({
    key: process.env.RELAYER_API_KEY,
    address: process.env.RELAYER_API_KEY_ADDRESS,
  }),
});

wallet is the account wallet from the profile menu. signer is your key. The Relayer API key authorizes gasless wallet operations and is created under Settings, then API Keys, then Relayer API Keys, which returns both a Signer Address and an API Key. Python follows the same shape through AsyncSecureClient.create.

How did older clients express this?

If you are maintaining an integration built on py-clob-client, the same concept appears as two parameters rather than one object.

client = ClobClient(
    host,
    key=PRIVATE_KEY,
    chain_id=137,
    signature_type=1,
    funder=FUNDER_ADDRESS,
)

funder is the address that holds the funds, the same role the newer SDK calls wallet. signature_type tells the venue how to verify the signature: 0 for a standard externally owned account including MetaMask and hardware wallets, 1 for email and Magic wallet delegated signing, and 2 for browser wallet proxy signatures. The mapping to the current wallet-type names is direct: 1 corresponds to what is now called a legacy Proxy Wallet, and 2 to a Safe Wallet.

Getting signature_type wrong produces an authentication failure rather than a helpful message, so it is worth confirming against your actual wallet type rather than copying a value from an example.

What about giving a bot its own key?

A Deposit Wallet owner can authorize a separate signer with scoped, time-limited trading access through session keys. That is the sanctioned way to run automation without putting the account's main key on a server, and it is materially safer than the alternative of copying your primary private key into a deployment environment.

Where does the key actually live?

Whatever wallet type you have, the signing key is yours and should stay in your own process. That is worth stating plainly because it is the property that bounds your risk: an integration layer that reads your data should never be an integration layer that could move it.

Predictefy is built that way. Orders are constructed server side, signed in your process, and relayed back, so key custody never moves. The read surface covers Polymarket as one of 16 venues on a single normalized schema:

curl -s "https://data.predictefy.com/api/polymarket/fetchMarkets?sort=volume&limit=10" \
  -H "Authorization: Bearer pk_live_YOUR_KEY"

Reading needs only the Predictefy key. The wallet and signer separation above applies when you place orders, and at that point the signature is produced on your side, with the venue credentials staying in your environment throughout.

Frequently Asked Questions

What is a Polymarket proxy wallet?

A smart contract wallet that holds your funds and positions while a separate key authorizes actions. Polymarket now classifies it as legacy, applying to accounts created through Magic Link or Google authentication. Accounts deployed on or after 4 May 2026 use a Deposit Wallet instead, which works on the same principle.

How do I find my Polymarket proxy wallet address?

Open the profile menu on polymarket.com and copy the account wallet address shown there. That is the address holding your funds and positions, and it is the one to pass as the wallet parameter. It will differ from the address your signing private key derives.

Why do my Polymarket positions return empty over the API?

Almost always because the query used the signer address rather than the account wallet that actually holds the positions. Copy the account wallet address from the profile menu and query that instead. This is the single most common cause of an empty result on an account with visible holdings.

Which signature_type should I use?

Use 0 for a standard externally owned account such as MetaMask or a hardware wallet, 1 for email and Magic wallet delegated signing, and 2 for browser wallet proxy signatures. Match it to how your account was actually created, since a mismatch fails authentication rather than reporting a clear error.

Do I need a Relayer API key to trade?

The Relayer key authorizes gasless wallet operations for the account and is created under Settings, then API Keys, then Relayer API Keys. It is distinct from CLOB trading credentials and is not interchangeable with them, so keep the two separate in your configuration rather than reusing one value.