What this does
This API can:- check whether a username is available
- create a profile for a new EOA-backed Polymarket user
- change the username for an existing EOA-backed Polymarket profile
- return public profile state for an address
- upload profile images
- link X accounts
- enable trading
- bypass Polymarket compliance, eligibility, captcha, geoblock, or terms flows
- accept private keys or long-lived Polymarket session credentials
Endpoints
All endpoints require a paid PolyNode API key.
The integration flow
- Your frontend collects the user’s EOA address and desired username.
- Your backend calls
POST /v3/polymarket/profiles/username/challenge. - Your frontend asks the user wallet to sign
challenge.polymarket.messagewithpersonal_sign. - Your frontend asks the user wallet to sign
challenge.consentwitheth_signTypedData_v4. - Your backend calls
POST /v3/polymarket/profiles/username/completewith both signatures. - PolyNode logs in to Polymarket with the user-signed SIWE message, creates the profile if needed, and sets the username.
- The Polymarket SIWE signature authorizes sign-in to Polymarket.
- The PolyNode consent signature authorizes this specific profile action: address, username, action, challenge id, chain id, and expiration.
Backend: create a challenge
Your backend owns the PolyNode API key. With the TypeScript SDK:expires_at is an ISO string for display. consent.message.expiresAt is a Unix timestamp because it is signed as uint256 in EIP-712.Frontend: ask the wallet to sign
With an EIP-1193 wallet provider:Backend: complete the action
The complete request must be sent from your backend with the same PolyNode API key that created the challenge. With the TypeScript SDK:Username rules
PolyNode validates the username before calling Polymarket:available: false.
Recommended UX:
- Call
username-availableas the user types, with debounce. - Disable submit until it returns
available: true. - Re-check availability when creating the challenge.
- Handle
username_takenon complete, because another user can claim the username between challenge and completion.
Security checklist
- Keep
POLYNODE_KEYonly on your backend. - Never ask the user for a private key.
- Treat
challenge_idas one-time use. - Submit complete within 10 minutes.
- Send complete with the same API key that created the challenge.
- Verify on your side that the connected wallet address matches the address in the challenge before asking the wallet to sign.
- Do not cache or log raw signatures, SIWE tokens, cookies, or Authorization headers.
Error codes
Error responses use:
Rate limits
Profile endpoints have stricter limits than normal data endpoints:
Responses include the standard PolyNode rate-limit headers:

