Skip to main content


Project ID

The Project ID is consumed through URL parameters.

URL parameters used:

Example URL:

This can be instantiated from the client with the projectId in the SignClient constructor.

import SignClient from '@walletconnect/sign-client'
const signClient = await SignClient.init({
projectId: 'c4f79cc821944d9680842e34466bfb'


To help prevent malicious use of your project ID you are strongly encouraged to set an allowlist of origins or application/bundle ids for mobile applications where the project ID is used. Requests from other origins will be denied.

Using localhost (or is always permitted, and if empty all origins are allowed. Updates take 15 minutes to apply.

If scheme or port is specified, it must match exactly. Hostname must also match exactly, but wildcards can be used for individual labels within the hostname.

Example of possible origins in the allowlist:

  • - allows or but not
  • - allows but not
  • - allows but not
  • - allows but not
  • https://* - allows but not
  • https://*.* - allows but not or
  • https://www.* - allows but not
  • https://www-* - invalid; * must be the full label

Error Codes

ReasonError Code
Project ID doesn't exist OR JWT is expired401
Exists and is invalid403
Too many requests1013

Websocket Close Codes

1001Server terminatingYes
4008Client stale: connected without a prior subscription and is not sending dataWhen needed
4010Load RebalancingYes

Best Practices

  • Create a new projectId for each project. This allows for more granular control, dedicated explorer listings, and project metrics.
  • Don't reuse a projectId.
  • Use the AllowList to limit unauthorized usage.
  • Avoid committing projects keys to the repo. Use env variables instead.