Wallet linking.
One profile, every wallet.
Most apps make users pick one wallet — and treat that single address as their whole identity. Synq does the opposite. After sign-in, a user can link as many wallets as they want by signing a message with each one. Your app sees the full footprint, and the user only has to manage one account.
Treat the user as one person, not one address
Crypto users keep a hot wallet for daily activity and a cold wallet for the assets they actually own. Some keep one per project, one per identity, one for testing. Asking them to pick "their" wallet forces them to fragment — and forces your app to undercount. Synq treats wallets as connections on a single user, and your app gets the union of all of them on every sign in.
Trigger a link, read the list
Linking another wallet is one SDK call. The full list of linked wallets comes back on every server-side userinfo call.
import { useSynq } from '@synqid/react'
function WalletsPanel() {
const { requestConnect } = useSynq()
const linkAnother = async () => {
const address = await requestConnect({
title: 'Link another wallet',
})
if (address) {
// Wallet was added to the user's profile.
// Refetch their linked-wallets list and re-render.
}
}
return <button onClick={linkAnother}>Link another wallet</button>
}How wallet linking works
No setup required for wallet linking itself — it's automatic when SIWS is enabled. The flow below is what your user sees.
User signs in (any method)
They can sign up with Google, a Telegram account, or a wallet — any first-touch method. Synq creates the user record and issues a session.User opens "Link wallet" in your app
You call `requestConnect()` from the SDK. Synq opens the wallet picker — Phantom, Solflare, Backpack, MWA on Android, or any wallet-adapter the user has installed.Wallet signs a Synq-issued nonce
The wallet signs an ephemeral message with a fresh server-issued nonce. No transaction. No gas. Just proof of control.Synq verifies and links
The signature is verified against the public key on the Synq API. The wallet is added to the user’s profile and a `wallet.linked` event is fired to your webhook subscribers.Your app sees the new wallet immediately
On the next userinfo call (or via the wallet.linked webhook), the new wallet appears in the linked_wallets array with its address, chain, and primary-flag.
How multi-wallet linking compares
Most identity platforms treat the wallet as the user. Synq treats wallets as connections on a profile that can have many.
| Feature | Clerk | WorkOS | Auth0 | Privy | Dynamic | Synq |
|---|---|---|---|---|---|---|
| Multi-wallet linking shipped | ||||||
| Wallets linked via signed message (no tx) | ||||||
| Primary wallet selection per user | ||||||
| Wallets surfaced via standard OIDC userinfo | ||||||
| Per-wallet labels (set by user or app) | Limited | Limited | ||||
| Pairs with non-wallet auth (Google, Telegram, etc.) |
Pair it with
Sign-In With Solana
The first-touch wallet sign-in. Wallet linking is what comes next once the user is authenticated.
Matrica
Matrica returns multiple verified wallets in one OAuth call. They land in linked_wallets automatically.
Many users sign up with Google and link a wallet later. That flow works the same way through Synq.
Common questions
See the user's whole on-chain footprint.
Multi-wallet is the default in Synq. Drop the SDK in, call requestConnect, and your users link as many wallets as they need.
