# app.zeens.getEvents

> Published by [zeens.app](https://lexicon.garden/identity/did:plc:pwpuqwge6g7xrjmfbw73uycw)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.getEvents)
- [Documentation](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.getEvents/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:pwpuqwge6g7xrjmfbw73uycw/app.zeens.getEvents/examples)

## Definitions

### `app.zeens.getEvents`

**Type**: `query`

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).

#### Parameters

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `category` | `string` | No | 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). |
| `cursor` | `string` | No |  |
| `filter` | `string` | No | Time window relative to now. 'upcoming_first' is the one-list browse: every event, soonest upcoming first, past events below most-recent-first. |
| `lat` | `integer` | No | Center latitude in microdegrees (x1e7) for a nearby search. |
| `limit` | `integer` | No |  |
| `lng` | `integer` | No | Center longitude in microdegrees (x1e7) for a nearby search. |
| `mode` | `string` | No | 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. |
| `radiusKm` | `integer` | No | Radius in km for a nearby search. Requires lat + lng. |
| `viewer` | `string` (did) | No |  |

#### Output

**Encoding**: `application/json`

## Raw Schema

```json
{
  "$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
}
```
