{"openapi":"3.1.0","info":{"title":"MySched Public API","version":"1.0.0","description":"The documented public HTTP surface for MySched version 1. It includes public campus schedule reads, documentation search, the documentation assistant, and calendar subscriptions. Private app and admin routes are not part of this contract. Clients select the version with X-MySched-API-Version. Deprecated versions will be announced on the developer page and will return Deprecation and Sunset headers during their removal window.","termsOfService":"https://getmysched.com/terms","contact":{"name":"MySched support","url":"https://getmysched.com/contact","email":"support@getmysched.com"}},"servers":[{"url":"https://getmysched.com","description":"MySched public website"}],"externalDocs":{"description":"MySched developer resources","url":"https://getmysched.com/developers"},"x-mysched-api-versioning":{"strategy":"header","header":"X-MySched-API-Version","current":"1","default":"1","deprecation":{"status":"no version currently scheduled for deprecation","policyUrl":"https://getmysched.com/developers#api-versioning","runtimeHeaders":["Deprecation","Sunset","Link"]}},"x-mysched-rate-limits":{"publicApi":"60 requests per IP per 60-second window when the public API limiter is available.","documentationAssistant":"20 requests per IP per 60-second window and a 5,000-request daily cap.","headers":["RateLimit-Policy","RateLimit","Retry-After"]},"x-mysched-oauth":{"status":"not-configured","authorizationServerMetadata":"https://getmysched.com/.well-known/oauth-authorization-server","protectedResourceMetadata":"https://getmysched.com/.well-known/oauth-protected-resource","scopes":{"schedule:read":"Read published MySched campus schedule projections.","docs:read":"Read public MySched help documentation.","calendar:read":"Read a private MySched calendar subscription feed."},"activation":"OAuth scopes are inactive until the metadata endpoints return 200 and the configured authorization server enforces them."},"tags":[{"name":"Campus schedules","description":"Published school timetable projections."},{"name":"Documentation","description":"Public help search and the documentation assistant."},{"name":"Calendar","description":"Calendar subscription feeds."}],"paths":{"/api/c/{token}":{"get":{"tags":["Campus schedules"],"summary":"Read a published campus schedule","description":"Returns the safe public projection for a published MySched campus schedule. The token is a capability and must not be logged or exposed in analytics.","operationId":"getCampusPublicSchedule","parameters":[{"name":"X-MySched-API-Version","in":"header","required":false,"description":"The public API version. Omit this header to use version 1. Send 1 explicitly when you want to pin the current contract.","schema":{"type":"string","enum":["1"],"default":"1"}},{"name":"token","in":"path","required":true,"description":"A 48-character hexadecimal public campus schedule token.","schema":{"type":"string","minLength":48,"maxLength":48,"pattern":"^[A-Fa-f0-9]{48}$"}}],"responses":{"200":{"description":"The published campus schedule projection.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}},"ETag":{"description":"A validator for conditional requests.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampusPublicSchedule"}}}},"304":{"description":"The published schedule has not changed.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}}},"404":{"description":"The token is invalid or no published schedule exists for it.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The public schedule service is temporarily unavailable.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/search":{"get":{"tags":["Documentation"],"summary":"Search public MySched documentation","description":"Searches the public MySched help corpus. Use query for new integrations. The q parameter remains available as a compatibility alias.","operationId":"searchMySchedDocs","parameters":[{"name":"X-MySched-API-Version","in":"header","required":false,"description":"The public API version. Omit this header to use version 1. Send 1 explicitly when you want to pin the current contract.","schema":{"type":"string","enum":["1"],"default":"1"}},{"name":"query","in":"query","required":false,"description":"The documentation search text. An empty query returns an empty result set.","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"deprecated":true,"description":"Compatibility alias for query.","schema":{"type":"string"}}],"responses":{"200":{"description":"Matching public documentation results.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}}}}},"404":{"description":"Public documentation search is not enabled.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"The documentation search service failed to answer.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/chat":{"post":{"tags":["Documentation"],"summary":"Ask the MySched documentation assistant","description":"Streams a UI message response grounded in the public MySched help corpus. The request accepts only text and assistant step-start parts. The response is an AI SDK UI message stream.","operationId":"askMySchedDocs","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"parameters":[{"name":"X-MySched-API-Version","in":"header","required":false,"description":"The public API version. Omit this header to use version 1. Send 1 explicitly when you want to pin the current contract.","schema":{"type":"string","enum":["1"],"default":"1"}}],"responses":{"200":{"description":"A streamed UI message response.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"text/event-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"The request body or message list is invalid.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"The request is larger than the supported message limit.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"The request rate limit has been reached.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"The assistant failed before its response stream started.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The documentation assistant is unavailable.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/calendar/feed":{"get":{"tags":["Calendar"],"summary":"Read a calendar subscription feed","description":"Returns an iCalendar document for a legacy opaque calendar token. The token is used as a bearer credential and is never forwarded as an upstream query parameter.","operationId":"getCalendarFeedByToken","security":[{"calendarFeedToken":[]}],"parameters":[{"name":"X-MySched-API-Version","in":"header","required":false,"description":"The public API version. Omit this header to use version 1. Send 1 explicitly when you want to pin the current contract.","schema":{"type":"string","enum":["1"],"default":"1"}},{"name":"token","in":"query","required":true,"description":"The opaque calendar subscription token. It is sent to the feed service as a bearer credential.","schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[A-Za-z0-9_-]+$"}}],"responses":{"200":{"description":"An iCalendar subscription document.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"404":{"description":"The calendar feed token is missing or not found.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"The calendar feed service returned an unexpected response.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The calendar feed service is temporarily unavailable.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/calendar/feed/{id}":{"get":{"tags":["Calendar"],"summary":"Read a calendar subscription feed by identifier","description":"Returns an iCalendar document for a path-based feed identifier. The identifier is a capability and should be kept private.","operationId":"getCalendarFeedById","security":[{"calendarFeedToken":[]}],"parameters":[{"name":"X-MySched-API-Version","in":"header","required":false,"description":"The public API version. Omit this header to use version 1. Send 1 explicitly when you want to pin the current contract.","schema":{"type":"string","enum":["1"],"default":"1"}},{"name":"id","in":"path","required":true,"description":"A 64-character lowercase hexadecimal calendar feed identifier.","schema":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[0-9a-f]{64}$"}}],"responses":{"200":{"description":"An iCalendar subscription document.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"text/calendar":{"schema":{"type":"string"}}}},"404":{"description":"The calendar feed identifier is invalid or not found.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"The calendar feed service returned an unexpected response.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"The calendar feed service is temporarily unavailable.","headers":{"X-MySched-API-Version":{"description":"The version served for this response.","schema":{"type":"string","example":"1"}},"RateLimit-Policy":{"description":"The public API quota policy. The chat endpoint publishes its own policy.","schema":{"type":"string","example":"\"public-api\";q=60;w=60"}},"RateLimit":{"description":"The remaining quota and seconds until the current window resets.","schema":{"type":"string","example":"\"public-api\";r=59;t=42"}},"RateLimit-Limit":{"description":"Compatibility form of the public API request limit.","schema":{"type":"integer","example":60}},"RateLimit-Remaining":{"description":"Compatibility form of the remaining request count.","schema":{"type":"integer","example":59}},"RateLimit-Reset":{"description":"Compatibility form of the reset time as Unix seconds.","schema":{"type":"integer","example":1788218400}},"Retry-After":{"description":"Seconds to wait before retrying a throttled request.","schema":{"type":"integer","example":60}},"Deprecation":{"description":"RFC 9745 deprecation timestamp. Present only during an announced migration window.","schema":{"type":"string","example":"@1798761600"}},"Sunset":{"description":"RFC 8594 date when a deprecated resource is expected to stop responding.","schema":{"type":"string","example":"Tue, 01 Dec 2026 00:00:00 GMT"}},"Link":{"description":"RFC 8288 link to the MySched API deprecation policy.","schema":{"type":"string","example":"<https://getmysched.com/developers#api-versioning>; rel=\"deprecation\""}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"securitySchemes":{"calendarFeedToken":{"type":"apiKey","in":"query","name":"token","description":"A private, read-only calendar feed capability. It is not an OAuth access token and it grants access to one feed only."}},"schemas":{"Problem":{"type":"object","description":"An RFC 9457 JSON Problem Details response with MySched recovery fields.","required":["type","title","status","detail","code","hint"],"properties":{"type":{"type":"string","format":"uri-reference"},"title":{"type":"string"},"status":{"type":"integer","minimum":400,"maximum":599},"detail":{"type":"string"},"code":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"hint":{"type":"string"},"instance":{"type":"string","format":"uri-reference"}},"additionalProperties":true},"CampusPublicSchedule":{"type":"object","required":["link","institution","term","publication","programs","sections","meetings","resolved_at"],"properties":{"link":{"$ref":"#/components/schemas/ScheduleLink"},"institution":{"$ref":"#/components/schemas/Institution"},"term":{"$ref":"#/components/schemas/Term"},"publication":{"$ref":"#/components/schemas/Publication"},"programs":{"type":"array","items":{"$ref":"#/components/schemas/Program"}},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"}},"meetings":{"type":"array","items":{"$ref":"#/components/schemas/CampusPublicMeeting"}},"resolved_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"CampusPublicMeeting":{"type":"object","required":["program_code","program_name","year_level","section_code","course_code","course_title","day_of_week","starts_at","ends_at","room","instructor","meeting_type","modality"],"properties":{"program_code":{"type":"string"},"program_name":{"type":"string"},"year_level":{"type":"integer","minimum":1,"maximum":20},"section_code":{"type":"string"},"course_code":{"type":"string"},"course_title":{"type":"string"},"day_of_week":{"type":"integer","minimum":1,"maximum":7},"starts_at":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"ends_at":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"room":{"$ref":"#/components/schemas/Room"},"instructor":{"$ref":"#/components/schemas/Instructor"},"meeting_type":{"type":"string"},"modality":{"type":"string"},"effective_from":{"type":["string","null"],"format":"date"},"effective_until":{"type":["string","null"],"format":"date"},"recurrence_rule":{"type":["object","null"],"additionalProperties":true}},"additionalProperties":false},"ScheduleLink":{"type":"object","required":["type","year_level","section_code"],"properties":{"type":{"type":"string","enum":["school","program","year","section"]},"year_level":{"type":["integer","null"],"minimum":1,"maximum":20},"section_code":{"type":["string","null"]}},"additionalProperties":false},"Institution":{"type":"object","required":["name","slug","brand_accent"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"brand_accent":{"type":"string"}},"additionalProperties":false},"Term":{"type":"object","required":["name","starts_on","ends_on"],"properties":{"name":{"type":"string"},"starts_on":{"type":["string","null"],"format":"date"},"ends_on":{"type":["string","null"],"format":"date"}},"additionalProperties":false},"Publication":{"type":"object","required":["revision","published_at"],"properties":{"revision":{"type":"integer","minimum":1},"published_at":{"type":"string","format":"date-time"}},"additionalProperties":false},"Program":{"type":"object","required":["code","name","degree_level"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"degree_level":{"type":"string"}},"additionalProperties":false},"Section":{"type":"object","required":["program_code","year_level","section_code"],"properties":{"program_code":{"type":"string"},"year_level":{"type":"integer","minimum":1,"maximum":20},"section_code":{"type":"string"}},"additionalProperties":false},"Room":{"type":["object","null"],"required":["code","name","building"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"building":{"type":["string","null"]}},"additionalProperties":false},"Instructor":{"type":["object","null"],"required":["full_name"],"properties":{"full_name":{"type":"string"}},"additionalProperties":false},"SearchResult":{"type":"object","required":["id","type","content","url"],"properties":{"id":{"type":"string"},"type":{"type":"string"},"content":{"type":"string"},"breadcrumbs":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri-reference"}},"additionalProperties":false},"ChatRequest":{"type":"object","required":["messages"],"properties":{"messages":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/ChatMessage"}}},"additionalProperties":false},"ChatMessage":{"type":"object","required":["id","role","parts"],"properties":{"id":{"type":"string"},"role":{"type":"string","enum":["user","assistant"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatPart"}}},"additionalProperties":false},"ChatPart":{"oneOf":[{"type":"object","required":["type","text"],"properties":{"type":{"const":"text"},"text":{"type":"string"}},"additionalProperties":false},{"type":"object","required":["type"],"properties":{"type":{"const":"step-start"}},"additionalProperties":false}]}}}}