Canny
PROJECT MANAGEMENT · TASKS
Boards, posts, votes, comments, and changelog entries in the account they connected.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
canny_post_ai_enqueueWRITEQueues text input for Autopilot, Canny's AI-powered set of tools that detect, extract and deduplicate customer feedback. Requires a Canny account with Autopilot, and SPENDS ONE AUTOPILOT CREDIT PER REQUEST via POST /api/v1/ai/enqueue
canny_post_boards_listREADReturns a list of all boards associated with your company, in no particular order via POST /api/v1/boards/list
canny_post_boards_retrieveREADRetrieves the details of an existing board, specified by its id via POST /api/v1/boards/retrieve
canny_post_categories_createWRITECreates a new category via POST /api/v1/categories/create
canny_post_categories_deleteWRITEDeletes a category If the category does not have sub categories via POST /api/v1/categories/delete
canny_post_categories_listREADReturns a list of categories. Include parameters to specify board and pagination. Sorted by newest via POST /api/v1/categories/list
canny_post_categories_retrieveREADRetrieves the details of an existing category, specified by its id via POST /api/v1/categories/retrieve
canny_post_comments_createWRITECreates a new portal comment. You may also want to use the Create or update user endpoint to make sure the comment author's account exists (and fetch their id) via POST /api/v1/comments/create
canny_post_comments_deleteWRITEDeletes a portal comment via POST /api/v1/comments/delete
canny_post_comments_listREADReturns a list of portal comments. Include parameters to specify post, board, and pagination. Sorted by newest via POST /api/v2/comments/list
canny_post_comments_retrieveREADRetrieves the details of an existing portal comment, specified by its id via POST /api/v1/comments/retrieve
canny_post_companies_deleteWRITEDeletes a company via POST /api/v1/companies/delete
canny_post_companies_listREADReturns a list of all companies associated with your company, ordered by created date via POST /api/v2/companies/list
canny_post_companies_updateWRITEGiven a company ID, this endpoint updates the company with the data supplied. If you have company syncing integrations in place (e.g., Hubspot, Salesforce, SSO Tokens, Canny Identify, ...), the fields updated with this endpoint might be overwritten. Companies are CREATED by associating them to a user via Create or update user, not here via POST /api/v1/companies/update. UPDATES ONLY: an unknown id answers 400 "company does not exist". A company is CREATED by naming it in the `companies` argument of Create or update user.
canny_post_entries_createWRITECreates and (optionally) publishes a new changelog entry via POST /api/v1/entries/create
canny_post_entries_listREADReturns a list of changelog entries via POST /api/v1/entries/list
canny_post_groups_listREADReturns a paginated list of groups for your company via POST /api/v1/groups/list
canny_post_groups_retrieveREADRetrieves the details of an existing group, specified by its id or urlName via POST /api/v1/groups/retrieve. Supply `id` OR `urlName`: with neither, Canny answers 400 "id or urlName is required".
canny_post_ideas_deleteWRITEDeletes an existing idea via POST /api/v1/ideas/delete
canny_post_ideas_listREADReturns a list of ideas. Include parameters to specify pagination, filtering, and sorting via POST /api/v1/ideas/list
canny_post_ideas_mergeWRITEMerges one idea into another idea via POST /api/v1/ideas/merge
canny_post_ideas_retrieveREADRetrieves the details of an existing idea, specified by its id or urlName via POST /api/v1/ideas/retrieve. Supply `id` OR `urlName`: with neither, Canny answers 400 "id or urlName is required".
canny_post_insights_listREADReturns a paginated list of insights for your company via POST /api/v1/insights/list
canny_post_insights_retrieveREADRetrieves the details of an existing insight. You must specify the insight's unique identifier from Canny via POST /api/v1/insights/retrieve
canny_post_opportunities_listREADReturns a list of opportunities linked to your Canny posts via POST /api/v1/opportunities/list
canny_post_posts_add_tagWRITEAdds a tag to a post. Both post and tag are specified by their unique id via POST /api/v1/posts/add_tag
canny_post_posts_change_boardWRITEMoves a post to another board via POST /api/v1/posts/change_board
canny_post_posts_change_categoryWRITEChanges a post's category specified by its id via POST /api/v1/posts/change_category
canny_post_posts_change_statusWRITEChanges a post's status (eg. to 'planned'), specified by its id via POST /api/v1/posts/change_status
canny_post_posts_createWRITECreates a new post. You may also want to use the Create or update user endpoint to make sure the post author's account exists (and fetch their id) via POST /api/v1/posts/create
canny_post_posts_deleteWRITEDeletes an existing post via POST /api/v1/posts/delete
canny_post_posts_link_jiraWRITELinks a Jira issue to a Canny post. Requires the Jira integration to be installed and configured via POST /api/v1/posts/link_jira. PLAN-GATED: this Canny account answers 400 "plan does not support" (measured 2026-09-18). It needs a Canny plan with the Jira integration.
canny_post_posts_listREADReturns a list of posts. Include parameters to specify board, pagination, filtering, and sorting via POST /api/v1/posts/list
canny_post_posts_mergeWRITEMerges one post into another post via POST /api/v1/posts/merge
canny_post_posts_remove_tagWRITERemoves a tag from a post. Both post and tag are specified by their unique id via POST /api/v1/posts/remove_tag
canny_post_posts_retrieveREADRetrieves the details of an existing post, specified by its id or urlName via POST /api/v1/posts/retrieve. Supply EXACTLY ONE of `id` or `urlName` (and `boardID` alongside `urlName`): with neither, Canny answers 400 "exactly one of \"id\" and \"urlName\" must supplied".
canny_post_posts_unlink_jiraWRITEUnlinks a Jira issue from a Canny post. Requires the Jira integration to be installed and configured via POST /api/v1/posts/unlink_jira. PLAN-GATED: this Canny account answers 400 "plan does not support" (measured 2026-09-18). It needs a Canny plan with the Jira integration.
canny_post_posts_updateWRITEUpdates an existing post via POST /api/v1/posts/update
canny_post_status_changes_listREADReturns a list of status changes. Include parameters to specify board and pagination. Sorted by newest via POST /api/v2/status_changes/list
canny_post_tags_createWRITECreates a new tag via POST /api/v1/tags/create
canny_post_tags_listREADReturns a list of tags. Include parameters to specify board and pagination. Sorted by newest via POST /api/v1/tags/list
canny_post_tags_retrieveREADRetrieves the details of an existing tag, specified by its id via POST /api/v1/tags/retrieve
canny_post_users_create_or_updateWRITEIf the user does not exist, one is created, and its id is returned. If the user does exist, they will be updated with the data supplied. Why is this endpoint useful? If you're going to use an object creation API endpoint (such as create post), you may have to create the author's account before creating the post. Note: the email, name and avatarURL properties of admin users cannot be modified through the Canny API. A Canny admin will need to login to Canny to update this information manually. Note: one of email, userID or id must be provided to update a user via POST /api/v1/users/create_or_update. As well as `name`, supply ONE of `userID`, `id` or `email` to identify the user: with none, Canny answers 400 "userID, id or email must be provided".
canny_post_users_deleteWRITEDeletes a user. Also deletes all of their comments and votes. If their posts have other comments/votes, then they'll be removed as an author. If there are no other comments/votes, the post will be removed via POST /api/v1/users/delete
canny_post_users_listREADList the end-users within your workspace via POST /api/v2/users/list
canny_post_users_remove_user_from_companyWRITERemoves the user from a company that they were previously associated with. Why is this endpoint useful? If a user of your application has moved from one organization to another or if a user is no longer a part of an organization. Please note that removing a user from a company will result in their votes no longer being associated with the company's spend via POST /api/v1/users/remove_user_from_company
canny_post_users_retrieveREADRetrieves the details of an existing user. You must specify exactly one of: their Canny id, their id in your application, or their email. These fields are all unique per user. You can only retrieve them based on their id in your application if the user was authenticated via single sign-on or created via API via POST /api/v1/users/retrieve. Supply ONE of `id`, `userID` or `email`: with none, Canny answers 400 "no identifier specified".
canny_post_votes_createWRITECreates a new vote. You may also want to use the Create or update user endpoint to make sure the voter's account exists (and fetch their id) via POST /api/v1/votes/create
canny_post_votes_deleteWRITEDeletes a vote via POST /api/v1/votes/delete
canny_post_votes_listREADReturns a list of votes. Include parameters to specify post, board, and pagination. Sorted by newest via POST /api/v2/votes/list
canny_post_votes_retrieveREADRetrieves the details of an existing vote, specified by its id via POST /api/v1/votes/retrieve
Often connected alongside
Put Canny behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.