Overview
The BusinessOnboardingSdk is provided by Averer. It lets RWA issuer developers integrate business onboarding into their own apps without having to build KYB flows or smart contract logic.
๐ What it Doesยถ
When you embed the SDK in your application, hereโs what happens for a business user:
- KYB Verification โ Averer verifies the business applicant (director or authorized officer).
- Smart Contract Deployment โ Once verified, a Business Identifier contract is automatically deployed on the Redbelly Network with the businessโs details.
- Delegated Access โ That Business Identifier lets the company authorize external EOAs (wallets) to act on its behalf, without each account needing to go through KYB.
๐ฉโ๐ป Why this matters for you (RWA Issuer Developer)ยถ
- No need to build KYB โ The entire KYB flow is handled inside the SDK.
- No need to deploy contracts manually โ The Business Identifier contract is created automatically.
- Easy integration โ Drop the SDK into your app in minutes.
- On-chain trust โ Any address and business details can be checked later to confirm if itโs a verified business.
Prerequisitesยถ
- react (v18.x or higher)
- react-dom (v18.x or higher)
- viem (v2.x or higher)
- wagmi (v2.x or higher)
- @tanstack/react-query (v5.x or higher)
More Informationยถ
๐ฆ Quick Start โ Adding Business Onboardingยถ
To use the Business Onbarding SDK in your application, you need to wrap your root component with EligibilitySDKProvider and initialize wallet support via AppKitโs Wagmi adapter.
API Key Requirement for Security: The SDK is Issuer Claim credential and onboarding flow restricted by an API key. To obtain an API key, please contact Averer Customer Support.
import { WagmiAdapter } from "@reown/appkit-adapter-wagmi";
import type { AppKitNetwork } from "@reown/appkit/networks";
import { defineChain } from "@reown/appkit/networks";
import { EligibilitySDKProvider } from "@redbellynetwork/eligibility-sdk";
import BusinessOnboardingPage from "/BusinessOnboardingPage";
// ๐น Get your `projectId` from https://cloud.reown.com
export const projectId = import.meta.env.VITE_PROJECT_ID || "your-project-id";
if (!projectId) {
throw new Error("Project ID is not defined");
}
// ๐น Define Redbelly Network Configuration
const staging = defineChain({
id: 153,
caipNetworkId: `eip155:153`,
chainNamespace: "eip155",
name: "Redbelly Network",
nativeCurrency: {
decimals: 18,
name: "Redbelly Token",
symbol: "RBNT",
},
rpcUrls: {
default: {
http: ["https://governors.testnet.redbelly.network/"],
},
},
});
// ๐น Define Available Networks
export const networks = [staging] as [AppKitNetwork, ...AppKitNetwork[]];
// ๐น Initialize Wagmi Adapter for Wallet Integration
export const wagmiAdapter = new WagmiAdapter({
projectId,
networks,
});
const queryClient = new QueryClient();
// ๐น Initialize AppKit
createAppKit({
adapters: [wagmiAdapter],
projectId,
networks,
metadata: {
name: "Eligibility SDK Example",
description: "Eligibility SDK with Redbelly Network",
url: "https://reown.com",
icons: ["https://avatars.githubusercontent.com/u/179229932"],
},
themeMode: "light",
themeVariables: {
"--w3m-accent": "#000000",
},
});
export function App() {
return (
<WagmiProvider config={wagmiAdapter.wagmiConfig}>
<QueryClientProvider client={queryClient}>
{/* wrap the application code inside EligibilitySDKProvider it will enable the hooks realated to network and EligibilitySdk widget */}
<EligibilitySDKProvider
config={{
network: "staging", // Options: "mainnet" | "testnet" | "staging"
apiKey: "enter-your-api-key", // Connect with Averer Customer Support to obtain your API key
}}
>
<appkit-button />
<BusinessOnboardingPage />
</EligibilitySDKProvider>
</QueryClientProvider>
</WagmiProvider>
);
}
export default App;
import { useAppKitAccount } from "@reown/appkit/react";
import { BusinessOnboardingSdk } from "@redbellynetwork/eligibility-sdk";
export default function BusinessOnboardingPage() {
const { isConnected } = useAppKitAccount();
if (!isConnected) return;
return (
<BusinessOnboardingSdk
// optional: customize the text and branding
sdkOverride={{
welcome: {
heading: "Register your business",
description:
"Complete KYB and deploy your Business Identifier contract on the Redbelly Network.",
btnText: "Start Verification",
},
verificationPending: {
heading: "Weโre verifying your businessโฆ",
message: "This usually takes less than a minute.",
},
verificationFailed: {
heading: "Verification failed",
message: "Something went wrong. Please try again.",
},
verificationSuccess: {
heading: "โ
Business Verified!",
message:
"Your KYB is complete and your Business Identifier contract is now live on-chain.",
nextButton: <a href="/dashboard">Continue</a>,
},
}}
/>
);
}
๐ Thatโs it โ you now have a working business onboarding flow in your app.
๐ Checking Business Status with useBusinessDetailsยถ
After onboarding, youโll often want to know if a connected wallet belongs to a verified business and fetch its details.
Thatโs where the useBusinessDetails hook comes in.
import { useBusinessDetails } from "@redbellynetwork/eligibility-sdk";
// address: eth watllet address
function BusinessStatus({ address }: { address: string }) {
const { data, isLoading, error, refetchBusinessIdentifier } =
useBusinessDetails(address);
if (isLoading) return <p>Loadingโฆ</p>;
if (error) return <p>Error: {error.message}</p>;
if (!data?.isBusinessUser) {
return <p>{address} is not a verified business.</p>;
}
return (
<div>
<p>โ
{address} is a verified business</p>
<p>Contract: {data.businessContractAddress}</p>
<pre>{JSON.stringify(data.businessDetails, null, 2)}</pre>
<button onClick={refetchBusinessIdentifier}>Refresh</button>
</div>
);
}
What you get backยถ
- isBusinessUser โ true if the address is linked to a verified business
- businessContractAddress โ the deployed Business Identifier contract address
- businessDetails โ metadata (company name, incorporation details, identifier, type, incorporated name, is beneficial owner, company address.)