Polymarket hub

Polymarket User API

A trader's public profile and headline statistics, by wallet or username.

GET /v1/polymarket/users/{walletOrUsername}

1 credit Failed requests are free

About this endpoint

GET /v1/polymarket/users/{walletOrUsername} takes a wallet address (0x and 40 hex digits) or a username, with or without a leading @. data.user carries wallet, name, pseudonym, bio, image, createdAt, verified, usernamePublic and takerTier. data.stats carries trades, biggestWin, profileViews, joinedAt, volume, realizedPnl and portfolioValue.

A username costs one more lookup to find the wallet. A wallet with no profile or no trading history returns lookupStatus: not_found; a profile can exist while stats is null.

Polymarket User API FAQ

Should I pass a wallet or a username?

A wallet is one lookup and is exact. A username costs one extra lookup to resolve and can change if the person renames. Use the wallet once you have it, for example from a trade row or the leaderboard.

Why is stats null on a found user?

The wallet has a public profile but no trading statistics yet, or Polymarket does not report them. Read data.user for the profile and treat stats as optional.

Does usernamePublic change the name?

Yes. name is present even when the holder does not show the chosen username publicly, and usernamePublic tells you whether it is shown. Respect that flag when you display the profile.

What does lookupStatus mean on this route?

found means the object or list was returned. not_found means no matching object exists. HTTP 200 only means the request finished, so branch on data.lookupStatus before storing a row.

How much does this route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.