Skip to content

Deposit wallet POLY_1271 order rejected because API key identity is EOA, not signer #85

@cabbeee

Description

@cabbeee

We’ve isolated what looks like a deposit-wallet / CLOB API credential ownership mismatch in py-clob-client-v2 for signatureType=3.

Goal

We are trying to place live CLOB orders using the deposit wallet flow.

SDK / endpoint

Account setup

  • EOA / private-key / owner address:
    0xa166f1FA6AE1B2B4E9c5D29fBF34aD09bA4074e2

  • Deposit wallet / proxy / funder:
    0xf3eBC0D3b6fcF7668bEbAfFEE636D6bF41c28b33

What is already verified

  1. Deposit wallet is deployed

GET https://relayer-v2.polymarket.com/deployed?address=0xf3eBC0D3b6fcF7668bEbAfFEE636D6bF41c28b33&type=WALLET

returns:

{"deployed": true}

  1. Builder and relayer auth both work
  • Builder API keys can authenticate to relayer-v2
  • Relayer API keys can authenticate to relayer-v2
  1. Relayer transaction history looks correct

Using relayer auth, historical transactions show:

  • from = 0xa166...
  • proxyAddress = 0xf3eb...
  • owner = 0xa166...
  • type = SAFE

So relayer seems to understand:

  • EOA = auth/owner side
  • deposit wallet = proxy/funder side

The problem

Using py-clob-client-v2==1.0.1, we can build a POLY_1271 order with:

  • signatureType = 3
  • funder = 0xf3eb...
  • maker = 0xf3eb...
  • signer = 0xf3eb...

The order signature is long, consistent with the expected ERC-1271 / wrapped signature flow, not a normal short ECDSA signature.

But POST /order rejects with:

"the order signer address has to be the address of the API KEY"

Important observation

The CLOB API credentials we can mint through the public Python v2 auth flow appear to be created from L1 / EOA auth.

So our current working interpretation is:

  • order signer = deposit wallet 0xf3eb...
  • API-key identity = EOA 0xa166...

and CLOB rejects because these do not match.

Additional tests already performed

We already tested:

  • old CLOB credentials
  • freshly minted new CLOB credentials with new nonces
  • POLY_1271
  • POLY_PROXY
  • EOA
  • update_balance_allowance(...)

Results:

  • POLY_1271 always fails with:
    "the order signer address has to be the address of the API KEY"

  • POLY_PROXY and EOA fail with:
    "invalid signature"

So POLY_1271 is clearly the closest correct path, but the credential identity still appears wrong.

Questions

  1. Is there currently any public API/SDK-supported way to create CLOB API credentials whose API-key identity/address is the deposit wallet / proxy address?

  2. If yes, what is the exact supported flow for creating those credentials for signatureType=3 deposit-wallet orders?

  3. If no, what is the official supported auth flow for posting deposit-wallet CLOB orders where:

  • maker = deposit wallet
  • signer = deposit wallet
  • signatureType = 3

A minimal working Python or TypeScript example for this exact deposit-wallet case would help a lot.

This added below!! READ

Yes, please prepare the final GitHub/support issue now.

Important: include the new post-UI-trade result.

Add this section:

Post-UI trade workaround test

We also tested the suggested workaround of placing a manual trade in the Polymarket UI first.

  • Logged in with EOA / connected wallet:
    0xa166...

  • Polymarket profile / deposit wallet:
    0xf3eb...8b33

  • Placed a $1 manual trade successfully in the UI

  • Accepted the MetaMask confirmation

  • The UI trade was placed successfully

After that, we did a clean credential test:

  • Did not reuse old registry credentials
  • Created fresh CLOB credentials via create_api_key
  • nonce = 4525
  • new key family prefix = 708d5523...
  • py-clob-client-v2==1.0.1
  • signatureType = 3 / POLY_1271
  • funder = 0xf3eb...

Local order/auth dump:

  • client.address = 0xa166...
  • order.maker = 0xf3eb...
  • order.signer = 0xf3eb...
  • order.signatureType = 3
  • signature_len = 636
  • creds mode = create_api_key

POST /order still rejects with:

"the order signer address has to be the address of the API KEY"

Conclusion:

The UI-trade/migration workaround did not change the CLOB API credential identity for this account. Fresh CLOB creds created after the UI trade still appear EOA-bound, while the valid POLY_1271 order is correctly built with maker/signer equal to the deposit wallet.

Question:

Is there any currently supported way to create CLOB API credentials whose API-key identity/address is the deposit wallet/proxy address for signatureType=3 orders?

If not, is programmatic CLOB order placement currently unsupported for this account/wallet model?

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