getting started intermediate ⏱️ 12 minutes

NIP-05 Profile Verification: Complete Guide

How to verify your Nostr profile with NIP-05 - DNS-based verification, setup guide, providers, and why verification matters for trust and discoverability.

Updated: 31 January 2026 By

Introduction

On traditional social media, “verified checkmarks” are gatekept by platforms. On Nostr, you verify yourself using NIP-05—a DNS-based system that links your identity to a domain you control.

This guide explains what NIP-05 verification is, why it matters, how to set it up, and the different options available.

What is NIP-05?

The Simple Explanation

NIP-05 lets you associate your Nostr public key (npub) with a human-readable internet identifier that looks like an email address.

Example:

  • Your npub: npub180cvv83m27afv2pzhd97pl3aw5lu729x0cmnj7zv0edxcnjle67q23pczl
  • Your NIP-05: alice@example.com

Purpose:

  1. Human-readable identifier: Easier to remember and share
  2. Verification: Proves you control the domain
  3. Discoverability: Others can find you by your identifier
  4. Trust signal: Shows you’ve verified your identity

Visual Indicator: Most clients show a checkmark ✓ next to verified identities.

How It Works (Technical Overview)

Step 1: You add NIP-05 identifier to your Nostr profile:

{
  "kind": 0,
  "content": "{\"nip05\": \"alice@example.com\"}"
}

Step 2: You create a JSON file on example.com:

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

Step 3: The JSON file contains your public key:

{
  "names": {
    "alice": "your_hex_pubkey_here"
  }
}

Step 4: Clients verify by:

  1. Reading alice@example.com from your profile
  2. Fetching https://example.com/.well-known/nostr.json?name=alice
  3. Checking if the file contains your public key
  4. If match: Verified ✓
  5. If no match: Not verified

This proves you control the domain (or have permission from domain owner).

Why NIP-05 Verification Matters

1. Trust and Authenticity

Problem: Anyone can claim to be anyone on Nostr.

Example:

  • Real Jack Dorsey: jack@cash.app (verified)
  • Impersonator: Just a random npub claiming to be Jack

Verification Helps:

  • Real person controls the domain
  • Harder to impersonate (can’t fake domain control)
  • Users can check domain legitimacy

Not Perfect (more below), but significantly better than unverified.

2. Human-Readable Identifiers

Problem: npub keys are impossible to remember.

npub180cvv83m27afv2pzhd97pl3aw5lu729x0cmnj7zv0edxcnjle67q23pczl

NIP-05 Provides:

alice@example.com

Much easier to:

  • Share verbally (“I’m alice at example dot com”)
  • Remember
  • Type
  • Share on business cards

3. Discoverability

Current Limitation: Finding people on Nostr requires knowing their npub.

With NIP-05:

  • Search by identifier (alice@example.com)
  • Clients can look up the domain
  • Find public key automatically

Some clients support NIP-05 search (growing feature).

4. Branding and Professionalism

For Individuals:

  • yourname@yourwebsite.com looks professional
  • Links your web identity to Nostr identity
  • Cohesive online presence

For Businesses:

  • support@company.com (official business account)
  • ceo@company.com (verified executive)
  • Consistent branding

For Communities:

  • alice@bitcoiners.com (community membership signal)
  • bob@uknostr.com (UK Nostr community)

5. Relay Hints (Advanced)

NIP-05 JSON can include relay hints:

{
  "names": {
    "alice": "pubkey_hex"
  },
  "relays": {
    "pubkey_hex": ["wss://relay1.com", "wss://relay2.com"]
  }
}

Benefit: Clients know where to find your events, improving discoverability.

Setting Up NIP-05 Verification

Prerequisites

You need one of the following:

Option 1: Your own domain

  • You own example.com
  • You can create files on the server
  • You can serve /.well-known/nostr.json

Option 2: Use a NIP-05 provider

  • Service provides subdomains or usernames
  • They host the JSON file
  • You don’t need your own website

Method 1: Self-Hosted (Own Domain)

Best for: People with their own website, maximum control.

Steps:

1. Get Your Hex Public Key

Most clients show both formats. You need the hex (not npub):

npub: npub180cvv83m27afv2pzhd97pl3aw5lu729x0cmnj7zv0edxcnjle67q23pczl
hex: 3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d

Or convert: Use nostr.band/tools (npub → hex)

2. Create JSON File

Create a file at:

https://yourwebsite.com/.well-known/nostr.json

Content:

{
  "names": {
    "yourname": "your_hex_pubkey_here"
  }
}

