Skip to main content
Reown Docs

AppKit Events

Full reference for modal, wallet, network, and transaction events emitted by AppKit.
5 min read

useAppKitEvents (React/Next hook and Vue/Nuxt composable) subscribes to every event emitted by AppKit. Use it for analytics, telemetry, custom notifications, or reacting to specific user actions.

Event object shape#

Each time a new event is emitted the hook / composable returns a fresh object:

FieldDescription
timestampUnix epoch milliseconds when the event fired
data.type'track' for normal events, 'error' for failures
data.eventOne of the event names listed below
data.propertiesOptional object whose shape depends on the event

Available events#

EventWhen it firesproperties
MODAL_OPENThe modal opens{ connected: boolean }
MODAL_CLOSEThe modal closes{ connected: boolean }

Wallet connection#

EventWhen it firesproperties
SELECT_WALLETUser picks a wallet from the list{ name, platform, displayIndex, walletRank, view }
CONNECT_SUCCESSA wallet connection succeeds{ method: 'qrcode' | 'mobile' | 'browser' | 'email', name, walletRank, view, reconnect? }
CONNECT_ERRORA connection attempt fails{ message: string }
CONNECT_PROXY_ERRORWalletConnect proxy connection fails{ message, uri, mobile_link, name }
USER_REJECTEDUser rejects the connection request{ message: string }
DISCONNECT_SUCCESSDisconnect succeeds{ namespace: 'all' | ChainNamespace }
DISCONNECT_ERRORDisconnect fails{ message? }
CLICK_ALL_WALLETSUser clicks "All Wallets"
CLICK_WALLET_HELPUser clicks the wallet help link
CLICK_NETWORK_HELPUser clicks the network help link
CLICK_GET_WALLET_HELPUser clicks the get-wallet help link
GET_WALLETUser clicks to install a wallet{ name, walletRank, explorerId, type: 'chrome_store' | 'app_store' | 'play_store' | 'homepage' }
SEARCH_WALLETUser searches in the wallet list{ badge, search }

Network#

EventWhen it firesproperties
SWITCH_NETWORKUser switches network{ network: caipNetworkId }
CLICK_NETWORKSUser opens the network selector

Email & social login#

EventWhen it firesproperties
EMAIL_LOGIN_SELECTEDUser picks email login
EMAIL_SUBMITTEDUser submits email
EMAIL_VERIFICATION_CODE_SENTVerification code sent
EMAIL_VERIFICATION_CODE_PASSCode accepted
EMAIL_VERIFICATION_CODE_FAILCode rejected{ message }
EMAIL_EDITUser edits email
EMAIL_UPGRADE_FROM_MODALUser upgrades email account
DEVICE_REGISTERED_FOR_EMAILDevice registered for email auth
SOCIAL_LOGIN_STARTEDSocial login initiated{ provider }
SOCIAL_LOGIN_SUCCESSSocial login succeeds{ provider, reconnect? }
SOCIAL_LOGIN_ERRORSocial login fails{ provider, message }
SOCIAL_LOGIN_CANCELEDUser cancels social login{ provider }
SET_PREFERRED_ACCOUNT_TYPEUser toggles EOA / Smart Account{ accountType, network }

SIWX (Sign-In With X)#

EventWhen it firesproperties
CLICK_SIGN_SIWX_MESSAGEUser clicks to sign{ network, isSmartAccount }
CLICK_CANCEL_SIWXUser cancels SIWX{ network, isSmartAccount }
SIWX_AUTH_SUCCESSSIWX auth succeeds{ network, isSmartAccount }
SIWX_AUTH_ERRORSIWX auth fails{ network, isSmartAccount, message? }

Transactions / activity#

EventWhen it firesproperties
CLICK_TRANSACTIONSUser opens activity view{ isSmartAccount }
LOAD_MORE_TRANSACTIONSUser paginates activity{ address, projectId, cursor, isSmartAccount }
ERROR_FETCH_TRANSACTIONSActivity fetch fails{ address, projectId, cursor, isSmartAccount }

Send#

EventWhen it firesproperties
OPEN_SENDSend flow opens{ isSmartAccount, network }
SEND_INITIATEDUser submits a send{ isSmartAccount, network, token, amount }
SEND_SUCCESSSend confirmed{ isSmartAccount, network, token, amount, hash }
SEND_ERRORSend fails{ message, isSmartAccount, network, token, amount }
SEND_REJECTEDUser rejects send{ message, isSmartAccount, network, token, amount }

Swap#

EventWhen it firesproperties
OPEN_SWAPSwap flow opens{ isSmartAccount, network }
INITIATE_SWAPUser submits a swap{ isSmartAccount, network, swapFromToken, swapToToken, swapFromAmount, swapToAmount }
SWAP_SUCCESSSwap confirmedSame payload as INITIATE_SWAP
SWAP_ERRORSwap failsSame payload as INITIATE_SWAP + { message }
SWAP_APPROVAL_ERRORToken allowance approval failsSame payload as INITIATE_SWAP + { message }
CLICK_SELECT_TOKEN_TO_SWAPUser clicks token selector in swap
CLICK_SELECT_NETWORK_TO_SWAPUser clicks network selector in swap
CLICK_CONVERTUser clicks convert in swap flow

Pay / on-ramp#

EventWhen it firesproperties
PAY_MODAL_OPENPay modal opens{ exchanges, configuration }
PAY_EXCHANGE_SELECTEDUser picks an exchange{ source, exchange, configuration, currentPayment, headless?, caipNetworkId? }
PAY_INITIATEDPayment started{ source, paymentId, configuration, currentPayment, caipNetworkId?, message? }
PAY_SUCCESSPayment succeedsSame as PAY_INITIATED
PAY_ERRORPayment failsSame as PAY_INITIATED
SELECT_BUY_CRYPTOUser picks "Buy crypto"{ isSmartAccount }
SELECT_BUY_PROVIDERUser picks an on-ramp provider{ provider, isSmartAccount }
SELECT_WHAT_IS_A_BUYUser opens "What is buy?" help{ isSmartAccount }

Examples#

Note

The examples below use React syntax. Vue/Nuxt users should replace useEffect with watchEffect and import from @reown/appkit/vue.

Track wallet connections with an analytics provider#

Show a toast when the user switches network#

Log every event during development#

React to connection errors#