The Canny API lets you communicate with Canny and build your own tools using Canny's data. You can read and write information to and from Canny using the API. Check out the docs below:
What you can do with the API:
Boards:
Fetch a board
List all boards
Categories:
Fetch a category
List all categories
Create a category
Delete a category
Changelog:
Fetch changelog entries and their corresponding details
Create a changelog entry
List all changelog entries
Comments:
Fetch a specific comment, or a list of comments for a Post, Board, or Author
Retrieve comment details, including the comment body
Create a new comment
Delete an existing comment
Companies:
List all companies
Create a company
Update a company
Delete a company
Opportunities
List all opportunities
Posts:
Fetch a specific post, or a list of posts by board or user
Return a list of posts. Include parameters to specify board, user, query, pagination, filtering, and sorting
Retrieve the details of an existing post
Create a new post
Edit a post
Update a post's status
Tag/Untag a post
Fetch a list of status changes, sorted chronologically
Create, list, and retrieve Tags
Users:
Find, create, and delete users
Vote on behalf of a user
Fetch a specific vote, or a list of votes associated with a Post, Board, or Author.
Delete votes
Webhooks
By setting up webhooks, your server will be notified of Canny events as they happen. For example, if a user creates a new post, we would send a request to your server to let you know.
You can set up webhooks for your account in the API & Webhooks settings page.
Events:
post.created — Occurs when a new post is created.
post.deleted — Occurs when a post is deleted.
post.jira_issue_linked — Occurs when a Jira issue is linked to a post.
post.jira_issue_unlinked — Occurs when a Jira issue is unlinked from a post.
post.status_changed — Occurs when a post's status is changed.
comment.created — Occurs when a new comment is created.
comment.deleted — Occurs when a comment is deleted.
vote.created — Occurs when a user votes on a post.
vote.deleted — Occurs when a user unvotes on a post.
Verifying webhooks
Canny webhooks are signed following the Standard Webhooks specification. Every delivery carries webhook-id, webhook-timestamp, and webhook-signature headers, so your receiver can verify the request wasn't modified or replayed, using any of the official Standard Webhooks libraries.
Your workspace gets its own signing secret (
whsec_...) when you add your first webhook. You don't need your API key in your webhook receiver.Admins with the Manage webhooks permission can view, copy, and regenerate the secret on the API & Webhooks settings page, below the webhook list.
After regenerating, Canny signs with both the old and new secret for 24 hours, so you can rotate with zero downtime. If a secret leaked, you can revoke the old one immediately.
Existing webhook integrations keep receiving the legacy
canny-signatureheader alongside the new headers for now. See the developer docs for verification details.
AI
For Canny accounts using Canny Autopilot, we offer direct access to the API to enqueue feedback for extraction and deduplication. This allows you to programmatically send feedback to Canny for processing.