Example (https://example.com/.well-known/nostr.json):

{
  "names": {
    "alice": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
  }
}

3. Configure Server

Enable CORS (Cross-Origin Resource Sharing):

For Apache (.htaccess):

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin "*"
</IfModule>

For Nginx:

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

Why: Clients request this file from browsers, CORS required.

4. Test the File

Visit in browser:

https://yourwebsite.com/.well-known/nostr.json?name=yourname

Should return your JSON (with your pubkey).

5. Update Your Nostr Profile

In your Nostr client:

  • Edit profile
  • NIP-05 field: yourname@yourwebsite.com
  • Save

6. Wait for Verification

  • Clients check periodically (varies by client)
  • Should see checkmark ✓ within a few minutes
  • Some clients force refresh (check settings)

Done! You’re verified.

Method 2: Use a NIP-05 Provider

Best for: People without a website, ease of use.

How It Works:

  • Provider hosts the nostr.json file
  • You register a username
  • They link your pubkey to their domain
  • You get username@provider.com

Popular Providers:

Free Providers:

  1. nostrplebs.com (Popular, free tier)

    • Format: username@nostrplebs.com
    • Free basic verification
    • Paid options for custom features
  2. iris.to (Iris client integrated)

    • Format: username@iris.to
    • Free
    • Tied to Iris client
  3. nostr.directory

    • Format: username@nostr.directory
    • Directory listing + verification

Paid Providers (Custom Domains/Features):

  1. nostrplebs.com (Paid tiers)

    • Custom subdomains
    • Additional features
    • ~$5-20/month
  2. nostr.com (Premium)

    • Short usernames
    • username@nostr.com
    • Limited availability
  3. Community providers

    • Various communities offer verification
    • E.g., username@uknostr.com (hypothetical)
    • Often free for community members

Setup Process (General):

  1. Visit provider website
  2. Register username
  3. Enter your npub (or hex pubkey)
  4. Provider creates JSON file linking username to pubkey
  5. Update your Nostr profile with username@provider.com
  6. Clients verify

Pros:

  • ✅ Easy (no technical setup)
  • ✅ Fast (5 minutes)
  • ✅ No website required

Cons:

  • ❌ Less control (provider hosts file)
  • ❌ Provider could shut down
  • ❌ Not “your” domain (less personal branding)

Method 3: Subdomain on Your Domain

Best for: People with domain but no website, want custom branding.

Example: alice@nostr.yourwebsite.com

Setup:

  1. Create subdomain: nostr.yourwebsite.com
  2. Host /.well-known/nostr.json on subdomain
  3. NIP-05: alice@nostr.yourwebsite.com

Or: Use a provider that supports custom domains

  • Point subdomain to their server
  • They host JSON file
  • You get custom branding

Services Supporting Custom Domains:

  • Some NIP-05 providers offer this (check documentation)

Multiple Names (Advanced)

One domain can verify multiple people.

JSON File:

{
  "names": {
    "alice": "alice_hex_pubkey",
    "bob": "bob_hex_pubkey",
    "support": "support_hex_pubkey"
  }
}

Identifiers:

  • alice@example.com
  • bob@example.com
  • support@example.com

Use Cases:

  • Team/company accounts
  • Family domain
  • Community domain

Each person updates their profile with their specific identifier.

Security and Trust Model

What NIP-05 Proves

It Proves:

  • ✅ You control the domain (or have permission)
  • ✅ The domain owner verified this pubkey
  • ✅ Link between domain identity and Nostr identity

It Does NOT Prove:

  • ❌ Real-world identity (domain could be fake)
  • ❌ Good intentions (scammers can verify)
  • ❌ Account security (private key could be compromised)

Trust Depends on Domain Trust

High-Trust Domains:

  • jack@cash.app → Cash App is a known company
  • fiatjaf@fiatjaf.com → fiatjaf’s personal website
  • bbc@bbc.co.uk → Official BBC domain

Low-Trust Domains:

  • jack@random-domain123.com → Unknown domain
  • bbc@bbc-news-official.xyz → Suspicious domain (not .co.uk)

Your job as a user: Verify the domain itself is legitimate.

Attack: Lookalike Domains

Threat: Scammer registers lookalike domain.

Example:

  • Real: alice@example.com
  • Fake: alice@examp1e.com (1 instead of l)

Defense:

  • Check domain spelling carefully
  • Be aware of phishing domains
  • Hover over links (check actual domain)

NIP-05 doesn’t prevent this (it’s a domain trust issue, not a protocol issue).

Attack: Compromised Provider

Threat: NIP-05 provider changes your pubkey in their JSON.

Impact:

  • Different pubkey now verified under your name
  • Impersonation possible

Defense:

  • Use reputable providers
  • Or: self-host (you control file)
  • Regularly verify your setup

Likelihood: Low (damages provider reputation), but possible.

Verification ≠ Endorsement

Important:

  • Verification doesn’t mean trustworthy
  • Scammers can verify
  • It only proves domain control

Trust still requires judgment.

Troubleshooting

”Not Verified” Despite Setup

Possible Causes:

  1. CORS not configured

    • File exists but browser can’t access it
    • Check browser console for CORS errors
    • Add CORS headers (see setup above)
  2. Wrong format

    • JSON syntax error
    • Wrong hex pubkey (not npub)
    • Wrong name in file vs. profile
  3. Wrong URL

    • File must be at /.well-known/nostr.json
    • Case-sensitive
    • Must be HTTPS (not HTTP)
  4. Client hasn’t checked yet

    • Some clients check hourly
    • Force refresh (client-specific)
    • Be patient
  5. Name parameter required

    • URL must work with ?name=yourname
    • Some servers need explicit configuration

Debugging:

  1. Visit https://yoursite.com/.well-known/nostr.json?name=yourname in browser
  2. Should return JSON with your pubkey
  3. Check browser console for errors (F12 → Console)
  4. Verify CORS headers (Network tab)

Verification Works But Checkmark Disappeared

Causes:

  1. File removed or changed

    • Domain expired
    • Server misconfiguration
    • Provider shut down
  2. Profile updated incorrectly

    • Accidentally removed NIP-05 field
    • Typo in identifier
  3. Temporary network issue

    • Client couldn’t fetch file
    • Will re-verify automatically

Fix: Re-check file exists and profile has correct identifier.

Best Practices

Choosing an Identifier

For Personal Use:

  • yourname@yourwebsite.com (if you have site)
  • yourname@yourname.com (personal domain)
  • yourname@reputable-provider.com

For Business:

  • companyname@company.com
  • support@company.com
  • ceo@company.com

For Pseudonymity:

  • pseudonym@domain.com (domain matches online identity)
  • Consider privacy (domain whois might reveal info)

Domain Choice

Own Domain (Best):

  • Maximum control
  • Professional
  • Permanent (as long as you renew)

Reputable Provider (Good):

  • Easy setup
  • Established providers
  • Check reputation first

Avoid:

  • Unknown providers (might disappear)
  • Free “sketchy” domains
  • Providers with unclear ownership

Backup Verification

If Using Provider:

  • Consider setting up own domain as backup
  • Diversify (don’t rely on single provider)

If Self-Hosting:

  • Keep domain renewed
  • Monitor uptime
  • Backup server configuration

NIP-05 and Privacy

Public Information

NIP-05 makes public:

  • Your username
  • Your domain association
  • Your public key

This is intentional (verification requires publicity).

Privacy Considerations

If You Want Privacy:

  • Don’t use NIP-05 (or use pseudonymous domain)
  • Domain whois might reveal real name (use privacy protection)
  • Consider separate identities (pseudonymous identity without NIP-05)

Trade-off: Verification vs. privacy

For Most Users: Verification benefits outweigh privacy cost (your npub is already public anyway).

Future of NIP-05

Current Limitations

  1. Centralized domain system (DNS)

    • Domains can be seized
    • DNS can be censored
    • Not as decentralized as Nostr itself
  2. Limited adoption (discovery)

    • Not all clients support search by NIP-05
    • Growing but not universal
  3. No mobile number/email verification (yet)

    • Could integrate other verification methods
    • Future enhancements possible

Potential Improvements

NIP-05 Extensions (proposed or in development):

  1. Multi-protocol verification

    • Link Nostr to Twitter, GitHub, etc.
    • Comprehensive identity verification
  2. Decentralized name systems

    • ENS (Ethereum Name Service) integration
    • Other blockchain-based naming
  3. Enhanced trust signals

    • Web of Trust integration
    • Reputation scores
    • Community verification

Watch this space—NIP-05 is evolving.

Conclusion

NIP-05 verification provides a DNS-based way to verify your Nostr identity, making you more discoverable and trustworthy.

Key Takeaways:

  1. Human-readable identifiers: yourname@domain.com beats long npub
  2. Trust signal: Proves domain control, aids authenticity
  3. Self-hosted or provider: Both options work, trade-offs exist
  4. Not perfect: Still requires domain trust, doesn’t prevent all impersonation
  5. Worth doing: Significantly improves discoverability and trust

Setup Summary:

  • Self-host: Create /.well-known/nostr.json, add CORS, update profile
  • Provider: Register, link pubkey, update profile
  • Verify: Wait for checkmark ✓

For most users, NIP-05 is highly recommended. It’s the closest thing Nostr has to “verified accounts”—but better, because you verify yourself.

Your domain, your verification, your control.

Further Resources

Remember: Verification helps discoverability and trust, but your private key security is still paramount. Verified or not, keep your nsec safe! ✅

Frequently asked questions

Does NIP-05 verification cost anything?

No. If you already own a domain, self-hosting a /.well-known/nostr.json file is free, and several providers such as nostrplebs.com, iris.to and nostr.directory offer a free verification tier. Paid provider tiers exist for custom subdomains or short usernames, typically around 5-20 dollars a month, but the basic checkmark requires no payment.

Does a NIP-05 checkmark prove someone is who they claim to be?

Not on its own. NIP-05 only proves that the person controls the domain in the identifier, or has permission from its owner. It does not verify real-world identity, good intentions or account security, and scammers can verify too. Trust depends on the domain itself being legitimate, so users must still judge whether a domain like cash.app or bbc.co.uk is genuine.

Why is my NIP-05 showing as 'not verified' after I set it up?

The most common cause is missing CORS headers, which stop browsers reading the file even though it exists. Other causes include JSON syntax errors, using the npub instead of the hex pubkey, a mismatched name, the file not being at /.well-known/nostr.json over HTTPS, or the client not having re-checked yet. Visit yoursite.com/.well-known/nostr.json?name=yourname in a browser and check the console for errors to debug.