Wikifreedia
All versions

User profile metadata events.

Profile Event (kind 0)

Defines profile information using tags.

Required Tags

None required.

Optional Tags

  • ["name", "<display-name>"] (nickname or full name)

  • ["about", "<bio>"] (short biography or description)

  • ["picture", "<url>"] (profile picture URL)

  • ["banner", "<url>"] (banner image URL)

  • ["website", "<url>"] (personal website)

  • ["lud16", "<lightning-address>"] (Lightning address for payments)

  • ["nip05", "<email-like-identifier>"] (NIP-05 verification, one for each address)

  • ["badge", "<kind 30009 badge definition event id>", "<kind 30382 profile label event id>"] (one for each accepted badge)

  • ["label", "<kind 30382 label definition event id>"] (one for each label)

  • ["i", "<platform:identity>", "<proof>"] (external identity verification)

Example

{
  "id": "<event-id>",
  "pubkey": "<pubkey>",
  "created_at": 1675642635,
  "kind": 0,
  "tags": [
    ["name", "Alice"],
    ["about", "Bitcoin enthusiast and developer"],
    ["picture", "https://example.com/alice.jpg"],
    ["website", "https://alice.dev"],
    ["lud16", "alice@example.com"],
    ["nip05", "alice@example.com"],
    ["badge", "30009:communityName:member", "profile-label-event-id-123"],
    ["label", "member"],
    ["i", "github:alice", "9721ce4ee4fceb91c9711ca2a6c9a5ab"],
    ["i", "twitter:alice_public", "1619358434134196225"],
    ["i", "mastodon:bitcoinhackers.org/@alice", "109775066355589974"]
  ],
  "content": "",
  "sig": "<signature>"
}

External Identities

The i tag allows users to verify external platform identities.

Identity Format

["i", "<platform:identity>", "<proof>"]

  • platform:identity: Platform name and identity joined with :

  • proof: Verification proof (varies by platform)

Supported Platforms

GitHub

  • Identity: github:username

  • Proof: GitHub Gist ID

  • Verification: Gist contains Verifying that I control the following Nostr public key: <npub>

Twitter

  • Identity: twitter:username

  • Proof: Tweet ID

  • Verification: Tweet contains Verifying my account on nostr My Public Key: "<npub>"

Mastodon

  • Identity: mastodon:instance/@username

  • Proof: Post ID

  • Verification: Post contains Verifying that I control the following Nostr public key: "<npub>"

Telegram

  • Identity: telegram:user-id

  • Proof: channel/message-id

  • Verification: Message contains Verifying that I control the following Nostr public key: "<npub>"

Badge Display

Users can display accepted Badges by including both badge definition and Profile Label event IDs in the badge tag.

Badge Acceptance

  • Users accept badges by adding ["badge", "<kind 30009 badge definition event id>", "<kind 30382 profile label event id>"] to their profile

  • Only profile label events where the user is the target (d tag) should be included

  • Clients SHOULD verify both the badge definition and profile label events exist and are valid

Recommendations

For Clients

  • Display external identities with verification status

  • Show badge information from referenced profile label events

  • Validate profile label events before displaying badges

  • Support future identity platforms by processing additional i tag values

For Relays

  • Store all kind 0 events as replaceable events

  • Allow profile updates by replacing older events

  • Index i tags for identity verification queries

  • Index badge tags for badge-related queries