Create Canny Feedback with the API
From your server, POST the required apiKey, authorID, boardID, title and details to Canny’s posts/create endpoint. Store the returned post ID for reconciliation.
Before you start: Have a private API key and the existing Canny author and board IDs. Use a controlled test board and inspect any required custom fields before writing.
Worked example: A support workflow creates one Scheduled CSV export request for a known customer. Its external ticket ID should be retained by your system so a retry does not accidentally create another post.
Step-by-step guide
Resolve the identities
Create or update the customer through the user endpoint if necessary and retain Canny’s returned ID. authorID is the Canny identifier, not an arbitrary application user ID.
Choose the destination
Fetch or inspect the board ID and verify the test board. Check its required custom fields and plan access.
Submit the native request
Save this example as create-feedback.mjs and run it with Node 18+ on your server after setting the three environment values. The .mjs extension enables its top-level await. Adapt the content to the actual customer request.
// Run on Node 18+ on your server. Use an existing Canny author and test board.
const response = await fetch('https://canny.io/api/v1/posts/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
apiKey: process.env.CANNY_API_KEY,
authorID: process.env.CANNY_AUTHOR_ID,
boardID: process.env.CANNY_BOARD_ID,
title: 'Scheduled CSV export',
details: 'Send the weekly report without a manual export.'
})
});
const result = await response.json();
if (!response.ok || result.error) throw new Error(result.error || response.statusText);
if (!result.id) throw new Error('No post ID returned');
console.log(result.id);Check the created post
Record the returned id, open that post and verify author, board, title and details. A successful HTTP response alone is not an attribution check.
Make retries explicit
Persist the source-to-post mapping and reconcile an uncertain response before submitting again. This example does not claim endpoint-level idempotency.
Common mistakes
Leaking the API key to a browser
The API key belongs on the server. A public frontend bundle must not contain it.
Using the application’s ID as authorID
Use the Canny user object’s ID. Keep that distinct from the userID value used to identify your own account.
Sources and verification
Based on product documentation checked on 2026-11-04. This is a documentation-based guide, not a hands-on benchmark. Features and availability can change.