{"id":"db6e1fba6c028c10131e43bcdb505b1f0f34ca758c2e801aa92b4590a038e6b3","pubkey":"2b39b4ffe62933df970e19366c22c1e092f953f83fcfed754e0f04d5a3b459f9","created_at":1779091857,"kind":30817,"tags":[["d","nip-37"],["title","NIP-37: Draft Events"],["summary","Kind 31234, an encrypted draft of an unsigned event of any kind, stored on relays for its author alone."],["s","draft"],["t","nostr"],["t","nip"],["k","1234","Draft Checkpoint"],["k","10013","Private event relay list"],["k","31234","Draft Event"],["alt","A specification: NIP-37: Draft Events"],["client","openspecs-import"],["published_at","1668886127"],["proxy","https://github.com/nostr-protocol/nips/blob/656cecc7c0a815b6a2b218d3b5d6f078b3f4dbab/37.md","web"],["x","fa38eff5b2d7f1018fdb7d97f2b022d4221913960d41f7f9a80b7e5ffe68604c"]],"content":"NIP-37\n======\n\nDraft Wraps\n-----------\n\n`draft` `optional`\n\nThis NIP defines kind `31234` as an encrypted storage for unsigned draft events of any other kind. \n\nThe draft is JSON-stringified, [NIP44-encrypted](nostr:naddr1qvzqqqrcvypzq2eeknl7v2fnm7tsuxfkds3vrcyjl9fls070a465urcy6k3mgk0eqqrxu6ts956rgat9m6z) to the signer's public key and placed inside the `.content`.\n\n`k` tags identify the kind of the draft. \n\n```js\n{\n  \"kind\": 31234,\n  \"tags\": [\n    [\"d\", \"<identifier>\"],\n    [\"k\", \"<kind of the draft event>\"], // required\n    [\"expiration\", \"now + 90 days\"] // recommended\n  ],\n  \"content\": nip44Encrypt(JSON.stringify(draft_event)),\n  // other fields\n}\n```\n\nA blanked `.content` field signals that the draft has been deleted. \n\n[NIP-40](nostr:naddr1qvzqqqrcvypzq2eeknl7v2fnm7tsuxfkds3vrcyjl9fls070a465urcy6k3mgk0eqqrxu6ts956rqrlphyl) `expiration` tags are recommended. \n\nClients SHOULD publish kind `31234` events to relays listed on kind `10013` below.\n\n## Checkpoints\n`kind:1234` defines checkpoints that belong to a parent `kind:31234` event. These can serve to provide a revision history of a parent event.\n\n```js\n{\n  \"kind\": 1234,\n  \"tags\": [\n    [\"a\", \"31234:<pubkey>:<identifier>\"]\n  ],\n  \"content\": nip44Encrypt(JSON.stringify(draft_event)),\n}\n```\n\n## Relay List for Private Content\n\nKind `10013` indicates the user's preferred relays to store private events like Draft Wraps. \n\nThe event MUST include a list of `relay` URLs in private tags. Private tags are JSON Stringified, [NIP44-encrypted](nostr:naddr1qvzqqqrcvypzq2eeknl7v2fnm7tsuxfkds3vrcyjl9fls070a465urcy6k3mgk0eqqrxu6ts956rgat9m6z) to the signer's keys and placed inside the .content of the event.\n\n```js\n{\n  \"kind\": 10013,\n  \"tags\": [],\n  \"content\": nip44Encrypt(\n    JSON.stringify(\n      [\n        [\"relay\", \"wss://myrelay.mydomain.com\"]\n      ]\n    )\n  )\n  //...other fields\n}\n```\n\nIt's recommended that Private Storage relays SHOULD be [NIP-42](nostr:naddr1qvzqqqrcvypzq2eeknl7v2fnm7tsuxfkds3vrcyjl9fls070a465urcy6k3mgk0eqqrxu6ts956ryv4r3t9)-authed and only allow downloads of events signed by the authed user.\n\nClients MUST publish kind `10013` events to the author's [NIP-65](nostr:naddr1qvzqqqrcvypzq2eeknl7v2fnm7tsuxfkds3vrcyjl9fls070a465urcy6k3mgk0eqqrxu6ts95mr2vvd0sh) `write` relays. \n","sig":"1c58a4b0897822c0ebe156fb656cf2a3e3e447939d348080be9e47e2e8fd02b61feb4583865d9a79f08c3ac618ddb90230986ddd5138a62220966121ba693035"}