listing
· recordAn offer or a request, set down where the neighbors closest to it will notice. A listing is the smallest unit of giving here — one thing you’re passing on, or one thing you’re hoping someone nearby can spare. Some gifts make a round trip: a listing can be to lend — or looking to borrow — and the offer stands while the ladder’s out and after it comes home. A standing offer is the one that renews: rides, lessons, the weekly eggs — it stays open through gift after gift, until you say it’s gone.
“Maria’s done with the crib. She posts a listing, and the blocks around her are the first to see it.”
-
Required short title for the item being offered or requested.
-
Required free text describing the item being offered or requested.
- offerrequest
Whether the poster is giving away an item or looking for one.
- availablependinggone
Current availability. Clients should treat a missing value as 'available'.
-
Standing (renewing) offer: the owner can run exchange chains with multiple neighbors over time. Absent or false means the listing is exhausted by a single exchange. AppViews keep a standing listing available while chains run; only the owner's manual 'gone' ends it.
- one of 2: gift, lend
How the item changes hands. 'gift' (the default when absent) transfers ownership; 'lend' expects the item back — the listing behaves as a standing offer and each exchange gains a return leg (see exchange.returnedAt). Readers MUST treat unknown or missing values as 'gift'.
-
Owner-set temporary unavailability (using the item themselves, away for a while). AppViews hide paused listings from feeds but keep the detail view reachable with interest disabled. Absent means active. Orthogonal to status; 'gone' still wins.
-
Approximate location as a geohash, precision 6 (~1.2km cell). This is a privacy floor: indexers MUST truncate any finer-precision value to 6 characters before indexing or display.
-
Optional human-readable area name. App-populated via reverse geocoding of the geohash cell. Display only; MUST NOT be used for proximity matching or filtering.
-
Up to 4 images of the item, stored as blobs in the poster's repo.
-
Alt text for images, parallel to the images array by index.
- one of 17: furniture, kitchen, clothing, baby, books, instruments, electronics, tools, garden, health, pets, hobbies, food, animals, service, office, other
Optional single-level category for opt-out feed filtering. Additive-only enum (values may be inserted, never removed or renamed); unknown or missing values index as 'other'. Never used for proximity or safety logic.
-
Language(s) the content is written in, as BCP-47 language tags. Author-asserted; clients default from the composer's locale.
-
Annotations over `description` (mentions, links) keyed by UTF-8 byte range. Reuses app.bsky.richtext.facet for atmosphere-wide interop. Author-asserted at compose time; clients MUST treat them as display hints, re-validate ranges, and never trust a facet URI over the visible text. Addresses and phone numbers are deliberately NOT faceted here — those affordances are private-message-only.
-
Self-labels set by the author. Used to flag mature/adult content (e.g. the global 'sexual' value), which the AppView gates behind an opt-in.
↪ borrows facet · label.defs