# WalletConnect URI

> Source: https://docs.barcoder.ai/docs/standards/walletconnect-uri
> research date 2026-10-30 · extracted at 2026-10-30
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

Specifications:
- [ERC-1328: WalletConnect URI Format](https://eips.ethereum.org/EIPS/eip-1328)
- [Pairing URI — WalletConnect v2 specs](https://specs.walletconnect.com/2.0/specs/clients/core/pairing/pairing-uri)
- [Pairing API — WalletConnect v2 specs](https://specs.walletconnect.com/2.0/specs/clients/core/pairing)

## Overview

A **WalletConnect URI** is a `wc:` string, defined by **ERC-1328** (EIP-1328), that carries what an application and a wallet need to open an encrypted connection. It can be shown as a [QR Code](https://docs.barcoder.ai/docs/standards/qr-code) or passed as a link <sup>[1][1]</sup>. Unlike a payment URI, it names no recipient or amount: it only bootstraps a channel, over which the application later proposes a session and sends signing requests <sup>[4][4]</sup> <sup>[18][18]</sup>.

Two versions exist. Version 1 pointed at a bridge server and was shut down in June 2023; version 2 names a relay protocol and is current <sup>[1][1]</sup> <sup>[8][8]</sup>. The company behind the protocol renamed itself **Reown** in September 2024, while the network and the URI kept the WalletConnect name <sup>[10][10]</sup>.

## History

- **2017.** Pedro Gomes began exploring Ethereum as a developer and user, and saw shortcomings in wallet user experience <sup>[31][31]</sup>.
- **March 2018.** According to Ric Burton, a collaborator at the time, Gomes sketched WalletConnect for the Balance team, who wanted a transport layer between phones and desktops. Burton posted a demo on 27 March 2018 in which a phone wallet connected to a web application by scanning a QR code; Gomes shared the first architecture on 31 March <sup>[7][7]</sup>. WalletConnect's own blog gives 2018 as the founding year <sup>[30][30]</sup>.
- **May 2018.** Burton reports a $150,000 Ethereum Foundation grant, announced in the May 2018 cohort. WalletConnect was later separated from Balance, and Gomes used the grant to develop the protocol towards version 1.0 <sup>[7][7]</sup>.
- **August 2018.** ERC-1328 is dated 15 August 2018, by ligi and Pedro Gomes <sup>[1][1]</sup>. Gomes opened the pull request on 16 August, and it merged on 28 August 2018 <sup>[2][2]</sup>. The change replaced the JSON payload of the alpha, which was inefficient to parse from a QR code. ligi's review added the point that a URI, unlike JSON, lets Android's Intent system route the code <sup>[1][1]</sup> <sup>[2][2]</sup>.
- **January 2021.** Burton counts 100 applications supporting WalletConnect on 23 January 2021 <sup>[7][7]</sup>.
- **2022–2023: v1 retirement.** A migration notice on the Celo forum gives 16 December 2022 as the wallet deadline. The shutdown moved from 1 March to 28 June 2023 <sup>[9][9]</sup>. WalletConnect announced on 28 June 2023 that v1.0 "has now been shut down", five years after it was first built, citing an inability to scale horizontally <sup>[8][8]</sup>.
- **September 2024: Reown.** On 16 September 2024 the company announced that "WalletConnect Inc. has officially rebranded to Reown". The WalletConnect Network kept its name and decentralization roadmap, and Reown called itself a partner of the network <sup>[10][10]</sup>. The SDK formerly named Web3Wallet became Reown WalletKit <sup>[11][11]</sup>.

## Technical specification

**Carrier.** A pairing code is an ordinary [QR Code](https://docs.barcoder.ai/docs/standards/qr-code) holding the URI as text, so it belongs to the same family as [URL QR](https://docs.barcoder.ai/docs/standards/url-qr). The URI can equally travel as a link or be pasted into a wallet <sup>[1][1]</sup> <sup>[18][18]</sup>. The sources fetched specify no error-correction level or symbol size.

**Grammar.** ERC-1328 defines the form below in ABNF; `topic` and parameter values are unconstrained strings, and `version` is one or more digits <sup>[1][1]</sup>.

```
wc:<topic>[@<version>][?<key>=<value>[&<key>=<value>...]]
```

### Version differences

| | v1 (`@1`) | v2 (`@2`) |
|---|---|---|
| Encryption key parameter | `key` <sup>[1][1]</sup> | `symKey` <sup>[1][1]</sup> |
| Message transport | `bridge`: URL of a bridge server <sup>[1][1]</sup> | `relay-protocol`, optional `relay-data` <sup>[1][1]</sup> |
| Method list | none | `methods`: JSON-RPC methods grouped by protocol <sup>[3][3]</sup> |
| Expiry | none | optional `expiryTimestamp`, Unix seconds <sup>[1][1]</sup> |
| Topic in the published sample | UUID form <sup>[1][1]</sup> | 64 hex digits <sup>[1][1]</sup> |
| Status | Shut down June 2023 <sup>[8][8]</sup> | Current; replaced v1 <sup>[8][8]</sup> |

### Published samples

From ERC-1328, version 1, with the published key value replaced by a placeholder <sup>[1][1]</sup>:

```
wc:8a5e5bdc-a0e4-4702-ba63-8f1a5655744f@1?bridge=https%3A%2F%2Fbridge.walletconnect.org&key=<64-hex-key>
```

From the WalletConnect pairing specification, version 2, with the key value replaced by a placeholder <sup>[3][3]</sup>:

```
wc:7f6e504bfad60b485450578e05678ed3e8e8c4751d3c6160be17160d63ec90f9@2?symKey=<64-hex-key>&methods=[wc_sessionPropose],[wc_authRequest,wc_authBatchRequest]&relay-protocol=irn&expiryTimestamp=1705667684
```

### What happens after the scan

1. The proposer generates a random symmetric key and takes its SHA-256 hash as the pairing topic, so the topic follows from the key. It then creates an inactive pairing <sup>[4][4]</sup>. The reference SDK generates 32 random bytes for the key <sup>[13][13]</sup>.
2. The application encrypts its request with that key, publishes it on the topic, and shows the URI as a QR code or deep link <sup>[4][4]</sup>.
3. The wallet checks `methods` against the methods it has registered. If they match, it subscribes to the topic, receives the request and creates an active pairing; if not, it tells the user and publishes `wc_deletePairing` <sup>[4][4]</sup>.
4. In the SDK, `pair({ uri })` creates the pairing and raises the `session_proposal` event. The default session lifetime is 7 days <sup>[18][18]</sup>.

**Lifetimes.** An inactive pairing expires after 5 minutes and an active one after 30 days, extended whenever a peer delivers a message <sup>[4][4]</sup>. The specification says `expiryTimestamp` should be generated 5 minutes ahead <sup>[3][3]</sup>, and the reference SDK does this <sup>[13][13]</sup>.

**Cryptography.** Random symmetric keys are used only for pairings; other protocol keys come from an X25519 exchange passed through HKDF. Messages use ChaCha20-Poly1305, and SHA-256 hashes keys into topics <sup>[5][5]</sup>. A type 0 envelope is a 1-byte type, 12-byte IV, ciphertext and 16-byte tag; type 1 adds a 32-byte public key <sup>[6][6]</sup>.

### Parser behaviour

- **`methods` in practice.** ERC-1328 and the pairing specification list `methods` as required <sup>[1][1]</sup> <sup>[3][3]</sup>. The reference SDK treats it as optional, and its `pair()` validation names only `relay-protocol` and `symKey` <sup>[13][13]</sup>. A parser should not assume `methods` is present.
- **Prefixes.** `parseUri` strips an Android `wc://` as well as `wc:`, and tries base64 decoding if the string lacks `wc:` <sup>[12][12]</sup>.
- **Encoding.** `formatUri` sorts parameters alphabetically and encodes them through `URLSearchParams`, so a comma in `methods` becomes `%2C` <sup>[12][12]</sup>. Raw and encoded forms therefore both occur.
- **Stale or repeated URIs.** The SDK refuses a URI past its expiry, and refuses a topic whose pairing is already active. Both errors ask for a new connection URI <sup>[13][13]</sup>.

### Deep links

For same-device use, a wallet registers a custom scheme and receives the URI as a parameter, for example `examplewallet://wc?uri={pairingUri}`; universal links take the form `https://example.wallet/wc?uri=…` <sup>[14][14]</sup> <sup>[15][15]</sup>. WalletConnect's documentation recommends deep links, because a universal link may open a browser. Wallets should also register `wc://` <sup>[15][15]</sup>. During signing, an application may open the wallet with an incomplete URI such as `examplewallet://wc?uri=wc:00e46b69-d0cc-4b3e-b6a2-cee442f97188@2`, which the wallet must not treat as a new connection, and a QR scan should not trigger a redirect back to the application <sup>[14][14]</sup>.

Link Mode, a separate feature, carries auth and session requests between native applications over Universal Links, reducing reliance on a relay WebSocket connection. Its documentation does not cover QR codes <sup>[16][16]</sup>.

### Symbol size

Computed with segno 1.6.6, with error-level boost off. Every payload encoded in byte mode.

| Payload | Characters | L | M | Q | H |
|---|---|---|---|---|---|
| v1 sample above | 156 | 8 (49 × 49) | 9 (53 × 53) | 11 (61 × 61) | 13 (69 × 69) |
| v2 sample above | 252 | 10 (57 × 57) | 12 (65 × 65) | 14 (73 × 73) | 17 (85 × 85) |
| v2 sample without `methods` (structurally illustrative) | 187 | 8 (49 × 49) | 10 (57 × 57) | 12 (65 × 65) | 14 (73 × 73) |

## Use cases

- **Connecting web applications to wallets.** The original purpose: a phone wallet connects to a desktop application by QR code <sup>[7][7]</sup>. AppKit's modal displays the code for the wallet's built-in scanner, which avoids deep linking altogether. That is also the suggested workaround when an Android in-app browser blocks a wallet from opening <sup>[19][19]</sup>.
- **Trading.** The 0x Project collaboration of April 2018 let people trade on the web from a phone wallet <sup>[7][7]</sup>.
- **Non-Ethereum chains.** Reown's Polkadot wallet guide uses the same flow: scan the modal's code, or copy and paste the URI <sup>[18][18]</sup>.
- **Sign-in.** The v2 sample lists `wc_authRequest` among its methods <sup>[3][3]</sup>, and WalletConnect cited one-step Sign-in with Ethereum as a v2 benefit <sup>[8][8]</sup>.
- **Retail payments, a related but separate code.** WalletConnect Pay shows a QR code on the point-of-sale device. A wallet scans it to pay; a phone camera opens a browser payment page instead <sup>[20][20]</sup>. WalletConnect's blog of 15 January 2026 announced the service through Ingenico, whose customer base it puts at over 40 million terminals in 120+ countries <sup>[22][22]</sup>. This is not necessarily a `wc:` code: the SDK documents payment links as `https://pay.walletconnect.com/...` and checks for them with `isPaymentLink` before falling back to `pair()` <sup>[21][21]</sup>. The user-facing page does not state what the QR holds <sup>[20][20]</sup>.

## Security

- **What the code contains.** ERC-1328 says the URI should contain nothing that could compromise the communication or allow control of a user's private keys <sup>[1][1]</sup>. In practice it does carry a symmetric key, but that key is random and generated for the pairing <sup>[5][5]</sup>. It is not the wallet's private key.
- **Impersonation.** Check Point Research reported on 26 September 2024 that a fake Google Play app named "WalletConnect – Crypto Wallet" drew over 10,000 downloads, and that over 150 victim addresses lost more than $70,000 in total. The app traded on the protocol's name; the report describes no protocol flaw. It opened a malicious site through a wallet's browser, not a pairing code <sup>[23][23]</sup>.
- **Verify.** WalletConnect's Verify feature helps wallets assess the domain behind a session proposal or request, combining a domain registry with threat intelligence from Hexagate, ChainPatrol and Hypernative. A flagged domain sets `isScam` <sup>[17][17]</sup>.

## Implementations

| Project | Lang | Stars | Last active | Notes |
|---|---|---|---|---|
| [WalletConnect/walletconnect-monorepo](https://github.com/WalletConnect/walletconnect-monorepo) | TypeScript | ~1.7k | 2026-10 | v2 reference; holds `formatUri` and `parseUri` <sup>[12][12]</sup> <sup>[27][27]</sup> |
| [reown-com/appkit](https://github.com/reown-com/appkit) | Web (React topic) | ~5.5k | 2026-10 | Application toolkit whose modal shows the QR code <sup>[19][19]</sup> |
| [reown-com/reown-swift](https://github.com/reown-com/reown-swift) | Swift | 123 | 2026-10 | WalletKit and AppKit for iOS |
| [reown-com/reown-kotlin](https://github.com/reown-com/reown-kotlin) | Kotlin | 67 | 2026-10 | Android implementation |
| [reown-com/reown_flutter](https://github.com/reown-com/reown_flutter) | Flutter | 67 | 2026-10 | Flutter implementation |
| [WalletConnect/walletconnect-utils](https://github.com/WalletConnect/walletconnect-utils) | JavaScript | 134 | 2026-01 | JavaScript utilities |
| [WalletConnect/walletconnect-legacy](https://github.com/WalletConnect/walletconnect-legacy) | JavaScript | 9 | 2025-06 | v1 packages; archived 19 June 2025 <sup>[28][28]</sup> |

## Comparison

- **`wc:` vs [EIP-681](https://docs.barcoder.ai/docs/standards/eip-681).** An `ethereum:` URI describes a transaction, with destination, value and chain, so one scan can request one payment [[eip681-ref]]. A `wc:` URI describes no transaction; it opens a channel that needs a relay and can carry many requests <sup>[1][1]</sup> <sup>[18][18]</sup>. Choose EIP-681 for a single printed payment request, and `wc:` when an application must keep talking to a wallet.
- **`wc:` vs [Solana Pay](https://docs.barcoder.ai/docs/standards/solana-pay).** A Solana Pay transaction request also goes beyond static fields, but the wallet fetches a transaction from an HTTPS endpoint named in the URI [[solana-ref]]. A `wc:` URI names no application server; both sides meet on a relay topic <sup>[4][4]</sup>.
- **`wc:` vs [URL QR](https://docs.barcoder.ai/docs/standards/url-qr).** Both are URI strings in a QR code, but `wc:` is meant for a wallet's own scanner or a registered app, and the payload expires in minutes <sup>[3][3]</sup> <sup>[19][19]</sup>. A pairing code should therefore be generated on screen, not printed. That follows from the 5-minute expiry <sup>[4][4]</sup>.

## Fun facts

- WalletConnect's first public demo was a QR code, but the first QR payload was not a URI. The `wc:` scheme arrived about five months later because the JSON in the alpha was inefficient to parse <sup>[1][1]</sup> <sup>[7][7]</sup>.
- The v2 sample in ERC-1328 contains a stray `"` after the `methods` value, an apparent typo. The sample in the WalletConnect pairing specification has none <sup>[1][1]</sup> <sup>[3][3]</sup>.

## Status

**Active.** ERC-1328 is Final <sup>[1][1]</sup>, and its text is also published on ercs.ethereum.org <sup>[29][29]</sup>. Version 2 is the live protocol. Version 1 has been offline since June 2023 <sup>[8][8]</sup>, and its JavaScript repository was archived in 2025 <sup>[28][28]</sup>. The reference repository received commits in October 2026 <sup>[27][27]</sup>.

The naming is split. Reown's site is still live and calls the company "powered by WalletConnect" <sup>[25][25]</sup>, and its SDKs keep the name, such as `@reown/walletkit` <sup>[21][21]</sup>. WalletConnect's own documentation lives at docs.walletconnect.com <sup>[26][26]</sup>. When fetched on 30 October 2026, walletconnect.network and docs.walletconnect.network redirected to walletconnect.com hosts, and the docs.reown.com mobile-linking pages returned 404. The fetched pages do not say which entity runs what today.

Reported scale is self-published and not independently verified. WalletConnect's site claims about 900M users, 700+ wallets and 80,000+ apps <sup>[24][24]</sup>. Reown's site says 700+ wallets and 70K apps <sup>[25][25]</sup>.

## Sources

[1]: https://eips.ethereum.org/EIPS/eip-1328
[2]: https://github.com/ethereum/EIPs/pull/1330
[3]: https://specs.walletconnect.com/2.0/specs/clients/core/pairing/pairing-uri
[4]: https://specs.walletconnect.com/2.0/specs/clients/core/pairing
[5]: https://specs.walletconnect.com/2.0/specs/clients/core/crypto/crypto-keys
[6]: https://specs.walletconnect.com/2.0/specs/clients/core/crypto/crypto-envelopes
[7]: https://ricburton.substack.com/p/the-history-of-walletconnect
[8]: https://walletconnect.com/blog/walletconnect-v1-0-has-now-been-shut-down
[9]: https://forum.celo.org/t/walletconnect-v1-to-v2-migration/5184
[10]: https://reown.com/blog/walletconnect-is-now-reown
[11]: https://docs.walletconnect.com/wallets/more/web3wallet-migration/quickstart.md
[12]: https://raw.githubusercontent.com/WalletConnect/walletconnect-monorepo/v2.0/packages/utils/src/uri.ts
[13]: https://raw.githubusercontent.com/WalletConnect/walletconnect-monorepo/v2.0/packages/core/src/controllers/pairing.ts
[14]: https://docs.walletconnect.com/wallets/ios/mobile-linking.md
[15]: https://docs.walletconnect.com/wallets/android/mobile-linking.md
[16]: https://docs.walletconnect.com/wallets/features/link-mode.md
[17]: https://docs.walletconnect.com/wallets/features/verify.md
[18]: https://docs.reown.com/advanced/multichain/polkadot/wallet-integration-guide
[19]: https://docs.reown.com/appkit/faq
[20]: https://docs.walletconnect.com/payments/for-users.md
[21]: https://docs.walletconnect.com/payments/wallets/walletkit/web
[22]: https://walletconnect.com/blog/walletconnect-pay-is-available-worldwide-crypto-payment-rails
[23]: https://research.checkpoint.com/2024/wallet-scam-a-case-study-in-crypto-drainer-tactics/
[24]: https://walletconnect.com/network
[25]: https://reown.com/
[26]: https://docs.walletconnect.com/
[27]: https://github.com/WalletConnect/walletconnect-monorepo
[28]: https://github.com/WalletConnect/walletconnect-legacy
[29]: https://ercs.ethereum.org/ERCS/erc-1328
[30]: https://walletconnect.com/blog/building-from-zero-to-solving-payments
[31]: https://www.circle.com/blog/founder-qa-pedro-gomes-from-walletconnect
[eip681-ref]: https://docs.barcoder.ai/source/standards/eip-681
[solana-ref]: https://docs.barcoder.ai/source/standards/solana-pay

[1] [ERC-1328: WalletConnect URI Format](https://eips.ethereum.org/EIPS/eip-1328) — Ethereum Improvement Proposals, 2018, accessed 2026
[2] [ERC-1328 - WalletConnect Standard URI Format (PR #1330)](https://github.com/ethereum/EIPs/pull/1330) — ethereum/EIPs on GitHub, 2018
[3] [Pairing URI](https://specs.walletconnect.com/2.0/specs/clients/core/pairing/pairing-uri) — WalletConnect v2 specs, accessed 2026
[4] [Pairing API](https://specs.walletconnect.com/2.0/specs/clients/core/pairing) — WalletConnect v2 specs, accessed 2026
[5] [Crypto Keys](https://specs.walletconnect.com/2.0/specs/clients/core/crypto/crypto-keys) — WalletConnect v2 specs, accessed 2026
[6] [Crypto Typed Envelopes](https://specs.walletconnect.com/2.0/specs/clients/core/crypto/crypto-envelopes) — WalletConnect v2 specs, accessed 2026
[7] [The History of WalletConnect](https://ricburton.substack.com/p/the-history-of-walletconnect) — Ric Burton, 2021
[8] [WalletConnect v1.0 has now been shut down](https://walletconnect.com/blog/walletconnect-v1-0-has-now-been-shut-down) — WalletConnect, 2023
[9] [WalletConnect v1 to v2 migration](https://forum.celo.org/t/walletconnect-v1-to-v2-migration/5184) — Celo Forum (third party), 2023
[10] [Meet Reown: the onchain UX platform](https://reown.com/blog/walletconnect-is-now-reown) — Reown, 2024
[11] [Upgrade from Web3Wallet to Reown WalletKit](https://docs.walletconnect.com/wallets/more/web3wallet-migration/quickstart.md) — WalletConnect Docs, accessed 2026
[12] [uri.ts (parseUri, formatUri)](https://raw.githubusercontent.com/WalletConnect/walletconnect-monorepo/v2.0/packages/utils/src/uri.ts) — walletconnect-monorepo, accessed 2026
[13] [pairing.ts (create, pair)](https://raw.githubusercontent.com/WalletConnect/walletconnect-monorepo/v2.0/packages/core/src/controllers/pairing.ts) — walletconnect-monorepo, accessed 2026
[14] [Mobile linking (iOS)](https://docs.walletconnect.com/wallets/ios/mobile-linking.md) — WalletConnect Docs, accessed 2026
[15] [Mobile linking (Android)](https://docs.walletconnect.com/wallets/android/mobile-linking.md) — WalletConnect Docs, accessed 2026
[16] [Link Mode](https://docs.walletconnect.com/wallets/features/link-mode.md) — WalletConnect Docs, accessed 2026
[17] [Verify](https://docs.walletconnect.com/wallets/features/verify.md) — WalletConnect Docs, accessed 2026
[18] [Wallet Integration Guide (Polkadot)](https://docs.reown.com/advanced/multichain/polkadot/wallet-integration-guide) — Reown Docs, accessed 2026
[19] [AppKit FAQs](https://docs.reown.com/appkit/faq) — Reown Docs, accessed 2026
[20] [How to Pay with WalletConnect Pay](https://docs.walletconnect.com/payments/for-users.md) — WalletConnect Pay Docs, accessed 2026
[21] [WalletConnect Pay via WalletKit: Web/Node.js](https://docs.walletconnect.com/payments/wallets/walletkit/web) — WalletConnect Pay Docs, accessed 2026
[22] [How WalletConnect Pay and Ingenico Facilitate Stablecoin Payments in Everyday Checkouts](https://walletconnect.com/blog/walletconnect-pay-is-available-worldwide-crypto-payment-rails) — WalletConnect, 2026
[23] [Wallet Scam: A Case Study in Crypto Drainer Tactics](https://research.checkpoint.com/2024/wallet-scam-a-case-study-in-crypto-drainer-tactics/) — Check Point Research, 2024
[24] [WalletConnect Network](https://walletconnect.com/network) — WalletConnect, accessed 2026
[25] [Reown](https://reown.com/) — Reown, accessed 2026
[26] [WalletConnect Docs](https://docs.walletconnect.com/) — WalletConnect, accessed 2026
[27] [walletconnect-monorepo](https://github.com/WalletConnect/walletconnect-monorepo) — GitHub, accessed 2026
[28] [walletconnect-legacy](https://github.com/WalletConnect/walletconnect-legacy) — GitHub, accessed 2026
[29] [ERC-1328: WalletConnect URI Format](https://ercs.ethereum.org/ERCS/erc-1328) — Ethereum Request for Comment, accessed 2026
[30] [Building from Zero to Solving Payments](https://walletconnect.com/blog/building-from-zero-to-solving-payments) — WalletConnect, 2026
[31] [Founder Q&A: Pedro Gomes from WalletConnect](https://www.circle.com/blog/founder-qa-pedro-gomes-from-walletconnect) — Circle, 2022

## Deployments

_No country reports mention this standard by name._

## Regions / aggregations not mapped to a single country

- Universal
