{"_id":"@automiq/n8n-nodes-canny","_rev":"2-249562eeb8a75612b9b3f9329dead32e","name":"@automiq/n8n-nodes-canny","dist-tags":{"latest":"0.2.14"},"versions":{"0.2.13":{"name":"@automiq/n8n-nodes-canny","version":"0.2.13","keywords":["n8n-community-node-package","canny","feedback","roadmap"],"author":{"name":"MychelGarzon","email":"mychel.garzon@gmail.com"},"license":"MIT","_id":"@automiq/n8n-nodes-canny@0.2.13","maintainers":[{"name":"automiq","email":"mychel.garzon@gmail.com"}],"homepage":"https://github.com/MychelGarzon/n8n-nodes-canny","bugs":{"url":"https://github.com/MychelGarzon/n8n-nodes-canny/issues"},"n8n":{"nodes":["dist/nodes/Canny/Canny.node.js","dist/nodes/CannyTrigger/CannyTrigger.node.js"],"strict":true,"credentials":["dist/credentials/CannyApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"a90be389d2185fcc8c5acce1064a556be137b470","tarball":"https://registry.npmjs.org/@automiq/n8n-nodes-canny/-/n8n-nodes-canny-0.2.13.tgz","fileCount":42,"integrity":"sha512-ZBoiClFo2IMSVdjIvycU0bPmU1M+qUkEfNa7o58hxi8dVcXXNfIcDjVybkZlK2PG3tTNLk3TpDKHlArZZny4sA==","signatures":[{"sig":"MEUCIF7AhmelUqNravESPuIsNuz1I4+qfPrwlkKQ3QpVnIj6AiEA83zWul3boFj+H3T4zN5xkF/HtSk8+9edM+L4g6OOnb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107476},"gitHead":"e4cb7deaea1e2e4159ebea7fac459fc45fef62aa","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"jest","build":"n8n-node build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","build:watch":"tsc --watch","prepublishOnly":"n8n-node prerelease"},"_npmUser":{"name":"automiq","email":"mychel.garzon@gmail.com"},"repository":{"url":"git+https://github.com/MychelGarzon/n8n-nodes-canny.git","type":"git"},"_npmVersion":"11.19.0","description":"n8n community node for Canny (canny.io) — product feedback, feature requests, and roadmap management. Not affiliated with Canny Inc.","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","eslint":"9.32.0","ts-jest":"^29.4.12","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@types/jest":"^30.0.0","@n8n/node-cli":"*"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-canny_0.2.13_1788370447478_0.9311361462939125","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"@automiq/n8n-nodes-canny","publishConfig":{"access":"public"},"version":"0.2.14","description":"n8n community node for Canny (canny.io) — product feedback, feature requests, and roadmap management. Not affiliated with Canny Inc.","license":"MIT","homepage":"https://github.com/MychelGarzon/n8n-nodes-canny","keywords":["n8n-community-node-package","canny","feedback","roadmap"],"author":{"name":"MychelGarzon","email":"mychel.garzon@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/MychelGarzon/n8n-nodes-canny.git"},"scripts":{"build":"n8n-node build","build:watch":"tsc --watch","dev":"n8n-node dev","lint":"n8n-node lint","lint:fix":"n8n-node lint --fix","release":"n8n-node release","prepublishOnly":"n8n-node prerelease","test":"jest"},"n8n":{"n8nNodesApiVersion":1,"strict":true,"credentials":["dist/credentials/CannyApi.credentials.js"],"nodes":["dist/nodes/Canny/Canny.node.js","dist/nodes/CannyTrigger/CannyTrigger.node.js"]},"devDependencies":{"@n8n/node-cli":"*","eslint":"9.32.0","prettier":"3.6.2","release-it":"^19.0.4","typescript":"5.9.2","@types/jest":"^30.0.0","jest":"^30.4.2","ts-jest":"^29.4.12"},"peerDependencies":{"n8n-workflow":"*"},"gitHead":"e221e9c30be37df3ba7108518d8ed7cf38845d74","_id":"@automiq/n8n-nodes-canny@0.2.14","bugs":{"url":"https://github.com/MychelGarzon/n8n-nodes-canny/issues"},"_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-nOd6+PMtKDDhFOCeTUJBKUkt5TPk7+F/Ue5KL13EQ4cYGxafX5i0bx6eg3cBUXTT7Rp5Si93489Yaxz+QsiCFA==","shasum":"928966935fe724b4f48acdfd67c77097f3264f27","tarball":"https://registry.npmjs.org/@automiq/n8n-nodes-canny/-/n8n-nodes-canny-0.2.14.tgz","fileCount":42,"unpackedSize":108124,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@automiq%2fn8n-nodes-canny@0.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDVAGWzNJcvSr7Y5BA9kKqVUFr/ktakXCRKxCX/pC1EtAIgTlH+V4q2EuD/2aiv4G3LLn9RvM/V19AAJeLufVYdLvg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5a39a0a3-cf79-46e4-9637-2db54e2ee5a1"}},"directories":{},"maintainers":[{"name":"automiq","email":"mychel.garzon@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-canny_0.2.14_1788370902459_0.8673748275180753"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-02T17:34:07.326Z","modified":"2026-09-02T17:41:42.939Z","0.2.13":"2026-09-02T17:34:07.622Z","0.2.14":"2026-09-02T17:41:42.596Z"},"bugs":{"url":"https://github.com/MychelGarzon/n8n-nodes-canny/issues"},"author":{"name":"MychelGarzon","email":"mychel.garzon@gmail.com"},"license":"MIT","homepage":"https://github.com/MychelGarzon/n8n-nodes-canny","keywords":["n8n-community-node-package","canny","feedback","roadmap"],"repository":{"type":"git","url":"git+https://github.com/MychelGarzon/n8n-nodes-canny.git"},"description":"n8n community node for Canny (canny.io) — product feedback, feature requests, and roadmap management. Not affiliated with Canny Inc.","maintainers":[{"name":"automiq","email":"mychel.garzon@gmail.com"}],"readme":"# n8n-nodes-canny\n\n[![Quality gate status](https://sonarcloud.io/api/project_badges/measure?project=MychelGarzon_n8n-nodes-canny&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=MychelGarzon_n8n-nodes-canny)\n\nThis is an n8n community node. It lets you use [Canny](https://canny.io/) in your n8n workflows.\n\nCanny is a product feedback and feature-request management tool. It lets teams collect feedback from users, organize it into boards and categories, track votes and comments, and publish public roadmaps.\n\n[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.\n\n[Installation](#installation)\n[Operations](#operations)\n[Credentials](#credentials)\n[Compatibility](#compatibility)\n[Usage](#usage)\n[Resources](#resources)\n[Version history](#version-history)\n\n## Installation\n\nFollow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.\n\n## Operations\n\n### Post\n\n- Create\n- Get\n- Get Many\n- Update\n- Delete\n- Change Status\n\n### Board\n\n- Get\n- Get Many\n\n### Category\n\n- Get\n- Get Many\n- Create\n- Delete\n\n### Idea\n\n- Get\n- Get Many\n- Delete\n\n### Portal Comment\n\n- Get\n- Get Many\n- Create\n- Delete\n\n### User\n\n- Get Many\n\n### Canny Trigger\n\nStarts a workflow when a Canny event occurs (post created, status changed, comment created, vote cast, and more). Requires manual webhook setup — see [Usage](#usage) below.\n\n**Not yet supported:** Idea filtering/sort/Merge, Post's `customFields`/`imageURLs` on Create and Update. These may be added in a future version.\n\n## Credentials\n\nYou'll need a Canny account with API access:\n\n1. Sign up for a free Canny account at [canny.io](https://canny.io/) if you don't already have one.\n2. In your Canny dashboard, go to **Settings > API**.\n3. Copy your **Secret API Key**.\n4. In n8n, create a new **Canny API** credential and paste the key into the **API Key** field.\n\nCanny's API expects the key as a field in the request body rather than a header — this credential handles that automatically.\n\n## Compatibility\n\nTested against n8n using n8n-workflow's programmatic node style (`@n8n/node-cli`). No known version incompatibilities.\n\n## Usage\n\n### Board, User, and Post fields\n\nBoard, User (Author/Changer), and Post ID fields use n8n's resource locator: pick from a searchable list, or switch to \"By ID\" and paste a raw Canny ID directly.\n\n### Pagination\n\nCanny's API has two different pagination styles depending on the resource:\n\n- **Post, Category** use skip-based pagination (`skip`/`limit`/`hasMore`).\n- **Portal Comment, Idea, User** use cursor-based pagination (`cursor`/`hasNextPage`).\n\nThis node handles both automatically — just use the **Return All** and **Limit** fields on any \"Get Many\" operation.\n\n**Board** has no server-side pagination at all; \"Get Many\" always returns your full list of boards in a single request.\n\n### Setting up the Canny Trigger\n\nCanny has no API for registering webhooks, so setup is manual:\n\n1. Add the **Canny Trigger** node to your workflow, choose your Canny credential, and select the **Event** you want to trigger on.\n2. Copy the node's **Webhook URL** (shown in the node once activated).\n3. In your Canny dashboard, go to **Settings > API > Webhooks**, and paste the URL there.\n4. Canny will send every subscribed event to that same URL — this node automatically verifies each payload's signature and filters out any event that doesn't match your selected **Event**, so only the one you configured actually starts the workflow.\n\n### Using this node with AI Agents\n\nThis node has `usableAsTool: true` and works as a tool for n8n's AI Agent node. A few things to know:\n\n- **Each operation needs its own dedicated tool node.** Don't wire a single generic Canny tool node into the Agent and expect the model to pick Resource/Operation freely — set the Resource and Operation explicitly on each tool node (e.g. one node configured as \"Post → Change Status\", a separate node as \"User → Get Many\"), then connect each to the Agent's **Tool** input separately.\n- **Leave ID fields set to \"Defined automatically by the model.\"** For any field that's a resource locator (Board, User, Post), the AI tool interface only supports \"By ID\" mode — the interactive \"From list\" picker isn't available to a model, since browsing a dropdown requires human interaction. The agent must supply a real Canny ID as a plain string.\n- **Give the agent a way to discover real IDs first.** Since the model can't browse pickers, connect a \"Get Many\" tool for whichever resource it needs an ID for (e.g. a \"User → Get Many\" tool so it can look up a user's ID before calling an operation that requires one). Without that, the agent has no way to know a valid ID and may either ask you for it or hallucinate a plausible-looking one.\n\nFor example, to let an agent change a post's status, you'd typically connect three separate tool nodes: one for **Post → Get Many** (to find the post), one for **User → Get Many** (to find the user), and one for **Post → Change Status** (with `postID`, `changerID`, `status`, and `commentValue` all left as model-defined parameters).\n\nWhether the model actually chains multiple tool calls together on its own (e.g. looking up a user ID before using it) depends on the underlying LLM's own reasoning — this node provides everything needed for that chain to work, but can't force a model to take the extra discovery step. If an agent asks you for an ID instead of looking it up itself, try being more explicit in your prompt about the order of steps.\n\nFor general help getting started with n8n, see the [Try it out](https://docs.n8n.io/try-it-out/) documentation.\n\n## Resources\n\n- [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)\n- [Canny API reference](https://developers.canny.io/api-reference)\n\n## Disclaimer\n\nThis is an unofficial, community-built integration. It is not affiliated with, endorsed by, or supported by Canny Inc. \"Canny\" is a trademark of Canny Inc., used here under nominative fair use for descriptive purposes only.\n\n## Version history\n\n### 0.2.13\n\nRenamed the package from the unscoped `n8n-nodes-canny` to the scoped `@automiq/n8n-nodes-canny`, to reduce trademark-dispute risk on the unscoped npm namespace. The old package is now deprecated.\n\n### 0.2.10 – 0.2.12\n\nFixed AI agent tool-orchestration gaps by making the Resource field's description explicitly enumerate valid values. Moved AI-agent \"By ID\" hints into the shared `resourceLocatorField` helper to reduce duplication. Excluded description files from strict duplication analysis (structural repetition inherent to n8n's declarative field style). Documented a known limitation around multi-step AI agent tool chaining.\n\n### 0.2.9\n\nAdded a User resource (Get Many) so AI agents can discover real Canny user IDs. Added resource-locator pickers (searchable dropdowns) for Board, User, and Post ID fields across all resources, replacing raw text ID entry. Improved API error messages to include the failing endpoint and HTTP status code. Added missing field placeholders throughout. Clarified resource-locator field descriptions for AI agent usage. Documented AI Agent tool-wiring patterns.\n\n### 0.2.6 – 0.2.7\n\nReduced the `execute()` method's cognitive complexity by extracting pagination-dispatch and error-classification logic into dedicated helper functions. Consolidated repeated Post ID field definitions into the shared `idField` helper, further reducing code duplication.\n\n### 0.2.5\n\nRemoved Board's non-functional Return All/Limit fields (Canny's boards/list endpoint doesn't support pagination). Normalized Return All defaults and Limit bounds across Post, Category, Idea, and Portal Comment. Migrated Board and Category onto the shared field-definition helpers for consistency with the rest of the codebase.\n\n### 0.2.4\n\nExtracted shared icon, credential, and dropdown-field helpers to reduce code duplication across resource description files. Added Jest unit test coverage for all request builders (Post, Board, Category, Idea, Portal Comment) and for the Canny Trigger's webhook signature verification.\n\n### 0.2.3\n\nAdded Post's Update, Delete, and Change Status operations. Implemented real webhook signature verification (HMAC-SHA256) and event filtering in Canny Trigger. Fixed a bug where Board's Get Many sent undocumented pagination parameters that silently broke the response. Fixed Portal Comment's Get Many using the wrong API version (v1 instead of v2). Centralized icon files into a shared folder.\n\n### 0.2.0 – 0.2.2\n\nInternal refactoring: extracted shared field-definition helpers to reduce duplication across resource description files, simplified build tooling to use the official `@n8n/node-cli` scaffold consistently.\n\n### 0.1.0\n\nInitial release. Supports Post (Create/Get/Get Many), Board (Get/Get Many), Category (Get/Get Many/Create/Delete), Idea (Get/Get Many/Delete), and Portal Comment (Get/Get Many/Create/Delete). Canny Trigger node included as a manual-setup webhook receiver — payload signature verification not yet implemented.\n","readmeFilename":"README.md"}