productivity
Productboard Lua API for KosmoKrator Agents
Agent-facing Lua documentation and function reference for the Productboard KosmoKrator integration.Lua Namespace
Agents call this integration through app.integrations.productboard.*.
Use lua_read_doc("integrations.productboard") 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
Productboard workflow without starting an interactive agent session.
kosmo integrations:lua --eval 'dump(app.integrations.productboard.list_features({pageSize = 1, cursor = "example_cursor"}))' --json kosmo integrations:lua --eval 'print(docs.read("productboard"))' --json
kosmo integrations:lua --eval 'print(docs.read("productboard.list_features"))' --json Workflow file
Put repeatable logic in a Lua file, then execute it with JSON output for the calling process.
local productboard = app.integrations.productboard
local result = productboard.list_features({pageSize = 1, cursor = "example_cursor"})
dump(result) kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json integrations:lua exposes app.integrations.productboard, app.mcp.*, docs.*, json.*, and regex.*. Use app.integrations.productboard.default.* or app.integrations.productboard.work.* when you configured named credential accounts.
MCP-only Lua
If the script only needs configured MCP servers and does not need Productboard, 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.
Productboard — Lua API Reference
list_features
List features from Productboard with cursor-based pagination.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of features per page (max 100, default 100) |
cursor | string | no | Pagination cursor from a previous response |
Examples
-- List all features
local result = app.integrations.productboard.list_features({})
for _, feature in ipairs(result.data or {}) do
print(feature.name .. " — " .. (feature.status or "no status"))
end
-- Paginate through results
local cursor = nil
repeat
local result = app.integrations.productboard.list_features({
pageSize = 50,
cursor = cursor,
})
for _, feature in ipairs(result.data or {}) do
print(feature.id .. ": " .. feature.name)
end
cursor = result.meta and result.meta.next_cursor or nil
until not cursor
get_feature
Get detailed information about a specific feature.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | yes | The feature ID |
Examples
local result = app.integrations.productboard.get_feature({ id = "feature_abc123" })
local feature = result.data
print("Name: " .. feature.name)
print("Status: " .. (feature.status or "none"))
print("Description: " .. (feature.description or "no description"))
create_feature
Create a new feature in Productboard.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
name | string | yes | The feature name |
description | string | no | Detailed description of the feature |
product_id | string | no | ID of the product to assign this feature to |
status | string | no | Feature status (e.g., “in_discovery”, “in_design”, “in_development”, “shipped”) |
owner_ids | array | no | Array of user IDs to assign as feature owners |
Examples
-- Create a simple feature
local result = app.integrations.productboard.create_feature({
name = "Dark Mode Support",
description = "Add a dark mode theme option for the application",
})
print("Created feature: " .. result.data.id)
-- Create a feature with product and status
local result = app.integrations.productboard.create_feature({
name = "API Rate Limiting",
description = "Implement rate limiting on public API endpoints",
product_id = "product_xyz789",
status = "in_discovery",
})
list_notes
List notes (customer feedback) from Productboard.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of notes per page (max 100, default 100) |
cursor | string | no | Pagination cursor from a previous response |
Examples
-- List recent notes
local result = app.integrations.productboard.list_notes({
pageSize = 20,
})
for _, note in ipairs(result.data or {}) do
print(note.title .. " by " .. (note.owner and note.owner.name or "unknown"))
end
create_note
Create a new note (customer feedback) in Productboard.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
title | string | yes | The note title |
content | string | no | The note content (plain text or HTML) |
owner_id | string | no | User ID of the note owner |
feature_ids | array | no | Array of feature IDs to link this note to |
company_ids | array | no | Array of company IDs associated with this note |
Examples
-- Create a feedback note
local result = app.integrations.productboard.create_note({
title = "Customer Request: Bulk Export",
content = "Enterprise customer needs bulk export functionality for monthly reporting",
feature_ids = { "feature_abc123" },
company_ids = { "company_def456" },
})
print("Created note: " .. result.data.id)
list_products
List products from Productboard.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of products per page (max 100, default 100) |
cursor | string | no | Pagination cursor from a previous response |
Examples
local result = app.integrations.productboard.list_products({})
for _, product in ipairs(result.data or {}) do
print(product.id .. ": " .. product.name)
end
list_companies
List companies from Productboard.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of companies per page (max 100, default 100) |
cursor | string | no | Pagination cursor from a previous response |
Examples
local result = app.integrations.productboard.list_companies({})
for _, company in ipairs(result.data or {}) do
print(company.id .. ": " .. company.name .. " (" .. (company.domain or "no domain") .. ")")
end
get_current_user
Get the currently authenticated Productboard user profile.
Parameters
None.
Examples
local result = app.integrations.productboard.get_current_user({})
print("Authenticated as: " .. result.data.firstName .. " " .. result.data.lastName)
print("Email: " .. result.data.email)
Multi-Account Usage
If you have multiple Productboard workspaces configured, use account-specific namespaces:
-- Default account (always works)
app.integrations.productboard.list_features({})
-- Explicit default (portable across setups)
app.integrations.productboard.default.list_features({})
-- Named accounts
app.integrations.productboard.workspace_a.list_features({})
app.integrations.productboard.workspace_b.list_features({})
All functions are identical across accounts — only the credentials differ.
Raw agent markdown
# Productboard — Lua API Reference
## list_features
List features from Productboard with cursor-based pagination.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pageSize` | integer | no | Number of features per page (max 100, default 100) |
| `cursor` | string | no | Pagination cursor from a previous response |
### Examples
```lua
-- List all features
local result = app.integrations.productboard.list_features({})
for _, feature in ipairs(result.data or {}) do
print(feature.name .. " — " .. (feature.status or "no status"))
end
-- Paginate through results
local cursor = nil
repeat
local result = app.integrations.productboard.list_features({
pageSize = 50,
cursor = cursor,
})
for _, feature in ipairs(result.data or {}) do
print(feature.id .. ": " .. feature.name)
end
cursor = result.meta and result.meta.next_cursor or nil
until not cursor
```
---
## get_feature
Get detailed information about a specific feature.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `id` | string | yes | The feature ID |
### Examples
```lua
local result = app.integrations.productboard.get_feature({ id = "feature_abc123" })
local feature = result.data
print("Name: " .. feature.name)
print("Status: " .. (feature.status or "none"))
print("Description: " .. (feature.description or "no description"))
```
---
## create_feature
Create a new feature in Productboard.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `name` | string | yes | The feature name |
| `description` | string | no | Detailed description of the feature |
| `product_id` | string | no | ID of the product to assign this feature to |
| `status` | string | no | Feature status (e.g., "in_discovery", "in_design", "in_development", "shipped") |
| `owner_ids` | array | no | Array of user IDs to assign as feature owners |
### Examples
```lua
-- Create a simple feature
local result = app.integrations.productboard.create_feature({
name = "Dark Mode Support",
description = "Add a dark mode theme option for the application",
})
print("Created feature: " .. result.data.id)
-- Create a feature with product and status
local result = app.integrations.productboard.create_feature({
name = "API Rate Limiting",
description = "Implement rate limiting on public API endpoints",
product_id = "product_xyz789",
status = "in_discovery",
})
```
---
## list_notes
List notes (customer feedback) from Productboard.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pageSize` | integer | no | Number of notes per page (max 100, default 100) |
| `cursor` | string | no | Pagination cursor from a previous response |
### Examples
```lua
-- List recent notes
local result = app.integrations.productboard.list_notes({
pageSize = 20,
})
for _, note in ipairs(result.data or {}) do
print(note.title .. " by " .. (note.owner and note.owner.name or "unknown"))
end
```
---
## create_note
Create a new note (customer feedback) in Productboard.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `title` | string | yes | The note title |
| `content` | string | no | The note content (plain text or HTML) |
| `owner_id` | string | no | User ID of the note owner |
| `feature_ids` | array | no | Array of feature IDs to link this note to |
| `company_ids` | array | no | Array of company IDs associated with this note |
### Examples
```lua
-- Create a feedback note
local result = app.integrations.productboard.create_note({
title = "Customer Request: Bulk Export",
content = "Enterprise customer needs bulk export functionality for monthly reporting",
feature_ids = { "feature_abc123" },
company_ids = { "company_def456" },
})
print("Created note: " .. result.data.id)
```
---
## list_products
List products from Productboard.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pageSize` | integer | no | Number of products per page (max 100, default 100) |
| `cursor` | string | no | Pagination cursor from a previous response |
### Examples
```lua
local result = app.integrations.productboard.list_products({})
for _, product in ipairs(result.data or {}) do
print(product.id .. ": " .. product.name)
end
```
---
## list_companies
List companies from Productboard.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pageSize` | integer | no | Number of companies per page (max 100, default 100) |
| `cursor` | string | no | Pagination cursor from a previous response |
### Examples
```lua
local result = app.integrations.productboard.list_companies({})
for _, company in ipairs(result.data or {}) do
print(company.id .. ": " .. company.name .. " (" .. (company.domain or "no domain") .. ")")
end
```
---
## get_current_user
Get the currently authenticated Productboard user profile.
### Parameters
None.
### Examples
```lua
local result = app.integrations.productboard.get_current_user({})
print("Authenticated as: " .. result.data.firstName .. " " .. result.data.lastName)
print("Email: " .. result.data.email)
```
---
## Multi-Account Usage
If you have multiple Productboard workspaces configured, use account-specific namespaces:
```lua
-- Default account (always works)
app.integrations.productboard.list_features({})
-- Explicit default (portable across setups)
app.integrations.productboard.default.list_features({})
-- Named accounts
app.integrations.productboard.workspace_a.list_features({})
app.integrations.productboard.workspace_b.list_features({})
```
All functions are identical across accounts — only the credentials differ. local result = app.integrations.productboard.list_features({pageSize = 1, cursor = "example_cursor"})
print(result) Functions
list_features Read
List features from Productboard. Returns feature names, statuses, descriptions, and product assignments. Supports cursor-based pagination.
- Lua path
app.integrations.productboard.list_features- Full name
productboard.productboard_list_features
| Parameter | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of features per page (max 100, default 100). |
cursor | string | no | Pagination cursor from a previous response to fetch the next page. |
get_feature Read
Get detailed information about a specific Productboard feature by its ID.
- Lua path
app.integrations.productboard.get_feature- Full name
productboard.productboard_get_feature
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | The feature ID. |
create_feature Write
Create a new feature in Productboard. Requires at minimum a name. Optionally set description, product, status, and owner.
- Lua path
app.integrations.productboard.create_feature- Full name
productboard.productboard_create_feature
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | The feature name. |
description | string | no | Detailed description of the feature. |
product_id | string | no | ID of the product to assign this feature to. |
status | string | no | Feature status (e.g., "in_discovery", "in_design", "in_development", "shipped"). Must match a status configured in your Productboard workspace. |
owner_ids | array | no | Array of user IDs to assign as feature owners. |
list_notes Read
List notes (customer feedback) from Productboard. Returns note titles, content, authors, and linked features. Supports cursor-based pagination.
- Lua path
app.integrations.productboard.list_notes- Full name
productboard.productboard_list_notes
| Parameter | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of notes per page (max 100, default 100). |
cursor | string | no | Pagination cursor from a previous response to fetch the next page. |
create_note Write
Create a new note (customer feedback) in Productboard. Requires at minimum a title. Optionally set content, owner, and linked features.
- Lua path
app.integrations.productboard.create_note- Full name
productboard.productboard_create_note
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | The note title. |
content | string | no | The note content (plain text or HTML). |
owner_id | string | no | User ID of the note owner. |
feature_ids | array | no | Array of feature IDs to link this note to. |
company_ids | array | no | Array of company IDs associated with this note. |
list Read
List products from Productboard. Returns product names, descriptions, and IDs. Supports cursor-based pagination.
- Lua path
app.integrations.productboard.list- Full name
productboard.productboard_list_products
| Parameter | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of products per page (max 100, default 100). |
cursor | string | no | Pagination cursor from a previous response to fetch the next page. |
list_companies Read
List companies from Productboard. Returns company names, domains, and IDs. Supports cursor-based pagination.
- Lua path
app.integrations.productboard.list_companies- Full name
productboard.productboard_list_companies
| Parameter | Type | Required | Description |
|---|---|---|---|
pageSize | integer | no | Number of companies per page (max 100, default 100). |
cursor | string | no | Pagination cursor from a previous response to fetch the next page. |
get_current_user Read
Get the currently authenticated Productboard user profile. Returns name, email, and role. Useful for verifying API connectivity.
- Lua path
app.integrations.productboard.get_current_user- Full name
productboard.productboard_get_current_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||