Canvas Discussion Topics API
The Discussion Topics API from Canvas — 36 operation(s) for discussion topics.
Operations 58
Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay
GET
/v1/courses/{course_id}/discussion_topics
List a course's discussion topics · List discussion topics
#
Ask an LLM
“What discussion topics are open in my Canvas course right now?”
“Can I filter a course's discussions to only unread ones or only announcements?”
Tell an agent
List the discussion topics in course {course_id}.
Show only the announcements in course {course_id}, newest first.
POST
/v1/courses/{course_id}/discussion_topics
Start a new discussion in a course · Create a new discussion topic
#
Ask an LLM
“How do I post a new discussion prompt for my whole class?”
“Can a new course discussion be scheduled to appear later or require students to post first?”
Tell an agent
Create a discussion titled {title} in course {course_id}.
Post a course announcement in {course_id} with the message {message}.
GET
/v1/groups/{group_id}/discussion_topics
List a group's discussion topics · List discussion topics
#
Ask an LLM
“Which discussions exist inside my student group's space?”
“Can I see only the pinned or locked threads in a group?”
Tell an agent
List all discussion threads in group {group_id}.
Find group {group_id} threads mentioning {search_term}.
POST
/v1/groups/{group_id}/discussion_topics
Start a new discussion in a group · Create a new discussion topic
#
Ask an LLM
“Can students open a new thread just for their project group?”
“What does it take to post a discussion inside a group rather than the course?”
Tell an agent
Open a new group thread in {group_id} called {title}.
Start a discussion for group {group_id} that says {message}.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}
Edit a course discussion topic · Update a topic
#
Ask an LLM
“Can I rename or re-lock a class discussion after it's already posted?”
“How do I pin an existing course discussion to the top?”
Tell an agent
Rename topic {topic_id} in course {course_id} to {title}.
Pin course {course_id} discussion {topic_id}.
DELETE
/v1/courses/{course_id}/discussion_topics/{topic_id}
Delete a course discussion topic · Delete a topic
#
Ask an LLM
“Does deleting a graded class discussion also remove its assignment?”
“Can I permanently remove a discussion from my course?”
Tell an agent destructive · confirm first
Delete discussion {topic_id} from course {course_id}.
Remove course {course_id} topic {topic_id} and its assignment.
GET
/v1/courses/{course_id}/discussion_topics/{topic_id}
Get one course discussion topic · Get a single topic
#
Ask an LLM
“How can I pull the settings and details of a single course discussion?”
“Where do I see whether a specific class discussion is locked or graded?”
Tell an agent
Get discussion topic {topic_id} from course {course_id}.
Show me the details of course {course_id} topic {topic_id}.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}
Edit a group discussion topic · Update a topic
#
Ask an LLM
“Can a group discussion's title or message be changed after posting?”
“Is it possible to lock a thread inside a student group?”
Tell an agent
Change the message of group {group_id} thread {topic_id} to {message}.
Lock group {group_id} discussion {topic_id} on {lock_at}.
DELETE
/v1/groups/{group_id}/discussion_topics/{topic_id}
Delete a group discussion topic · Delete a topic
#
Ask an LLM
“How do I get rid of a thread in a student group?”
“Can a group discussion be deleted for good?”
Tell an agent destructive · confirm first
Delete thread {topic_id} from group {group_id}.
Remove group {group_id} discussion {topic_id}.
GET
/v1/groups/{group_id}/discussion_topics/{topic_id}
Get one group discussion topic · Get a single topic
#
Ask an LLM
“Can I look up one particular thread in a student group?”
“What settings does a given group discussion have?”
Tell an agent
Fetch group {group_id} discussion {topic_id}.
Look up thread {topic_id} in group {group_id}.
POST
/v1/courses/{course_id}/discussion_topics/reorder
Reorder pinned discussions in a course · Reorder pinned topics
#
Ask an LLM
“Can I change the order of the pinned discussions at the top of my course?”
“Do I have to include every pinned topic when reordering course discussions?”
Tell an agent
Reorder the pinned discussions in course {course_id} as {order}.
Put course {course_id} pinned topics in this sequence: {order}.
POST
/v1/groups/{group_id}/discussion_topics/reorder
Reorder pinned discussions in a group · Reorder pinned topics
#
Ask an LLM
“Is there a way to rearrange pinned threads in a group space?”
“How are pinned group discussions sorted, and can I set the order?”
Tell an agent
Arrange pinned threads in group {group_id} in the order {order}.
Set group {group_id} pinned discussion order to {order}.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{id}
Edit a post in a course discussion · Update an entry
#
Ask an LLM
“Can I edit a reply I already posted in a class discussion?”
“Who is allowed to change someone's post in a course discussion?”
Tell an agent
Edit entry {id} in course {course_id} topic {topic_id} to say {message}.
Fix the text of my course discussion post {id} under topic {topic_id} in {course_id}.
DELETE
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{id}
Delete a post from a course discussion · Delete an entry
#
Ask an LLM
“Can an instructor remove an inappropriate post from a class discussion?”
“What permissions do I need to delete a course discussion entry?”
Tell an agent destructive · confirm first
Delete entry {id} from topic {topic_id} in course {course_id}.
Remove post {id} from course {course_id} discussion {topic_id}.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{id}
Edit a post in a group discussion · Update an entry
#
Ask an LLM
“Is editing my own message in a group thread possible?”
“Can a group member revise what they wrote in a group discussion?”
Tell an agent
Update group {group_id} post {id} in thread {topic_id} with {message}.
Revise my entry {id} in group {group_id} discussion {topic_id}.
DELETE
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{id}
Delete a post from a group discussion · Delete an entry
#
Ask an LLM
“How do I take down a message someone posted in a group thread?”
“Can I delete my own post from a group discussion?”
Tell an agent destructive · confirm first
Delete group {group_id} entry {id} from thread {topic_id}.
Take down post {id} in group {group_id} topic {topic_id}.
GET
/v1/courses/{course_id}/discussion_topics/{topic_id}/summaries
Get the last AI summary of a course discussion · Find Last Summary
#
Ask an LLM
“Can I see the most recent AI-generated summary of a class discussion?”
“What prompt did I use for the last summary of this course discussion?”
Tell an agent
Show the last summary generated for course {course_id} topic {topic_id}.
Fetch the latest discussion summary and my prompt for {topic_id} in {course_id}.
POST
/v1/courses/{course_id}/discussion_topics/{topic_id}/summaries
Generate an AI summary of a course discussion · Find or Create Summary
#
Ask an LLM
“Can Canvas summarize a long class discussion for me?”
“Is it possible to steer a course discussion summary with my own focus prompt?”
Tell an agent
Summarize discussion {topic_id} in course {course_id}.
Generate a summary of course {course_id} topic {topic_id} focused on {userInput}.
GET
/v1/groups/{group_id}/discussion_topics/{topic_id}/summaries
Get the last AI summary of a group discussion · Find Last Summary
#
Ask an LLM
“Where can I find the previous summary made for a group thread?”
“Was a summary already produced for this group discussion?”
Tell an agent
Retrieve the previous summary for group {group_id} thread {topic_id}.
Get the most recent group {group_id} summary of topic {topic_id}.
POST
/v1/groups/{group_id}/discussion_topics/{topic_id}/summaries
Generate an AI summary of a group discussion · Find or Create Summary
#
Ask an LLM
“Can I get a quick recap of what my project group discussed?”
“Does the group thread summary report token usage?”
Tell an agent
Create a recap of group {group_id} thread {topic_id}.
Summarize group {group_id} discussion {topic_id} with emphasis on {userInput}.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}/summaries/disable
Turn off summaries for a course discussion · Disable summary
#
Ask an LLM
“Can I switch off AI summaries on one class discussion?”
“Is the endpoint for disabling course discussion summaries deprecated?”
Tell an agent
Disable the summary on course {course_id} topic {topic_id}.
Turn off discussion summarizing for {topic_id} in course {course_id}.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}/summaries/disable
Turn off summaries for a group discussion · Disable summary
#
Ask an LLM
“How do I stop summaries from showing on a group thread?”
“Can summarization be disabled for a single group discussion?”
Tell an agent
Switch off summaries for group {group_id} thread {topic_id}.
Disable group {group_id} discussion {topic_id} summary.
POST
/v1/courses/{course_id}/discussion_topics/{topic_id}/summaries/{summary_id}/feedback
Rate an AI summary of a course discussion · Summary Feedback
#
Ask an LLM
“Can I give a thumbs up or down on a course discussion summary?”
“Is there a way to leave a comment on how good a class discussion summary was?”
Tell an agent
Record {_action} feedback on summary {summary_id} for course {course_id} topic {topic_id}.
Comment {comment} on course {course_id} discussion {topic_id} summary {summary_id}.
POST
/v1/groups/{group_id}/discussion_topics/{topic_id}/summaries/{summary_id}/feedback
Rate an AI summary of a group discussion · Summary Feedback
#
Ask an LLM
“Where do I send feedback about a group thread summary?”
“Can I flag a group discussion summary as unhelpful?”
Tell an agent
Send {_action} feedback for group {group_id} thread {topic_id} summary {summary_id}.
Leave the note {comment} on summary {summary_id} of group {group_id} topic {topic_id}.
GET
/v1/courses/{course_id}/discussion_topics/{topic_id}/view
Get a whole course discussion with all posts · Get the full topic
#
Ask an LLM
“Can I export an entire class discussion with every post and author in one call?”
“What's the fastest way to read a full course discussion thread tree?”
Tell an agent
Get the full view of course {course_id} discussion {topic_id} with all entries.
Dump every post and author in topic {topic_id} of course {course_id}.
GET
/v1/groups/{group_id}/discussion_topics/{topic_id}/view
Get a whole group discussion with all posts · Get the full topic
#
Ask an LLM
“Can I load an entire group thread including all replies at once?”
“Is there a cached full view of a group discussion?”
Tell an agent
Load the complete group {group_id} thread {topic_id} with replies.
Pull the whole conversation tree for group {group_id} topic {topic_id}.
POST
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries
Post a response to a course discussion · Post an entry
#
Ask an LLM
“Can I submit my response to a class discussion through the API?”
“Is attaching a file to a course discussion post supported?”
Tell an agent
Post {message} as a new entry in course {course_id} topic {topic_id}.
Reply to the course {course_id} prompt {topic_id} with file {attachment}.
GET
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries
List top-level posts in a course discussion · List topic entries
#
Ask an LLM
“Which students have posted top-level responses in a class discussion?”
“Do I need to post first before I can list entries in a course discussion?”
Tell an agent
List the top-level entries in course {course_id} topic {topic_id}.
Show the main responses posted to discussion {topic_id} in {course_id}.
POST
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries
Post a response to a group discussion · Post an entry
#
Ask an LLM
“Can I add a new post to my project group's thread?”
“Is a file upload allowed when posting in a group discussion?”
Tell an agent
Write {message} in group {group_id} thread {topic_id}.
Add a group {group_id} post to topic {topic_id} attaching {attachment}.
GET
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries
List top-level posts in a group discussion · List topic entries
#
Ask an LLM
“What has everyone in my group posted to our thread so far?”
“Can I page through the main posts of a group discussion?”
Tell an agent
List top-level posts in group {group_id} thread {topic_id}.
Show what members wrote in group {group_id} discussion {topic_id}.
POST
/v1/courses/{course_id}/discussion_topics/{topic_id}/duplicate
Copy a course discussion topic · Duplicate discussion topic
#
Ask an LLM
“Can I duplicate an existing class discussion instead of recreating it?”
“Does copying a course discussion keep it in the same course?”
Tell an agent
Duplicate discussion {topic_id} in course {course_id}.
Make a copy of course {course_id} topic {topic_id}.
POST
/v1/groups/{group_id}/discussion_topics/{topic_id}/duplicate
Copy a group discussion topic · Duplicate discussion topic
#
Ask an LLM
“Is cloning a thread inside a group possible?”
“Can I reuse a group discussion by duplicating it?”
Tell an agent
Clone group {group_id} thread {topic_id}.
Duplicate topic {topic_id} within group {group_id}.
POST
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{entry_id}/replies
Reply to a post in a course discussion · Post a reply
#
Ask an LLM
“Can I respond directly to a classmate's post rather than the main prompt?”
“Is it possible to attach a file to a reply in a course discussion?”
Tell an agent
Reply {message} to entry {entry_id} in course {course_id} topic {topic_id}.
Respond to course {course_id} post {entry_id} under {topic_id} with file {attachment}.
GET
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{entry_id}/replies
List replies to a post in a course discussion · List entry replies
#
Ask an LLM
“Who replied to a particular student's post in a class discussion?”
“Can I see the replies under one entry in a course discussion?”
Tell an agent
List replies to entry {entry_id} in course {course_id} topic {topic_id}.
Show the responses under course post {entry_id} in discussion {topic_id} of {course_id}.
POST
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{entry_id}/replies
Reply to a post in a group discussion · Post a reply
#
Ask an LLM
“How do I answer a teammate's message in our group thread?”
“Can a reply in a group discussion include an attachment?”
Tell an agent
Answer group {group_id} entry {entry_id} in thread {topic_id} with {message}.
Send a reply to post {entry_id} in group {group_id} topic {topic_id} with {attachment}.
GET
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{entry_id}/replies
List replies to a post in a group discussion · List entry replies
#
Ask an LLM
“What answers came back to my post in the group thread?”
“Can I page through the replies to one group discussion entry?”
Tell an agent
Get replies to group {group_id} entry {entry_id} in thread {topic_id}.
Show answers to post {entry_id} in group {group_id} topic {topic_id}.
GET
/v1/courses/{course_id}/discussion_topics/{topic_id}/entry_list
Get specific course discussion posts by id · List entries
#
Ask an LLM
“Can I fetch several course discussion posts at once by their ids?”
“Is there a batch lookup for entries in a class discussion?”
Tell an agent
Fetch entries {ids} from course {course_id} topic {topic_id}.
Look up posts with ids {ids} in course discussion {topic_id} of {course_id}.
GET
/v1/groups/{group_id}/discussion_topics/{topic_id}/entry_list
Get specific group discussion posts by id · List entries
#
Ask an LLM
“Can I grab particular group thread posts when I already know their ids?”
“Does a group discussion support retrieving a chosen set of entries?”
Tell an agent
Retrieve group {group_id} thread {topic_id} entries {ids}.
Get the group posts {ids} from topic {topic_id} in {group_id}.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}/read
Mark a course discussion prompt as read · Mark topic as read
#
Ask an LLM
“Can I clear the unread badge on a class discussion's opening post?”
“What marks just the initial text of a course discussion as seen?”
Tell an agent
Mark course {course_id} topic {topic_id} as read.
Flag the opening post of discussion {topic_id} in {course_id} as seen.
DELETE
/v1/courses/{course_id}/discussion_topics/{topic_id}/read
Mark a course discussion prompt as unread · Mark topic as unread
#
Ask an LLM
“Can I set a class discussion's opening post back to unread as a reminder?”
“Is there a way to restore the unread state of a course topic?”
Tell an agent destructive · confirm first
Mark course {course_id} topic {topic_id} as unread.
Set the prompt of discussion {topic_id} in {course_id} back to unread.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}/read
Mark a group discussion prompt as read · Mark topic as read
#
Ask an LLM
“Can I mark a group thread's first message as seen?”
“What clears the unread flag on a group discussion prompt?”
Tell an agent
Mark the group {group_id} thread {topic_id} prompt read.
Set group discussion {topic_id} in {group_id} as seen.
DELETE
/v1/groups/{group_id}/discussion_topics/{topic_id}/read
Mark a group discussion prompt as unread · Mark topic as unread
#
Ask an LLM
“Is it possible to flag a group thread's first message unread again?”
“Can I undo having read a group discussion prompt?”
Tell an agent destructive · confirm first
Mark the group {group_id} thread {topic_id} prompt unread.
Reset group discussion {topic_id} in {group_id} to not seen.
PUT
/v1/courses/{course_id}/discussion_topics/read_all
Mark every course discussion as read · Mark all topic as read
#
Ask an LLM
“Can I clear unread markers on all discussions in my course at once?”
“Is there a single call to catch up on every class discussion prompt?”
Tell an agent
Mark all discussion topics in course {course_id} as read.
Clear every unread discussion prompt in {course_id}.
PUT
/v1/groups/{group_id}/discussion_topics/read_all
Mark every group discussion as read · Mark all topic as read
#
Ask an LLM
“Can I mark all my group's threads as seen in one go?”
“What catches me up on every discussion inside a group?”
Tell an agent
Mark every thread in group {group_id} as read.
Catch me up on all group {group_id} discussions.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}/read_all
Mark a course discussion and all its posts read · Mark all entries as read
#
Ask an LLM
“Can I mark a whole class discussion including every reply as read?”
“Does forcing the read state lock a course discussion's posts as read?”
Tell an agent
Mark course {course_id} topic {topic_id} and all its entries read.
Read-all every reply in discussion {topic_id} of {course_id}, forced {forced_read_state}.
DELETE
/v1/courses/{course_id}/discussion_topics/{topic_id}/read_all
Mark a course discussion and all its posts unread · Mark all entries as unread
#
Ask an LLM
“Can I flip an entire class discussion and its replies back to unread?”
“Is there a bulk unread for all posts in one course thread?”
Tell an agent destructive · confirm first
Mark course {course_id} topic {topic_id} and all its entries unread.
Unread every post in discussion {topic_id} of {course_id}, forced {forced_read_state}.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}/read_all
Mark a group discussion and all its posts read · Mark all entries as read
#
Ask an LLM
“Can I mark every reply in a group thread as seen?”
“Is there a read-all for one group discussion's posts?”
Tell an agent
Mark group {group_id} thread {topic_id} and every reply read.
Set all posts in group discussion {topic_id} of {group_id} to seen.
DELETE
/v1/groups/{group_id}/discussion_topics/{topic_id}/read_all
Mark a group discussion and all its posts unread · Mark all entries as unread
#
Ask an LLM
“Can every reply in a group thread be set back to unread?”
“Is there a bulk unread for a single group discussion?”
Tell an agent destructive · confirm first
Mark group {group_id} thread {topic_id} and every reply unread.
Reset all posts in group discussion {topic_id} of {group_id} to not seen.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{entry_id}/read
Mark one course discussion post as read · Mark entry as read
#
Ask an LLM
“Can I mark a single reply in a class discussion as read?”
“What marks one particular course discussion entry as seen?”
Tell an agent
Mark entry {entry_id} in course {course_id} topic {topic_id} as read.
Flag course post {entry_id} under discussion {topic_id} of {course_id} as seen.
DELETE
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{entry_id}/read
Mark one course discussion post as unread · Mark entry as unread
#
Ask an LLM
“Can I set one reply in a class discussion back to unread so I revisit it?”
“Is marking a single course discussion entry unread supported?”
Tell an agent destructive · confirm first
Mark entry {entry_id} in course {course_id} topic {topic_id} as unread.
Set course post {entry_id} under discussion {topic_id} of {course_id} back to unread.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{entry_id}/read
Mark one group discussion post as read · Mark entry as read
#
Ask an LLM
“Can I mark one message in my group thread as seen?”
“Which call marks a single group discussion entry read?”
Tell an agent
Mark group {group_id} entry {entry_id} in thread {topic_id} read.
Flag post {entry_id} in group {group_id} topic {topic_id} as seen.
DELETE
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{entry_id}/read
Mark one group discussion post as unread · Mark entry as unread
#
Ask an LLM
“Can I flag one message in a group thread unread again?”
“Which call resets a single group discussion entry to unread?”
Tell an agent destructive · confirm first
Mark group {group_id} entry {entry_id} in thread {topic_id} unread.
Reset post {entry_id} in group {group_id} topic {topic_id} to not seen.
POST
/v1/courses/{course_id}/discussion_topics/{topic_id}/entries/{entry_id}/rating
Like or rate a course discussion post · Rate entry
#
Ask an LLM
“Can I like a classmate's post in a course discussion?”
“How are ratings on class discussion entries set or removed?”
Tell an agent
Rate entry {entry_id} in course {course_id} topic {topic_id} as {rating}.
Like course post {entry_id} in discussion {topic_id} of {course_id}.
POST
/v1/groups/{group_id}/discussion_topics/{topic_id}/entries/{entry_id}/rating
Like or rate a group discussion post · Rate entry
#
Ask an LLM
“Is liking a teammate's message in a group thread possible?”
“Can I give a rating to a group discussion entry?”
Tell an agent
Give group {group_id} entry {entry_id} in thread {topic_id} a rating of {rating}.
Like post {entry_id} in group {group_id} topic {topic_id}.
PUT
/v1/courses/{course_id}/discussion_topics/{topic_id}/subscribed
Follow a course discussion for notifications · Subscribe to a topic
#
Ask an LLM
“Can I get notified when someone posts new replies in a class discussion?”
“What do I call to follow a course discussion?”
Tell an agent
Subscribe me to course {course_id} topic {topic_id}.
Notify me about new posts in discussion {topic_id} of {course_id}.
DELETE
/v1/courses/{course_id}/discussion_topics/{topic_id}/subscribed
Stop following a course discussion · Unsubscribe from a topic
#
Ask an LLM
“Can I stop getting notifications from a noisy class discussion?”
“How do I unfollow a course discussion?”
Tell an agent destructive · confirm first
Unsubscribe me from course {course_id} topic {topic_id}.
Stop alerts for new posts in discussion {topic_id} of {course_id}.
PUT
/v1/groups/{group_id}/discussion_topics/{topic_id}/subscribed
Follow a group discussion for notifications · Subscribe to a topic
#
Ask an LLM
“Can I receive alerts when my group thread gets new messages?”
“Is following a group discussion supported?”
Tell an agent
Follow group {group_id} thread {topic_id}.
Alert me to new entries in group discussion {topic_id} of {group_id}.
DELETE
/v1/groups/{group_id}/discussion_topics/{topic_id}/subscribed
Stop following a group discussion · Unsubscribe from a topic
#
Ask an LLM
“Can I mute notifications from a group thread?”
“What do I call to unfollow a discussion in my group?”
Tell an agent destructive · confirm first
Unfollow group {group_id} thread {topic_id}.
Mute alerts for group discussion {topic_id} of {group_id}.
Documentation
📖
Documentation
https://canvas.instructure.com/doc/api/
📖
Authentication
https://canvas.instructure.com/doc/api/file.oauth.html
📖
APIReference
https://canvas.instructure.com/doc/api/
📖
RateLimits
https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/rate-limits/canvas-rate-limits.yml
Specifications
SDKs
Other Resources
🔗
Pagination
https://canvas.instructure.com/doc/api/file.pagination.html
🔗
Swagger
https://canvas.instructure.com/doc/api/api-docs.json
🔗
OAuthScopes
https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/scopes/canvas-scopes.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/errors/canvas-problem-types.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/canvas/refs/heads/main/data-model/canvas-data-model.yml