Wallet integration
Add Rezva as a resolver step beside the wallet’s existing QR scanner, transaction builder, signer, and confirmation screen.
Integration contract
Rezva accepts a typed identifier and returns lifecycle state plus compatible payment destinations. It does not hold keys or execute a transaction.
QR or typed input
↓
parse { resolver_url, type, value }
↓
POST resolver_url/v1/resolve
↓
validate status + payment_ready
↓
show destination and ask for confirmation
↓
wallet signs and broadcastsMinimum implementation
- Extract and validate
resolver_url,type, andvalue. - POST
{ type, value }to the resolver URL with an approved provider key or prototype Free API key. - Require
status === "active"andpayment_ready === true. - Filter
payment_optionsby a chain and asset supported by the wallet. - Display destination, chain, asset, token contract, and constraints before confirmation.
- Build, sign, broadcast, and monitor the transaction using wallet code.
QR parsing
type RezvaQrPayload = {
resolver_url: string;
type: string;
value: string;
};
function parseRezvaQr(raw: string): RezvaQrPayload {
const payload = JSON.parse(raw) as Partial<RezvaQrPayload>;
if (
typeof payload.resolver_url !== "string" ||
typeof payload.type !== "string" ||
typeof payload.value !== "string"
) {
throw new Error("Unsupported Rezva QR payload");
}
return payload as RezvaQrPayload;
}Resolve and gate payment
const qr = parseRezvaQr(scannedText);
const response = await fetch(qr.resolver_url, {
method: "POST",
headers: {
"content-type": "application/json",
authorization: `Bearer ${providerApiKey}`,
},
body: JSON.stringify({ type: qr.type, value: qr.value }),
});
if (!response.ok) throw new Error(`Resolver HTTP ${response.status}`);
const result = await response.json();
if (result.status !== "active" || result.payment_ready !== true) {
showUnavailableState(result.status);
return;
}
const payable = result.payment_options.filter(
(option: { chain: string; asset: string; payment_ready: boolean }) =>
option.payment_ready,
);
showPaymentOptions(payable);Do not delegate to Rezva
- Private-key custody or transaction signing
- Final amount selection without user confirmation
- Blockchain settlement or payment guarantees
- Registry mutations without controller authorization
Use the Authentication page for credential boundaries and the API Reference for field definitions and error responses.