canonical: https://jentic.com/apis/canny.io/canny

# Canny API

Jentic publishes the only available OpenAPI specification for Canny API, keeping it validated and agent-ready. The Canny API manages customer feedback boards, posts, votes, comments, tags, categories, and users for product teams running public or private feedback portals. It supports the full feedback lifecycle: capturing requests, organising them by board and category, tracking status changes, and syncing user records with internal systems. Product, success, and engineering teams use it to keep Canny in sync with their own roadmap and CRM tools.

## For AI agents

Read and write Canny boards, posts, comments, votes, tags, and users to keep customer feedback portals in sync with internal product and CRM systems. Supports status changes, post merges, and user provisioning.

## Scope

Does not handle in-app messaging, ticketing, or roadmap publishing - use for feedback boards, posts, comments, and Canny user sync only.

## Capabilities

- Create new feedback posts on a specified board with author and details metadata
- Change a post's status and optionally notify voters when shipping or rejecting it
- Merge duplicate posts into a single canonical post and re-attach votes
- Provision or update users in Canny so feedback ties back to authenticated CRM contacts
- Tag and categorise posts to keep boards organised by theme or feature area
- List and paginate comments across a board for digest or moderation workflows

## Use cases

### CRM-to-Canny User Sync

Product teams want feedback authors to match their authenticated CRM users instead of being anonymous. The createOrUpdateUser endpoint keeps Canny user records in lockstep with the source CRM, so when a customer files a post or comment it carries the right identity, company, and email. Sync runs nightly or on CRM webhook events with low write volume.

Example prompt: POST /v1/users/create_or_update with the user's email, name, and external id whenever a new contact is created in the CRM.

### Roadmap Status Automation

When engineering closes a Jira issue tied to a Canny post, an automation calls changePostStatus to mark the post 'complete' and notify everyone who voted for it. This closes the loop with customers without a manual triage step. The same workflow handles 'in progress' transitions when work begins.

Example prompt: POST /v1/posts/change_status with the postID, changerID, status='complete', and shouldNotifyVoters=true when the linked engineering ticket closes.

### Duplicate Feedback Cleanup

Public boards accumulate near-duplicate posts. A weekly cleanup job lists posts, scores semantic similarity, and calls mergePosts on confirmed duplicates so vote counts roll up to the canonical request. The result is a cleaner board where the most-voted posts surface accurately.

Example prompt: POST /v1/posts/merge with mergePostID, intoPostID, and mergerID to fold one post into another.

### AI Agent Feedback Triage

An AI agent reads incoming support tickets, identifies feature requests, and creates Canny posts on the right board. Through Jentic, the agent searches by intent, loads the createPost schema, and submits the post with the support contact as the author so the customer is credited.

Example prompt: Search Jentic for 'create a Canny feedback post', load the createPost schema, and execute POST /v1/posts/create with boardID, authorID, title, and details.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /v1/posts/create | Create a feedback post |
| POST | /v1/posts/list | List posts with filters and pagination |
| POST | /v1/posts/change_status | Change post status with optional voter notification |
| POST | /v1/posts/merge | Merge duplicate posts |
| POST | /v1/comments/create | Create a comment on a post |
| POST | /v1/users/create_or_update | Create or update a Canny user |
| POST | /v1/boards/list | List all boards |

## Key resources

- **Boards** — Retrieve and list feedback boards
- **Posts** — Create, update, retrieve, list, change status, merge, tag, and delete feedback posts
- **Comments** — Create, retrieve, list, and delete comments on posts
- **Categories** — Create, list, retrieve, and delete categories within boards
- **Users** — Create or update users, retrieve, list, and delete user records

## Why Jentic

- **Setup:** Wiring the Canny API by hand means placing your key in each request body and finding the right post, comment, board, and user routes across 38 operations. Through Jentic you install once, import Canny from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Canny carries its targets in the request body rather than as a resource in the URL path, so limit the agent to the operations it needs, such as listing posts and boards. You choose the operations it may call, so changes like creating posts, merging posts, or updating users are not included unless you add them.
- **Credential handling:** Your Canny API key is stored once, encrypted, by your own Jentic One instance and injected into the request body's apiKey field at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a Canny post' or 'merge duplicate posts', and Jentic returns the matching Canny operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **UserVoice** — Alternative customer feedback platform with similar boards-and-posts model
- **Intercom** — Customer messaging that pairs with structured feedback in Canny
- **canibuild API** — Domain-specific data lookups alongside Canny's product feedback
- **Captivated** — Customer messaging that pairs with feedback collection in Canny

## FAQ

### Why is there no official OpenAPI spec for Canny API?

Canny does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Canny API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Canny API use?

Canny uses an API key passed in the JSON request body as the apiKey field on every operation. Through Jentic, the key is stored encrypted in the vault and injected at execution time so it never enters the agent's prompt context.

### Can I change a post's status and notify voters with the Canny API?

Yes. Call POST /v1/posts/change_status with postID, changerID, status, and shouldNotifyVoters=true. Canny emails subscribed voters about the status change.

### How do I merge duplicate Canny posts through Jentic?

Search Jentic for 'merge Canny posts', load the mergePosts operation, and execute POST /v1/posts/merge with mergePostID, intoPostID, and mergerID. Votes from the merged post roll up into the target post.

### What are the rate limits for the Canny API?

Canny does not publish rate limits in the OpenAPI spec. Plan for moderate write volume (a few requests per second) and back off on 429 responses; check the Canny dashboard for your account-specific limits.

### Can I sync external users into Canny?

Yes. POST /v1/users/create_or_update with an external id, email, name, and optional companyID upserts a Canny user, so feedback authored on their behalf carries the right identity.

### Can I limit what my agent is allowed to do with the Canny API?

Yes. Because Jentic One is self-hosted, you decide which Canny operations your agent may call, and your own rules are enforced when it runs. Since Canny passes its targets in the request body rather than in the URL path, you can grant read-only operations like listing posts and boards while withholding writes such as creating posts, merging posts, or updating users. Those operations are only available to the agent if you add them, and your stored API key is injected at execution time so it never enters the agent's context.
