Campus twins

Synthetic services shaped like a college's vendors. The Advocate reaches them only through its egress door, and each is held to a contract: 21 of 21 probes pass. How they work. Try them: zthr.ai/twins.

Campus Dining (synthetic)

dining.campus.example · Dining locations, hours, menus and what is open now for each campus.

EndpointWhat it answers
GET /v1/locationsDining locations on a campus
GET /v1/locations/:idOne location
GET /v1/locations/:id/hoursHours for a date, or for several days
GET /v1/menusMenu for a location, date and period
GET /v1/open-nowLocations open at the service clock, with when each closes
GET /v1/searchItems on menus open now, filtered

Bad-day scenarios: weather-closure every location closed today for weather

Contract probeRequestResult
locations/v1/locations?campus=sinclairmeets contract
hours-week/v1/locations/sinclair-commons/hours?date=2026-11-23&days=7meets contract
menu/v1/menus?location=sinclair-commons&date=2026-11-02&period=Lunchmeets contract
open-now/v1/open-now?campus=wright-state&at=2026-11-03T04:30:00Zmeets contract
search/v1/search?campus=sinclair&tag=vegan&at=2026-11-02T17:00:00Zmeets contract

Regional Transit (synthetic)

transit.campus.example · GTFS-style static data, a trip planner and realtime arrivals for a synthetic regional bus system serving the three campuses.

EndpointWhat it answers
GET /gtfs/v1/agencyThe agency
GET /gtfs/v1/routesRoutes with their stops in order
GET /gtfs/v1/stopsStops, all or near a point or on a campus
GET /gtfs/v1/stops/:idOne stop
GET /gtfs/v1/stops/:id/departuresScheduled departures from a stop
GET /gtfs/v1/trips/:idA trip with every stop time
GET /plan/v1Itineraries between two stops, with up to one transfer
GET /realtime/v1/arrivalsPredicted arrivals at a stop from the service clock
GET /realtime/v1/alertsService alerts in effect

Bad-day scenarios: snow-delays every trip runs 10 to 20 minutes late; detour Route 2 skips Linden Ave; no-service no buses run

Contract probeRequestResult
routes/gtfs/v1/routesmeets contract
stops-near/gtfs/v1/stops?near=39.7573,-84.1985&radius=600meets contract
departures/gtfs/v1/stops/hub/departures?date=2026-11-02&from=07:00&limit=5meets contract
plan/plan/v1?from=salem-catalpa&to=wright-union&date=2026-11-02&arriveBy=09:00meets contract
arrivals/realtime/v1/arrivals?stop=sinclair-5th&at=2026-11-02T13:00:00Zmeets contract
alerts/realtime/v1/alerts?at=2026-11-26T15:00:00Zmeets contract

Campus Places (synthetic)

places.campus.example · Study spaces, bookable rooms and campus events for each campus.

EndpointWhat it answers
GET /v1/spacesStudy spaces on a campus
GET /v1/spaces/open-nowSpaces open at the service clock
GET /v1/rooms/:id/availabilityFree 30-minute slots in a bookable room
POST /v1/rooms/:id/reservationsReserve a room (send Idempotency-Key)
GET /v1/reservations/:idOne reservation
GET /v1/reservationsThe reservation made with an Idempotency-Key, if any
GET /v1/eventsEvents on a campus over a date range
Contract probeRequestResult
spaces/v1/spaces?campus=wright-statemeets contract
spaces-open/v1/spaces/open-now?campus=sinclair&at=2026-11-02T23:00:00Zmeets contract
availability/v1/rooms/sinclair-room-6142/availability?date=2026-11-04meets contract
events/v1/events?campus=sinclair&from=2026-11-02&days=7meets contract

Campus Careers (synthetic)

careers.campus.example · Job postings with weekly schedules, and a volunteer mentor directory.

EndpointWhat it answers
GET /v1/postingsOpen postings for a campus
GET /v1/postings/:idOne posting
GET /v1/mentorsMentors with open slots
POST /v1/mentors/:id/requestsAsk a mentor for an introduction (send Idempotency-Key). Only a first name and a note.
GET /v1/requests/:idWhere a request stands: pending, then accepted with a meeting time, or declined
GET /v1/requestsThe request made with an Idempotency-Key, if any

Bad-day scenarios: mentor-declines every request is declined

Contract probeRequestResult
postings/v1/postings?campus=sinclairmeets contract
mentors/v1/mentors?campus=sinclair&field=healthcaremeets contract

Class Site LMS (synthetic)

lms.campus.example · The signed-in student, their courses, assignments with due dates, announcements and calendar events. Send Authorization: Bearer <token>.

EndpointWhat it answers
GET /api/v1/users/selfThe signed-in student
GET /api/v1/coursesActive courses
GET /api/v1/courses/:id/assignmentsAssignments in a course, with due dates
GET /api/v1/announcementsRecent announcements across courses
GET /api/v1/calendar_eventsCalendar events across courses

Bad-day scenarios: reschedule the first assignment due on or after Nov 2 moves three days later

Contract probeRequestResult
self/api/v1/users/selfmeets contract
courses/api/v1/coursesmeets contract
assignments/api/v1/courses/19990/assignmentsmeets contract
announcements/api/v1/announcementsmeets contract