Skip to Content
DevelopersProducts (NIP-99)

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

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

TagValueNIP-99Shosho needs
dUnique product identifierRequiredRequired
titleProduct nameStandardRequired
price[<amount>, <currency>, <frequency?>]StandardRequired
summaryShort tagline/descriptionStandardOptional
published_atUnix timestamp of first publish (string)StandardOptional
locationShipping/location infoStandardOptional
imageProduct image URL (per NIP-58 , may be repeated)StandardOptional
tCategory/keyword hashtags (multiple)StandardOptional
statusactive or soldOptionalOptional
gGeohash for precise locationOptionalOptional

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 — sats and btc are 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 30402 only.

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

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

Last updated on