community.gifthood.listing

gifthood.community

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "An offer or request for a free item, discoverable by approximate location.",
      "key": "tid",
      "record": {
        "properties": {
          "category": {
            "description": "Optional single-level category for opt-out feed filtering. Append-only enum; unknown or missing values index as 'other'. Never used for proximity or safety logic.",
            "enum": [
              "furniture",
              "kitchen",
              "clothing",
              "baby",
              "books",
              "instruments",
              "electronics",
              "tools",
              "garden",
              "health",
              "pets",
              "hobbies",
              "food",
              "animals",
              "service",
              "other"
            ],
            "type": "string"
          },
          "createdAt": {
            "format": "datetime",
            "type": "string"
          },
          "description": {
            "description": "Required free text describing the item being offered or requested.",
            "maxGraphemes": 1500,
            "maxLength": 3000,
            "minGraphemes": 1,
            "minLength": 1,
            "type": "string"
          },
          "facets": {
            "description": "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 direct-message-only.",
            "items": {
              "ref": "app.bsky.richtext.facet",
              "type": "ref"
            },
            "type": "array"
          },
          "geohash": {
            "description": "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.",
            "maxLength": 6,
            "minLength": 1,
            "type": "string"
          },
          "imageAlts": {
            "description": "Alt text for images, parallel to the images array by index.",
            "items": {
              "maxGraphemes": 1000,
              "type": "string"
            },
            "maxLength": 4,
            "type": "array"
          },
          "images": {
            "description": "Up to 4 images of the item, stored as blobs in the poster's repo.",
            "items": {
              "accept": [
                "image/jpeg",
                "image/png",
                "image/webp"
              ],
              "maxSize": 1000000,
              "type": "blob"
            },
            "maxLength": 4,
            "type": "array"
          },
          "intent": {
            "description": "Whether the poster is giving away an item or looking for one.",
            "enum": [
              "offer",
              "request"
            ],
            "type": "string"
          },
          "labels": {
            "description": "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.",
            "refs": [
              "com.atproto.label.defs#selfLabels"
            ],
            "type": "union"
          },
          "langs": {
            "description": "Language(s) the content is written in, as BCP-47 language tags. Author-asserted; clients default from the composer's locale.",
            "items": {
              "format": "language",
              "type": "string"
            },
            "maxLength": 3,
            "type": "array"
          },
          "locationName": {
            "description": "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.",
            "maxGraphemes": 100,
            "maxLength": 300,
            "type": "string"
          },
          "status": {
            "description": "Current availability. Clients should treat a missing value as 'available'.",
            "enum": [
              "available",
              "pending",
              "gone"
            ],
            "type": "string"
          },
          "title": {
            "description": "Required short title for the item being offered or requested.",
            "maxGraphemes": 100,
            "maxLength": 200,
            "minGraphemes": 1,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title",
          "intent",
          "description",
          "geohash",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "community.gifthood.listing",
  "lexicon": 1
}

Validate Record

Validate a record against community.gifthood.listing

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:7prvtl4j6wsfmkrfrnwknuxj
CID
bafyreicrztgvfup434mscf6tdlxllsifhetzayi3ncgha2v65zalj7lvo4
Indexed At
2026-06-19 10:29 UTC
AT-URI
at://did:plc:7prvtl4j6wsfmkrfrnwknuxj/com.atproto.lexicon.schema/community.gifthood.listing

Version History (6 versions)

Referenced Schemas (2)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • community.buynothing.listing recordnot from the namespace authority

    An offer or request for a free item, discoverable by approximate location.

  • A piece of camera gear the author is offering for swap, lend, or gift. Lives in the author's own repo.

  • One row of the viewer's activity feed: an outgoing interest the viewer raised on someone's listing, an incoming raised hand on the viewer's own listing, or a neighbor who followed the viewer (carries 'followers' instead…

Lexicon Garden

@