Skip to main content
cesto.users.lookup resolves a Solana wallet to a Cesto user and tells you whether Cesto can sign for that user — the existing Cesto user path on open, close, and rebalance, where the user approves once by signing a message instead of signing every transaction. Call it before offering that flow, so you can fall back to the client-signed one for wallets Cesto can’t sign for.
There’s a convenience boolean when that’s all you need:
An unknown wallet is a 200 with exists: false, not a 404 — branch on the response rather than catching an error. migrationStatus and provider are null for unknown wallets.
Works with a read-only key.

Parameters

string
required
Solana address (base58) to look up.

Response

boolean
True when the wallet resolves to a Cesto user.
boolean
True when Cesto can sign on the user’s behalf — their Privy wallet has a signer attached, or their older Para wallet still holds an encrypted key share. The field name is historical; read it as “Cesto holds a key for this user”.
'NOT_REQUIRED' | 'REQUIRED' | 'IN_PROGRESS' | 'COMPLETED' | null
Para → Privy migration gate state. null when the wallet is unknown.
'EXTERNAL' | 'PRIVY' | 'PARA' | null
How the user signed up. null when the wallet is unknown.

Choosing a flow

delegatedSigning: false for an existing user is not a bug — an external wallet (provider: 'EXTERNAL') is one Cesto never held a key for. Those users always sign their own transactions.