Skip to main content

Verification (NIP-05)

NIP-05 verification links your Nostr identity to a domain name, adding credibility to your profile.

What is NIP-05?​

NIP-05 is a verification standard that:

  • Links your Nostr key to a domain
  • Shows as name@domain.com on your profile
  • Helps others verify it's really you
  • Many clients show a checkmark or badge
Your Profile                  Domain Server
│ │
│ alice@example.com │
└─────────────────────────────┘
↓
Clients can verify:
"Yes, example.com confirms
this is the real alice"

What It Looks Like​

Without NIP-05With NIP-05
AliceAlice ✓
npub1abc...alice@example.com

How It Works​

  1. You claim alice@example.com in your profile
  2. Your client checks example.com/.well-known/nostr.json
  3. The server returns your public key
  4. If it matches, you're verified!

Getting Verified​

Option 1: Free Services​

Several services offer free NIP-05:

ServiceFormatNotes
nostrcheck.meyou@nostrcheck.meFree
nostrplebs.comyou@nostrplebs.comDonation-based
verified-nostr.comyou@verified-nostr.comFree

Steps:

  1. Visit the service
  2. Connect your Nostr account
  3. Choose your username
  4. Add the address to your profile

Option 2: Your Own Domain​

If you own a domain:

Step 1: Create the file

/.well-known/nostr.json

Step 2: Add your info

{
"names": {
"alice": "your-public-key-in-hex"
}
}

Step 3: Configure your web server

  • Serve with Content-Type: application/json
  • Allow CORS: Access-Control-Allow-Origin: *

Step 4: Add to your Nostr profile

alice@yourdomain.com

Option 3: Paid Services​

Premium verification services:

  • Custom domains
  • Additional features
  • Support included

Adding to Your Profile​

  1. Open your Nostr client
  2. Go to profile settings
  3. Find "NIP-05" or "Verification" field
  4. Enter your address (e.g., alice@example.com)
  5. Save

Benefits​

Trust​

  • Others know the account is legitimate
  • Reduces impersonation risk
  • Builds credibility

Discoverability​

  • Easier to find: search alice@example.com
  • Memorable identifier
  • Professional appearance

Identity Continuity​

  • Even if you change keys, domain proves ownership
  • Bridges to your other online presence

Verification Levels​

TypeExampleTrust Level
Free serviceyou@nostrcheck.meBasic
Personal domainyou@yourname.comStrong
Organizationceo@company.comVery strong

Common Issues​

"Invalid NIP-05"​

Check:

  • Correct format: name@domain.com
  • Server is accessible
  • JSON is valid
  • Public key matches

Verification Not Showing​

  1. Wait a few minutes
  2. Refresh the profile
  3. Check the JSON file
  4. Verify CORS headers

Can't Find the Setting​

Look for:

  • "NIP-05"
  • "Verification"
  • "Nostr address"
  • "Identity"

Technical Details​

JSON Format​

The nostr.json file:

{
"names": {
"alice": "abc123...hex-pubkey...",
"bob": "def456...hex-pubkey..."
},
"relays": {
"abc123...hex-pubkey...": ["wss://relay.example.com"]
}
}

Required Headers​

Your server must return:

Content-Type: application/json
Access-Control-Allow-Origin: *

URL Format​

Clients check:

https://domain.com/.well-known/nostr.json?name=alice

Self-Hosting Tips​

Static Site (GitHub Pages, Netlify)​

Create .well-known/nostr.json:

{
"names": {
"yourname": "your-hex-public-key"
}
}

With Redirects​

Some hosts need configuration for .well-known paths.

CORS Configuration​

Nginx:

location /.well-known/nostr.json {
add_header Access-Control-Allow-Origin *;
add_header Content-Type application/json;
}

Apache (.htaccess):

Header set Access-Control-Allow-Origin "*"

Privacy Note​

NIP-05 links your Nostr identity to a domain:

  • This is public information
  • Consider if you want this connection
  • Use a pseudonymous domain if desired

FAQ​

Is verification required?​

No! It's optional but recommended.

Does it cost money?​

Free options exist. Own domain costs domain price.

Can I change it later?​

Yes, just update your profile.

What if the domain expires?​

Verification will stop working. Keep domains renewed!

Can multiple people use one domain?​

Yes! Add multiple entries to the JSON.

Next Steps​