curl --request GET \
--url https://calendar.tktchurch.net/events/upcomingimport 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+
const options = {method: 'GET'};
fetch('https://calendar.tktchurch.net/events/upcoming', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://calendar.tktchurch.net/events/upcoming"
response = requests.get(url)
print(response.text){
"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"
}{
"error": true,
"message": "limit must be between 1 and 100",
"statusCode": 400
}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.
curl --request GET \
--url https://calendar.tktchurch.net/events/upcomingimport 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+
const options = {method: 'GET'};
fetch('https://calendar.tktchurch.net/events/upcoming', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://calendar.tktchurch.net/events/upcoming"
response = requests.get(url)
print(response.text){
"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"
}{
"error": true,
"message": "limit must be between 1 and 100",
"statusCode": 400
}Query Parameters
Page size, 1–100 (default 10)
20
Event category filter
SERVICE, CONFERENCE, COURSE, SPECIAL_EVENT, PRAYER_CAMPAIGN, LIFE_GROUP, CAMP, WORKSHOP Ministry id filter
"min_celebration"
Campus id filter
"cmp_lagos"
Audience filter (e.g. members, newcomers, youth)
"newcomers"
Opaque cursor from a previous nextCursor
"eyJvZmZzZXQiOjIwfQ"
Response
Feed page
Events on this page
Hide child attributes
Hide child attributes
Stable event id (evt_…)
"evt_01J9ZQ8XYZ"
URL slug
"sunday-celebration-service"
Relative web path
"/events/sunday-celebration-service"
Event title
"Sunday Celebration Service"
Long description (may contain markup)
Event category
SERVICE, CONFERENCE, COURSE, SPECIAL_EVENT, PRAYER_CAMPAIGN, LIFE_GROUP, CAMP, WORKSHOP Service slot, if applicable
"First Service"
Start date YYYY-MM-DD
"2026-09-27"
Start time HH:MM
"09:00"
End date YYYY-MM-DD
End time HH:MM
IANA timezone
"Africa/Lagos"
Owning ministry id
Host campus id
Series id for recurring events
Lifecycle status
DRAFT, SCHEDULED, ACTIVE, COMPLETED, CANCELLED, POSTPONED Visibility
"public"
Target audiences
Check-in modes
QR_CODE, RFID, MANUAL, SELF_CHECK_IN, NONE Seat capacity, if capped
Organizer name
Stable CDN artwork URL (cache long-term, no expiry)
"https://assets.tktchurch.net/cal/events/evt_01J9ZQ8XYZ/banner.webp"
External registration link, if any
Venue: name, address, coordinates
Search tags
Creation timestamp
Last-update timestamp
Opaque cursor for the next page; null when exhausted
