Canvas · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for Canvas LMS REST Feature Flags API
17 actions
17 updates
phrasing
extends
openapi/canvas-feature-flags-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 17 · first 16 shown; the file carries all of them
$.info
$.paths['/v1/courses/{course_id}/features'].get
$.paths['/v1/accounts/{account_id}/features'].get
$.paths['/v1/users/{user_id}/features'].get
$.paths['/v1/courses/{course_id}/features/enabled'].get
$.paths['/v1/accounts/{account_id}/features/enabled'].get
$.paths['/v1/users/{user_id}/features/enabled'].get
$.paths['/v1/features/environment'].get
$.paths['/v1/courses/{course_id}/features/flags/{feature}'].get
$.paths['/v1/courses/{course_id}/features/flags/{feature}'].put
$.paths['/v1/courses/{course_id}/features/flags/{feature}'].delete
$.paths['/v1/accounts/{account_id}/features/flags/{feature}'].get
$.paths['/v1/accounts/{account_id}/features/flags/{feature}'].put
$.paths['/v1/accounts/{account_id}/features/flags/{feature}'].delete
$.paths['/v1/users/{user_id}/features/flags/{feature}'].get
$.paths['/v1/users/{user_id}/features/flags/{feature}'].put
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 Feature Flags API
version: 1.0.0
extends: openapi/canvas-feature-flags-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: 16
- target: $.paths['/v1/courses/{course_id}/features'].get
update:
x-apievangelist-phrasing:
intent: List features for a course
effect: read
questions:
- Which feature options can be toggled for a course?
- Can I hide features that are already turned on by a parent account?
instructions:
- text: List the features available to course {course_id}.
slots:
course_id: path.course_id
- text: 'Show course {course_id} features, hiding inherited enabled ones: {hide_inherited_enabled}.'
slots:
course_id: path.course_id
hide_inherited_enabled: query.hide_inherited_enabled
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/features'].get
update:
x-apievangelist-phrasing:
intent: List features for an account
effect: read
questions:
- What features can an admin enable or disable for an account?
- Can I see every feature option that applies to a sub-account?
instructions:
- text: List the features available to account {account_id}.
slots:
account_id: path.account_id
- text: Show account {account_id} feature options without inherited enabled ones ({hide_inherited_enabled}).
slots:
account_id: path.account_id
hide_inherited_enabled: query.hide_inherited_enabled
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/features'].get
update:
x-apievangelist-phrasing:
intent: List features for a user
effect: read
questions:
- Which user-level feature previews can a person opt into?
- How do I see the full feature list that applies to one user?
instructions:
- text: List the features available to user {user_id}.
slots:
user_id: path.user_id
- text: Show all feature options for user {user_id}.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/features/enabled'].get
update:
x-apievangelist-phrasing:
intent: List features turned on for a course
effect: read
questions:
- Which features are currently switched on in my course?
- Can I get just the names of enabled course features?
instructions:
- text: List enabled features in course {course_id}.
slots:
course_id: path.course_id
- text: Which feature names are active for course {course_id}.
slots:
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/features/enabled'].get
update:
x-apievangelist-phrasing:
intent: List features turned on for an account
effect: read
questions:
- What features are enabled on our account right now?
- Is there a quick list of only the active feature names for an account?
instructions:
- text: List enabled features in account {account_id}.
slots:
account_id: path.account_id
- text: Which feature names are active for account {account_id}.
slots:
account_id: path.account_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/features/enabled'].get
update:
x-apievangelist-phrasing:
intent: List features turned on for a user
effect: read
questions:
- Which feature previews has a user already enabled?
- Can I get only the enabled feature names for one person?
instructions:
- text: List enabled features for user {user_id}.
slots:
user_id: path.user_id
- text: Which feature names are active for user {user_id}.
slots:
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/features/environment'].get
update:
x-apievangelist-phrasing:
intent: Get global UI feature settings
effect: read
questions:
- What global feature options shape the Canvas user interface?
- Can I read the same feature hash the web UI receives in its environment?
instructions:
- text: Show the environment-wide feature options.
- text: Get the global UI feature flags for this Canvas instance.
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/features/flags/{feature}'].get
update:
x-apievangelist-phrasing:
intent: Check a feature flag on a course
effect: read
questions:
- Is a feature on or off for a course, and is that inherited from the account?
- Can I tell where a course's feature flag was set?
instructions:
- text: Get the {feature} feature flag for course {course_id}.
slots:
feature: path.feature
course_id: path.course_id
- text: Check whether {feature} is enabled in course {course_id}.
slots:
feature: path.feature
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/features/flags/{feature}'].put
update:
x-apievangelist-phrasing:
intent: Set a feature flag on a course
effect: write
questions:
- Can a teacher turn a feature on for just one course?
- Why would setting a course feature flag fail?
instructions:
- text: Set feature {feature} to {state} in course {course_id}.
slots:
feature: path.feature
state: requestBody.state
course_id: path.course_id
- text: Turn on {feature} for course {course_id}.
slots:
feature: path.feature
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/courses/{course_id}/features/flags/{feature}'].delete
update:
x-apievangelist-phrasing:
intent: Remove a feature flag from a course
effect: destructive
questions:
- What happens to a course when its own feature flag is removed?
- Can I make a course go back to inheriting a feature setting?
instructions:
- text: Remove the {feature} flag from course {course_id}.
slots:
feature: path.feature
course_id: path.course_id
- text: Clear course {course_id}'s own setting for {feature} so it inherits again.
slots:
feature: path.feature
course_id: path.course_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/features/flags/{feature}'].get
update:
x-apievangelist-phrasing:
intent: Check a feature flag on an account
effect: read
questions:
- Is a given feature enabled for my account?
- Does an account feature flag come from a parent account?
instructions:
- text: Get the {feature} feature flag for account {account_id}.
slots:
feature: path.feature
account_id: path.account_id
- text: Check whether {feature} is on for account {account_id}.
slots:
feature: path.feature
account_id: path.account_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/features/flags/{feature}'].put
update:
x-apievangelist-phrasing:
intent: Set a feature flag on an account
effect: write
questions:
- Can an admin lock a feature on for all courses in an account?
- What states can an account-level feature flag take?
instructions:
- text: Set feature {feature} to {state} in account {account_id}.
slots:
feature: path.feature
state: requestBody.state
account_id: path.account_id
- text: Enable {feature} across account {account_id}.
slots:
feature: path.feature
account_id: path.account_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/accounts/{account_id}/features/flags/{feature}'].delete
update:
x-apievangelist-phrasing:
intent: Remove a feature flag from an account
effect: destructive
questions:
- Can I delete an account's feature flag so it follows the parent again?
- Must the flag be defined directly on the account to remove it?
instructions:
- text: Remove the {feature} flag from account {account_id}.
slots:
feature: path.feature
account_id: path.account_id
- text: Clear account {account_id}'s own setting for {feature}.
slots:
feature: path.feature
account_id: path.account_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/features/flags/{feature}'].get
update:
x-apievangelist-phrasing:
intent: Check a feature flag on a user
effect: read
questions:
- Has a particular user opted into a feature?
- Can I see a user's flag for one feature and where it comes from?
instructions:
- text: Get the {feature} feature flag for user {user_id}.
slots:
feature: path.feature
user_id: path.user_id
- text: Check whether {feature} is on for user {user_id}.
slots:
feature: path.feature
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/features/flags/{feature}'].put
update:
x-apievangelist-phrasing:
intent: Set a feature flag on a user
effect: write
questions:
- Can I turn a feature preview on for an individual user?
- Is a user flag blocked if the account already locked the feature?
instructions:
- text: Set feature {feature} to {state} for user {user_id}.
slots:
feature: path.feature
state: requestBody.state
user_id: path.user_id
- text: Opt user {user_id} into {feature}.
slots:
feature: path.feature
user_id: path.user_id
method: generated
generated: '2026-10-01'
- target: $.paths['/v1/users/{user_id}/features/flags/{feature}'].delete
update:
x-apievangelist-phrasing:
intent: Remove a feature flag from a user
effect: destructive
questions:
- Can I reset a user's personal feature setting?
- What does a user fall back to after their feature flag is removed?
instructions:
- text: Remove the {feature} flag from user {user_id}.
slots:
feature: path.feature
user_id: path.user_id
- text: Clear user {user_id}'s personal setting for {feature}.
slots:
feature: path.feature
user_id: path.user_id
method: generated
generated: '2026-10-01'