Skip to main content

X (Twitter)

The X (formerly Twitter) Legacy Identity Provider (LIDP) integrates one of the web's largest public social graphs into the open Nostr and Lightning ecosystem.

Identifier Format

The canonical identifier for X is the user's handle (username), stripped of the @ symbol and lowercased.

  • Raw Format: handle (e.g., jack)
  • Resolved URI: x:jack

Privacy Model: Public

Like Discord, X is treated as a Public identity.

In the user's Identity Connection event, the content field always contains cleartext JSON — including username (the X handle), user_id, and available profile metadata. The connection key in the d tag is a SHA-256 hash of the handle, enabling global search and discovery across Zapf clients without exposing the hash pre-image directly.

Verification Flow (Challenge-Token)

Identity Authorities verify X ownership using a public challenge-token post.

  1. Challenge: The IA issues a short zapf:-prefixed token.
  2. Post: User posts the token in their bio, a tweet, or any publicly accessible profile field.
  3. Submission: User submits the public URL of the post to the IA.
  4. Verification: The IA fetches the URL and confirms the token is present and the post belongs to the claimed X handle.

Expected Profile Resolution

When a client resolves an X identity, the Identity Authority fetches standard metadata (such as the username, display name, and profile picture). This enriches the native Nostr client UI, allowing users to verify they are zapping the correct X personality.

Evidence Sharing Support

Because verification is backed by a publicly accessible URL, any IA can independently re-verify by fetching that URL and confirming the challenge token is present — without the user needing to re-authenticate. See Evidence Sharing.