Nosister is an Issuer-Specified Expiry (I.S.E.) Nostr Relay for NIP-99 Classified Listings: sellers publish addressable kind 30402 listings, update them by pubkey + d, delete them with NIP-09 kind 5 requests, and expire them with NIP-40 expiration tags.
Nosister uses the addressable listing identity 30402:<pubkey>:<d>. The d tag is the listing ID within the seller’s namespace.
d tag.d tag. Nosister serves the newest active version for that addressable listing.["a", "30402:<pubkey>:<d>"].expiration tag so the relay stops serving the listing after the issuer-specified timestamp.EVENT, REQ, and CLOSE commands over WebSocket.30402, 5, 1, 20, 6, 7, 3, 10002, 14, 9734, 9735, 30023, 30000.So: relay storage is broader than what the homepage feed displays.
Non-standard note: Issuer-Specified Expiry is a Nosister relay policy built on top of the standard NIP-40 expiration tag handling.
"expiration".events.expires_at; if not, expires_at is NULL.deleted_at IS NULL and (expires_at IS NULL OR expires_at > NOW()).expires_at stays NULL (archival by default).expires_at becomes NULL.{
"kind": 30402,
"content": "{\"title\":\"Vintage boots\"}",
"tags": [["d", "boots-001"], ["expiration", "1735862400"]]
}
{
"kind": 5,
"content": "",
"tags": [["a", "30402:<pubkey>:boots-001"], ["k", "30402"]]
}
["expiration", "..."], current relay behavior is indefinite retention unless later deleted by issuer (kind 5) or removed by operator action.
NOTICE and socket close.NOTICE + OK false.deleted_at in storage.expires_at semantics.OK: sent for each EVENT publish attempt (accepted or rejected).NOTICE: sent for malformed commands, policy violations, or rate-limit rejections.EOSE: sent after stored historical events are replayed to a new subscription.GET /policy → retention policy object (mode, summary, fields).GET /relay-info (and / with Accept: application/nostr+json) → relay metadata, supported NIPs, retention summary.GET /health → status + DB up/down + retention mode.wss://relay.nosister.com to your relay set.["expiration", "<unix>"] in tags).["OK","<eventid>",true,""] on acceptance.wscat -c wss://relay.nosister.com
["EVENT",{
"id":"<event-id>",
"pubkey":"<hex-pubkey>",
"created_at":1735776000,
"kind":1,
"tags":[["expiration","1735862400"]],
"content":"hello Nosister",
"sig":"<signature>"
}]
["OK","<event-id>",true,""]
Any client that can publish to normal relays can use Nosister. Issuer-Specified Expiry is opt-in: add an expiration tag when you want timed expiry.
Nosister’s live feed focuses on NIP-99 classified listing activity. A new listing is a kind 30402 event with a d tag. An update is a newer kind 30402 event from the same seller using the same d. A delete is a kind 5 deletion request targeting the listing address. Expiry is controlled by a NIP-40 expiration tag.
wss://relay.nosister.com and subscribes to listing lifecycle kinds plus selected secondary kinds for operator context.30402 is the NIP-99 classified-listing kind. The feed identifies each listing as 30402:<seller pubkey>:<d>.d value; the feed treats the newest created_at version as the active lifecycle update.5 events. The feed shows them as listing deletes only when an a tag targets 30402:<pubkey>:<d>, or an e tag points to a listing event already seen in the live session.expiration tags mark issuer-specified expiry. Listings inside the soon window appear as expiring soon; past-expiration listings are visually marked expired and are not counted as active listings.Hide content suppresses listing titles, descriptions, and images while retaining event type, seller pubkey, listing address, timestamps, and relay metadata.