Products (NIP-99)
Products are NIP-99 classified listings (kind 30402). They appear in the Shosho marketplace.
A user’s shop page is at https://shosho.live/profile/<npub>?tab=shop. A seller may run multiple shops on Shosho — each with its own selling mode (Classified or Shopping Cart) and currency — but products from all of a seller’s shops surface together at this URL. NIP-99 events themselves are per-product and don’t carry shop metadata; the shop assignment is internal to Shosho’s marketplace ingestion.
Publish a product listing (kind 30402)
nak event -k 30402 \
--content "Detailed product description in markdown. Supports **bold**, *italic*, and [links](https://example.com)." \
-t d=my-product-001 \
-t title="Handmade Nostr Sticker Pack" \
-t 'price=5;USD' \
-t summary="Pack of 10 Nostr-themed vinyl stickers" \
-t published_at=$(date +%s) \
-t location="Worldwide shipping" \
-t image=https://media.nostr.build/product-photo.jpg \
-t t=stickers \
-t t=nostr \
-t t=merch \
-t status=active \
--sec <nsec1...> \
wss://relay.damus.io wss://relay.primal.netTag structure
Per NIP-99, only the d tag is strictly required by Nostr (since 30402 is an addressable event); the rest are SHOULD-include for a useful listing. The “Shosho needs” column below reflects what Shosho needs to display and price the product.
| Tag | Value | NIP-99 | Shosho needs |
|---|---|---|---|
d | Unique product identifier | Required | Required |
title | Product name | Standard | Required |
price | [<amount>, <currency>, <frequency?>] | Standard | Required |
summary | Short tagline/description | Standard | Optional |
published_at | Unix timestamp of first publish (string) | Standard | Optional |
location | Shipping/location info | Standard | Optional |
image | Product image URL (per NIP-58 , may be repeated) | Standard | Optional |
t | Category/keyword hashtags (multiple) | Standard | Optional |
status | active or sold | Optional | Optional |
g | Geohash for precise location | Optional | Optional |
Price examples:
['price', '50', 'USD']— $50 one-time['price', '15', 'EUR', 'month']— 15 EUR/month['price', '21000', 'sats']— 21,000 sats (NIP-99 specifies ISO 4217 or ISO 4217-like codes —satsandbtcare accepted by convention)
The content field supports Markdown for the full product description (the structure is similar to NIP-23 long-form content ).
Drafts. NIP-99 also defines kind 30403 with the same structure, used to save draft or inactive listings. Shosho’s marketplace surfaces
30402only.
Query products
# All NIP-99 listings
nak req -k 30402 wss://relay.damus.io wss://nos.lol
# Products by a specific seller
nak req -k 30402 -a <seller_hex_pubkey> wss://relay.damus.ioProduct URLs on Shosho
Individual products are at https://shosho.live/product/<id>.
If the product is created by broadcasting a NIP-99 event to Nostr, the <id> is the slugified form of <npub>-<d-tag> — concatenated with a hyphen, lowercased, with any non-alphanumeric characters replaced by -, edge hyphens trimmed, and capped at 120 characters.
When the npub and d-tag are already lowercase alphanumerics (which they normally are — npubs are bech32-lowercase, and d-tags from 30402 events are typically hex), slugification is a no-op and the URL is exactly <npub>-<d-tag>. Example:
- User:
npub17t6urnt4595jzrqdq52tn6ex2e09erhw5c0max9m37cqgc6gqceql4epg8 - d-tag:
3da8776a33d51d0c3f9a614d18b123ae62fed26f2c6adb4bb56065cc - URL:
https://shosho.live/product/npub17t6urnt4595jzrqdq52tn6ex2e09erhw5c0max9m37cqgc6gqceql4epg8-3da8776a33d51d0c3f9a614d18b123ae62fed26f2c6adb4bb56065cc
If your d-tag contains uppercase or special characters, the resulting URL will differ from the raw concatenation.
Purchasing
Products on Shosho may be available as Classified products (buyers reach out to the seller directly via a View on Website button) or Shopping Cart products (buyers check out on Shosho using the shopping cart) — see Buying products on Shosho for the buyer-side detail and Selling products for the seller-side.