Skip to content

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.

businessOnbarding sdk widget

๐Ÿ”Ž What it Doesยถ

When you embed the SDK in your application, hereโ€™s what happens for a business user:

  1. KYB Verification โ€“ Averer verifies the business applicant (director or authorized officer).
  2. Smart Contract Deployment โ€“ Once verified, a Business Identifier contract is automatically deployed on the Redbelly Network with the businessโ€™s details.
  3. 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)
npm install @reown/appkit @reown/appkit-adapter-wagmi wagmi viem @tanstack/react-query

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.

App.tsx
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;
BusinessOnboardingPage.tsx
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.)