Skip to main content

Discord

The Discord Legacy Identity Provider (LIDP) integration allows users to bind their Discord account to their Nostr public key. This lets anyone receive Lightning payments via their Discord identity.

Identifier Format

The canonical identifier for Discord is the user's numeric Snowflake ID, not their username or display name.

  • Raw Format: discord_id (e.g., 123456789012345678)
  • Resolved URI: discord:123456789012345678

Note: While zapf.app allows users to search by human-readable usernames in the UI, the underlying protocol strictly routes and hashes the numeric ID to prevent issues when users change their display names.

Privacy Model: Public

Discord is treated as a Public identity within the Zapf ecosystem. Because Discord profiles are generally public, users mapping their Nostr keys to Discord typically intend to be searchable.

In the user's Identity Connection event, the profile content will typically contain the raw identifier and public profile metadata, while the unique connection key is derived from the identifier.

Verification Flow (OAuth 2.0)

Zap Settlement Providers verify Discord ownership using standard OAuth 2.0.

  1. Scope: identify
  2. Endpoint: https://discord.com/api/users/@me
  3. Evidence: Yes, Discord produces portable access tokens.

Expected Profile Resolution

When a client resolves a Discord identity, the Zap Settlement Provider fetches basic metadata (like username, global_name, and avatar) from the Discord API. This data is returned to the user's Nostr client so it can render a rich "Verified" profile before the payment is sent.

Evidence Sharing Support

Because Discord uses OAuth, it generates portable Access Tokens. The ZSP securely packages this token into an evidence payload using secure encryption ↗.

If a user presents this encrypted payload to another ZSP, the second ZSP can independently verify the token against Discord's API, granting the user a second independent attestation without them needing to repeat the Discord login flow.