Skip to content

title #83

Description

@edgardomqbrothers-web

Environment

  • py-clob-client-v2 version: 1.0.0 (from PyPI)
  • Python: 3.11
  • Chain: Polygon mainnet (chain_id 137)
  • User type: V1-migrated (had a V1 Safe wallet, balance migrated to V2 automatically)

What I'm trying to do

Submit a simple GTC limit buy order on a binary BTC up/down neg-risk market
using client.create_and_post_order(...).

What happens

Every combination of signature_type × funder I've tried returns a 400 error.
API key is freshly generated via create_or_derive_api_key() after a DELETE.

signature_type funder Polymarket error
0 (EOA) not passed (defaults to EOA) maker address not allowed, please use the deposit wallet flow
2 (POLY_GNOSIS_SAFE) V1 Safe address 0x088602b0... maker address not allowed, please use the deposit wallet flow
2 (POLY_GNOSIS_SAFE) V2 deposit address from polymarket.com Deposit modal 0x7C7057b6... maker address not allowed, please use the deposit wallet flow
3 (POLY_1271) V2 deposit address 0x7C7057b6... the order signer address has to be the address of the API KEY

Account context

  • EOA (MetaMask): 0x64B423dBe522897738d8d6cF33F10E6e9e239325
  • V1 Safe (from V1 days): 0x088602b0B8fAD4B4B34a793756B91879294A3F22
    • Verified via getSafeWalletAddress(EOA) on V2 Exchange contract
  • V2 deposit address (shown in polymarket.com → Deposit modal): 0x7C7057b66e13f29C8f072BB1316a2F125589dCD3
  • Balance: ~$40 USD visible in polymarket.com portfolio
  • API key UUID: 3bbd632f-3cb5-5eef-900c-373e423fb322 (deterministic — same after DELETE + CREATE)

Code I'm running

from py_clob_client_v2 import ApiCreds, ClobClient, OrderArgs, OrderType, Side

client = ClobClient(
    host="https://clob.polymarket.com",
    chain_id=137,
    key=PRIVATE_KEY,
    creds=ApiCreds(api_key=..., api_secret=..., api_passphrase=...),
    funder="0x7C7057b66e13f29C8f072BB1316a2F125589dCD3",
    signature_type=3,  # tried 0, 2, 3 — all rejected with different errors
)

order_args = OrderArgs(
    token_id="<binary neg-risk BTC up/down token>",
    price=0.65,
    size=1.5,
    side=Side.BUY,
)

resp = client.create_and_post_order(
    order_args=order_args,
    order_type=OrderType.GTC,
)

Things I've already tried

  • Upgraded from py-clob-client (V1) to py-clob-client-v2 1.0.0
  • Forced PartialCreateOrderOptions(neg_risk=True)
  • Deleted existing API key via DELETE /auth/api-key and recreated it (UUID is deterministic so same UUID returned)
  • Verified funder addresses on-chain via getSafeWalletAddress(EOA) and confirmed the V2 deposit address against what polymarket.com shows in the Deposit modal
  • Verified L1 headers send POLY_ADDRESS = EOA per create_level_1_headers()

Questions

  1. What is the correct signature_type × funder combination for V1-migrated users?
  2. Is there a separate onboarding/activation flow that needs to happen on polymarket.com before V2 orders work for migrated users?
  3. The README example uses pure EOA (no funder, no sigType) — does that flow work for users who only have V1-migrated balance in a Safe?
  4. The error the order signer address has to be the address of the API KEY — what exactly does "address of the API KEY" mean if the L1 header POLY_ADDRESS is already the EOA?

Any guidance from Polymarket Engineering would be much appreciated. Happy to share more debug output, full traceback, or test against a specific combination if you can suggest one.

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