PMWallets
中文

Unlock an address

What an address costs and how long it stays yours.

Three ways to get an address

  • Buy it once. Yours for good, even with no plan.
  • Free band. A wallet that made nothing beyond its single best market costs nothing, for as long as it stays that way.
  • From a plan. Each plan unlocks a number of addresses a day and a period. These stay visible while the plan is active or in its applicable 48-hour grace period. See Plans and billing.

Buy an address

POST/v1/account/revealsAPI key

Priced in six bands by pnlExTop: realised PnL with the single best market removed. A wallet whose profit comes from one market is priced differently from one that has profited fifty times across markets. Band 0 is free: take away the best market and it made nothing, so we do not charge for it. Each row's revealCents is its price, and pricing.bands is the whole ladder.

shell
# buy the address behind a handle. maxPriceCents is REQUIRED and is a
# ceiling: it is the price you were shown, and the charge can never exceed it.
curl -X POST https://api.pmwallets.com/v1/account/reveals \
  -H "Authorization: Bearer $PMW_KEY" -H "content-type: application/json" \
  -d '{"entityId":"7KQ2MF9X4B1C","maxPriceCents":150}'

# what you already own, newest purchase first
curl -s https://api.pmwallets.com/v1/account/reveals -H "Authorization: Bearer $PMW_KEY"
json
// POST /v1/account/reveals  →  201
{
  "entityId": "0x4b96e2d59f0dabde95ae6f55f2d2d6d345ba984e",   // yours now
  "label": "0x4b96e2d59f0dabde95ae6f55f2d2d6d345ba984e",
  "priceCents": 150,
  "alreadyOwned": false            // true = you had it; nothing was charged
}

// 409 — the band moved between the page and the click. Nothing was charged.
{ "statusCode": 409, "error": "price_changed", "priceCents": 200, "agreedCents": 150 }

// 402 — not enough balance. Nothing was charged.
{ "statusCode": 402, "error": "insufficient_balance", "priceCents": 150, "balanceCents": 120 }

// GET /v1/account/reveals  →  200
[
  { "entityId": "0x4b96…984e", "label": "0x4b96…984e", "priceCents": 150, "entitled": true,
    "createdAt": "2026-09-20T10:23:00.000Z", "paidAt": "2026-09-20T10:23:00.000Z" },
  // a FREE unlock whose wallet has since moved into a paid band: the address is masked again
  { "entityId": "9XQ4MF7K2B1C", "label": "0x8a1f…22ce", "priceCents": 0, "entitled": false,
    "revealCents": 200, "createdAt": "2026-09-18T08:00:00.000Z", "paidAt": null }
]
entityIdhandleThe 12-character handle from the board. A raw address returns 400. This prevents testing a list of addresses for board membership, which would reveal the information sold here. An address you already bought is the exception.
maxPriceCentsint ≥ 0Required. Set it to the price shown to cap the charge. Bands update with the daily 30d board. If the price rises above your cap, the response is 409 with the new price and no charge. Zero caps the price at the free band; it does not mean the cap is missing.

A paid unlock is permanent. Re-opening it never costs again, and it remains visible after your subscription ends. ⚠ A free unlock lasts as long as the wallet is free: if it later moves into a paid band, seeing it again costs that band's price (as stated on the free-unlock button before you click). In GET /v1/account/reveals such a row goes back to a handle and carries entitled: false with the new price.

There is a daily cap on how many distinct entities an account may query (403 past it, reset at 00:00 UTC). This limits bulk lookups of the board. Asking again about one you own does not count. Unlocking, subscribing and buying an export (one unit per entity) all spend the same allowance, and querying the same entity again that day uses no additional allowance.