> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tktchurch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List and search upcoming events

> Public upcoming-events feed on calendar.tktchurch.net. Filter (search) by type, ministry, campus and audience; page with limit/cursor. No auth.



## OpenAPI

````yaml /api-reference/openapi.json get /events/upcoming
openapi: 3.0.1
info:
  title: TKTChurch Identity (TKTAuth)
  version: v1
  description: >-
    Authorization server at prod-auth.tktchurch.com. Public OAuth2/OIDC
    endpoints need no auth; /api/v1 self routes need a Bearer access token
    issued to the user. the listed resource:action permission. Management lists
    return `{ metadata: { total, page, per }, items: [...] }`.
servers:
  - url: https://prod-auth.tktchurch.com
    description: Production
  - url: http://localhost:8080
    description: Local backchannel
  - url: https://calendar.tktchurch.net
    description: Calendar (Events)
security: []
tags:
  - name: authentication
    description: >-
      OAuth2 (RFC 6749), PAR (9126), revocation/introspection (7009/7662),
      device flow (8628), OIDC, registration (7591), sign-in flows, password
      reset and federated identity.
  - name: users
    description: >-
      Signed-in profile, identities, recovery, membership and Member Pass.
      Bearer only.
  - name: membership
    description: Membership matching, Member Pass, invite claims and family join codes.
  - name: sessions
    description: List, inspect and revoke your own sessions. Bearer only.
  - name: security
    description: TOTP setup and passkey management. Bearer only.
  - name: consents-privacy
    description: Your consent grants, privacy notices, data requests and exports.
  - name: family
    description: >-
      Families, dependents and guardian delegation. Bearer; delegation needs
      guardian:act_as.
  - name: system
    description: Liveness, readiness, build info and public maintenance status.
  - name: events
    description: >-
      Public church events listing, search and detail on calendar.tktchurch.net.
      No auth.
paths:
  /events/upcoming:
    get:
      tags:
        - events
      summary: List and search upcoming events
      description: >-
        Public upcoming-events feed on calendar.tktchurch.net. Filter (search)
        by type, ministry, campus and audience; page with limit/cursor. No auth.
      operationId: listUpcomingEvents
      parameters:
        - name: limit
          in: query
          required: false
          schema:
            type: string
            description: Page size, 1–100 (default 10)
            example: 20
        - name: type
          in: query
          required: false
          schema:
            type: string
            description: Event category filter
            enum:
              - SERVICE
              - CONFERENCE
              - COURSE
              - SPECIAL_EVENT
              - PRAYER_CAMPAIGN
              - LIFE_GROUP
              - CAMP
              - WORKSHOP
        - name: ministryId
          in: query
          required: false
          schema:
            type: string
            description: Ministry id filter
            example: min_celebration
        - name: campusId
          in: query
          required: false
          schema:
            type: string
            description: Campus id filter
            example: cmp_lagos
        - name: audience
          in: query
          required: false
          schema:
            type: string
            description: Audience filter (e.g. members, newcomers, youth)
            example: newcomers
        - name: cursor
          in: query
          required: false
          schema:
            type: string
            description: Opaque cursor from a previous nextCursor
            example: eyJvZmZzZXQiOjIwfQ
      responses:
        '200':
          description: Feed page
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpcomingFeed'
              example:
                items:
                  - eventId: evt_01J9ZQ8XYZ
                    slug: sunday-celebration-service
                    url: /events/sunday-celebration-service
                    title: Sunday Celebration Service
                    description: Join us for worship, the Word, and communion.
                    eventType: SERVICE
                    serviceType: First Service
                    startDate: '2026-09-27'
                    startTime: '09:00'
                    endDate: '2026-09-27'
                    endTime: '11:30'
                    timezone: Africa/Lagos
                    ministryId: min_celebration
                    campusId: cmp_lagos
                    status: SCHEDULED
                    visibility: public
                    audience:
                      - members
                      - newcomers
                    attendanceModes:
                      - QR_CODE
                    capacity: 1500
                    organizer: Celebration Ministry
                    imageUrl: >-
                      https://assets.tktchurch.net/cal/events/evt_01J9ZQ8XYZ/banner.webp
                    location:
                      name: Main Sanctuary
                      address: Lagos
                    tags:
                      - sunday
                      - service
                      - worship
                    createdAt: '2026-08-10T09:00:00Z'
                nextCursor: eyJvZmZzZXQiOjIwfQ
        '400':
          description: Bad query (e.g. limit out of range)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalendarError'
              example:
                error: true
                message: limit must be between 1 and 100
                statusCode: 400
      security: []
      servers:
        - url: https://calendar.tktchurch.net
          description: Calendar (Events)
      x-codeSamples:
        - lang: Swift
          label: Swift (listing + search)
          source: >
            import Foundation


            var comps = URLComponents(string:
            "https://calendar.tktchurch.net/events/upcoming")!

            // Listing + searching: limit (1–100, default 10), type, ministryId,
            campusId, audience

            comps.queryItems = [
                URLQueryItem(name: "limit", value: "20"),
                URLQueryItem(name: "type", value: "SERVICE"),
                URLQueryItem(name: "campusId", value: "cmp_lagos")
            ]

            let (data, _) = try await URLSession.shared.data(from: comps.url!)

            struct Feed<T: Decodable>: Decodable { let items: [T]; let
            nextCursor: String? }

            let feed = try JSONDecoder().decode(Feed<CalendarEvent>.self, from:
            data)

            for event in feed.items { print(event.startDate, event.title) }

            // nextCursor == nil → no more pages; pass it back as ?cursor= for
            page 2+
