← All NIPs

NIP-99

Classified Listings

DraftEvents

Kind 30402 is a classified ad: something for sale, rent or free, written in Markdown with a title, price, location and images, and editable because it's addressable.

At a glance

Status
In use and still allowed to change.
Kinds
Tags
  • a
  • d
  • e
  • image
  • location
  • price
  • published_at
  • summary
  • t
  • title
Last changed
Jun 13, 2026

Try it

Edit the form or the JSON: both stay in sync, the badge says whether the result is valid, and tapping any field explains it.

Examples
Valid 1 note

Not signed yet · Demo keys only. These personas' secret keys are public on purpose.

Form
Jan 1, 2025, 12:00 AM UTC

Content

Description in Markdown.

Tags

  1. d Required

    Identifier of this listing among the author's listings.

  2. title Recommended

    The listing's title.

  3. summary Recommended

    A one-line tagline.

  4. published_at Recommended

    When the listing was first published.

    Dec 31, 2024, 12:00 AM UTC
  5. location Recommended

    Where the item or service is.

  6. price Recommended

    What it costs.

  7. status Optional

    Whether the listing is still available.

  8. t Optional

    A category or keyword. Repeat for several.

  9. t Optional

    A category or keyword. Repeat for several.

  10. image Optional

    An image of the item. Repeat for a gallery.

  11. g Optional

    Geohash for a more precise location.

Add tag

How this NIP works

Step 1 of 5

One listing, one address

Listings are addressable: the d tag names the listing, so editing it (new price, sold) replaces the old version.

In the course

No course chapter covers this NIP yet. The editor above is the quickest way in.

Builds on

See also

Specification

Specification text is quoted in English from the nostr-protocol/nips repository. Our explanations and the interface are translated. Source on GitHub at commit 0046368

Read the spec575 words, quoted from the repository at commit 0046368.

This NIP defines kind:30402: an addressable event to describe classified listings that list any arbitrary product, service, or other thing for sale or offer and includes enough structured metadata to make them useful.

The specification supports a broad range of use cases physical goods, services, work opportunities, rentals, free giveaways, personals, etc. To promote interoperability between clients implementing NIP-99 for e-commerce, you can find the extension proposal here which standardizes the e-commerce use case while maintaining the specification's lightweight and flexible nature. While NIP-15 provides a strictly structured marketplace specification, NIP-99 has emerged as a simpler and more flexible alternative.

The structure of these events is very similar to NIP-23 long-form content events.

Draft / Inactive Listings

kind:30403 has the same structure as kind:30402 and is used to save draft or inactive classified listings.

Content

The .content field should be a description of what is being offered and by whom. These events should be a string in Markdown syntax.

Author

The .pubkey field of these events are treated as the party creating the listing.

Metadata

  • For "tags"/"hashtags" (i.e. categories or keywords of relevance for the listing) the "t" event tag should be used.
  • For images, whether included in the markdown content or not, clients SHOULD use image tags as described in NIP-58. This allows clients to display images in carousel format more easily.

The following tags, used for structured metadata, are standardized and SHOULD be included. Other tags may be added as necessary.

  • "title", a title for the listing
  • "summary", for short tagline or summary for the listing
  • "published_at", for the timestamp (in unix seconds – converted to string) of the first time the listing was published.
  • "location", for the location.
  • "price", for the price of the thing being listed. This is an array in the format [ "price", "<number>", "<currency>", "<frequency>" ].
    • "price" is the name of the tag
    • "<number>" is the amount in numeric format (but included in the tag as a string)
    • "<currency>" is the currency unit in 3-character ISO 4217 format or ISO 4217-like currency code (e.g. "btc", "eth").
    • "<frequency>" is optional and can be used to describe recurring payments. SHOULD be in noun format (hour, day, week, month, year, etc.)
  • "status" (optional), the status of the listing. SHOULD be either "active" or "sold".
price examples
  • $50 one-time payment ["price", "50", "USD"]
  • €15 per month ["price", "15", "EUR", "month"]
  • £50,000 per year ["price", "50000", "GBP", "year"]

Other common tags that might be useful.

  • "g", a geohash for more precise location

Example Event

{
  "kind": 30402,
  "created_at": 1675642635,
  // Markdown content
  "content": "Lorem [ipsum][nostr:nevent1qqst8cujky046negxgwwm5ynqwn53t8aqjr6afd8g59nfqwxpdhylpcpzamhxue69uhhyetvv9ujuetcv9khqmr99e3k7mg8arnc9] dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\nRead more at nostr:naddr1qqzkjurnw4ksz9thwden5te0wfjkccte9ehx7um5wghx7un8qgs2d90kkcq3nk2jry62dyf50k0h36rhpdtd594my40w9pkal876jxgrqsqqqa28pccpzu.",
  "tags": [
    ["d", "lorem-ipsum"],
    ["title", "Lorem Ipsum"],
    ["published_at", "1296962229"],
    ["t", "electronics"],
    ["image", "https://url.to.img", "256x256"],
    ["summary", "More lorem ipsum that is a little more than the title"],
    ["location", "NYC"],
    ["price", "100", "USD"],
    [
      "e",
      "b3e392b11f5d4f28321cedd09303a748acfd0487aea5a7450b3481c60b6e4f87",
      "wss://relay.example.com"
    ],
    [
      "a",
      "30023:a695f6b60119d9521934a691347d9f78e8770b56da16bb255ee286ddf9fda919:ipsum",
      "wss://relay.nostr.org"
    ]
  ],
  "pubkey": "...",
  "id": "..."
}