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.
| Endpoint | What it answers |
|---|---|
GET /v1/locations | Dining locations on a campus |
GET /v1/locations/:id | One location |
GET /v1/locations/:id/hours | Hours for a date, or for several days |
GET /v1/menus | Menu for a location, date and period |
GET /v1/open-now | Locations open at the service clock, with when each closes |
GET /v1/search | Items on menus open now, filtered |
Bad-day scenarios: weather-closure every location closed today for weather
| Contract probe | Request | Result |
|---|---|---|
| locations | /v1/locations?campus=sinclair | meets contract |
| hours-week | /v1/locations/sinclair-commons/hours?date=2026-11-23&days=7 | meets contract |
| menu | /v1/menus?location=sinclair-commons&date=2026-11-02&period=Lunch | meets contract |
| open-now | /v1/open-now?campus=wright-state&at=2026-11-03T04:30:00Z | meets contract |
| search | /v1/search?campus=sinclair&tag=vegan&at=2026-11-02T17:00:00Z | meets 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.
| Endpoint | What it answers |
|---|---|
GET /gtfs/v1/agency | The agency |
GET /gtfs/v1/routes | Routes with their stops in order |
GET /gtfs/v1/stops | Stops, all or near a point or on a campus |
GET /gtfs/v1/stops/:id | One stop |
GET /gtfs/v1/stops/:id/departures | Scheduled departures from a stop |
GET /gtfs/v1/trips/:id | A trip with every stop time |
GET /plan/v1 | Itineraries between two stops, with up to one transfer |
GET /realtime/v1/arrivals | Predicted arrivals at a stop from the service clock |
GET /realtime/v1/alerts | Service 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 probe | Request | Result |
|---|---|---|
| routes | /gtfs/v1/routes | meets contract |
| stops-near | /gtfs/v1/stops?near=39.7573,-84.1985&radius=600 | meets contract |
| departures | /gtfs/v1/stops/hub/departures?date=2026-11-02&from=07:00&limit=5 | meets contract |
| plan | /plan/v1?from=salem-catalpa&to=wright-union&date=2026-11-02&arriveBy=09:00 | meets contract |
| arrivals | /realtime/v1/arrivals?stop=sinclair-5th&at=2026-11-02T13:00:00Z | meets contract |
| alerts | /realtime/v1/alerts?at=2026-11-26T15:00:00Z | meets contract |
Campus Places (synthetic)
places.campus.example · Study spaces, bookable rooms and campus events for each campus.
| Endpoint | What it answers |
|---|---|
GET /v1/spaces | Study spaces on a campus |
GET /v1/spaces/open-now | Spaces open at the service clock |
GET /v1/rooms/:id/availability | Free 30-minute slots in a bookable room |
POST /v1/rooms/:id/reservations | Reserve a room (send Idempotency-Key) |
GET /v1/reservations/:id | One reservation |
GET /v1/reservations | The reservation made with an Idempotency-Key, if any |
GET /v1/events | Events on a campus over a date range |
| Contract probe | Request | Result |
|---|---|---|
| spaces | /v1/spaces?campus=wright-state | meets contract |
| spaces-open | /v1/spaces/open-now?campus=sinclair&at=2026-11-02T23:00:00Z | meets contract |
| availability | /v1/rooms/sinclair-room-6142/availability?date=2026-11-04 | meets contract |
| events | /v1/events?campus=sinclair&from=2026-11-02&days=7 | meets contract |
Campus Careers (synthetic)
careers.campus.example · Job postings with weekly schedules, and a volunteer mentor directory.
| Endpoint | What it answers |
|---|---|
GET /v1/postings | Open postings for a campus |
GET /v1/postings/:id | One posting |
GET /v1/mentors | Mentors with open slots |
POST /v1/mentors/:id/requests | Ask a mentor for an introduction (send Idempotency-Key). Only a first name and a note. |
GET /v1/requests/:id | Where a request stands: pending, then accepted with a meeting time, or declined |
GET /v1/requests | The request made with an Idempotency-Key, if any |
Bad-day scenarios: mentor-declines every request is declined
| Contract probe | Request | Result |
|---|---|---|
| postings | /v1/postings?campus=sinclair | meets contract |
| mentors | /v1/mentors?campus=sinclair&field=healthcare | meets 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>.
| Endpoint | What it answers |
|---|---|
GET /api/v1/users/self | The signed-in student |
GET /api/v1/courses | Active courses |
GET /api/v1/courses/:id/assignments | Assignments in a course, with due dates |
GET /api/v1/announcements | Recent announcements across courses |
GET /api/v1/calendar_events | Calendar events across courses |
Bad-day scenarios: reschedule the first assignment due on or after Nov 2 moves three days later
| Contract probe | Request | Result |
|---|---|---|
| self | /api/v1/users/self | meets contract |
| courses | /api/v1/courses | meets contract |
| assignments | /api/v1/courses/19990/assignments | meets contract |
| announcements | /api/v1/announcements | meets contract |