NIP-XX
Accommodation Listing Extension for NIP-99
draft optional
This NIP defines an accommodation-specific profile for NIP-99 classified listings. It does not define a new listing event kind.
Accommodation listings use the NIP-99 event kinds:
All rules for NIP-99 listing identity, authoring, content, base metadata, images, prices, and status remain defined by NIP-99. This NIP only defines additional tags and behavior for listings categorized as accommodation.
Terms
- Buyer - Nostr user searching for accommodation.
- Seller - Nostr user providing accommodation.
- Listing - A single accommodation unit or property advertised by a seller.
Category Tags
Accommodation listings MUST include:
Clients SHOULD treat ["t", "accommodation"] as the canonical signal that a
NIP-99 listing follows this accommodation profile.
Accommodation Tags
Accommodation listings SHOULD include a type tag:
Recognized listing types are:
room, house, apartment, villa, hotel, hostel, resort
Accommodation listings MAY include the following additional tags:
Tags already defined by NIP-99, such as title, summary, published_at,
location, image, price, and status, SHOULD be used as defined there.
Location Indexing
Accommodation listings SHOULD include g tags containing H3 cell indexes for
location-based search.
Publishers MUST include multiple g tags: one for the listing's most precise
public H3 cell, plus every parent cell in that H3 hierarchy. This allows a
listing to appear in search results regardless of the buyer's selected search
granularity.
If a seller does not want to disclose the exact property location, the publisher SHOULD choose the most precise H3 cell the seller is willing to reveal, then add that cell and all parent cells.
For example, a listing whose most precise public H3 cell is resolution 12 would include:
["g", "<h3-res-12-cell>"]
["g", "<h3-res-11-parent>"]
["g", "<h3-res-10-parent>"]
["g", "<h3-res-9-parent>"]
["g", "<h3-res-8-parent>"]
["g", "..."]
["g", "<h3-res-0-parent>"]
Clients searching by area SHOULD query the g value matching their desired H3
granularity. Clients MAY also query neighboring cells when the search radius
crosses cell boundaries.
Publishers SHOULD use H3 indexes for accommodation listings. They SHOULD NOT use
geohash strings in g tags for this profile.
Cancellation Policy Tags
Listings MAY include one or more cancellationPolicy tags defining refund terms
based on how far in advance the buyer cancels.
-
<seconds-before-start>is the number of seconds before check-in that this policy applies. -
<refund-fraction>is a decimal fraction from0.0to1.0of the total cost refunded, for example"0.5"for 50%.
Clients SHOULD sort cancellation policies by advance notice period before displaying them.
Specification Tags
Listings MAY include spec tags advertising accommodation features and details.
Boolean specifications are represented by presence:
Valued specifications include a value:
Valued specs MUST include a value. Boolean specs MUST NOT include a value.
Recognized Accommodation Specifications
The recognized names below are specific to accommodation listings. Clients SHOULD treat unrecognized spec names gracefully and MAY display them as-is.
Valued integer specs:
bathtub, bathrooms, beds, bedrooms, max_guests, tv
Boolean specs:
airconditioning, allows_pets, crib, tumble_dryer, washer, elevator,
free_parking, gym, hair_dryer, heating, high_chair,
wireless_internet, iron, jacuzzi, kitchen, outlet_covers, pool,
private_entrance, smoking_allowed, breakfast, fireplace,
smoke_detector, essentials, shampoo, infants_allowed,
children_allowed, hangers, flat_smooth_pathway_to_front_door,
grab_rails_in_shower_and_toilet, oven, bbq, balcony, patio,
dishwasher, refrigerator, garden_or_backyard, microwave,
coffee_maker, dishes_and_silverware, stove, fire_extinguisher,
carbon_monoxide_detector, luggage_dropoff_allowed, beach_essentials,
beachfront, baby_monitor, babysitter_recommendations,
childrens_books_and_toys, game_console, street_parking, paid_parking,
hot_water, lake_access, single_level_home, waterfront,
first_aid_kit, handheld_shower_head, home_step_free_access,
lock_on_bedroom_door, mobile_hoist, path_to_entrance_lit_at_night,
pool_hoist, ev_charger, rollin_shower, shower_chair,
tub_with_shower_bench, wide_clearance_to_bed,
wide_clearance_to_shower_and_toilet, wide_hallway_clearance, baby_bath,
changing_table, room_darkening_shades, stair_gates,
table_corner_guards, extra_pillows_and_blankets, ski_in_ski_out,
window_guards, disabled_parking_spot, grab_rails_in_toilet,
events_allowed, common_spaces_shared, bathroom_shared,
security_cameras
Relay Index Tags
Publishers MAY duplicate selected accommodation tags into single-letter index tags so relays can filter more efficiently. Readers MUST treat the canonical multi-letter tags as authoritative and use index tags only as hints.
These single-letter index meanings are scoped to NIP-99 listings with
["t", "accommodation"]; readers MUST NOT interpret them outside this profile.
Known index tags include:
Listing Anchor
Accommodation listing anchors use the NIP-99 addressable event form:
30402:<pubkey>:<d-tag>
Draft or inactive listing anchors use:
30403:<pubkey>:<d-tag>
Other event kinds, such as reservations and reviews, SHOULD reference the active
listing address with an a tag.
Example Event
{
"kind": 30402,
"pubkey": "a1b2c3d4e5f6...",
"created_at": 1712678400,
"content": "A beautiful beachfront villa with stunning ocean views. Two bedrooms, private pool, and direct beach access. Perfect for a quiet getaway.",
"tags": [
["d", "m1abc2"],
["title", "Ocean View Villa"],
["summary", "Two bedroom beachfront villa with pool"],
["image", "https://example.com/villa-front.jpg"],
["image", "https://example.com/villa-pool.jpg"],
["image", "https://example.com/villa-bedroom.jpg"],
["published_at", "1712678400"],
["status", "active"],
["t", "accommodation"],
["active", "true"],
["type", "villa"],
["A", "true"],
["negotiable", "false"],
["minStay", "2"],
["checkIn", "15:0"],
["checkOut", "11:0"],
["location", "Bali, Indonesia"],
["quantity", "1"],
["instantBook", "true"],
["allowSelfSignedReservation", "false"],
["price", "0.00050000", "BTC", "day"],
["cancellationPolicy", "172800", "1.0"],
["cancellationPolicy", "86400", "0.5"],
["spec", "wireless_internet"],
["spec", "pool"],
["spec", "beachfront"],
["spec", "kitchen"],
["spec", "airconditioning"],
["spec", "beds", "4"],
["spec", "bedrooms", "2"],
["spec", "bathrooms", "2"],
["spec", "bathtub", "1"],
["spec", "max_guests", "6"],
["securityDeposit", "0.00025000", "BTC", "8"],
["minPaymentAmount", "0.00010000", "BTC", "8"],
["maxDisputePeriod", "1209600"],
["g", "8c2ab34567fffff"],
["g", "8b2ab34567fffff"],
["g", "8a2ab34567fffff"],
["g", "892ab34567fffff"],
["g", "882ab34567fffff"]
],
"id": "...",
"sig": "..."
}
Client Behavior
Clients displaying accommodation listings SHOULD:
- Apply the base NIP-99 listing behavior.
- Use
["t", "accommodation"]to detect this profile. - Display accommodation specifications grouped by category when possible.
- Show cancellation policies sorted by advance notice period.
- Support geospatial search using all published H3
gtags.
Related NIPs
- NIP-99 - Classified Listings.
- NIP-19 -
naddrencoding for listing anchors. - NIP-21 -
nostr:URI scheme for linking to listings.