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."