Skip to content

signature_type=2 (POLY_GNOSIS_SAFE) — POST /order returns 401 with valid credentials #43

@sirlancelot22

Description

@sirlancelot22

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions