Setup
- Package:
py-clob-client-v2 v1.0.1rc1 (from PyPI)
- Python 3.14 on Windows 10
- ClobClient configured per the V2 migration docs:
host="https://clob.polymarket.com"
chain_id=137
signature_type=2 (POLY_GNOSIS_SAFE)
funder=<my Polymarket proxy address>
key=<my EOA private key>
What works
- L1 derivation:
client.create_or_derive_api_key() returns valid credentials
- L2 reads:
GET /auth/api-keys returns 200 with the key listed
- I verified the SDK's
build_hmac_signature matches a manual implementation byte-for-byte
- Public endpoints:
GET /time, GET /markets, GET /book all work fine
What fails
client.create_and_post_order(...) consistently returns:
PolyApiException[status_code=401, error_message={'error': 'Unauthorized/Invalid api key'}]
Diagnostic
I tested a manually-signed POST /order with the same payload (built via create_order()) varying just the POLY_ADDRESS header:
POLY_ADDRESS value |
Status |
Response body |
| Signer EOA |
401 |
{"error":"Unauthorized/Invalid api key"} |
| Funder (proxy) |
400 |
{"error":"the order signer address has to be the address of the API KEY"} |
Reading these together: with POLY_ADDRESS=signer, L2 auth fails; with POLY_ADDRESS=funder, auth passes but the order validator rejects because the SDK correctly sets order.signer = EOA (since the GnosisSafeProxy contract has no signing key) while the validator appears to require order.signer == api_key_owner_address.
For a Gnosis Safe Proxy, those addresses are different by design.
Reproducibility
Reproduced on a brand-new wallet (different EOA, different proxy, freshly derived credentials). Same failure pattern. Not account-specific state.
Question
Is signature_type=2 currently functional for POST /order on V2, or is this a known gap awaiting the deposit wallet (signature_type=3 / POLY_1271) rollout?
If a workaround exists for existing Gnosis Safe Proxy users, would appreciate guidance. Happy to provide a minimal reproduction script.
Setup
py-clob-client-v2v1.0.1rc1 (from PyPI)host="https://clob.polymarket.com"chain_id=137signature_type=2(POLY_GNOSIS_SAFE)funder=<my Polymarket proxy address>key=<my EOA private key>What works
client.create_or_derive_api_key()returns valid credentialsGET /auth/api-keysreturns 200 with the key listedbuild_hmac_signaturematches a manual implementation byte-for-byteGET /time,GET /markets,GET /bookall work fineWhat fails
client.create_and_post_order(...)consistently returns:PolyApiException[status_code=401, error_message={'error': 'Unauthorized/Invalid api key'}]
Diagnostic
I tested a manually-signed POST /order with the same payload (built via
create_order()) varying just thePOLY_ADDRESSheader:POLY_ADDRESSvalue{"error":"Unauthorized/Invalid api key"}{"error":"the order signer address has to be the address of the API KEY"}Reading these together: with
POLY_ADDRESS=signer, L2 auth fails; withPOLY_ADDRESS=funder, auth passes but the order validator rejects because the SDK correctly setsorder.signer = EOA(since the GnosisSafeProxy contract has no signing key) while the validator appears to requireorder.signer == api_key_owner_address.For a Gnosis Safe Proxy, those addresses are different by design.
Reproducibility
Reproduced on a brand-new wallet (different EOA, different proxy, freshly derived credentials). Same failure pattern. Not account-specific state.
Question
Is
signature_type=2currently functional forPOST /orderon V2, or is this a known gap awaiting the deposit wallet (signature_type=3 / POLY_1271) rollout?If a workaround exists for existing Gnosis Safe Proxy users, would appreciate guidance. Happy to provide a minimal reproduction script.