12<html lang="en">3<head>4<meta charset="utf-8">5<meta name="viewport" content="width=device-width, initial-scale=1">6<title>NIP-62 - Request to Vanish — Nostr Instruction Manual</title>7<meta name="description" content="NIP-62: the kind-62 request to vanish. How a user asks one relay, or all relays, to fully and permanently delete every event signed by a pubkey.">8<link rel="preload" href="../assets/fonts/michroma-400-latin.woff2" as="font" type="font/woff2" crossorigin>9<link rel="preload" href="../assets/fonts/exo2-var-latin.woff2" as="font" type="font/woff2" crossorigin>10<link rel="preload" href="../assets/fonts/sairacondensed-600-latin.woff2" as="font" type="font/woff2" crossorigin>11<link rel="preload" href="../assets/fonts/sairacondensed-700-latin.woff2" as="font" type="font/woff2" crossorigin>12<link rel="preload" href="../assets/fonts/sairacondensed-500-latin.woff2" as="font" type="font/woff2" crossorigin>13<link rel="preload" href="../assets/fonts/sharetechmono-400-latin.woff2" as="font" type="font/woff2" crossorigin>14<link rel="preload" href="../assets/fonts/exo2-400i-latin.woff2" as="font" type="font/woff2" crossorigin>15<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">16<link rel="stylesheet" href="../assets/manual.css">17</head>18<body>1920<svg width="0" height="0" style="position:absolute">21 <defs>22 <marker id="arr" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">23 <path d="M1,1 L8,4.5 L1,8 Z" fill="#f26a00"/>24 </marker>25 <marker id="arrb" markerWidth="9" markerHeight="9" refX="7" refY="4.5" orient="auto">26 <path d="M1,1 L8,4.5 L1,8 Z" fill="#2e5f9e"/>27 </marker>28 </defs>29</svg>3031<div class="page">32 <span class="staple s1"></span><span class="staple s2"></span>3334 <header class="band">35 <a class="logo" href="../index.html">NOSTR<b>▸</b>PROTOCOL MANUAL</a>36 <span class="booklet-note">Chapter 62 - Privacy</span>37 </header>38 <nav class="tabs">39 <a href="../index.html">Contents</a>40 <a href="#overview" class="on">Overview</a>41 <a href="#spec">Spec</a>42 <a href="#examples">Examples</a>43 <a href="#history">History</a>44 </nav>4546 <div class="chapter">47 <div class="nipno" data-n="62">62</div>48 <div class="titles">49 <div class="kicker">Nostr Implementation Possibility - Hex № 62</div>50 <h1>Request to Vanish</h1>51 <p class="sub">One signed event that asks a relay — or every relay — to erase a key's entire history from its database, for good.</p>52 </div>53 </div>5455 <main class="spread">56 <div class="main">5758 <h2 class="bar" id="overview"><span class="num">1</span> Overview</h2>59 <p>Sometimes a user wants to leave the network completely. A <a href="09.html">NIP-09</a> deletion request removes single events. This NIP defines a bigger tool: a <strong>request to vanish</strong>. It asks a relay to reset a key's whole fingerprint on the web.</p>60 <p>The request is one event of kind <code>62</code>. It names the relays that must act. A named relay deletes every event signed by the requesting pubkey, up to the request's <code>created_at</code>. This includes past <a href="09.html">NIP-09</a> deletion events.</p>61 <p>The request can be legally binding in some jurisdictions. A relay that supports this NIP must therefore truly delete the events from its database. Hiding them is not enough.</p>6263 <div class="box warn">64 <span class="tag">Warning!</span>65 <p>A request to vanish is a one-way door. Publishing a kind <code>5</code> deletion request against a request to vanish has no effect. Clients and relays are not obliged to support any "unrequest vanish" feature.</p>66 </div>6768 <figure class="diagram">69 <div class="frame">70 <svg viewBox="0 0 560 190" role="img" aria-label="Client sends a kind 62 request to a tagged relay; the relay purges the pubkey's events; an untagged relay ignores it">71 <rect class="d-actor" x="10" y="70" width="110" height="50" rx="8"/>72 <text class="d-actor-label" x="65" y="93" text-anchor="middle">Client</text>73 <text class="d-note" x="65" y="110" text-anchor="middle">kind 62</text>74 <rect class="d-actor" x="225" y="20" width="130" height="44" rx="8"/>75 <text class="d-actor-label" x="290" y="47" text-anchor="middle">Tagged relay</text>76 <rect class="d-actor" x="225" y="126" width="130" height="44" rx="8"/>77 <text class="d-actor-label" x="290" y="153" text-anchor="middle">Other relay</text>78 <rect class="d-actor" x="440" y="20" width="110" height="44" rx="8"/>79 <text class="d-actor-label" x="495" y="41" text-anchor="middle">Database</text>80 <text class="d-note" x="495" y="57" text-anchor="middle">purged</text>81 <path class="d-msg d-flow" d="M122,84 C170,70 180,52 223,44"/>82 <path class="d-msg blue" d="M357,42 L437,42"/>83 <text class="d-label" x="160" y="48" text-anchor="middle">EVENT</text>84 <text class="d-label" x="397" y="34" text-anchor="middle">DELETE</text>85 <text class="d-note" x="290" y="185" text-anchor="middle">Not tagged: no action, event not sent here.</text>86 <circle r="4" fill="#f26a00">87 <animateMotion dur="2.6s" repeatCount="indefinite" path="M122,84 C170,70 180,52 223,44"/>88 </circle>89 </svg>90 </div>91 <figcaption>Fig. 62-1 — <b>Targeted vanish.</b> The client sends the request to the tagged relay only. That relay purges the pubkey's history.</figcaption>92 </figure>9394 <h2 class="bar" id="spec"><span class="num">2</span> The Vanish Request Event</h2>95 <p>Kind <code>62</code> requests a specific relay to delete everything from the event's <code>pubkey</code> until the event's <code>created_at</code>. The event has the normal <a href="01.html">NIP-01</a> shape:</p>9697 <div class="crt">98 <div class="titlebar">Wire format - kind 62 request to vanish</div>99<pre>{100 <span class="k">"kind"</span>: 62,101 <span class="k">"pubkey"</span>: <span class="c"><32-byte hex-encoded public key of the event creator></span>,102 <span class="k">"tags"</span>: [103 [<span class="s">"relay"</span>, <span class="s">"<relay url>"</span>]104 ],105 <span class="k">"content"</span>: <span class="s">"<reason or note>"</span>,106 <span class="c">// ...other fields</span>107}</pre>108 </div>109110 <div class="tscroll"><table class="ref">111 <caption>Field and tag reference</caption>112 <tr><th>Item</th><th>Rule</th></tr>113 <tr><td class="btn">kind</td><td><code>62</code>. Identifies the event as a request to vanish.</td></tr>114 <tr><td class="btn">pubkey</td><td>The key that vanishes. Only this key's own signature can request its erasure.</td></tr>115 <tr><td class="btn">created_at</td><td>Upper bound of the purge. The relay deletes the pubkey's events up to this timestamp.</td></tr>116 <tr><td class="btn">relay</td><td>Tag. The tag list MUST include at least one <code>relay</code> value. The value is a relay URL, or <code>ALL_RELAYS</code> (see §4).</td></tr>117 <tr><td class="btn">content</td><td>MAY include a reason or a legal notice to the relay operator.</td></tr>118 </table></div>119120 <p>Clients SHOULD send this event to the target relays only. Do not broadcast a targeted request to relays that it does not name.</p>121122 <h2 class="bar" id="relay-rules"><span class="num">3</span> Relay Obligations</h2>123 <p>A relay acts only when its own service URL is tagged in the event. When it is tagged, these rules apply:</p>124 <ul>125 <li>The relay <strong>MUST</strong> fully delete any events from the <code>pubkey</code>. This includes the pubkey's <a href="09.html">NIP-09</a> deletion events.</li>126 <li>The relay <strong>SHOULD</strong> delete all <a href="59.html">NIP-59</a> gift wraps that p-tagged the <code>pubkey</code>. This deletes all DMs sent to the pubkey.</li>127 <li>The relay <strong>MUST</strong> ensure the deleted events cannot be re-broadcasted into the relay.</li>128 <li>The relay <strong>MAY</strong> store the signed request to vanish for bookkeeping.</li>129 <li>Paid relays, and relays that restrict who can post, <strong>MUST</strong> also follow the request. The user's status does not matter.</li>130 </ul>131132 <div class="box hint">133 <span class="tag">Hint!</span>134 <p>Why delete old kind <code>5</code> deletion events too? A deletion event names the event IDs it deleted. Those IDs are part of the key's fingerprint. A full reset must remove them as well.</p>135 </div>136137 <div class="box tech">138 <span class="tag">Tech Note</span>139 <p>The purge is bounded by the request's <code>created_at</code>, but the re-broadcast ban has no stated time bound or expiry. The spec also gives no rule for matching the tagged relay URL against the relay's own URL (trailing slash, scheme, case). Implementations must decide both points themselves.</p>140 </div>141142 <figure class="diagram">143 <div class="frame">144 <svg viewBox="0 0 560 300" role="img" aria-label="Sequence diagram: client sends a kind 62 event, relay accepts it, purges the pubkey's events and gift wraps, then rejects a later re-broadcast attempt">145 <line class="d-wire" x1="110" y1="40" x2="110" y2="285" stroke-dasharray="3 4"/>146 <line class="d-wire" x1="450" y1="40" x2="450" y2="285" stroke-dasharray="3 4"/>147 <rect class="d-actor" x="55" y="8" width="110" height="30" rx="6"/>148 <text class="d-actor-label" x="110" y="28" text-anchor="middle">Client</text>149 <rect class="d-actor" x="395" y="8" width="110" height="30" rx="6"/>150 <text class="d-actor-label" x="450" y="28" text-anchor="middle">Relay</text>151 <path class="d-msg" d="M110,62 L445,62"/>152 <text class="d-label" x="280" y="55" text-anchor="middle">["EVENT", {kind:62, tags:[["relay","wss://…"]]}]</text>153 <path class="d-msg blue" d="M450,95 L115,95"/>154 <text class="d-label" x="280" y="88" text-anchor="middle">["OK", <id>, true, ""]</text>155 <text class="d-note" x="280" y="130" text-anchor="middle">Relay deletes the pubkey's events and its kind-5 history.</text>156 <text class="d-note" x="280" y="148" text-anchor="middle">It should also drop gift wraps p-tagging the pubkey.</text>157 <path class="d-msg" d="M110,185 L445,185"/>158 <text class="d-label" x="280" y="178" text-anchor="middle">["EVENT", <old deleted event>] (re-broadcast attempt)</text>159 <path class="d-msg blue" d="M450,218 L115,218"/>160 <text class="d-label" x="280" y="211" text-anchor="middle">["OK", <id>, false, "blocked: pubkey vanished"]</text>161 <text class="d-note" x="280" y="255" text-anchor="middle">Deleted events must never re-enter the relay.</text>162 </svg>163 </div>164 <figcaption>Fig. 62-2 — <b>Purge and re-broadcast ban.</b> The relay erases the history, then keeps the door shut.</figcaption>165 </figure>166167 <h2 class="bar" id="global"><span class="num">4</span> Global Request to Vanish</h2>168 <p>A user can ask ALL relays to delete everything. The event MUST then include a <code>relay</code> tag with the value <code>ALL_RELAYS</code>, in uppercase:</p>169170 <div class="crt">171 <div class="titlebar">Wire format - global request to vanish</div>172<pre>{173 <span class="k">"kind"</span>: 62,174 <span class="k">"pubkey"</span>: <span class="c"><32-byte hex-encoded public key of the event creator></span>,175 <span class="k">"tags"</span>: [176 [<span class="s">"relay"</span>, <span class="s">"ALL_RELAYS"</span>]177 ],178 <span class="k">"content"</span>: <span class="s">"<reason>"</span>,179 <span class="c">// ...other fields</span>180}</pre>181 </div>182 <p>Delivery flips for the global form. Clients SHOULD broadcast this event to as many relays as possible. Every supporting relay that receives it applies the rules of §3 to itself.</p>183184 <h2 class="bar" id="examples"><span class="num">5</span> Worked Example</h2>185 <p>Alice retires her key. She sends a targeted request to her main relay, then a global request everywhere. Orange lines go to the relay. Blue lines come from the relay.</p>186 <div class="crt">187 <div class="titlebar">Session transcript - wss://relay.example.com</div>188<pre><span class="c">-- targeted vanish, sent to the tagged relay only --</span>189<span class="send">→ ["EVENT", {"id":"7fe2ab91cd…","pubkey":"a1ce55aa…","created_at":1750000000,190 "kind":62,"tags":[["relay","wss://relay.example.com"]],191 "content":"Please erase my history. Formal notice under local privacy law.",192 "sig":"c04d1189…"}]</span>193<span class="recv">← ["OK", "7fe2ab91cd…", true, ""]</span>194<span class="c">-- relay purges every event by a1ce55aa…, plus gift wraps p-tagging her --</span>195196<span class="c">-- Bob tries to re-broadcast one of Alice's old notes --</span>197<span class="send">→ ["EVENT", {"id":"3b9dd410ef…","pubkey":"a1ce55aa…","kind":1, …}]</span>198<span class="recv">← ["OK", "3b9dd410ef…", false, "blocked: this pubkey has vanished"]</span>199200<span class="c">-- global vanish, broadcast to as many relays as possible --</span>201<span class="send">→ ["EVENT", {"id":"911c07be22…","pubkey":"a1ce55aa…","created_at":1750000060,202 "kind":62,"tags":[["relay","ALL_RELAYS"]],203 "content":"Goodbye, nostr.","sig":"88af02c1…"}]</span>204<span class="recv">← ["OK", "911c07be22…", true, ""]</span></pre>205 </div>206207 <h2 class="bar" id="history"><span class="num">6</span> Version History</h2>208 <p>NIP-62 is a young and stable spec. It arrived in 2025 and has changed little since. Notable changes, newest first:</p>209 <ul class="patchnotes">210 <li class="minor"><span class="ver">2026</span><span class="when">2026-06</span>Formatting pass by fiatjaf: code fences relabeled from <code>jsonc</code> to <code>yaml</code>.</li>211 <li><span class="ver">2025</span><span class="when">2025-12</span>The <code>relay</code> tag became the explicit target selector, with <code>ALL_RELAYS</code> for the global form.</li>212 <li><span class="ver">Origin</span><span class="when">2025-02</span>Vitor Pamplona proposed the spec as "Right to Vanish" and it merged as NIP-62.</li>213 </ul>214215 <div class="credits">216 <h3 class="cardhead">Original Proposal - Credits</h3>217 <table>218 <tr><td>Author</td><td>Vitor Pamplona</td></tr>219 <tr><td>First commit</td><td>2025-02-18 — “Right to Vanish” (<a href="https://github.com/nostr-protocol/nips/pull/1256">PR #1256</a>)</td></tr>220 <tr><td>Status</td><td>draft - optional — a relay feature; supporters must truly delete</td></tr>221 <tr><td>Source</td><td><a href="https://github.com/nostr-protocol/nips/blob/master/62.md">62.md on GitHub</a> - <a href="https://github.com/nostr-protocol/nips/commits/master/62.md">full change history</a></td></tr>222 </table>223 </div>224225 <h2 class="bar"><span class="num">7</span> See Also</h2>226 <ul>227 <li><a href="01.html">NIP-01</a> — the base event format and the <code>EVENT</code>/<code>OK</code> flow used here.</li>228 <li><a href="09.html">NIP-09</a> — kind <code>5</code> deletion requests for single events; vanish erases these too.</li>229 <li><a href="59.html">NIP-59</a> — gift wraps; relays should drop wraps p-tagging a vanished pubkey.</li>230 <li><a href="11.html">NIP-11</a> — the relay information document, where a relay can advertise supported NIPs.</li>231 </ul>232 </div>233234 <aside>235 <div class="cartridge">236 <div class="inner">237 <h3 class="cardhead">Spec Card</h3>238 <div class="lights"><span class="led on"></span><span class="led on"></span><span class="led on"></span></div>239 <dl>240 <dt>Status</dt><dd><span class="chip draft">draft</span> optional - relay</dd>241 <dt>Defines</dt><dd>kind 62 - relay tag - ALL_RELAYS value</dd>242 <dt>Kind(s)</dt><dd>62 (regular)</dd>243 <dt>Requires</dt><dd><a href="01.html">NIP-01</a></dd>244 <dt>Interacts</dt><dd><a href="09.html">NIP-09</a> - <a href="59.html">NIP-59</a></dd>245 <dt>Transport</dt><dd>WebSocket - JSON arrays</dd>246 <dt>First commit</dt><dd>2025-02-18</dd>247 <dt>Last updated</dt><dd>2026-06-13</dd>248 </dl>249 </div>250 </div>251 </aside>252 </main>253254 <nav class="navbtns">255 <a href="61.html">◀ NIP-61: Nutzaps</a>256 <a href="64.html">NIP-64: Chess (Portable Game Notation) ▶</a>257 </nav>258259 <footer class="pagefoot">260 <a href="../index.html">Nostr Protocol Manual</a>261 <span class="pageno">NIP 62 / F4</span>262 </footer>263</div>264265<script src="../assets/webmcp.js" defer></script>266</body>267</html>