productivity
Canny Lua API for KosmoKrator Agents
Agent-facing Lua documentation and function reference for the Canny KosmoKrator integration.Lua Namespace
Agents call this integration through app.integrations.canny.*.
Use lua_read_doc("integrations.canny") inside KosmoKrator to discover the same reference at runtime.
Call Lua from the Headless CLI
Use kosmo integrations:lua when a shell script, CI job, cron job, or another coding CLI should run a deterministic
Canny workflow without starting an interactive agent session.
kosmo integrations:lua --eval 'dump(app.integrations.canny.retrieve_board({}))' --json kosmo integrations:lua --eval 'print(docs.read("canny"))' --json
kosmo integrations:lua --eval 'print(docs.read("canny.retrieve_board"))' --json Workflow file
Put repeatable logic in a Lua file, then execute it with JSON output for the calling process.
local canny = app.integrations.canny
local result = canny.retrieve_board({})
dump(result) kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json integrations:lua exposes app.integrations.canny, app.mcp.*, docs.*, json.*, and regex.*. Use app.integrations.canny.default.* or app.integrations.canny.work.* when you configured named credential accounts.
MCP-only Lua
If the script only needs configured MCP servers and does not need Canny, use the narrower mcp:lua command.
# Use mcp:lua for MCP-only scripts; use integrations:lua for this integration namespace.
kosmo mcp:lua --eval 'dump(mcp.servers())' --json Agent-Facing Lua Docs
This is the rendered version of the full Lua documentation exposed to agents when they inspect the integration namespace.
Canny
Use the canny namespace to work with Canny product-feedback data: boards, posts, comments, votes, users, companies, changelog entries, insights, opportunities, and Autopilot feedback.
Canny’s API uses POST requests for every endpoint. The integration injects the configured secret API key into the JSON body as apiKey, so agents should never pass it manually.
Common workflows
- Use
canny_list_boardsbefore creating or filtering posts. - Use
canny_create_or_update_userbefore creating posts, votes, or comments on behalf of a customer. - Use
canny_create_postwithboardID,authorID,title, and optional details fields. - Use
canny_create_votewithpostIDandvoterIDto record customer demand. - Use
canny_list_comments,canny_list_votes,canny_list_users, andcanny_list_companieswithcursorpagination. - Use
canny_change_post_status,canny_add_post_tag, andcanny_link_jira_issueto keep roadmap state synchronized. - Use
canny_enqueue_feedbackfor Canny Autopilot accounts when raw feedback should be extracted and deduplicated.
Payload shape
Most tools accept documented Canny fields either as top-level arguments or inside payload.
canny_create_post({
boardID = "board_123",
authorID = "user_123",
title = "Add invoice exports",
payload = {
details = "Customers need CSV and PDF exports.",
byID = "admin_123"
}
})
For cursor-paginated v2 endpoints:
canny_list_votes({
payload = {
postID = "post_123",
limit = 25,
cursor = "cursor-from-previous-response"
}
})
For skip-paginated v1 endpoints:
canny_list_posts({
payload = {
boardID = "board_123",
limit = 25,
skip = 50,
sort = "score"
}
})
Endpoint notes
Companies are created by associating company data to users through canny_create_or_update_user; Canny’s reference does not expose a separate companies/create endpoint.
Roadmap data is returned inside post data. Canny’s reference documents the roadmap object but does not expose a standalone roadmap endpoint.
canny_find_or_create_user is included for compatibility with Canny’s deprecated endpoint. Prefer canny_create_or_update_user.
canny_api_post is an escape hatch for newly documented Canny endpoints. It accepts only relative paths such as /api/v1/boards/list; full URLs are rejected.
Raw agent markdown
# Canny
Use the `canny` namespace to work with Canny product-feedback data: boards, posts, comments, votes, users, companies, changelog entries, insights, opportunities, and Autopilot feedback.
Canny's API uses POST requests for every endpoint. The integration injects the configured secret API key into the JSON body as `apiKey`, so agents should never pass it manually.
## Common workflows
- Use `canny_list_boards` before creating or filtering posts.
- Use `canny_create_or_update_user` before creating posts, votes, or comments on behalf of a customer.
- Use `canny_create_post` with `boardID`, `authorID`, `title`, and optional details fields.
- Use `canny_create_vote` with `postID` and `voterID` to record customer demand.
- Use `canny_list_comments`, `canny_list_votes`, `canny_list_users`, and `canny_list_companies` with `cursor` pagination.
- Use `canny_change_post_status`, `canny_add_post_tag`, and `canny_link_jira_issue` to keep roadmap state synchronized.
- Use `canny_enqueue_feedback` for Canny Autopilot accounts when raw feedback should be extracted and deduplicated.
## Payload shape
Most tools accept documented Canny fields either as top-level arguments or inside `payload`.
```lua
canny_create_post({
boardID = "board_123",
authorID = "user_123",
title = "Add invoice exports",
payload = {
details = "Customers need CSV and PDF exports.",
byID = "admin_123"
}
})
```
For cursor-paginated v2 endpoints:
```lua
canny_list_votes({
payload = {
postID = "post_123",
limit = 25,
cursor = "cursor-from-previous-response"
}
})
```
For skip-paginated v1 endpoints:
```lua
canny_list_posts({
payload = {
boardID = "board_123",
limit = 25,
skip = 50,
sort = "score"
}
})
```
## Endpoint notes
Companies are created by associating company data to users through `canny_create_or_update_user`; Canny's reference does not expose a separate `companies/create` endpoint.
Roadmap data is returned inside post data. Canny's reference documents the roadmap object but does not expose a standalone roadmap endpoint.
`canny_find_or_create_user` is included for compatibility with Canny's deprecated endpoint. Prefer `canny_create_or_update_user`.
`canny_api_post` is an escape hatch for newly documented Canny endpoints. It accepts only relative paths such as `/api/v1/boards/list`; full URLs are rejected. local result = app.integrations.canny.retrieve_board({})
print(result) Functions
retrieve_board Read
Retrieve a Canny board by ID.
- Lua path
app.integrations.canny.retrieve_board- Full name
canny.canny_retrieve_board
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_boards Read
List all Canny boards.
- Lua path
app.integrations.canny.list_boards- Full name
canny.canny_list_boards
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_category Read
Retrieve a category by ID.
- Lua path
app.integrations.canny.retrieve_category- Full name
canny.canny_retrieve_category
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_categories Read
List categories with optional board and pagination filters.
- Lua path
app.integrations.canny.list_categories- Full name
canny.canny_list_categories
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_category Write
Create a category for a board.
- Lua path
app.integrations.canny.create_category- Full name
canny.canny_create_category
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_category Write
Delete a category.
- Lua path
app.integrations.canny.delete_category- Full name
canny.canny_delete_category
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_changelog_entry Write
Create a changelog entry.
- Lua path
app.integrations.canny.create_changelog_entry- Full name
canny.canny_create_entry
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_changelog_entries Read
List changelog entries.
- Lua path
app.integrations.canny.list_changelog_entries- Full name
canny.canny_list_entries
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_comment Read
Retrieve a comment by ID.
- Lua path
app.integrations.canny.retrieve_comment- Full name
canny.canny_retrieve_comment
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_comments Read
List comments with cursor pagination.
- Lua path
app.integrations.canny.list_comments- Full name
canny.canny_list_comments
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_comment Write
Create a comment on a post.
- Lua path
app.integrations.canny.create_comment- Full name
canny.canny_create_comment
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_comment Write
Delete a comment.
- Lua path
app.integrations.canny.delete_comment- Full name
canny.canny_delete_comment
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_companies Read
List companies with cursor pagination.
- Lua path
app.integrations.canny.list_companies- Full name
canny.canny_list_companies
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
update_company Write
Update a company.
- Lua path
app.integrations.canny.update_company- Full name
canny.canny_update_company
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_company Write
Delete a company.
- Lua path
app.integrations.canny.delete_company- Full name
canny.canny_delete_company
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_groups Read
List groups.
- Lua path
app.integrations.canny.list_groups- Full name
canny.canny_list_groups
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_group Read
Retrieve a group.
- Lua path
app.integrations.canny.retrieve_group- Full name
canny.canny_retrieve_group
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_ideas Read
List Canny ideas.
- Lua path
app.integrations.canny.list_ideas- Full name
canny.canny_list_ideas
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
merge_idea Write
Merge one idea into another.
- Lua path
app.integrations.canny.merge_idea- Full name
canny.canny_merge_idea
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_idea Read
Retrieve an idea.
- Lua path
app.integrations.canny.retrieve_idea- Full name
canny.canny_retrieve_idea
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_idea Write
Delete an idea.
- Lua path
app.integrations.canny.delete_idea- Full name
canny.canny_delete_idea
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_insights Read
List Canny insights.
- Lua path
app.integrations.canny.list_insights- Full name
canny.canny_list_insights
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_insight Read
Retrieve an insight.
- Lua path
app.integrations.canny.retrieve_insight- Full name
canny.canny_retrieve_insight
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_opportunities Read
List opportunities.
- Lua path
app.integrations.canny.list_opportunities- Full name
canny.canny_list_opportunities
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_post Read
Retrieve a feedback post.
- Lua path
app.integrations.canny.retrieve_post- Full name
canny.canny_retrieve_post
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_posts Read
List feedback posts with filters.
- Lua path
app.integrations.canny.list_posts- Full name
canny.canny_list_posts
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_post Write
Create a feedback post.
- Lua path
app.integrations.canny.create_post- Full name
canny.canny_create_post
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
change_post_board Write
Move a post to another board.
- Lua path
app.integrations.canny.change_post_board- Full name
canny.canny_change_post_board
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
change_post_category Write
Assign or clear a post category.
- Lua path
app.integrations.canny.change_post_category- Full name
canny.canny_change_post_category
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
change_post_status Write
Change a post status.
- Lua path
app.integrations.canny.change_post_status- Full name
canny.canny_change_post_status
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
merge_post Write
Merge one post into another.
- Lua path
app.integrations.canny.merge_post- Full name
canny.canny_merge_post
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
add_post_tag Write
Add a tag to a post.
- Lua path
app.integrations.canny.add_post_tag- Full name
canny.canny_add_post_tag
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
remove_post_tag Write
Remove a tag from a post.
- Lua path
app.integrations.canny.remove_post_tag- Full name
canny.canny_remove_post_tag
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
update_post Write
Update post fields.
- Lua path
app.integrations.canny.update_post- Full name
canny.canny_update_post
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_post Write
Delete a post.
- Lua path
app.integrations.canny.delete_post- Full name
canny.canny_delete_post
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
link_jira_issue Write
Link a Jira issue to a post.
- Lua path
app.integrations.canny.link_jira_issue- Full name
canny.canny_link_jira_issue
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
unlink_jira_issue Write
Unlink a Jira issue from a post.
- Lua path
app.integrations.canny.unlink_jira_issue- Full name
canny.canny_unlink_jira_issue
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_status_changes Read
List post status changes.
- Lua path
app.integrations.canny.list_status_changes- Full name
canny.canny_list_status_changes
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_tag Read
Retrieve a tag.
- Lua path
app.integrations.canny.retrieve_tag- Full name
canny.canny_retrieve_tag
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_tags Read
List tags.
- Lua path
app.integrations.canny.list_tags- Full name
canny.canny_list_tags
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_tag Write
Create a tag.
- Lua path
app.integrations.canny.create_tag- Full name
canny.canny_create_tag
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_users Read
List users with cursor pagination.
- Lua path
app.integrations.canny.list_users- Full name
canny.canny_list_users
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_user Read
Retrieve a user.
- Lua path
app.integrations.canny.retrieve_user- Full name
canny.canny_retrieve_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_or_update_user Write
Create or update a user.
- Lua path
app.integrations.canny.create_or_update_user- Full name
canny.canny_create_or_update_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
find_or_create_user Write
Deprecated Canny user upsert endpoint.
- Lua path
app.integrations.canny.find_or_create_user- Full name
canny.canny_find_or_create_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_user Write
Delete a user.
- Lua path
app.integrations.canny.delete_user- Full name
canny.canny_delete_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
remove_user_from_company Write
Remove a user from a company.
- Lua path
app.integrations.canny.remove_user_from_company- Full name
canny.canny_remove_user_from_company
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
retrieve_vote Read
Retrieve a vote.
- Lua path
app.integrations.canny.retrieve_vote- Full name
canny.canny_retrieve_vote
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_votes Read
List votes with cursor pagination.
- Lua path
app.integrations.canny.list_votes- Full name
canny.canny_list_votes
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
create_vote Write
Create a vote.
- Lua path
app.integrations.canny.create_vote- Full name
canny.canny_create_vote
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
delete_vote Write
Delete a vote.
- Lua path
app.integrations.canny.delete_vote- Full name
canny.canny_delete_vote
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
enqueue_feedback Write
Send feedback to Canny Autopilot.
- Lua path
app.integrations.canny.enqueue_feedback- Full name
canny.canny_enqueue_feedback
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
api_post Write
Call a safe relative Canny API POST path for endpoints not covered by first-class tools.
- Lua path
app.integrations.canny.api_post- Full name
canny.canny_api_post
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | yes | Relative Canny API path such as /api/v1/boards/list. |
payload | object | no | Request body fields without apiKey. |