Skip to content

Public APIs

Base URL: https://pay.bwallet.space. Read endpoints are open and need no key. Write endpoints are signed by the user’s wallet (BRC-43 protocol [2, "bwallet paymail"], key ID "1"), so only the owner of a name can change it. Responses below were captured live on 17 Oct 2026; long values are cut with ….

bwalletx.com/.well-known/bsvalias and pay.bwallet.space/.well-known/bsvalias return the same capabilities, so name@bwalletx.com works with any paymail client.

Method and path What it returns
GET /.well-known/bsvalias Paymail capabilities
GET /api/paymail/id/{name}@bwalletx.com The name’s key and its owner-signed binding (pki)
GET /api/paymail/profile/{name}@bwalletx.com Display name and avatar
GET /api/paymail/verify/{name}@bwalletx.com/{pubkey} Whether that key belongs to the name
GET /api/paymail/ord/{name}@bwalletx.com Ordinals receive address, if the wallet published one
GET /api/paymail/lookup?key={identityKey} Every name that receives for a wallet, main one marked
GET /api/paymail/config Name rules (fee, days between changes)
GET /api/paymail/name-log[?alias=] The public, hash-chained log of name changes
GET /api/paymail/handovers-for?key={identityKey} Pending two-party handovers for a wallet
GET /api/paymail/social?provider=x|google|all Names verified with an X or Google account
GET /api/paymail/bphone-get?key={identityKey} A wallet’s bPhone rate card
GET /api/paymail/bphone-directory[?category=&limit=] Public bPhone directory
Terminal window
curl https://pay.bwallet.space/api/paymail/id/npg@bwalletx.com
{"bsvalias":"1.0","handle":"npg@bwalletx.com","pubkey":"026607f6…b59b",
"binding":{"alias":"npg","identityKey":"026607f6…b59b","seq":1,"timestamp":"1792222561138","signature":"30440220…",
"scheme":"bwallet-paymail/v1 bind; BRC-43 protocol [2,\"bwallet paymail\"] keyID \"1\", counterparty anyone"}}
Terminal window
curl https://pay.bwallet.space/api/paymail/profile/npg@bwalletx.com
{"name":"NPG","avatar":"https://www.bchatx.com/api/bavatar/026607f6…b59b.png"}
Terminal window
curl https://pay.bwallet.space/api/paymail/verify/npg@bwalletx.com/026607f6…b59b
{"bsvalias":"1.0","handle":"npg@bwalletx.com","pubkey":"026607f6…b59b","match":true}
Terminal window
curl "https://pay.bwallet.space/api/paymail/lookup?key=026607f6…b59b"
{"paymail":"npg@bwalletx.com","alias":"npg","names":[{"paymail":"npg@bwalletx.com","kind":"plain","main":true},{"paymail":"ninjapunkgirls@bwalletx.com","kind":"plain","main":false}]}
Terminal window
curl https://pay.bwallet.space/api/paymail/config
{"nameFee":null,"nameChangeDays":30}
Terminal window
curl "https://pay.bwallet.space/api/paymail/handovers-for?key=026607f6…b59b"
{"handovers":[]}

Errors are JSON with an error field and an HTTP status, for example {"error":"invalid-key"} (400) when key is not a compressed public key, {"error":"no-ord-address"} (404) when a wallet has not published an ordinals address, and {"error":"not-found"} (404).

Method and path Capability
POST /api/paymail/p2p-destination/{name}@bwalletx.com P2P payment destination (2a40af698840): returns BRC-29 outputs and a reference
POST /api/paymail/receive-tx/{name}@bwalletx.com Receive a raw transaction (5f1323cddf31)
POST /api/paymail/receive-beef/{name}@bwalletx.com Receive a BEEF transaction (5c55a7fdb7bb)

The server broadcasts what it receives to ARC as Extended Format and keeps it for the recipient’s wallet to collect. Use any paymail client, or pay() from @bwalletx/connect.

These are called by the wallet and need the owner’s signature over bwallet-paymail|v1|<action>|<sorted key=value fields> with a timestamp within a few minutes:

register, bind, set-name, names-list, names-add, names-remove, names-primary, unlink, delete, inbox, ack, history, apps-get, apps-put, handover-release, handover-cancel, handover-accept, bphone-put, bphone-book, bphone-bookings, bphone-book-act (all POST /api/paymail/{action}).

If you are building a wallet and want to support bWalletX names, the name bindings page has the signed message format.

Method and path What it returns
GET /api/themes The theme catalogue (bwx-theme/1): tiers and packs with their look
GET /api/theme-orders/store-key The Store’s receipt-signing public key
POST /api/theme-orders/buy-quote A signed quote and receipt for a theme (wallet-signed request)
POST /api/theme-orders/buy-claim Claim a paid quote with its transaction (wallet-signed request)
POST /api/theme-orders/owned Themes a wallet owns (wallet-signed request)
Terminal window
curl https://pay.bwallet.space/api/theme-orders/store-key
{"signer":"03c6705a389715243e51638fefa43772c51292de4af134b1dfce75128f8ace9ea7"}
Terminal window
curl https://pay.bwallet.space/api/themes
{"format":"bwx-theme/1","tiers":["free","premium","holder","edition"],"packs":[{"format":"bwx-theme/1","id":"gold","label":"Gold","blurb":"Black and gold, the o…"},…]}

Verify a receipt end to end: Store receipts.

Method and path What it returns
GET /api/contracts Published contract templates ({"contracts":[]} today)
GET /api/strategies Published trading strategies ({"strategies":[]} today)
POST /api/apps-submit Submit an app for the bWallet app directory; reviewed before it ships
POST /api/waitlist Join the bWallet testing waitlist

Paymail requests are limited to 120 per minute per IP, and name changes (names-*) to 20. Over the limit you get 429 {"error":"rate-limited"}: wait and retry. There is no API key and no account.

  • ✓ All read endpoints above, checked live 17 Oct 2026
  • ✓ Paymail P2P payments with ARC broadcast as EF
  • ✓ Signed writes for names, bindings and handovers
  • ◻ Daily on-chain anchor of the name log head