app.zeens.getEvents

zeens.app

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "Browse events. Defaults to upcoming events (startsAt >= now) ordered by startsAt ascending with a stable uri tie-breaker. Supports multi-value category filtering (OR-matched), mode filtering (in person / online / hybrid), and nearby filtering (lat/lng/radius, reusing the getNearbyPhotos coordinate convention).",
      "output": {
        "encoding": "application/json"
      },
      "parameters": {
        "properties": {
          "category": {
            "description": "Restrict to events carrying any of these category values. Accepts a single value or a comma-separated list, OR-matched against the event's categories array (categories are multi-value: an event can be both a photowalk and a meetup).",
            "type": "string"
          },
          "cursor": {
            "type": "string"
          },
          "filter": {
            "default": "upcoming",
            "description": "Time window relative to now. 'upcoming_first' is the one-list browse: every event, soonest upcoming first, past events below most-recent-first.",
            "knownValues": [
              "upcoming",
              "past",
              "all",
              "upcoming_first"
            ],
            "type": "string"
          },
          "lat": {
            "description": "Center latitude in microdegrees (x1e7) for a nearby search.",
            "type": "integer"
          },
          "limit": {
            "default": 36,
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "lng": {
            "description": "Center longitude in microdegrees (x1e7) for a nearby search.",
            "type": "integer"
          },
          "mode": {
            "description": "Restrict to events happening this way. Stored values are normalised on read (absent -> 'in_person', legacy 'virtual' -> 'online'). A 'hybrid' event matches an 'in_person' or an 'online' request as well as an explicit 'hybrid' one, because it genuinely is both.",
            "knownValues": [
              "in_person",
              "online",
              "hybrid"
            ],
            "type": "string"
          },
          "radiusKm": {
            "description": "Radius in km for a nearby search. Requires lat + lng.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "viewer": {
            "format": "did",
            "type": "string"
          }
        },
        "type": "params"
      },
      "target_collection": "app.zeens.event",
      "type": "query"
    }
  },
  "id": "app.zeens.getEvents",
  "lexicon": 1
}

Validate Record

Validate a record against app.zeens.getEvents

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:pwpuqwge6g7xrjmfbw73uycw
CID
bafyreidgcv6m26ts7ukl4batvkzv745vubsxawmeduq7h3qmco7dzvgtye
Indexed At
2026-10-22 16:31 UTC
AT-URI
at://did:plc:pwpuqwge6g7xrjmfbw73uycw/com.atproto.lexicon.schema/app.zeens.getEvents

Similar Lexicons

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

  • Category and mode counts for the events filter strip, aggregated in Postgres over the whole catalog (not tallied from a page of results). Lets the client offer only filters that will actually return something. Scoped by…

  • List indexed music events, soonest first. Without a time window only unexpired events are returned: those ending (or, with no end, starting) today or later, plus undated ones.

  • Search for events. Supports full-text search, filtering by repository, and filtering by location CIDs.

  • Retrieve geotagged Zeens photos inside a geographic bounding box. Powers the Explore map: each result carries its lat/lng (decoded from the int*1e7 stored in postMeta), the first image cid for a thumbnail, the author id…

Lexicon Garden

@