Skip to content

title #83

@edgardomqbrothers-web

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions