Quickstart
From signing in to your first live trade.
On the website
- Sign in with Google or GitHub.
- Find a trader on the board. Sort and filter by what matters to you.
- Unlock the address. Pay for one, or use a plan.
- Subscribe, then watch the trades arrive in My feed.
From your code
Create a key on the API keys page, then call the API:
shell
# HTTP curl https://api.pmwallets.com/v1/account/fills?limit=100 -H "Authorization: Bearer $PMW_KEY" # WebSocket — the handshake cannot set Authorization, so the key goes in its own header const ws = new WebSocket("wss://api.pmwallets.com/v1/ws", { headers: { "x-api-key": process.env.PMW_KEY } });
Query the board:
shell
# the board itself: who is making money, and on what. No key needed for the # free sample; any key (a signed-in account) raises the caps. curl -s "https://api.pmwallets.com/v1/leaderboard?sort=realizedPnl&dir=desc&limit=50" \ -H "Authorization: Bearer $PMW_KEY" # ...and the same endpoint filtered. Every filter is a floor or an exact match # (bands: any of the listed unlock-price bands, 0 = free … 5); they combine with # AND, and nothing here changes what a row CONTAINS. curl -s "https://api.pmwallets.com/v1/leaderboard?\ minPnl=5000&\ minWinLo=0.55&\ minEligible=30&\ style=maker&\ category=sports&\ status=active&\ maxWallets=1&\ bands=0,1,2&\ sort=winLo&dir=desc&limit=50" -H "Authorization: Bearer $PMW_KEY"
Subscribe to an entity you have unlocked:
shell
# the handle the board shows, or the full 0x address if you already hold it — a masked one is a 400. # The address must be unlocked first (POST /v1/account/reveals). ENTITY=7KQ2MF9X4B1C curl -X POST https://api.pmwallets.com/v1/account/subscriptions \ -H "Authorization: Bearer $PMW_KEY" -H 'content-type: application/json' \ -d "{\"entityId\":\"$ENTITY\",\"channels\":[\"ws\",\"webhook\"]}" # 402 address_not_unlocked if you have not unlocked its address # 402 if the balance will not cover the first hour; body carries price and balance # 403 past the daily distinct-entity allowance (subscribing spends one unit, as unlocking does) # 409 if the entity has had no fill in 7 days — resend with "acceptInactive": true
Then receive its fills over a WebSocket or a webhook.
Official SDKs
SDK guide and copy-trading bot →Reconnects, missed frames, de-duplication and paging are handled for you.