Skip to main content
The WalletConnect catalog provides wallet metadata for displaying wallets and handling mobile deep links. Use these functions to build custom wallet selection UIs or handle WalletConnect mobile redirects.

getWalletConnectCatalog

Fetches Dynamic’s wallet catalog and returns wallet groups and individual wallet entries with metadata like deep links, download URLs, and display information.
import { getWalletConnectCatalog } from '@dynamic-labs-sdk/client';

const catalog = await getWalletConnectCatalog();

// Access wallet groups (e.g., MetaMask, Coinbase Wallet)
console.log(catalog.groups);

// Access individual wallet entries
console.log(catalog.wallets);

Using with a specific client

import { createDynamicClient, getWalletConnectCatalog } from '@dynamic-labs-sdk/client';

const client = createDynamicClient({ environmentId: 'your-env-id' });
const catalog = await getWalletConnectCatalog(client);

Accessing wallet data

const catalog = await getWalletConnectCatalog();

// Get a specific wallet
const metamask = catalog.wallets['metamask'];

// Filter wallets by chain
const evmWallets = Object.values(catalog.wallets).filter(
  wallet => wallet.chain === 'EVM'
);

// Access deep links for mobile
console.log(metamask.deeplinks.native);    // "metamask://wc"
console.log(metamask.deeplinks.universal); // "https://metamask.app.link/wc"

// Access app store links
console.log(metamask.downloadLinks.androidUrl);
console.log(metamask.downloadLinks.iosUrl);

Error handling

The function throws an error if both the CDN fetch and cache retrieval fail.
try {
  const catalog = await getWalletConnectCatalog();
} catch (error) {
  console.error('Failed to fetch wallet catalog:', error);
}

getWalletConnectCatalogWalletByWalletProviderKey

Retrieves a specific wallet entry by matching a wallet provider key. Returns undefined if no match is found.
import { getWalletConnectCatalogWalletByWalletProviderKey } from '@dynamic-labs-sdk/client';

const wallet = await getWalletConnectCatalogWalletByWalletProviderKey({
  walletProviderKey: 'metamaskevm:walletConnect'
});

if (wallet) {
  console.log(wallet.name);      // "MetaMask"
  console.log(wallet.chain);     // "EVM"
  console.log(wallet.deeplinks); // Deep link information
}

Using with wallet events

A common use case is handling mobile deep links when WalletConnect requires user action:
import {
  onEvent,
  getWalletConnectCatalogWalletByWalletProviderKey
} from '@dynamic-labs-sdk/client';

onEvent({
  event: 'walletConnectUserActionRequested',
  listener: async ({ walletProviderKey }) => {
    const wallet = await getWalletConnectCatalogWalletByWalletProviderKey({
      walletProviderKey
    });

    if (wallet?.deeplinks) {
      const deepLink = wallet.deeplinks.native || wallet.deeplinks.universal;
      if (deepLink) {
        window.location.href = deepLink;
      }
    }
  }
});

WalletConnectCatalogWallet type

Each wallet entry contains the following properties:
PropertyTypeDescription
namestringDisplay name (e.g., “MetaMask”)
chainChainSupported chain (“EVM”, “SOL”, “BTC”)
spriteUrlstringURL to wallet icon
primaryColorstring?Brand color in hex format (e.g., “#F6851B”)
groupIdstring?Group identifier (e.g., “metamask”)
deeplinks.nativestring?Native app deep link (e.g., “metamask://wc”)
deeplinks.universalstring?Universal link (e.g., “https://metamask.app.link/wc”)
downloadLinks.androidUrlstring?Google Play Store URL
downloadLinks.iosUrlstring?Apple App Store URL