components:
  schemas:
    UpcomingFeed:
      type: object
      properties:
        items:
          type: array
          description: Events on this page
          items:
            $ref: '#/components/schemas/CalendarEvent'
        nextCursor:
          type: string
          description: Opaque cursor for the next page; null when exhausted
    CalendarError:
      type: object
      properties:
        error:
          type: boolean
          description: Always true for errors
          example: true
        message:
          type: string
          description: Human-readable reason
        statusCode:
          type: integer
          description: HTTP status echoed in the body
        details:
          type: array
          description: Optional per-field details
          items:
            type: string
      required:
        - error
        - message
        - statusCode
    CalendarEvent:
      type: object
      properties:
        eventId:
          type: string
          description: Stable event id (evt_…)
          example: evt_01J9ZQ8XYZ
        slug:
          type: string
          description: URL slug
          example: sunday-celebration-service
        url:
          type: string
          description: Relative web path
          example: /events/sunday-celebration-service
        title:
          type: string
          description: Event title
          example: Sunday Celebration Service
        description:
          type: string
          description: Long description (may contain markup)
        eventType:
          type: string
          description: Event category
          enum:
            - SERVICE
            - CONFERENCE
            - COURSE
            - SPECIAL_EVENT
            - PRAYER_CAMPAIGN
            - LIFE_GROUP
            - CAMP
            - WORKSHOP
        serviceType:
          type: string
          description: Service slot, if applicable
          example: First Service
        startDate:
          type: string
          description: Start date YYYY-MM-DD
          example: '2026-09-27'
        startTime:
          type: string
          description: Start time HH:MM
          example: '09:00'
        endDate:
          type: string
          description: End date YYYY-MM-DD
        endTime:
          type: string
          description: End time HH:MM
        timezone:
          type: string
          description: IANA timezone
          example: Africa/Lagos
        ministryId:
          type: string
          description: Owning ministry id
        campusId:
          type: string
          description: Host campus id
        seriesId:
          type: string
          description: Series id for recurring events
        status:
          type: string
          description: Lifecycle status
          enum:
            - DRAFT
            - SCHEDULED
            - ACTIVE
            - COMPLETED
            - CANCELLED
            - POSTPONED
        visibility:
          type: string
          description: Visibility
          example: public
        audience:
          type: array
          description: Target audiences
          items:
            type: string
        attendanceModes:
          type: array
          description: Check-in modes
          items:
            type: string
            enum:
              - QR_CODE
              - RFID
              - MANUAL
              - SELF_CHECK_IN
              - NONE
        capacity:
          type: integer
          description: Seat capacity, if capped
        organizer:
          type: string
          description: Organizer name
        imageUrl:
          type: string
          description: Stable CDN artwork URL (cache long-term, no expiry)
          example: https://assets.tktchurch.net/cal/events/evt_01J9ZQ8XYZ/banner.webp
        registrationUrl:
          type: string
          description: External registration link, if any
        location:
          type: object
          description: 'Venue: name, address, coordinates'
        tags:
          type: array
          description: Search tags
          items:
            type: string
        createdAt:
          type: string
          description: Creation timestamp
          format: date-time
        updatedAt:
          type: string
          description: Last-update timestamp
          format: date-time

````