{"id":"6464e86b68ed3fc1e41cc214b82c3d41267c2835c6beb65cae7d749869701d6d","pubkey":"2b39b4ffe62933df970e19366c22c1e092f953f83fcfed754e0f04d5a3b459f9","created_at":1781353189,"kind":30817,"tags":[["d","nip-39"],["title","NIP-39: Linking Profiles to Other Platforms"],["summary","The i tags that claim an identity on another platform, each pointing at a proof anyone can check."],["s","draft"],["t","nostr"],["t","nip"],["k","10011","External Identities"],["alt","A specification: NIP-39: Linking Profiles to Other Platforms"],["client","openspecs-import"],["published_at","1678366412"],["proxy","https://github.com/nostr-protocol/nips/blob/656cecc7c0a815b6a2b218d3b5d6f078b3f4dbab/39.md","web"],["x","9dabf0b3a244ec45265b543728d2036d7d8b097509dcf6605dec0b34118409f2"]],"content":"NIP-39\n======\n\nLinking Profiles to Other Platforms\n-----------------------------------\n\n`draft` `optional`\n\n## Abstract\n\nUsers can declare their control over one or more online identities such as usernames, profile pages, keypairs in kind `10011` using `i` tags.\n\n```yaml\n{\n  \"kind\": 10011,\n  \"tags\": [\n    [\"i\", \"github:semisol\", \"9721ce4ee4fceb91c9711ca2a6c9a5ab\"],\n    [\"i\", \"twitter:semisol_public\", \"1619358434134196225\"],\n    [\"i\", \"mastodon:bitcoinhackers.org/@semisol\", \"109775066355589974\"]\n    [\"i\", \"telegram:1087295469\", \"nostrdirectory/770\"]\n  ],\n  // other fields...\n}\n```\n\nAn `i` tag MUST have two parameters, which are defined as the following:\n1. `platform:identity`: This is the platform name (for example `github`) and the identity on that platform (for example `semisol`) joined together with `:`.\n2. `proof`: String or object that points to the proof of owning this identity.\n\nClients SHOULD process any `i` tags with more than 2 values for future extensibility.\nIdentity provider names SHOULD only include `a-z`, `0-9` and the characters `._-/` and MUST NOT include `:`.\nIdentity names SHOULD be normalized if possible by replacing uppercase letters with lowercase letters, and if there are multiple aliases for an entity the primary one should be used.\n\n## Claim types\n\n### `github`\n\nIdentity: A GitHub username.\n\nProof: A GitHub Gist ID. This Gist should be created by `<identity>` with a single file that has the text `Verifying that I control the following Nostr public key: <npub encoded public key>`.\nThis can be located at `https://gist.github.com/<identity>/<proof>`.\n\n### `twitter`\n\nIdentity: A Twitter username.\n\nProof: A Tweet ID. The tweet should be posted by `<identity>` and have the text `Verifying my account on nostr My Public Key: \"<npub encoded public key>\"`.\nThis can be located at `https://twitter.com/<identity>/status/<proof>`.\n\n### `mastodon`\n\nIdentity: A Mastodon instance and username in the format `<instance>/@<username>`.\n\nProof: A Mastodon post ID. This post should be published by `<username>@<instance>` and have the text `Verifying that I control the following Nostr public key: \"<npub encoded public key>\"`.\nThis can be located at `https://<identity>/<proof>`.\n\n### `telegram`\n\nIdentity: A Telegram user ID.\n\nProof: A string in the format `<ref>/<id>` which points to a message published in the public channel or group with name `<ref>` and message ID `<id>`. This message should be sent by user ID `<identity>` and have the text `Verifying that I control the following Nostr public key: \"<npub encoded public key>\"`.\nThis can be located at `https://t.me/<proof>`.\n","sig":"0be899dd20568eb0e21b709f5aaaac3818bce55cd0abd20bfd2b7071007d7707ef7e268ffbd0d90d9c27e4bd0af89ef8dcf16852143b58c06b07f605562373b6"}