Explainer July 24, 2026

Polymarket wallet types explained: EOA vs Magic vs Gnosis Safe

Polymarket has three account types — EOA, Magic (email) proxy, and Gnosis Safe proxy. Here's how each works and which signature_type your bot needs.

Polymarket has three account types — a plain EOA, a Magic (email) proxy wallet, and a Gnosis Safe proxy wallet — and in the CLOB API they are signature_type 0, 1, and 2 respectively. Which one you have is decided by how you signed up, and passing the wrong one is the most common reason API orders fail.

If you’ve hit a cryptic signing or balance error in py-clob-client, this is almost certainly the page you needed. Let’s untangle the three types, how each one holds funds, and exactly what to pass to the client.

The key idea: signer vs. funder

Every Polymarket order needs two roles filled:

  • a signer — the private key that cryptographically signs the order, and
  • a funder — the address that actually holds the USDC and receives the positions.

For a plain EOA these are the same address. For both proxy types they are different: your key signs, but the money lives in a smart-contract wallet Polymarket deployed for you. Once you see the three types through this lens, everything about them makes sense.

Type 0 — EOA: your wallet, directly

An EOA (externally owned account) is a regular crypto wallet — one address, one private key, no contracts in between. You hold USDC on Polygon in that wallet and trade straight from it via the API.

  • How you get it: you don’t sign up through the UI at all — you point the API client at a wallet you already control.
  • Where funds live: in the EOA itself. Signer = funder.
  • Who it’s for: pure API traders and bot builders who never touch the website and want the fewest moving parts.
  • The catch: you manage everything yourself — including granting the token approvals (USDC and outcome tokens) that Polymarket’s exchange contracts need before your first trade. UI-created accounts get this handled for them.
from py_clob_client.client import ClobClient

client = ClobClient(
    "https://clob.polymarket.com",
    key=PRIVATE_KEY,      # your wallet's key — it signs AND holds the funds
    chain_id=137,
    signature_type=0,     # EOA (this is also the default)
)

Type 1 — Magic proxy: the email sign-up (POLY_PROXY)

Sign up on Polymarket with an email, and two things are created behind the scenes: a Magic wallet tied to your email (the signer), and a proxy wallet contract that holds your funds (the funder). You never see a seed phrase; logging in with email gives you access to the key.

  • How you get it: email sign-up on polymarket.com — the most common path.
  • Where funds live: in the proxy contract. Its address is the deposit address shown in your Polymarket profile.
  • For bots: export the Magic wallet’s private key from Polymarket settings, and pass the proxy as funder — the full walkthrough is in your first Polymarket trading bot.
client = ClobClient(
    "https://clob.polymarket.com",
    key=MAGIC_EXPORTED_KEY,   # signs the orders
    chain_id=137,
    signature_type=1,         # POLY_PROXY — email / Magic account
    funder=DEPOSIT_ADDRESS,   # the proxy that holds your USDC
)

Type 2 — Gnosis Safe proxy: the browser-wallet sign-up (POLY_GNOSIS_SAFE)

Connect MetaMask (or another browser wallet) on the Polymarket site instead of using email, and Polymarket deploys a Gnosis Safe — a battle-tested multisig-capable smart wallet — controlled by your browser wallet. Same signer/funder split as Magic, different contract underneath.

  • How you get it: “connect wallet” sign-up through the Polymarket UI.
  • Where funds live: in the Safe — again, the deposit address in your profile, not your MetaMask address.
  • For bots: your browser wallet’s key signs; the Safe is the funder.
client = ClobClient(
    "https://clob.polymarket.com",
    key=BROWSER_WALLET_KEY,   # e.g. your MetaMask account's key
    chain_id=137,
    signature_type=2,         # POLY_GNOSIS_SAFE — browser-wallet account
    funder=DEPOSIT_ADDRESS,   # the Safe that holds your USDC
)

Side by side

EOA (0)Magic proxy (1)Gnosis Safe (2)
API nameEOAPOLY_PROXYPOLY_GNOSIS_SAFE
Created byYou, outside the UIEmail sign-upBrowser-wallet sign-up
SignerYour wallet keyMagic key (exportable)Your browser wallet key
Funds live inThe same walletProxy contractGnosis Safe
funder paramNot neededDeposit addressDeposit address
Typical userAPI-first bot buildersMost Polymarket usersCrypto-native UI users

Who controls what

Control always follows the signing key — so ask: who holds the key?

  • EOA: you, and only you. The private key is the account. Polymarket can’t move your funds, but nobody can help you either.
  • Magic proxy: control follows your email login. The Magic key is generated and managed through Magic’s infrastructure and unlocked by authenticating with your email — so in practice, whoever controls the email controls the wallet. You can export the raw key from settings, at which point you also hold it directly.
  • Gnosis Safe: your browser wallet’s key (i.e., your seed phrase) controls the Safe, and the Safe holds the funds. Self-custody, one contract-hop removed.

In all three cases the funds sit on-chain in an account your key controls — Polymarket the company is not holding a balance for you the way an exchange does. The types differ in what kind of key sits at the top and how you keep it.

The risks of each

