KosmoKrator

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.

Inline Lua call
kosmo integrations:lua --eval 'dump(app.integrations.canny.retrieve_board({}))' --json
Read Lua docs headlessly
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.

workflow.lua
local canny = app.integrations.canny
local result = canny.retrieve_board({})

dump(result)
Run the workflow
kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json
Namespace note. 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.

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_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.

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.
Metadata-derived Lua example
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
ParameterTypeRequiredDescription
No parameters.
list_boards Read

List all Canny boards.

Lua path
app.integrations.canny.list_boards
Full name
canny.canny_list_boards
ParameterTypeRequiredDescription
No parameters.
retrieve_category Read

Retrieve a category by ID.

Lua path
app.integrations.canny.retrieve_category
Full name
canny.canny_retrieve_category
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
No parameters.
create_category Write

Create a category for a board.

Lua path
app.integrations.canny.create_category
Full name
canny.canny_create_category
ParameterTypeRequiredDescription
No parameters.
delete_category Write

Delete a category.

Lua path
app.integrations.canny.delete_category
Full name
canny.canny_delete_category
ParameterTypeRequiredDescription
No parameters.
create_changelog_entry Write

Create a changelog entry.

Lua path
app.integrations.canny.create_changelog_entry
Full name
canny.canny_create_entry
ParameterTypeRequiredDescription
No parameters.
list_changelog_entries Read

List changelog entries.

Lua path
app.integrations.canny.list_changelog_entries
Full name
canny.canny_list_entries
ParameterTypeRequiredDescription
No parameters.
retrieve_comment Read

Retrieve a comment by ID.

Lua path
app.integrations.canny.retrieve_comment
Full name
canny.canny_retrieve_comment
ParameterTypeRequiredDescription
No parameters.
list_comments Read

List comments with cursor pagination.

Lua path
app.integrations.canny.list_comments
Full name
canny.canny_list_comments
ParameterTypeRequiredDescription
No parameters.
create_comment Write

Create a comment on a post.

Lua path
app.integrations.canny.create_comment
Full name
canny.canny_create_comment
ParameterTypeRequiredDescription
No parameters.
delete_comment Write

Delete a comment.

Lua path
app.integrations.canny.delete_comment
Full name
canny.canny_delete_comment
ParameterTypeRequiredDescription
No parameters.
list_companies Read

List companies with cursor pagination.

Lua path
app.integrations.canny.list_companies
Full name
canny.canny_list_companies
ParameterTypeRequiredDescription
No parameters.
update_company Write

Update a company.

Lua path
app.integrations.canny.update_company
Full name
canny.canny_update_company
ParameterTypeRequiredDescription
No parameters.
delete_company Write

Delete a company.

Lua path
app.integrations.canny.delete_company
Full name
canny.canny_delete_company
ParameterTypeRequiredDescription
No parameters.
list_groups Read

List groups.

Lua path
app.integrations.canny.list_groups
Full name
canny.canny_list_groups
ParameterTypeRequiredDescription
No parameters.
retrieve_group Read

Retrieve a group.

Lua path
app.integrations.canny.retrieve_group
Full name
canny.canny_retrieve_group
ParameterTypeRequiredDescription
No parameters.
list_ideas Read

List Canny ideas.

Lua path
app.integrations.canny.list_ideas
Full name
canny.canny_list_ideas
ParameterTypeRequiredDescription
No parameters.
merge_idea Write

Merge one idea into another.

Lua path
app.integrations.canny.merge_idea
Full name
canny.canny_merge_idea
ParameterTypeRequiredDescription
No parameters.
retrieve_idea Read

Retrieve an idea.

Lua path
app.integrations.canny.retrieve_idea
Full name
canny.canny_retrieve_idea
ParameterTypeRequiredDescription
No parameters.
delete_idea Write

Delete an idea.

Lua path
app.integrations.canny.delete_idea
Full name
canny.canny_delete_idea
ParameterTypeRequiredDescription
No parameters.
list_insights Read

List Canny insights.

Lua path
app.integrations.canny.list_insights
Full name
canny.canny_list_insights
ParameterTypeRequiredDescription
No parameters.
retrieve_insight Read

Retrieve an insight.

Lua path
app.integrations.canny.retrieve_insight
Full name
canny.canny_retrieve_insight
ParameterTypeRequiredDescription
No parameters.
list_opportunities Read

List opportunities.

Lua path
app.integrations.canny.list_opportunities
Full name
canny.canny_list_opportunities
ParameterTypeRequiredDescription
No parameters.
retrieve_post Read

Retrieve a feedback post.

Lua path
app.integrations.canny.retrieve_post
Full name
canny.canny_retrieve_post
ParameterTypeRequiredDescription
No parameters.
list_posts Read

List feedback posts with filters.

Lua path
app.integrations.canny.list_posts
Full name
canny.canny_list_posts
ParameterTypeRequiredDescription
No parameters.
create_post Write

Create a feedback post.

Lua path
app.integrations.canny.create_post
Full name
canny.canny_create_post
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
No parameters.
merge_post Write

Merge one post into another.

Lua path
app.integrations.canny.merge_post
Full name
canny.canny_merge_post
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
No parameters.
update_post Write

Update post fields.

Lua path
app.integrations.canny.update_post
Full name
canny.canny_update_post
ParameterTypeRequiredDescription
No parameters.
delete_post Write

Delete a post.

Lua path
app.integrations.canny.delete_post
Full name
canny.canny_delete_post
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
No parameters.
retrieve_tag Read

Retrieve a tag.

Lua path
app.integrations.canny.retrieve_tag
Full name
canny.canny_retrieve_tag
ParameterTypeRequiredDescription
No parameters.
list_tags Read

List tags.

Lua path
app.integrations.canny.list_tags
Full name
canny.canny_list_tags
ParameterTypeRequiredDescription
No parameters.
create_tag Write

Create a tag.

Lua path
app.integrations.canny.create_tag
Full name
canny.canny_create_tag
ParameterTypeRequiredDescription
No parameters.
list_users Read

List users with cursor pagination.

Lua path
app.integrations.canny.list_users
Full name
canny.canny_list_users
ParameterTypeRequiredDescription
No parameters.
retrieve_user Read

Retrieve a user.

Lua path
app.integrations.canny.retrieve_user
Full name
canny.canny_retrieve_user
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
No parameters.
delete_user Write

Delete a user.

Lua path
app.integrations.canny.delete_user
Full name
canny.canny_delete_user
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
No parameters.
retrieve_vote Read

Retrieve a vote.

Lua path
app.integrations.canny.retrieve_vote
Full name
canny.canny_retrieve_vote
ParameterTypeRequiredDescription
No parameters.
list_votes Read

List votes with cursor pagination.

Lua path
app.integrations.canny.list_votes
Full name
canny.canny_list_votes
ParameterTypeRequiredDescription
No parameters.
create_vote Write

Create a vote.

Lua path
app.integrations.canny.create_vote
Full name
canny.canny_create_vote
ParameterTypeRequiredDescription
No parameters.
delete_vote Write

Delete a vote.

Lua path
app.integrations.canny.delete_vote
Full name
canny.canny_delete_vote
ParameterTypeRequiredDescription
No parameters.
enqueue_feedback Write

Send feedback to Canny Autopilot.

Lua path
app.integrations.canny.enqueue_feedback
Full name
canny.canny_enqueue_feedback
ParameterTypeRequiredDescription
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
ParameterTypeRequiredDescription
path string yes Relative Canny API path such as /api/v1/boards/list.
payload object no Request body fields without apiKey.