xwalletloading

the public api

read-only, json, no key, cors open. lamport amounts are strings; sol and usd are numbers computed with the sol price at response time. the same routes feed every page here.

coins

get/api/xw/coins

live coins, newest first, each with the x account its creator fees are locked to.

handle
only coins naming this x account (any case, with or without the @)
status
comma-separated statuses; live by default
limit
up to 200
curl https://xwallet.fun/api/xw/coins?limit=5
{
  "coins": [
    {
      "id": string, "mint": string, "name": string, "symbol": string,
      "imageUri": string, "status": "live", "phase": "curve" | "amm",
      "venue": string, "priceSol": number, "creatorFeeBps": number,
      "marketCapUsd": number, "solUsd": number,
      "createdAt": string, "updatedAt": string,
      "recipient": { "id", "handle", "name", "avatarUrl", "wallet",
                     "signedIn": boolean }
    }
  ]
}

coin

get/api/xw/coin/{id}

one coin by id or by mint: everything above, plus the description, the launcher, the launch transaction and the top 50 holders read live from the token accounts (empty when the rpc is slow).

holders
0 skips the holder read
curl https://xwallet.fun/api/xw/coin/<id-or-mint>
{
  "coin": {
    ...coin, "description": string, "launcherWallet": string,
    "launchTx": string, "devBuyLamports": string,
    "holders": [ { "address": string, "balance": string, "pct": number } ],
    "totalSupply": string
  }
}

account

get/api/xw/account

one x account: its wallet once a coin named it, the creator fees waiting for that wallet on pump.fun (read live, every coin naming the account included), its coins, and the claims its owner sent from the site.

handle
required, with or without the @
curl "https://xwallet.fun/api/xw/account?handle=<handle>"
{
  "handle": string, "name": string | null, "avatarUrl": string | null,
  "wallet": string | null, "signedIn": boolean,
  "toClaimLamports": string | null, "toClaimSol": number | null,
  "toClaimUsd": number | null,   // null: pump.fun could not be read right now
  "coins": [ coin ],
  "claims": [ { "id", "handle", "avatarUrl", "wallet", "lamports": string,
                "sol": number, "usd": number, "signature": string, "at": string } ],
  "claimedLamports": string, "claimedSol": number
}

resolve an x handle

get/api/xw/recipients/resolve

the public profile behind a handle, as the launch form shows it. creates nothing; the wallet is made at launch.

handle
required, with or without the @
curl "https://xwallet.fun/api/xw/recipients/resolve?handle=<handle>"
{ "id": string, "handle": string, "name": string, "avatarUrl": string, "followers": number }
// 404 { "error": "x account not found" }

stats

get/api/xw/stats

site totals: live coins, distinct accounts named, sol claimed through the site and by how many accounts, time of the last claim.

curl https://xwallet.fun/api/xw/stats
{
  "claimedLamports": string, "claimedSol": number, "claimedUsd": number,
  "liveCoins": number, "recipients": number, "claimers": number,
  "lastClaimAt": string | null, "solUsd": number
}

verify it yourself

none of the above is needed to check a coin. open its fee sharing config on solscan (the creator its bonding curve records): it lists one shareholder, the named account's wallet, at 10000 bps, and its admin is revoked. that wallet's balance and history are public on solana. a claim is the pump.fun distribution xwallet sends when the owner asks; anyone can send that instruction, and it can only send to that wallet.

the signed-in routes (launch/prepare, launch/confirm, trade/prepare, claim, me) take a privy bearer token and serve the site itself; they are not a stable api.