Canvas · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Canvas LMS REST Calendar Events API
13 actions
13 updates
phrasing
extends
openapi/canvas-calendar-events-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for Canvas's API. It is a proposal applied on top of the contract, not a document Canvas publishes.
What the actions change
x-apievangelist-phrasing
Targets 13
$.info
$.paths['/v1/calendar_events'].get
$.paths['/v1/calendar_events'].post
$.paths['/v1/users/{user_id}/calendar_events'].get
$.paths['/v1/calendar_events/{id}'].get
$.paths['/v1/calendar_events/{id}'].put
$.paths['/v1/calendar_events/{id}'].delete
$.paths['/v1/calendar_events/{id}/reservations'].post
$.paths['/v1/calendar_events/{id}/reservations/{participant_id}'].post
$.paths['/v1/calendar_events/save_enabled_account_calendars'].post
$.paths['/v1/courses/{course_id}/calendar_events/timetable'].get
$.paths['/v1/courses/{course_id}/calendar_events/timetable'].post
$.paths['/v1/courses/{course_id}/calendar_events/timetable_events'].post
OpenAPI Overlay
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
title: API Evangelist conversational phrasing for Canvas LMS REST Calendar Events API
version: 1.0.0
extends: openapi/canvas-calendar-events-api-openapi.yml
actions:
- target: $.info
update:
x-apievangelist-phrasing:
method: generated
generated: '2026-10-01'
generator: build-phrasing.py
label: Generated by API Evangelist
operations: 12
- target: $.paths['/v1/calendar_events'].get
update:
x-apievangelist-phrasing:
intent: List my calendar events
effect: read
questions:
- What's on my Canvas calendar between two dates?
- Can I list only assignments, or only events, for certain courses?
- How do I include undated events in my calendar listing?
instructions:
- text: List my calendar events from {start_date} to {end_date}.
slots:
start_date: query.start_date
end_date: query.end_date
- text: Show my {type} calendar items for {context_codes}.
slots:
type: query.type
context_codes: query.context_codes
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events'].post
update:
x-apievangelist-phrasing:
intent: Create a calendar event
effect: write
questions:
- How do I add an event to a course calendar?
- Can I make a recurring calendar event that repeats weekly?
instructions:
- text: Create a calendar event {title} on {context_code} starting {start_at}.
slots:
title: requestBody.calendar_event[title]
context_code: requestBody.calendar_event[context_code]
start_at: requestBody.calendar_event[start_at]
- text: Schedule {title} for {context_code} from {start_at} to {end_at} at {location_name}.
slots:
title: requestBody.calendar_event[title]
context_code: requestBody.calendar_event[context_code]
start_at: requestBody.calendar_event[start_at]
end_at: requestBody.calendar_event[end_at]
location_name: requestBody.calendar_event[location_name]
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/calendar_events'].get
update:
x-apievangelist-phrasing:
intent: List another user's calendar events
effect: read
questions:
- As a parent observer, can I see my student's calendar?
- How do I list a specific user's events and assignments in a date range?
instructions:
- text: List calendar events for user {user_id}.
slots:
user_id: path.user_id
- text: Show user {user_id}'s calendar from {start_date} to {end_date}.
slots:
user_id: path.user_id
start_date: query.start_date
end_date: query.end_date
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events/{id}'].get
update:
x-apievangelist-phrasing:
intent: Get one calendar event or assignment
effect: read
questions:
- How do I see the full details of a single calendar entry?
- Can I look up one calendar event by its id?
instructions:
- text: Show calendar event {id}.
slots:
id: path.id
- text: Get the details of calendar entry {id}.
slots:
id: path.id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events/{id}'].put
update:
x-apievangelist-phrasing:
intent: Update a calendar event
effect: write
questions:
- Can I move an existing event to a new time or location?
- How do I change every event in a recurring series instead of just one?
instructions:
- text: Move calendar event {id} to start at {start_at}.
slots:
id: path.id
start_at: requestBody.calendar_event[start_at]
- text: Rename event {id} to {title}, applying to {which} in the series.
slots:
id: path.id
title: requestBody.calendar_event[title]
which: requestBody.which
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events/{id}'].delete
update:
x-apievangelist-phrasing:
intent: Delete a calendar event
effect: destructive
questions:
- How do I cancel an event and tell attendees why?
- Can I delete just one occurrence of a recurring event?
instructions:
- text: Delete calendar event {id}.
slots:
id: path.id
- text: Cancel event {id} with reason {cancel_reason}.
slots:
id: path.id
cancel_reason: query.cancel_reason
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events/{id}/reservations'].post
update:
x-apievangelist-phrasing:
intent: Reserve an appointment time slot
effect: write
questions:
- How do I book an open office-hours slot?
- Can I swap my existing booking for a different time slot?
instructions:
- text: Reserve time slot {id}.
slots:
id: path.id
- text: 'Book slot {id} with comment {comments}, cancelling my existing booking: {cancel_existing}.'
slots:
id: path.id
comments: requestBody.comments
cancel_existing: requestBody.cancel_existing
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events/{id}/reservations/{participant_id}'].post
update:
x-apievangelist-phrasing:
intent: Reserve a time slot for a specific participant
effect: write
questions:
- Can an instructor book an appointment slot on behalf of a particular student?
- How do I reserve a slot for a named participant or group?
instructions:
- text: Reserve slot {id} for participant {participant_id}.
slots:
id: path.id
participant_id: path.participant_id
- text: Book time slot {id} on behalf of {participant_id} with note {comments}.
slots:
id: path.id
participant_id: path.participant_id
comments: requestBody.comments
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/calendar_events/save_enabled_account_calendars'].post
update:
x-apievangelist-phrasing:
intent: Choose which account calendars I see
effect: write
questions:
- How do I turn on account-level calendars in my calendar view?
- Can I mark the account calendars feature as seen?
instructions:
- text: Enable account calendars {enabled_account_calendars} for me.
slots:
enabled_account_calendars: requestBody.enabled_account_calendars
- text: 'Save my enabled account calendars and mark the feature seen: {mark_feature_as_seen}.'
slots:
mark_feature_as_seen: requestBody.mark_feature_as_seen
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/calendar_events/timetable'].get
update:
x-apievangelist-phrasing:
intent: Get a course's timetable
effect: read
questions:
- What weekly class schedule was set for a course?
- Can I read back the timetable a course was given?
instructions:
- text: Get the timetable for course {course_id}.
slots:
course_id: path.course_id
- text: Show course {course_id}'s weekly meeting schedule.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/calendar_events/timetable'].post
update:
x-apievangelist-phrasing:
intent: Generate a course's weekly timetable
effect: write
questions:
- Can I auto-generate class meetings like Monday and Wednesday at 2pm for a course?
- How do I set a section's weekdays and meeting times as a timetable?
instructions:
- text: Set course {course_id}'s timetable to meet on {weekdays} from {start_time} to {end_time}.
slots:
course_id: path.course_id
weekdays: requestBody.timetables[course_section_id][weekdays]
start_time: requestBody.timetables[course_section_id][start_time]
end_time: requestBody.timetables[course_section_id][end_time]
- text: Generate weekly timetable events for course {course_id} at {location_name}.
slots:
course_id: path.course_id
location_name: requestBody.timetables[course_section_id][location_name]
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/calendar_events/timetable_events'].post
update:
x-apievangelist-phrasing:
intent: Write timetable events directly
effect: write
questions:
- Can I push my own list of class meeting events into a course timetable instead of a weekly pattern?
- How do I sync explicit timetable events for one course section?
instructions:
- text: Write timetable events {events} directly to course {course_id}.
slots:
events: requestBody.events
course_id: path.course_id
- text: Replace section {course_section_id}'s timetable events in course {course_id} with {events}.
slots:
course_section_id: requestBody.course_section_id
course_id: path.course_id
events: requestBody.events
method: generated
generated: '2026-10-01'