Skip to main content
GET
Resolve wallet
Look up the full identity for any Polymarket user: preferred trading wallet, EOA (externally owned account), username, wallet type, deployment status, and related wallets. Accepts any identifier as input and returns all fields.
If the controlling EOA has a deployed deposit wallet, safe returns that deposit wallet and type is "deposit_wallet" — even when you query the EOA, username, or an older wallet. If no deposit wallet is deployed, safe falls back to the existing Safe/proxy wallet. The safe field name is kept for backward compatibility; it means the preferred Polymarket trading wallet.
string
required
One of:
  • Wallet address — any Polymarket trading wallet: deposit wallet, Safe, or proxy wallet (0x..., 42 chars)
  • EOA address — externally owned account (0x..., 42 chars)
  • Username — Polymarket display name (case-insensitive)

Understanding Polymarket wallet types

Polymarket has used a few different wallet types over the years, depending on how an account signed up. You never need to know which one you’re dealing with — pass any address and the endpoint works it out — but here’s what the type values mean: “Deposit wallet” vs “beacon wallet”: if you’ve seen both terms, they’re the same thing. Newer deposit wallets are built so Polymarket can upgrade all of them at once — that upgradeable variant is what gets called a “beacon wallet”. There’s also an earlier standalone variant from before that change. Both behave identically and both resolve here; you never need to tell them apart. One user can have more than one wallet — for example an old Safe from years ago plus a new deposit wallet.

Wallet type, deployment, and current wallet

These fields answer three separate questions: The legacy wallets object remains deployed-only: an address appears there only after its contract exists on Polygon. The additive wallet_details list includes the current address even if it is not deployed yet, plus the user’s other deployed wallets. This makes mixed accounts explicit without changing any existing field. For example, this account’s current address is a deposit wallet, but its contract has not been deployed yet:

By wallet address (Safe)

Look up a Polymarket Safe to get the controlling EOA and username. If that EOA also has a deployed deposit wallet, the response returns the deposit wallet in safe instead.

By wallet address (deposit wallet)

Look up a deposit wallet to get the controlling EOA. Works for both deposit wallet variants.

By EOA address

Look up an EOA to find its Polymarket trading wallet and username. Deposit wallets are prioritized when deployed:

By wallet address (proxy wallet)

Resolve a Polymarket proxy wallet — the wallet type used by accounts created with email or social login. The endpoint returns the controlling EOA, recovered automatically.

By username

Look up a Polymarket username to find the trading wallet and EOA. Case-insensitive.

Response fields

string
required
Preferred Polymarket trading wallet address. The field name is kept for backward compatibility. If the controlling EOA has a deployed deposit wallet, this is the deposit wallet. Otherwise it is the existing Safe/proxy wallet.
string
Externally owned account that controls the trading wallet. This is the signer address. May be null in rare cases where it cannot be determined.
string
Polymarket display name. null if the user has no profile set.
string
Wallet type for the address returned in safe. One of "deposit_wallet", "safe", or "proxy" — see wallet types above. null only when the resolver cannot verify the wallet’s implementation.
object
Every Polymarket wallet this user has deployed, by type. Each field is an address or null:
  • wallets.deposit_wallet — their deposit wallet (either variant)
  • wallets.safe — their Gnosis Safe
  • wallets.proxy_wallet — their proxy wallet
Useful when a user has more than one — for example, matching historical activity on an old Safe with current activity on a new deposit wallet.
array
Status for the current wallet and every other deployed wallet associated with the EOA. Each item contains:
  • address — wallet address
  • wallet_type"deposit_wallet", "safe", or "proxy"; rarely null when the implementation cannot be verified
  • deployedtrue when contract code currently exists on Polygon
  • currenttrue for the selected trading-wallet address returned in safe
Use this list when you need to distinguish wallet type from deployment, or when an account has both a Safe/proxy and a deposit wallet.

Error responses

404 — Not found

Coverage

The resolver supports every Polymarket wallet type on Polygon: deposit wallets (both variants), Gnosis Safes, and proxy wallets. Cached lookups are sub-millisecond. Uncached lookups resolve in real time, then prefer a deployed deposit wallet when one exists for the resolved EOA.

Use cases

  • Database enrichment — bulk-resolve trading wallets to EOAs for analytics pipelines
  • Profile lookups — show usernames alongside wallet addresses in your UI
  • Cross-referencing — match on-chain activity (EOA) to the preferred Polymarket trading wallet
  • Whale tracking — identify the EOA behind a trading wallet to track activity across protocols
  • Multi-wallet users — use wallet_details to distinguish the current wallet from other deployed wallet types

Authorizations

x-api-key
string
header
required

Path Parameters

query
string
required

Wallet address, EOA address, or Polymarket username (case-insensitive)

Response

Resolved wallet identity

safe
string

Preferred Polymarket trading wallet. Field name is kept for backward compatibility; deposit wallet is returned when deployed, otherwise Safe/proxy.

eoa
string | null

Externally owned account (signer)

username
string | null

Polymarket display name, or null

type
enum<string> | null

Wallet type for the address returned in safe

Available options:
safe,
deposit_wallet,
proxy
wallets
object

Legacy deployed-only wallet map. An address is null until its contract exists on Polygon.

wallet_details
object[]

Current wallet plus other deployed wallets, with wallet type and status kept separate.