A half-baked proposal. # NIP-XX: Zap Intent Events `draft` `optional` This NIP defines a way for clients to signal that a user attempted to zap another user but was unable to complete the payment due to missing or invalid lightning payment infrastructure. ## Motivation Users without properly configured lightning addresses or zap-enabled wallets have no visibility into the social and economic value they're missing. By allowing senders to optionally broadcast their intent to zap, recipients can see demand for their content and be motivated to enable zaps. ## Event Kind This NIP defines kind `9736` (zap intent). ## Event Format ```json { "kind": 9736, "content": "", "tags": [ ["p", "<recipient-pubkey>"], ["e", "<event-id>", "<relay-url>"], ["amount", "<millisats>"] ] } ``` ### Tags - `p` (required): The pubkey of the intended zap recipient - `e` (optional): The event that would have been zapped - `amount` (optional): The intended zap amount in millisats - `reason` (optional): Why the zap failed. Values: `no_address`, `invalid_lnurl`, `timeout`, `other` ### Content The `content` field SHOULD be empty or MAY contain an optional message the sender wants to include (similar to zap comments). ## Client Behavior ### Sending Clients When a zap attempt fails, clients MAY prompt the user: > "This user doesn't have zaps enabled. Would you like to let them know you wanted to tip them?" If the user consents, the client publishes a kind `9736` event. Clients SHOULD NOT publish zap intents automatically without user consent. ### Receiving Clients Clients SHOULD aggregate zap intents and display them to users, for example: > "5 people tried to zap you this week but couldn't. Set up your lightning address to receive tips." Clients MAY display zap intents alongside actual zaps in notification feeds. Clients SHOULD deduplicate zap intents from the same sender for the same event within a reasonable time window. ## Privacy Considerations - Zap intents reveal that a user wanted to send money to another user, which may be sensitive - The `amount` tag is optional to allow signaling intent without revealing amounts - Senders must explicitly opt-in to publishing zap intents ## Example Alice tries to zap Bob's note but Bob has no lightning address. Alice's client prompts her and she agrees to notify Bob: ```json { "kind": 9736, "pubkey": "<alice-pubkey>", "created_at": 1234567890, "content": "Loved this post!", "tags": [ ["p", "<bob-pubkey>"], ["e", "<note-id>", "wss://relay.example.com"], ["amount", "1000000"] ], "id": "...", "sig": "..." } ``` Bob's client shows: "Alice and 3 others wanted to zap you but couldn't. Enable zaps in settings."

Replies (25)

Jane's Bonds's avatar
Jane's Bonds 2 weeks ago
A better system sends the zaps to an escrow for when the user joins. Let them see what's on the table. Otherwise, I could spam you with the intent to send value until you join. This would also encourage personal relays, since the escrow is tied to authentication, and authentication is settled at the relay. Time locked contracts can ensure value doesn't stagnate on uncooperative users. If the claim is not met by a set time, funds are reimbursed to the sender.
You want feedback? Come up with a NIP purposal which makes administrative action transparent so you the user can know when an admin deletes your note from x relay. You should be asking why is everything on nostr transparent except administrative action?
Like a promise to pay? Certainly better. The sender would query their own promises and try to settle at an interval. Final settlement should commit to the promis as a "promis kept".
yeah since the user intended to and failed, the UI could show β€œpending” and it only resolves once it goes through. Damus ios already kinda does this but gives up pretty quickly
Nostr is not consistent and that's a conscious trade-off. No nip is needed to monitor if events disappear on certain relays and nothing of that relates to the proposed nip. Stop trolling.
Correction: I disagree. The sender should be the custodian with a recorded debt. We then can call out those who don't settle their debt once the recipient starts receiving zaps.
It's not suppose to relate to his purposed nip Leo. That idea is trolling we don't need something to reveal we're trying to zap you. Set your shit up right or go wtf till you figure it out. What is needed is transparency of administrative actions. Do you really believe relay owners cannot perform actions to notes on their own relay? Of fucking course they can when your post on X, facebook, or insta is removed you know who is responsible. On Nostr when it happens it's just oh shit I just woke up today & realized my post is gone. Who the fuck did that, why, what relay did that? The point is everything on Nostr is transparent why isn't that? Because they don't want you to know that & what else they are doing. Nostr isn't headless & like all social media is consistent with administrative action. So how about you stop being the troll Leo by calling me a troll because you either don't comprehend or don't care for my suggestion at all. It's a valid point or is your head so far into the ground like an ostrige that you are blind to notes randomly disappearing?
But we are talking about giving the recipient an incentive to fix their setup. "You would have received 20k sat if you had a working zap setup" is not the same as "setup your zaps wallet to claim 20k sat". The latter could be done with custodians which is dirty or with promises to pay which I love as a building block for other scenarios, too.
If you see it as a delivery mechanism of an error message that right now doesn't reach the one who can fix it, sure, but we can make this something more ambitious for zap adoption.
You could have attempted to zap as the base event, then have a flag for β€œwill retry” or something and you could total off that.
↑