Testing guide
Exercise resolve against live registry fixtures and Universal Name Resolution using the open-source reference wallets. Values below are active in the production registry (or public naming systems) and are safe for Free API / provider-key resolve tests.
Reference wallets
Clone either client, put your Free API (or approved provider) key in the wallet env, and point the resolver base URL at production or local as described in each README.
- Mobile wallet: github.com/shahtab123/mobilewallet_rezva - Expo / Android. Send tab, paste identifiers, scan QR.
- Rabby (Chrome): github.com/shahtab123/rabby_chrome_rezva - unpacked Chrome MV3 build. Paste into Send; resolve before pay.
Also listed under Compatible wallets.
Auth and base URL
POST /v1/resolve Authorization: Bearer <free-or-provider-key> Content-Type: application/json # Production Worker (example) https://universal-payment-api.sabrishahtab.workers.dev/v1/resolve
Generate a Free API key at /dashboard/free-api. Prefer sending { "value": "…" } for name-like pastes; typed registry identifiers may include type.
QR / Test Merchant
Shared Test Merchant (from shared_test_merchant / active custom identifier):
{
"resolver_url": "https://universal-payment-api.sabrishahtab.workers.dev/v1/resolve",
"type": "custom",
"value": "rezva-test-merchant"
}- Resolve body:
{ "type": "custom", "value": "rezva-test-merchant" } - Expected:
status: active, Base Sepolia USDC destination (shared merchant wallet). - In the mobile wallet: scan the QR from the Free API dashboard Test Merchant panel. In Rabby: paste the
valueor the JSON payload if your build accepts QR JSON.
An active bangla_qr EMV string is also registered in the production DB and resolves with { "type": "bangla_qr", "value": "<emv-payload>" }. Prefer the Test Merchant QR for the standard payment demo; use bangla_qr only when testing that identifier type.
Active registry emails you can paste into Send:
{ "type": "email", "value": "test@test.com" }
# Also active (same resolve shape):
# prod-test-536563835@example.com
# probe-real2-ee6b4399@example.comExpect status: active and at least one payment option.test@test.com maps to a Base Sepolia USDC destination in the live registry.
Namespace name
Active provider namespace name from namespace_names:
{ "value": "shahtab.rabby" }
# Typed form (inferred automatically from value):
{ "type": "provider_name", "value": "shahtab.rabby" }- Namespace slug:
rabby - Destination: Base Sepolia USDC
- Expect
status: activeandpayment_ready: true
Blockchain name resolution
Universal Name Resolution uses the same POST /v1/resolve. Send only the name string. Do not register these in the Identifier Registry. Verified live samples (five per provider):
ENS (.eth)
vitalik.eth nick.eth ens.eth brantly.eth luc.eth
Base Names (.base)
jesse.base todd.base colin.base jacob.base wilson.base
Solana Name Service (.sol)
bonfida.sol solana.sol serum.sol mango.sol dexlab.sol
SNS returns a Solana address. EVM-only Send UIs (for example Rabby) should show the resolved address and skip Pay when no compatible EVM option exists.
Unstoppable Domains
brad.crypto sandy.crypto bitcoin.crypto myetherwallet.crypto sandy.nft
Example request:
curl -sS -X POST "$API/v1/resolve" \
-H "authorization: Bearer $REZVA_FREE_API_KEY" \
-H "content-type: application/json" \
-d '{"value":"jesse.base"}'Success responses include trust.external_resolver.{ provider, namespace } (optional for wallets) plus normal payment_options. See API Reference.
Wallet checklist
- Paste or scan each fixture above.
- Confirm the wallet calls Rezva
/v1/resolvefor name-like pastes (not a local-only ENS short-circuit for payment). - Show chain, asset, and recipient before signing. For Test Merchant / email / namespace, complete a small Base Sepolia USDC transfer if your build supports it.
- Treat 404 as “no payment destination”, 429 as rate limit, 502 as upstream naming RPC failure (retry later).
Full Free API payment walkthrough: Free API and Test Merchant.
Open Free API testing