Honest failure modes, per type:

  • EOA — you are the single point of failure. Lose the key: funds gone, no recovery, no support ticket. Leak the key (committed to a repo, pasted in a chat): funds gone just as permanently. You also grant the exchange-contract approvals yourself — a fat-fingered approval to a wrong contract is on you.
  • Magic — your risk is your email. Anyone who compromises your email account can pass the login and reach the wallet, so the account’s security equals your email’s security (use a strong password and 2FA there — that’s your seed phrase now). You also depend on Magic’s service being up to sign in. And once you export the key for a bot, you carry EOA-style key-handling risk on top.
  • Gnosis Safe — your seed phrase is everything. Lose the browser wallet’s seed: you lose the Safe and everything in it. Phishing that captures your wallet signature is the classic attack. There’s nominal smart-contract risk in the Safe itself, though Safe is the most battle-tested contract wallet in crypto — this is the smallest of the three concerns in practice.

None of these are exotic risks — they’re the standard trade-off between convenience (someone helps you hold the key) and sovereignty (nobody can help you). Pick the one whose failure mode you’re best equipped to prevent.

Which should you choose?

A simple decision guide:

  • “I just want to trade, minimal friction.”Magic (email). No seed phrase, familiar login, and you can still export the key later if you decide to build a bot. Secure your email like it’s a vault, because it is.
  • “I already live in MetaMask / have a hardware wallet.”Gnosis Safe. You keep the key-management habits you already trust, and your existing wallet controls the account.
  • “I’m building a bot; the API is my interface.”EOA. Fewest moving parts, no dependency on the UI or on Magic, signer and funder are one address. Best paired with a dedicated wallet holding only your trading balance.
  • Undecided? Start with Magic — it’s the path the bot tutorial follows, and nothing about it locks you in: you can always fund a fresh EOA later and switch signature_type to 0.

Whichever you pick, the bot-hygiene rule is the same: keep only what you’re actively trading in the account a bot can sign for, and keep keys in environment variables, never in code.

How to tell which one you have

  • Log in with an email? Type 1.
  • Log in by connecting a wallet on the site? Type 2.
  • Never used the site, trading from a wallet you control via API only? Type 0.

And the two failure modes to check when orders are rejected: wrong signature_type for how the account was created, or funder missing / set to the signer’s address instead of the deposit address. One detail that surprises people: with proxy accounts, your positions and USDC sit at the proxy address on-chain — so when you watch the live feed, a proxy account’s trades show that wallet, not the login key’s address.

Why this matters beyond order placement

Wallet identity is half of reading the market. Every trade streaming from the mempool carries a wallet_address — the on-chain account that traded. Whether that’s someone’s EOA or their proxy, it’s a stable identity you can track, filter, and copy.

Polymarket settles everything on-chain, which is exactly what makes that visible. Connect to the Polyflux feed and you’ll see every wallet’s trades the millisecond they happen, ~3 seconds before confirmation — start with the Python guide, or grab a key and watch the wallets trade live.

Frequently asked questions

What are the wallet types on Polymarket?
Three: EOA (you trade directly from your own wallet), Magic proxy (created when you sign up with email), and Gnosis Safe proxy (created when you connect a browser wallet like MetaMask through the Polymarket UI). In the API they are signature types 0, 1, and 2.
What signature_type should I use in py-clob-client?
Use 0 if you trade directly from your own EOA wallet, 1 if your Polymarket account was created with an email (Magic) login, and 2 if you created it by connecting a browser wallet through the Polymarket website. For types 1 and 2, also pass your Polymarket deposit address as funder.
What is the funder address in py-clob-client?
The address that actually holds your USDC and receives your positions. For proxy accounts (signature types 1 and 2) that's your Polymarket proxy wallet — the deposit address shown in your Polymarket profile — not the address of the key that signs.
What is a Polymarket proxy wallet?
A smart contract Polymarket deploys for your account that holds your funds and positions. Your login key (Magic or browser wallet) controls it, but the assets sit in the proxy — which is why API clients need both a signer key and a funder address.
Which Polymarket wallet type should I choose?
If you want the easiest start, sign up with email (Magic). If you already use MetaMask or another wallet, connect it and get a Gnosis Safe. If you're building a bot and want full, direct control with no UI dependency, use a plain EOA you already custody.
Who controls my funds on Polymarket?
It depends on the account type. With an EOA, only your private key controls the funds. With a Gnosis Safe, your browser wallet's key controls the Safe holding the funds. With a Magic account, control follows your email login — whoever can access that email and pass Magic's auth controls the wallet.
What are the risks of each Polymarket wallet type?
EOA: lose the key and the funds are gone forever — there is no recovery. Magic: security reduces to your email account, and signing depends on Magic's service. Gnosis Safe: your seed phrase is the single point of failure, plus standard smart-contract risk (though Safe is the most battle-tested contract wallet in crypto).
Which Polymarket wallet type is best for a trading bot?
All three work. Most people start with signature type 1 because email sign-up is the common path and the key is exportable from settings. Pure API traders who never touch the UI often prefer a plain EOA (type 0) for fewer moving parts.
← All articles