Getting Started

How to get started quickly with NWC

NWC allows you to easily connect your app with wallets. It provides a simple and intuitive interface for apps to request actions such as payments.


  • Convenient: No need to confirm payments or scan QR codes with connected wallet

  • Flexible: Build a complete wallet interface or use just a single payment feature

  • Interoperable: One interface to onboard users from any bitcoin wallet

  • Risk Free: Move from custodying funds to orchestrating payments

  • Platform independent: Mobile, backend, CLI tools, desktop apps


  • Receive payments in real-time

  • Send single, multiple payments or even automate payments

  • Show wallet balance

  • List payments

  • Check payments

Obtaining a connection string

A client app discovers a wallet service by scanning a QR code, handling a deeplink or pasting in a URI.

The wallet service generates this connection URI with protocol nostr+walletconnect:// and base path it's hex-encoded pubkey with the following query string parameters:

  • relay Required. URL of the relay where the wallet service is connected and will be listening for events. May be more than one.

  • secret Required. 32-byte randomly generated hex encoded string. The client app MUST use this to sign events and encrypt payloads when communicating with the wallet service.

    • Authorization does not require passing keys back and forth.

    • The user can have different keys for different applications. Keys can be revoked and created at will and have arbitrary constraints (e.g. budgets).

    • The key is harder to leak since it is not shown to the user and backed up.

    • It improves privacy because the user's main key would not be linked to their payments.

The client app should then store this connection and use it when the user wants to perform actions like paying an invoice. Due to this NIP using ephemeral events, it is recommended to pick relays that do not close connections on inactivity to not drop events.

Example connection string


To automate the construction and handling of connection strings check out:

Last updated