We’ve isolated what looks like a deposit-wallet / CLOB API credential ownership mismatch in py-clob-client-v2 for signatureType=3.
Goal
We are trying to place live CLOB orders using the deposit wallet flow.
SDK / endpoint
Account setup
What is already verified
- Deposit wallet is deployed
GET https://relayer-v2.polymarket.com/deployed?address=0xf3eBC0D3b6fcF7668bEbAfFEE636D6bF41c28b33&type=WALLET
returns:
{"deployed": true}
- Builder and relayer auth both work
- Builder API keys can authenticate to relayer-v2
- Relayer API keys can authenticate to relayer-v2
- Relayer transaction history looks correct
Using relayer auth, historical transactions show:
- from = 0xa166...
- proxyAddress = 0xf3eb...
- owner = 0xa166...
- type = SAFE
So relayer seems to understand:
- EOA = auth/owner side
- deposit wallet = proxy/funder side
The problem
Using py-clob-client-v2==1.0.1, we can build a POLY_1271 order with:
- signatureType = 3
- funder = 0xf3eb...
- maker = 0xf3eb...
- signer = 0xf3eb...
The order signature is long, consistent with the expected ERC-1271 / wrapped signature flow, not a normal short ECDSA signature.
But POST /order rejects with:
"the order signer address has to be the address of the API KEY"
Important observation
The CLOB API credentials we can mint through the public Python v2 auth flow appear to be created from L1 / EOA auth.
So our current working interpretation is:
- order signer = deposit wallet 0xf3eb...
- API-key identity = EOA 0xa166...
and CLOB rejects because these do not match.
Additional tests already performed
We already tested:
- old CLOB credentials
- freshly minted new CLOB credentials with new nonces
- POLY_1271
- POLY_PROXY
- EOA
- update_balance_allowance(...)
Results:
So POLY_1271 is clearly the closest correct path, but the credential identity still appears wrong.
Questions
-
Is there currently any public API/SDK-supported way to create CLOB API credentials whose API-key identity/address is the deposit wallet / proxy address?
-
If yes, what is the exact supported flow for creating those credentials for signatureType=3 deposit-wallet orders?
-
If no, what is the official supported auth flow for posting deposit-wallet CLOB orders where:
- maker = deposit wallet
- signer = deposit wallet
- signatureType = 3
A minimal working Python or TypeScript example for this exact deposit-wallet case would help a lot.
This added below!! READ
Yes, please prepare the final GitHub/support issue now.
Important: include the new post-UI-trade result.
Add this section:
Post-UI trade workaround test
We also tested the suggested workaround of placing a manual trade in the Polymarket UI first.
-
Logged in with EOA / connected wallet:
0xa166...
-
Polymarket profile / deposit wallet:
0xf3eb...8b33
-
Placed a $1 manual trade successfully in the UI
-
Accepted the MetaMask confirmation
-
The UI trade was placed successfully
After that, we did a clean credential test:
- Did not reuse old registry credentials
- Created fresh CLOB credentials via create_api_key
- nonce = 4525
- new key family prefix = 708d5523...
- py-clob-client-v2==1.0.1
- signatureType = 3 / POLY_1271
- funder = 0xf3eb...
Local order/auth dump:
- client.address = 0xa166...
- order.maker = 0xf3eb...
- order.signer = 0xf3eb...
- order.signatureType = 3
- signature_len = 636
- creds mode = create_api_key
POST /order still rejects with:
"the order signer address has to be the address of the API KEY"
Conclusion:
The UI-trade/migration workaround did not change the CLOB API credential identity for this account. Fresh CLOB creds created after the UI trade still appear EOA-bound, while the valid POLY_1271 order is correctly built with maker/signer equal to the deposit wallet.
Question:
Is there any currently supported way to create CLOB API credentials whose API-key identity/address is the deposit wallet/proxy address for signatureType=3 orders?
If not, is programmatic CLOB order placement currently unsupported for this account/wallet model?
We’ve isolated what looks like a deposit-wallet / CLOB API credential ownership mismatch in py-clob-client-v2 for signatureType=3.
Goal
We are trying to place live CLOB orders using the deposit wallet flow.
SDK / endpoint
Account setup
EOA / private-key / owner address:
0xa166f1FA6AE1B2B4E9c5D29fBF34aD09bA4074e2
Deposit wallet / proxy / funder:
0xf3eBC0D3b6fcF7668bEbAfFEE636D6bF41c28b33
What is already verified
GET https://relayer-v2.polymarket.com/deployed?address=0xf3eBC0D3b6fcF7668bEbAfFEE636D6bF41c28b33&type=WALLET
returns:
{"deployed": true}
Using relayer auth, historical transactions show:
So relayer seems to understand:
The problem
Using py-clob-client-v2==1.0.1, we can build a POLY_1271 order with:
The order signature is long, consistent with the expected ERC-1271 / wrapped signature flow, not a normal short ECDSA signature.
But POST /order rejects with:
"the order signer address has to be the address of the API KEY"
Important observation
The CLOB API credentials we can mint through the public Python v2 auth flow appear to be created from L1 / EOA auth.
So our current working interpretation is:
and CLOB rejects because these do not match.
Additional tests already performed
We already tested:
Results:
POLY_1271 always fails with:
"the order signer address has to be the address of the API KEY"
POLY_PROXY and EOA fail with:
"invalid signature"
So POLY_1271 is clearly the closest correct path, but the credential identity still appears wrong.
Questions
Is there currently any public API/SDK-supported way to create CLOB API credentials whose API-key identity/address is the deposit wallet / proxy address?
If yes, what is the exact supported flow for creating those credentials for signatureType=3 deposit-wallet orders?
If no, what is the official supported auth flow for posting deposit-wallet CLOB orders where:
A minimal working Python or TypeScript example for this exact deposit-wallet case would help a lot.
This added below!! READ
Yes, please prepare the final GitHub/support issue now.
Important: include the new post-UI-trade result.
Add this section:
Post-UI trade workaround test
We also tested the suggested workaround of placing a manual trade in the Polymarket UI first.
Logged in with EOA / connected wallet:
0xa166...
Polymarket profile / deposit wallet:
0xf3eb...8b33
Placed a $1 manual trade successfully in the UI
Accepted the MetaMask confirmation
The UI trade was placed successfully
After that, we did a clean credential test:
Local order/auth dump:
POST /order still rejects with:
"the order signer address has to be the address of the API KEY"
Conclusion:
The UI-trade/migration workaround did not change the CLOB API credential identity for this account. Fresh CLOB creds created after the UI trade still appear EOA-bound, while the valid POLY_1271 order is correctly built with maker/signer equal to the deposit wallet.
Question:
Is there any currently supported way to create CLOB API credentials whose API-key identity/address is the deposit wallet/proxy address for signatureType=3 orders?
If not, is programmatic CLOB order placement currently unsupported for this account/wallet model?