Skip to content

Commit a9b5fc6

Browse files
committed
update
1 parent a55bcae commit a9b5fc6

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

docs/nip-drafts/nip-ADS.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ A replaceable event (`kind:30100`) where an advertiser bids for ad placement.
4343
"link": "<link to open when the ad is interacted with>",
4444
"call_to_action": "<text for the call to action>",
4545
"bid": <amount in msats to pay per action>,
46-
"hold_time": <time in seconds>
46+
"hold_time": <time in seconds>,
47+
"max_payouts": <maximum number of paid actions>,
48+
"payout_reset_interval": <interval in seconds to reset the payout count>,
4749
}),
4850
"tags": [
4951
["k", "<action type>"],
@@ -76,6 +78,9 @@ A replaceable event (`kind:30100`) where an advertiser bids for ad placement.
7678
* **call\_to\_action** (`optional`): Button/text prompt (e.g., “Buy now”). The offerer may choose to display this prompt as part of the ad, or omit it entirely. If not set, the offerer may apply a default call-to-action of their own choosing.
7779
* **bid** (`required`): The amount in msats the advertiser is willing to pay for a successful action (number).
7880
* **hold\_time** (`required`): Seconds the advertiser will reserve funds after the offer has been accepted, while waiting for the action to be completed (number).
81+
* **max\_payouts** (`required`): The maximum number of times an offerer can be paid for a successful action per ad. Payouts pause once this limit is reached and resume after the payout_reset_interval.
82+
* **payout_reset_interval** (`required`): Time in seconds after which the payouts counter resets, allowing payouts to resume.
83+
7984

8085
### Tags
8186

@@ -84,10 +89,9 @@ A replaceable event (`kind:30100`) where an advertiser bids for ad placement.
8489

8590
Specifies the user action that triggers payment. Available types:
8691

87-
* `link`: Paid when a user clicks the ad and successfully opens the target URL.
92+
* `action`: Paid when a user clicks or performs a similar interaction with the ad to open the target URL.
8893
* `view`: Paid when the ad is rendered and visible to the user.
89-
* `conversion`: Paid when a user completes a defined goal (e.g., newsletter signup, purchase) after interacting with the ad.
90-
* `attention`: Paid when the user demonstrates focused engagement (e.g., hovering, dwell time) with the ad content.
94+
* `attention`: Paid when the user shows focused engagement with the ad (e.g., hover, dwell time, or when the ad enters the viewport).
9195

9296
#### Mime Type
9397
(`m`) `required`
@@ -233,7 +237,7 @@ A typical decrypted payload might look like:
233237

234238
```yaml
235239
{
236-
"budget": 10000, // Maximum budget in millisatoshis for this campaign
240+
"dailyBudget": 10000, // hint the delegate to limit the total amount of msats spent per day
237241
"nwc": "nostr+walletconnect://..." // Budgeted NWC URL used to authorize payouts
238242
}
239243
```
@@ -242,6 +246,9 @@ If a `D` tag is included, **all negotiation events must be sent to the delegate'
242246

243247
Delegates might automatically listen for biddings that have a matching `D` tag.
244248

249+
> [!IMPORTANT]
250+
> The dailyBudget should be considered a recommendation to help the delegate pace spending; it’s not a hard cap. To prevent overspend, a strict budget limit should be configured at the NWC wallet level.
251+
245252

246253
#### Expiration
247254
(`expiration`) `optional`
@@ -375,20 +382,13 @@ The tags must include:
375382

376383
The following default messages are recommended for use when bailing out of an offer:
377384

378-
advertiser → offerer:
379-
380385
* `out_of_budget`: No remaining budget for ads.
381-
* `payment_method_not_supported`: Unsupported invoice or payment method.
382-
* `invoice_expired_or_invalid`: Invoice does not match the bid or has expired.
383-
* `expired`: The bid or ad has expired and can no longer be accepted.
384-
* `no_route`: The advertiser cannot find a payment route to the offerer's node.
386+
* `expired`: The bid or hold time has expired and the negotiation is no longer valid or not accepted.
387+
* `failed_payment`: The advertiser can't pay the invoice
385388
* `action_incomplete`: The advertiser did not detect successful completion of the user action on their end.
386-
387-
offerer → advertiser:
388-
389-
* `cancelled`: The offerer has cancelled the offer
390-
* `adspace_unavailable`: The ad space is no longer available for the requested ad.
391-
* `ad_not_displayed`: The ad was not displayed to the user.
389+
* `cancelled`: The offer was cancelled.
390+
* `unknown` : unknown reason for bailing out.
391+
392392

393393
Implementers can define additional custom reason strings as needed.
394394

0 commit comments

Comments
 (0)