Columbia course calendar subscription guide
Learn how to get Vergil tokens, subscribe to your Columbia schedule in Apple, Google, or Outlook Calendar, and safely update or revoke your subscription.
1. Get your Vergil tokens
Sign in to Vergil with your university account and complete Duo verification. In browser developer tools, open Application → Local Storage → https://vergil.columbia.edu. Copy the complete access_token value (required) and, optionally, refresh_token from the same session without adding quotes. If absent, sign in again with the Network panel open and inspect the token.oauth2 response.
2. Create your subscription
Return to the create page, select a term, and enter your Access Token and an optional Refresh Token. Both fields clear on every submission, including lookup, so paste them again for each request. Add any holidays or canceled class dates under “Skip dates without classes,” one YYYY-MM-DD date per line. Each verified UNI has one calendar: creating again updates the existing calendar. On first creation, save the full private management link, including its # key.
3. Add to your calendar app
- Apple Calendar: Use “Open in calendar app,” or File → New Calendar Subscription on Mac.
- Google Calendar: On the website, choose Other calendars → + → From URL, and paste the HTTPS subscription link.
- Outlook: Choose Add calendar → Subscribe from web, and paste the HTTPS subscription link.
4. Update or revoke your calendar
After adding or dropping courses, open your private management link and submit a fresh Access Token and, optionally, a Refresh Token. Updating the chosen term replaces only its snapshot; previously imported terms stay in the same feed. Past university terms are not fetched automatically. Ordinary updates keep the subscription URL; only explicitly replacing it changes it. A failed update preserves the previous snapshot. To disable both links and delete the saved schedule, revoke the subscription on the management page.
Open existing calendar
On the homepage, enter a fresh Access Token and an optional Refresh Token, then choose “Open existing calendar.” The server verifies your UNI with the university and matches its hash to your unique calendar. If found, it opens automatically; lookup alone changes no saved courses. Both token fields clear after lookup, so enter fresh credentials again to update or replace the subscription URL. Ordinary updates preserve both links; replacing the subscription URL keeps the management link. Lookup returns zero or one normalized snapshot and its imported term history, never school tokens or management keys. No plaintext UNI or school tokens are retained. The original management key cannot be recovered from its hash; lookup provides an alternative for finding and updating your calendar or replacing its subscription URL if you lose it, but revocation still requires the saved management key.
Replace a subscription URL
If your subscription URL is exposed or you want a new one, replace it using the private management key or a fresh Access Token and optional Refresh Token. Confirm the warning: the old feed immediately returns 404, and you must subscribe again in your calendar app with the new URL. Courses, imported semesters, and the management link remain unchanged. Replacement does not erase cached copies or invalidate a leaked management key; revocation still requires that key and deletes the calendar.
Refresh timing and privacy
Access Token is required; Refresh Token is optional and is only used for at most one refresh after an upstream HTTP 401 during the same request. An expired Access Token without a Refresh Token returns 401; obtain a fresh Access Token and submit again. This service does not persist your university tokens, including refreshed tokens, or sync courses in the background. Tokens pass through the server for each requested update, so use a deployment you trust. Your calendar app controls refresh timing; updates may not appear immediately. Anyone with the subscription link can read your schedule, and the private management link grants update and revocation access. Protect both links and your tokens.
Enable JavaScript to create or manage a subscription.