When placing orders using the basic EOA flow (ClobClient(host, chain_id, key)), the CLOB API rejects the order with:
PolyApiException[status_code=400, error_message={'error': 'maker address not allowed, please use the deposit wallet flow'}]
This happens even with a brand new wallet that has never interacted with Polymarket UI.
The README documents the basic EOA flow as the standard approach, but the CLOB now requires
the Relay/EIP-7702 deposit wallet flow for all order placement.
Reproduction
from py_clob_client_v2 import ClobClient, MarketOrderArgs, OrderType, Side, PartialCreateOrderOptions
client = ClobClient(host="https://clob.polymarket.com", chain_id=137, key=PRIVATE_KEY)
creds = client.create_or_derive_api_key()
client.set_api_creds(creds)
resp = client.create_and_post_market_order(
order_args=MarketOrderArgs(
token_id=TOKEN_ID,
amount=1.0,
side=Side.BUY,
order_type=OrderType.FOK,
),
options=PartialCreateOrderOptions(tick_size="0.01"),
order_type=OrderType.FOK,
)
# → PolyApiException: 'maker address not allowed, please use the deposit wallet flow'
Environment
py-clob-client-v2 version: 1.0.1rc1
- Python: 3.12
- Network: Polygon Mainnet (Chain ID 137)
- Wallet: fresh EOA, never used on polymarket.com
What I've tried
Attempt 1 — Basic EOA flow (as in README)
client = ClobClient(host=host, chain_id=137, key=PRIVATE_KEY)
Result: "maker address not allowed, please use the deposit wallet flow"
Attempt 2 — POLY_1271 + funder (as in examples/orders/gtc_limit_buy_deposit_wallet.py)
client = ClobClient(
host=host, chain_id=137, key=PRIVATE_KEY,
creds=creds,
signature_type=SignatureTypeV2.POLY_1271,
funder=WALLET_ADDRESS,
)
Result: "the order signer address has to be the address of the API KEY"
The second error suggests that with POLY_1271, the SDK computes a signer address
that doesn't match the API key's registered address (WALLET_ADDRESS).
Questions
- Is the Relay/EIP-7702 deposit wallet flow now mandatory for all users on mainnet?
- How should a developer set up the deposit wallet programmatically (without polymarket.com UI)?
- When using
funder, what private key should go in key=? Is it a separate relay key or the same EOA key?
- Is there a method in the SDK to initialize and register a new deposit wallet from scratch?
Note: examples/auth/create_api_key_deposit_wallet.py referenced in the example doesn't exist in the repo.
Impact
The basic EOA flow documented in the README is completely non-functional on mainnet,
making it impossible to place orders programmatically without first going through the
Polymarket web UI — which creates an inaccessible relay key.
When placing orders using the basic EOA flow (
ClobClient(host, chain_id, key)), the CLOB API rejects the order with:This happens even with a brand new wallet that has never interacted with Polymarket UI.
The README documents the basic EOA flow as the standard approach, but the CLOB now requires
the Relay/EIP-7702 deposit wallet flow for all order placement.
Reproduction
Environment
py-clob-client-v2version:1.0.1rc1What I've tried
Attempt 1 — Basic EOA flow (as in README)
Result:
"maker address not allowed, please use the deposit wallet flow"Attempt 2 — POLY_1271 + funder (as in examples/orders/gtc_limit_buy_deposit_wallet.py)
Result:
"the order signer address has to be the address of the API KEY"The second error suggests that with
POLY_1271, the SDK computes a signer addressthat doesn't match the API key's registered address (
WALLET_ADDRESS).Questions
funder, what private key should go inkey=? Is it a separate relay key or the same EOA key?Impact
The basic EOA flow documented in the README is completely non-functional on mainnet,
making it impossible to place orders programmatically without first going through the
Polymarket web UI — which creates an inaccessible relay key.