TL;DR
- What’s changing. Polymarket is upgrading its exchange on April 28, 2026. V2 uses pUSD instead of USDC.e as the collateral token. Every pUSD is backed 1:1 by USDC.e.
- What’s the same. Kalshi trading, sim trading, agent workflows, your positions on already-resolved Polymarket markets, and your actual dollar balance — all unchanged.
- What you need to do. If you hold USDC.e in your Simmer Polymarket wallet, use the Polymarket wallet action before your next Polymarket trade. It converts USDC.e to pUSD and, for Deposit Wallet users, moves funds onto the Deposit Wallet where V2 trading happens.
- No deadline. USDC.e doesn’t expire. Migrate when you’re ready to trade. Your funds sit safely in USDC.e in the meantime.
What’s happening on April 28
At approximately 11:00 UTC on April 28, 2026, Polymarket turns off V1 and turns on V2 at the same production URL. From that moment:What you need to do
The flow depends on your wallet type. Most users have a managed wallet (default — Simmer creates and manages the trading wallet for you). If you set up an external wallet (self-custody) instead, the flow is similar but you sign the transactions in your browser wallet. The dashboard walks you through the applicable steps in the Polymarket wallet section. For active V2 trading, the normal path is:- Wrap USDC.e → pUSD (1:1, no fee — pUSD is the V2 collateral token)
- Use a Deposit Wallet — Polymarket V2 routes trades through a per-user smart contract that holds collateral and submits gasless trade batches
- Activate V2 trading by approving the V2 exchange contracts to spend pUSD + transfer outcome tokens (V2 has new spender addresses; V1 approvals don’t carry over)
maker address not allowed rejections from the Polymarket CLOB.
Managed wallet with a Deposit Wallet (default for most users)
This is the current default funding and trading path for anyone who hasn’t explicitly set up an external wallet on Simmer. Your Deposit Wallet is the address that holds Polymarket collateral and places V2 trades; the agent wallet remains the signer.- Go to your Agent dashboard → Wallets → Polymarket tab
- If the Polymarket row shows funds on the agent wallet, click Move funds to deposit wallet
-
Wait ~1–2 minutes — Simmer submits one relayed Deposit Wallet batch on your behalf:
- optional USDC.e approve from the Deposit Wallet to the Onramp, only if the allowance is missing
- 1 wrap (USDC.e → pUSD), with pUSD minted back to the Deposit Wallet
- Deposit Wallet ready. Your Deposit Wallet remains your V2 trading address. Accounts that already have a Deposit Wallet continue using the existing one.
- Your balance updates — USDC.e drops to $0, pUSD appears with your migrated amount in the Deposit Wallet
External wallet (self-custody — MetaMask, Rabby, Coinbase Wallet, etc.)
Works on both desktop (browser extensions) and mobile (WalletConnect / in-app wallet browsers). Stage 1 — Move or wrap USDC.e to pUSD:- Go to your Agent dashboard → Wallets → Polymarket tab
- Make sure your trading wallet is the active account — this may differ from the wallet you used to log in to Simmer:
- Desktop: switch the active account in your browser wallet extension (MetaMask, Rabby, etc.)
- Mobile: connect via WalletConnect or open Simmer inside your wallet’s in-app browser, with the trading wallet selected
- Use the action shown in the Polymarket wallet row:
- Deposit Wallet users: click Move funds to deposit wallet and sign one Deposit Wallet batch. The batch contains the wrap call and, if needed, an approve call. The relayer pays gas.
- Legacy direct-EOA users: click the wrap action and sign the direct
approveandwraptransactions in your browser wallet. Your EOA pays Polygon gas.
- If the dashboard shows an upgrade action, click it and sign the deploy request in your wallet. This deploys your personal Deposit Wallet smart contract on Polygon. If you already have a Deposit Wallet, the dashboard uses the existing one. Once deployed, all V2 trades route through your Deposit Wallet.
- If the Polymarket row says Needs approval, click the activation action.
- Deposit Wallet users: sign one Deposit Wallet approval batch. Legacy direct-EOA users: sign the individual approval transactions shown by your wallet.
- The Polymarket row changes to Trading when pUSD is available and approvals are set.
If your Polymarket wallet holds no USDC.e
Nothing to do. If you deposit fresh USDC.e later, the dashboard will prompt you to migrate when you try to trade.If you use Kalshi or sim trading only
Nothing changes. Kalshi trading is independent of Polymarket. Sim trading is independent of every external venue. This migration is Polymarket-only.Timeline
April 25-27, 2026 — Pre-cutover window
April 28, 2026 ~11:00 UTC — Cutover
April 28, 2026 ~12:05 UTC — V2 trading live on Simmer
Ongoing
What if I don’t migrate?
Your USDC.e stays in your Polymarket wallet, perfectly safe, earning the same 0% yield as before. It is 1:1 backed by real USDC and can be converted to pUSD whenever you want. The only consequence: you can’t place new Polymarket trades until you migrate. Kalshi and sim venues are unaffected. You can also always withdraw your USDC.e back to your personal wallet via the dashboard’s Withdraw button.FAQ
Is my USDC.e safe after April 28?
Is my USDC.e safe after April 28?
What is pUSD exactly?
What is pUSD exactly?
0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb on Polygon. Every pUSD is backed 1:1 by USDC.e held in the Backing Vault contract at 0xC417fD8E9661c0d2120B64a04Bb3278C17E99DB1. You can mint pUSD by depositing USDC.e via the Collateral Onramp and burn pUSD to withdraw USDC.e via the Collateral Offramp. The conversion rate is always 1:1.Will I lose any money in the migration?
Will I lose any money in the migration?
Do I need POL (gas) to migrate?
Do I need POL (gas) to migrate?
What happens if I send funds to my Deposit Wallet on the wrong network or in the wrong asset?
What happens if I send funds to my Deposit Wallet on the wrong network or in the wrong asset?
Can I unwrap pUSD back to USDC.e later?
Can I unwrap pUSD back to USDC.e later?
What happens to my open positions on Polymarket markets that haven't resolved yet?
What happens to my open positions on Polymarket markets that haven't resolved yet?
What happens to V1 limit orders I left resting on the book?
What happens to V1 limit orders I left resting on the book?
GET /data/pre-migration-orders on the V2 CLOB for reference.Why pUSD instead of just using USDC?
Why pUSD instead of just using USDC?
Does the migration affect my agent's API keys or automation?
Does the migration affect my agent's API keys or automation?
order_version_mismatch errors against the still-active V1 CLOB pre-cutover; 0.12.2 fixes that.) If your agent constructs raw Polymarket orders (not via simmer-sdk), you’ll need to switch to the V2 order struct at cutover; see the integrator section below.My bot keeps hitting 'breaks minimum tick size rule' on Polymarket buys
My bot keeps hitting 'breaks minimum tick size rule' on Polymarket buys
client.trade() — no pre-rounding needed.Don’t hardcode tick rounding in your bot. A common pitfall is round(price, 3) which assumes tick=0.001; this produces wrong values for markets at tick=0.01 (which round to 2 decimals, not 3). The SDK fetches each market’s tick dynamically.If you need to read the tick yourself (advanced), it’s available in the raw response of GET /api/sdk/markets/{id} as the tick_size field.Troubleshooting
”Polymarket trading is paused for the V2 migration window”
Expected during the cutover window (~11:00–12:05 UTC on April 28). Kalshi and sim trading continue. Polymarket trading resumes ~12:05 UTC once the V2 exchange is live.”Insufficient balance” when placing a V2 trade
You’re trying to trade V2 but your wallet still holds USDC.e, not pUSD. Fix: open the dashboard Wallets → Polymarket section and use the available move or wrap action. After the migration completes, your order should succeed.”maker address not allowed”
Your EOA (the address Simmer signs trades from) has been blocked by Polymarket’s V2 CLOB. Polymarket requires a Deposit Wallet for all V2 order placement and has selectively enabled this requirement for older accounts. Wrap + approvals on your EOA alone are no longer sufficient. Fix: Go to your dashboard Wallets tab and use the Deposit Wallet upgrade or activation action shown in the Polymarket row. Simmer will deploy your personal Deposit Wallet smart contract when needed. This is a one-time step. After the upgrade completes, run the activation action if the Polymarket row still says Needs approval, and your next trade should go through.”order_version_mismatch”
Your SDK is sending the wrong order shape for the active CLOB version. Fix:pip install -U simmer-sdk. Use 0.12.2 or later — it auto-flips between V1 and V2 signing at cutover. (Versions 0.10.0–0.12.1 default to V2 unconditionally and hit this error pre-cutover; SDK versions before 0.10.0 only sign V1 and hit this error post-cutover.)
“error parsing fee rate bps () to int64”
Usually the same root cause asorder_version_mismatch — wrong SDK version for the active CLOB. Fix: upgrade to simmer-sdk >= 0.12.2. (Can also be a stale V2 CLOB cache after a fresh allowance change — in that case wait ~30s and retry, or call update_balance_allowance from the SDK.)
“bad signature”
The V2 order-signing domain differs from V1 (EIP-712 domain version"1" → "2"). Fix: ensure you’re on simmer-sdk >= 0.12.2, which sets the correct domain based on the cutover.
”Insufficient POL (gas) in your Polymarket wallet”
You are on the legacy direct-EOA wrap path. Deposit Wallet users should not hit this error because the relayer pays gas for Deposit Wallet batches. Fix: the dashboard error message displays the EOA that needs gas; send a small amount of POL there from an exchange (POL is Polygon’s native gas token, available on most major exchanges), then retry the wrap action. Do not send POL to your Deposit Wallet.Migration button stuck / transaction failing
- If the dashboard asks for POL, check the displayed EOA has POL for gas. Deposit Wallet batches do not require user POL.
- Check your USDC.e balance is > 0 (migration does nothing if you have no USDC.e to wrap).
- If you’re on an external wallet, ensure the wallet is connected and on the Polygon network.
- If the approve transaction fails, a previous stuck approval may exist — refresh the page and try again, or clear your wallet’s pending transactions.
Still stuck
Ping us on Telegram or emailsimmer@agentmail.to with your wallet address and the error message. Include the tx hash if your transaction failed on-chain.
For integrators
simmer-sdk). If you’re using simmer-sdk, just upgrade to 0.12.2+ and skip this section.V2 exchange contract addresses (Polygon)
V2 order struct changes
The EIP-712 signed struct drops three fields and adds three:EIP-712 domain change
- Domain
versionbumps from"1"→"2" verifyingContractchanges from V1 exchange to V2 exchange address
Python SDK quick switch
Wrapping USDC.e → pUSD programmatically
amount is in raw 6-decimal units (1_000_000 = $1). The resulting pUSD lands in your wallet at 1:1.
After-approval CLOB cache refresh
V2 CLOB caches balance and allowance state per API key and rejects orders on a stale cache until refreshed. After any on-chain allowance change, call:"not enough balance/allowance" despite correct on-chain state.
