productivity
Plane Lua API for KosmoKrator Agents
Agent-facing Lua documentation and function reference for the Plane KosmoKrator integration.Lua Namespace
Agents call this integration through app.integrations.plane.*.
Use lua_read_doc("integrations.plane") 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
Plane workflow without starting an interactive agent session.
kosmo integrations:lua --eval 'dump(app.integrations.plane.list_workspaces({}))' --json kosmo integrations:lua --eval 'print(docs.read("plane"))' --json
kosmo integrations:lua --eval 'print(docs.read("plane.list_workspaces"))' --json Workflow file
Put repeatable logic in a Lua file, then execute it with JSON output for the calling process.
local plane = app.integrations.plane
local result = plane.list_workspaces({})
dump(result) kosmo integrations:lua workflow.lua --json
kosmo integrations:lua workflow.lua --force --json integrations:lua exposes app.integrations.plane, app.mcp.*, docs.*, json.*, and regex.*. Use app.integrations.plane.default.* or app.integrations.plane.work.* when you configured named credential accounts.
MCP-only Lua
If the script only needs configured MCP servers and does not need Plane, 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.
Plane.so — Lua API Reference
If you configure a default workspace_slug, most tools can omit workspace_slug and will use that default automatically.
On some self-hosted Plane deployments, user and workspace-list endpoints are limited; this integration falls back to workspace-scoped project access where needed.
list_workspaces
List all Plane.so workspaces the authenticated user belongs to. On self-hosted deployments that do not expose the workspace-list endpoint, this returns the configured default workspace after verifying access.
Parameters
None.
Example
local result = app.integrations.plane.list_workspaces()
for _, ws in ipairs(result.workspaces) do
print(ws.slug .. " — " .. ws.name)
end
list_projects
List all projects in a workspace.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug (e.g., "my-team") |
Example
local result = app.integrations.plane.list_projects({
workspace_slug = "my-team"
})
for _, proj in ipairs(result.projects) do
print(proj.identifier .. " — " .. proj.name)
end
list_issues
List issues in a project with optional filters.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
state | string | no | Filter by state UUID |
priority | string | no | Filter by priority: urgent, high, medium, low, none |
assignee | string | no | Filter by assignee UUID |
labels | string | no | Comma-separated label UUIDs |
search | string | no | Search query for issue name |
parent | string | no | Filter by parent issue UUID |
cycle | string | no | Filter by cycle UUID |
module | string | no | Filter by module UUID |
Example
local result = app.integrations.plane.list_issues({
workspace_slug = "my-team",
project_id = "abc-123-def",
priority = "high"
})
for _, issue in ipairs(result.issues) do
print("#" .. issue.sequence_id .. " " .. issue.name .. " [" .. (issue.priority or "none") .. "]")
end
get_issue
Get detailed information about a single issue.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
Example
local issue = app.integrations.plane.get_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
print(issue.name)
print(issue.description_html)
print("Priority: " .. (issue.priority or "none"))
create_issue
Create a new issue in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
name | string | yes | Issue title |
description_html | string | no | Description in HTML |
state | string | no | State UUID |
priority | string | no | urgent, high, medium, low, none |
assignees | array | no | Array of user UUIDs |
labels | array | no | Array of label UUIDs |
start_date | string | no | Start date (YYYY-MM-DD) |
target_date | string | no | Due date (YYYY-MM-DD) |
parent | string | no | Parent issue UUID for sub-issues |
Example
local issue = app.integrations.plane.create_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Fix login redirect bug",
description_html = "<p>Users are redirected to 404 after login.</p>",
priority = "high",
target_date = "2026-04-15"
})
print("Created issue #" .. issue.sequence_id .. ": " .. issue.name)
update_issue
Update an existing issue. Only provide fields you want to change.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
name | string | no | New title |
description_html | string | no | New description (HTML) |
state | string | no | New state UUID |
priority | string | no | New priority |
assignees | array | no | New assignee UUIDs (replaces existing) |
labels | array | no | New label UUIDs (replaces existing) |
start_date | string | no | New start date |
target_date | string | no | New due date |
parent | string | no | New parent issue UUID |
Example
local issue = app.integrations.plane.update_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi",
state = "done-state-uuid",
priority = "low"
})
print("Updated issue #" .. issue.sequence_id)
delete_issue
Delete an issue permanently.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
Example
local result = app.integrations.plane.delete_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
print("Deleted: " .. tostring(result.deleted))
list_cycles
List all cycles in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local result = app.integrations.plane.list_cycles({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, cycle in ipairs(result.cycles) do
print(cycle.name .. " (" .. (cycle.start_date or "?") .. " → " .. (cycle.end_date or "?") .. ")")
end
add_issue_to_cycle
Add an issue to a cycle.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
cycle_id | string | yes | Cycle UUID |
issue_id | string | yes | Issue UUID |
Example
local result = app.integrations.plane.add_issue_to_cycle({
workspace_slug = "my-team",
project_id = "abc-123-def",
cycle_id = "cycle-uuid-here",
issue_id = "issue-uuid-here"
})
print("Added to cycle: " .. tostring(result.added))
list_modules
List all modules in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local result = app.integrations.plane.list_modules({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, mod in ipairs(result.modules) do
print(mod.name .. " — status: " .. (mod.status or "none"))
end
add_issue_to_module
Add an issue to a module.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
module_id | string | yes | Module UUID |
issue_id | string | yes | Issue UUID |
Example
local result = app.integrations.plane.add_issue_to_module({
workspace_slug = "my-team",
project_id = "abc-123-def",
module_id = "module-uuid-here",
issue_id = "issue-uuid-here"
})
print("Added to module: " .. tostring(result.added))
list_members
List members of a workspace or project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | no | Project UUID (if omitted, lists workspace members) |
Example
-- List workspace members
local result = app.integrations.plane.list_members({
workspace_slug = "my-team"
})
-- List project members only
local result = app.integrations.plane.list_members({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, member in ipairs(result.members) do
print(member.display_name .. " <" .. (member.email or "") .. "> — " .. (member.role or ""))
end
list_states
List workflow states in a project. Use state UUIDs when creating or updating issues.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local result = app.integrations.plane.list_states({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, state in ipairs(result.states) do
print(state.name .. " [" .. (state.group or "") .. "] = " .. state.id)
end
list_labels
List labels in a project. Use label UUIDs when creating or updating issues.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local result = app.integrations.plane.list_labels({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, label in ipairs(result.labels) do
print(label.name .. " (color: " .. (label.color or "?") .. ") = " .. label.id)
end
create_comment
Add a comment to an issue.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
comment_html | string | yes | Comment content in HTML format |
Example
local result = app.integrations.plane.create_comment({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi",
comment_html = "<p>Investigating — looks like a redirect config issue.</p>"
})
print("Comment created: " .. result.id)
list_comments
List all comments on an issue.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
Example
local result = app.integrations.plane.list_comments({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
for _, comment in ipairs(result.comments) do
print("[" .. (comment.created_at or "") .. "] " .. (comment.comment_html or ""))
end
search_issues
Search issues across all projects in a workspace.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
search | string | yes | Search query |
project | string | no | Filter by project UUID |
state | string | no | Filter by state UUID |
priority | string | no | Filter by priority |
assignee | string | no | Filter by assignee UUID |
Example
local result = app.integrations.plane.search_issues({
workspace_slug = "my-team",
search = "login bug"
})
for _, issue in ipairs(result.issues) do
print("#" .. (issue.sequence_id or "?") .. " " .. issue.name)
end
get_project
Get detailed information about a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local project = app.integrations.plane.get_project({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
print(project.name .. " (" .. project.identifier .. ")")
print("Active: " .. tostring(project.is_active))
create_project
Create a new project in a workspace.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
name | string | yes | Project name |
identifier | string | yes | Short code (max 12 chars, e.g., "PROJ") |
description | string | no | Project description |
cover_image | string | no | Cover image URL |
project_lead | string | no | UUID of project lead |
default_assignee | string | no | UUID of default assignee |
Example
local project = app.integrations.plane.create_project({
workspace_slug = "my-team",
name = "Website Redesign",
identifier = "REDESIGN",
description = "Full redesign of the marketing website"
})
print("Created project: " .. project.name .. " (" .. project.identifier .. ")")
list_issue_activities
List activity/audit events on an issue.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
Example
local result = app.integrations.plane.list_issue_activities({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
for _, act in ipairs(result.activities) do
print((act.created_at or "") .. " — " .. (act.action or "") .. " " .. (act.field or ""))
end
create_issue_link
Attach an external link to an issue.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
title | string | yes | Display title for the link |
url | string | yes | The URL to link to |
Example
local result = app.integrations.plane.create_issue_link({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi",
title = "Design mockup",
url = "https://figma.com/file/abc123"
})
print("Link added: " .. result.title)
list_issue_relations
List relations on an issue (blocking, duplicate, etc.).
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
issue_id | string | yes | Issue UUID |
Relation Types
blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, finish_after
Example
local result = app.integrations.plane.list_issue_relations({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
for _, rel in ipairs(result.relations) do
print(rel.relation_type .. " → " .. (rel.related_issue or "?"))
end
get_current_user
Get the currently authenticated Plane.so user. Useful for verifying credentials.
On self-hosted deployments where the user endpoint is unavailable, this falls back to a workspace access probe and returns workspace_slug with a synthetic display name.
Parameters
None.
Example
local user = app.integrations.plane.get_current_user()
print(user.display_name .. " <" .. (user.email or "") .. ">")
print("User ID: " .. user.id)
get_cycle
Get details of a specific cycle.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
cycle_id | string | yes | Cycle UUID |
Example
local cycle = app.integrations.plane.get_cycle({
workspace_slug = "my-team",
project_id = "abc-123-def",
cycle_id = "cycle-uuid"
})
print(cycle.name .. ": " .. (cycle.start_date or "?") .. " → " .. (cycle.end_date or "?"))
print("Active: " .. tostring(cycle.is_active))
create_cycle
Create a new cycle (sprint) in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
name | string | no | Cycle name (e.g., "Sprint 14") |
description | string | no | Cycle description |
start_date | string | no | Start date (YYYY-MM-DD) |
end_date | string | no | End date (YYYY-MM-DD) |
Example
local cycle = app.integrations.plane.create_cycle({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Sprint 15",
start_date = "2026-04-14",
end_date = "2026-04-28"
})
print("Created cycle: " .. (cycle.name or "unnamed"))
get_module
Get details of a specific module.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
module_id | string | yes | Module UUID |
Example
local mod = app.integrations.plane.get_module({
workspace_slug = "my-team",
project_id = "abc-123-def",
module_id = "module-uuid"
})
print(mod.name .. " — status: " .. (mod.status or "none"))
create_module
Create a new module in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
name | string | yes | Module name |
description | string | no | Module description |
status | string | no | Module status |
start_date | string | no | Start date (YYYY-MM-DD) |
target_date | string | no | Target date (YYYY-MM-DD) |
Example
local mod = app.integrations.plane.create_module({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Authentication System",
description = "OAuth2 + SSO integration",
target_date = "2026-05-01"
})
print("Created module: " .. mod.name)
create_state
Create a workflow state in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
name | string | yes | State name (e.g., "In Review") |
group | string | yes | One of: backlog, unstarted, started, completed, cancelled |
color | string | no | Hex color code (e.g., "#FF5733") |
description | string | no | State description |
slug | string | no | URL-friendly slug |
Example
local state = app.integrations.plane.create_state({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Ready for QA",
group = "started",
color = "#FFA500"
})
print("Created state: " .. state.name .. " [" .. state.group .. "] = " .. state.id)
create_label
Create a label in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
name | string | yes | Label name |
color | string | no | Hex color code |
description | string | no | Label description |
parent | string | no | Parent label UUID for hierarchy |
Example
local label = app.integrations.plane.create_label({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "bug",
color = "#FF0000"
})
print("Created label: " .. label.name .. " = " .. label.id)
archive_project
Archive a project. Hidden from active views but data is retained.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local result = app.integrations.plane.archive_project({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
print("Archived: " .. tostring(result.archived))
list_pages
List pages in a project. Pages are Notion-like documents.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
Example
local result = app.integrations.plane.list_pages({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, page in ipairs(result.pages) do
print(page.name .. " (updated: " .. (page.updated_at or "?") .. ")")
end
get_page
Get full content of a page.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
page_id | string | yes | Page UUID |
Example
local page = app.integrations.plane.get_page({
workspace_slug = "my-team",
project_id = "abc-123-def",
page_id = "page-uuid"
})
print(page.name)
print(page.description_html)
create_page
Create a new page in a project.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug |
project_id | string | yes | Project UUID |
name | string | yes | Page title |
description_html | string | no | Page content in HTML |
Example
local page = app.integrations.plane.create_page({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "API Design Notes",
description_html = "<h2>Endpoints</h2><p>POST /api/v1/users</p>"
})
print("Created page: " .. page.name .. " = " .. page.id)
Webhooks
The plane_webhook trigger receives Plane.so workspace events. Configure it with a workspace slug and optional project scope.
Trigger Parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | yes | Workspace slug to listen on |
project_id | string | no | Scope to a specific project |
Multi-Account Usage
If you have multiple Plane.so accounts configured, use account-specific namespaces:
-- Default account (always works)
app.integrations.plane.list_workspaces()
-- Explicit default (portable across setups)
app.integrations.plane.default.list_workspaces()
-- Named accounts
app.integrations.plane.self_hosted.list_workspaces()
app.integrations.plane.cloud.list_workspaces()
All functions are identical across accounts — only the credentials differ.
Raw agent markdown
# Plane.so — Lua API Reference
If you configure a default `workspace_slug`, most tools can omit `workspace_slug` and will use that default automatically.
On some self-hosted Plane deployments, user and workspace-list endpoints are limited; this integration falls back to workspace-scoped project access where needed.
## list_workspaces
List all Plane.so workspaces the authenticated user belongs to.
On self-hosted deployments that do not expose the workspace-list endpoint, this returns the configured default workspace after verifying access.
### Parameters
None.
### Example
```lua
local result = app.integrations.plane.list_workspaces()
for _, ws in ipairs(result.workspaces) do
print(ws.slug .. " — " .. ws.name)
end
```
---
## list_projects
List all projects in a workspace.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug (e.g., `"my-team"`) |
### Example
```lua
local result = app.integrations.plane.list_projects({
workspace_slug = "my-team"
})
for _, proj in ipairs(result.projects) do
print(proj.identifier .. " — " .. proj.name)
end
```
---
## list_issues
List issues in a project with optional filters.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `state` | string | no | Filter by state UUID |
| `priority` | string | no | Filter by priority: `urgent`, `high`, `medium`, `low`, `none` |
| `assignee` | string | no | Filter by assignee UUID |
| `labels` | string | no | Comma-separated label UUIDs |
| `search` | string | no | Search query for issue name |
| `parent` | string | no | Filter by parent issue UUID |
| `cycle` | string | no | Filter by cycle UUID |
| `module` | string | no | Filter by module UUID |
### Example
```lua
local result = app.integrations.plane.list_issues({
workspace_slug = "my-team",
project_id = "abc-123-def",
priority = "high"
})
for _, issue in ipairs(result.issues) do
print("#" .. issue.sequence_id .. " " .. issue.name .. " [" .. (issue.priority or "none") .. "]")
end
```
---
## get_issue
Get detailed information about a single issue.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
### Example
```lua
local issue = app.integrations.plane.get_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
print(issue.name)
print(issue.description_html)
print("Priority: " .. (issue.priority or "none"))
```
---
## create_issue
Create a new issue in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `name` | string | yes | Issue title |
| `description_html` | string | no | Description in HTML |
| `state` | string | no | State UUID |
| `priority` | string | no | `urgent`, `high`, `medium`, `low`, `none` |
| `assignees` | array | no | Array of user UUIDs |
| `labels` | array | no | Array of label UUIDs |
| `start_date` | string | no | Start date (YYYY-MM-DD) |
| `target_date` | string | no | Due date (YYYY-MM-DD) |
| `parent` | string | no | Parent issue UUID for sub-issues |
### Example
```lua
local issue = app.integrations.plane.create_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Fix login redirect bug",
description_html = "<p>Users are redirected to 404 after login.</p>",
priority = "high",
target_date = "2026-04-15"
})
print("Created issue #" .. issue.sequence_id .. ": " .. issue.name)
```
---
## update_issue
Update an existing issue. Only provide fields you want to change.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
| `name` | string | no | New title |
| `description_html` | string | no | New description (HTML) |
| `state` | string | no | New state UUID |
| `priority` | string | no | New priority |
| `assignees` | array | no | New assignee UUIDs (replaces existing) |
| `labels` | array | no | New label UUIDs (replaces existing) |
| `start_date` | string | no | New start date |
| `target_date` | string | no | New due date |
| `parent` | string | no | New parent issue UUID |
### Example
```lua
local issue = app.integrations.plane.update_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi",
state = "done-state-uuid",
priority = "low"
})
print("Updated issue #" .. issue.sequence_id)
```
---
## delete_issue
Delete an issue permanently.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
### Example
```lua
local result = app.integrations.plane.delete_issue({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
print("Deleted: " .. tostring(result.deleted))
```
---
## list_cycles
List all cycles in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local result = app.integrations.plane.list_cycles({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, cycle in ipairs(result.cycles) do
print(cycle.name .. " (" .. (cycle.start_date or "?") .. " → " .. (cycle.end_date or "?") .. ")")
end
```
---
## add_issue_to_cycle
Add an issue to a cycle.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `cycle_id` | string | yes | Cycle UUID |
| `issue_id` | string | yes | Issue UUID |
### Example
```lua
local result = app.integrations.plane.add_issue_to_cycle({
workspace_slug = "my-team",
project_id = "abc-123-def",
cycle_id = "cycle-uuid-here",
issue_id = "issue-uuid-here"
})
print("Added to cycle: " .. tostring(result.added))
```
---
## list_modules
List all modules in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local result = app.integrations.plane.list_modules({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, mod in ipairs(result.modules) do
print(mod.name .. " — status: " .. (mod.status or "none"))
end
```
---
## add_issue_to_module
Add an issue to a module.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `module_id` | string | yes | Module UUID |
| `issue_id` | string | yes | Issue UUID |
### Example
```lua
local result = app.integrations.plane.add_issue_to_module({
workspace_slug = "my-team",
project_id = "abc-123-def",
module_id = "module-uuid-here",
issue_id = "issue-uuid-here"
})
print("Added to module: " .. tostring(result.added))
```
---
## list_members
List members of a workspace or project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | no | Project UUID (if omitted, lists workspace members) |
### Example
```lua
-- List workspace members
local result = app.integrations.plane.list_members({
workspace_slug = "my-team"
})
-- List project members only
local result = app.integrations.plane.list_members({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, member in ipairs(result.members) do
print(member.display_name .. " <" .. (member.email or "") .. "> — " .. (member.role or ""))
end
```
---
---
## list_states
List workflow states in a project. Use state UUIDs when creating or updating issues.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local result = app.integrations.plane.list_states({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, state in ipairs(result.states) do
print(state.name .. " [" .. (state.group or "") .. "] = " .. state.id)
end
```
---
## list_labels
List labels in a project. Use label UUIDs when creating or updating issues.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local result = app.integrations.plane.list_labels({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, label in ipairs(result.labels) do
print(label.name .. " (color: " .. (label.color or "?") .. ") = " .. label.id)
end
```
---
## create_comment
Add a comment to an issue.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
| `comment_html` | string | yes | Comment content in HTML format |
### Example
```lua
local result = app.integrations.plane.create_comment({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi",
comment_html = "<p>Investigating — looks like a redirect config issue.</p>"
})
print("Comment created: " .. result.id)
```
---
## list_comments
List all comments on an issue.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
### Example
```lua
local result = app.integrations.plane.list_comments({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
for _, comment in ipairs(result.comments) do
print("[" .. (comment.created_at or "") .. "] " .. (comment.comment_html or ""))
end
```
---
## search_issues
Search issues across all projects in a workspace.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `search` | string | yes | Search query |
| `project` | string | no | Filter by project UUID |
| `state` | string | no | Filter by state UUID |
| `priority` | string | no | Filter by priority |
| `assignee` | string | no | Filter by assignee UUID |
### Example
```lua
local result = app.integrations.plane.search_issues({
workspace_slug = "my-team",
search = "login bug"
})
for _, issue in ipairs(result.issues) do
print("#" .. (issue.sequence_id or "?") .. " " .. issue.name)
end
```
---
## get_project
Get detailed information about a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local project = app.integrations.plane.get_project({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
print(project.name .. " (" .. project.identifier .. ")")
print("Active: " .. tostring(project.is_active))
```
---
## create_project
Create a new project in a workspace.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `name` | string | yes | Project name |
| `identifier` | string | yes | Short code (max 12 chars, e.g., `"PROJ"`) |
| `description` | string | no | Project description |
| `cover_image` | string | no | Cover image URL |
| `project_lead` | string | no | UUID of project lead |
| `default_assignee` | string | no | UUID of default assignee |
### Example
```lua
local project = app.integrations.plane.create_project({
workspace_slug = "my-team",
name = "Website Redesign",
identifier = "REDESIGN",
description = "Full redesign of the marketing website"
})
print("Created project: " .. project.name .. " (" .. project.identifier .. ")")
```
---
## list_issue_activities
List activity/audit events on an issue.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
### Example
```lua
local result = app.integrations.plane.list_issue_activities({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
for _, act in ipairs(result.activities) do
print((act.created_at or "") .. " — " .. (act.action or "") .. " " .. (act.field or ""))
end
```
---
## create_issue_link
Attach an external link to an issue.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
| `title` | string | yes | Display title for the link |
| `url` | string | yes | The URL to link to |
### Example
```lua
local result = app.integrations.plane.create_issue_link({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi",
title = "Design mockup",
url = "https://figma.com/file/abc123"
})
print("Link added: " .. result.title)
```
---
## list_issue_relations
List relations on an issue (blocking, duplicate, etc.).
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `issue_id` | string | yes | Issue UUID |
### Relation Types
`blocking`, `blocked_by`, `duplicate`, `relates_to`, `start_before`, `start_after`, `finish_before`, `finish_after`
### Example
```lua
local result = app.integrations.plane.list_issue_relations({
workspace_slug = "my-team",
project_id = "abc-123-def",
issue_id = "xyz-456-ghi"
})
for _, rel in ipairs(result.relations) do
print(rel.relation_type .. " → " .. (rel.related_issue or "?"))
end
```
---
## get_current_user
Get the currently authenticated Plane.so user. Useful for verifying credentials.
On self-hosted deployments where the user endpoint is unavailable, this falls back to a workspace access probe and returns `workspace_slug` with a synthetic display name.
### Parameters
None.
### Example
```lua
local user = app.integrations.plane.get_current_user()
print(user.display_name .. " <" .. (user.email or "") .. ">")
print("User ID: " .. user.id)
```
---
## get_cycle
Get details of a specific cycle.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `cycle_id` | string | yes | Cycle UUID |
### Example
```lua
local cycle = app.integrations.plane.get_cycle({
workspace_slug = "my-team",
project_id = "abc-123-def",
cycle_id = "cycle-uuid"
})
print(cycle.name .. ": " .. (cycle.start_date or "?") .. " → " .. (cycle.end_date or "?"))
print("Active: " .. tostring(cycle.is_active))
```
---
## create_cycle
Create a new cycle (sprint) in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `name` | string | no | Cycle name (e.g., `"Sprint 14"`) |
| `description` | string | no | Cycle description |
| `start_date` | string | no | Start date (YYYY-MM-DD) |
| `end_date` | string | no | End date (YYYY-MM-DD) |
### Example
```lua
local cycle = app.integrations.plane.create_cycle({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Sprint 15",
start_date = "2026-04-14",
end_date = "2026-04-28"
})
print("Created cycle: " .. (cycle.name or "unnamed"))
```
---
## get_module
Get details of a specific module.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `module_id` | string | yes | Module UUID |
### Example
```lua
local mod = app.integrations.plane.get_module({
workspace_slug = "my-team",
project_id = "abc-123-def",
module_id = "module-uuid"
})
print(mod.name .. " — status: " .. (mod.status or "none"))
```
---
## create_module
Create a new module in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `name` | string | yes | Module name |
| `description` | string | no | Module description |
| `status` | string | no | Module status |
| `start_date` | string | no | Start date (YYYY-MM-DD) |
| `target_date` | string | no | Target date (YYYY-MM-DD) |
### Example
```lua
local mod = app.integrations.plane.create_module({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Authentication System",
description = "OAuth2 + SSO integration",
target_date = "2026-05-01"
})
print("Created module: " .. mod.name)
```
---
## create_state
Create a workflow state in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `name` | string | yes | State name (e.g., `"In Review"`) |
| `group` | string | yes | One of: `backlog`, `unstarted`, `started`, `completed`, `cancelled` |
| `color` | string | no | Hex color code (e.g., `"#FF5733"`) |
| `description` | string | no | State description |
| `slug` | string | no | URL-friendly slug |
### Example
```lua
local state = app.integrations.plane.create_state({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "Ready for QA",
group = "started",
color = "#FFA500"
})
print("Created state: " .. state.name .. " [" .. state.group .. "] = " .. state.id)
```
---
## create_label
Create a label in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `name` | string | yes | Label name |
| `color` | string | no | Hex color code |
| `description` | string | no | Label description |
| `parent` | string | no | Parent label UUID for hierarchy |
### Example
```lua
local label = app.integrations.plane.create_label({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "bug",
color = "#FF0000"
})
print("Created label: " .. label.name .. " = " .. label.id)
```
---
## archive_project
Archive a project. Hidden from active views but data is retained.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local result = app.integrations.plane.archive_project({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
print("Archived: " .. tostring(result.archived))
```
---
## list_pages
List pages in a project. Pages are Notion-like documents.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
### Example
```lua
local result = app.integrations.plane.list_pages({
workspace_slug = "my-team",
project_id = "abc-123-def"
})
for _, page in ipairs(result.pages) do
print(page.name .. " (updated: " .. (page.updated_at or "?") .. ")")
end
```
---
## get_page
Get full content of a page.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `page_id` | string | yes | Page UUID |
### Example
```lua
local page = app.integrations.plane.get_page({
workspace_slug = "my-team",
project_id = "abc-123-def",
page_id = "page-uuid"
})
print(page.name)
print(page.description_html)
```
---
## create_page
Create a new page in a project.
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug |
| `project_id` | string | yes | Project UUID |
| `name` | string | yes | Page title |
| `description_html` | string | no | Page content in HTML |
### Example
```lua
local page = app.integrations.plane.create_page({
workspace_slug = "my-team",
project_id = "abc-123-def",
name = "API Design Notes",
description_html = "<h2>Endpoints</h2><p>POST /api/v1/users</p>"
})
print("Created page: " .. page.name .. " = " .. page.id)
```
---
## Webhooks
The `plane_webhook` trigger receives Plane.so workspace events. Configure it with a workspace slug and optional project scope.
### Trigger Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `workspace_slug` | string | yes | Workspace slug to listen on |
| `project_id` | string | no | Scope to a specific project |
---
## Multi-Account Usage
If you have multiple Plane.so accounts configured, use account-specific namespaces:
```lua
-- Default account (always works)
app.integrations.plane.list_workspaces()
-- Explicit default (portable across setups)
app.integrations.plane.default.list_workspaces()
-- Named accounts
app.integrations.plane.self_hosted.list_workspaces()
app.integrations.plane.cloud.list_workspaces()
```
All functions are identical across accounts — only the credentials differ. local result = app.integrations.plane.list_workspaces({})
print(result) Functions
list_workspaces Read
List all Plane.so workspaces the authenticated user belongs to. Returns workspace slug, name, and owner info. Use the slug to reference workspaces in other tools.
- Lua path
app.integrations.plane.list_workspaces- Full name
plane.plane_list_workspaces
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||
list_projects Read
List all projects in a Plane.so workspace. Returns project ID, name, identifier, description, and status. Use the project ID to reference projects in other tools.
- Lua path
app.integrations.plane.list_projects- Full name
plane.plane_list_projects
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug (e.g., "my-team"). |
get_project Read
Get detailed information about a Plane.so project, including name, identifier, description, status, dates, and settings.
- Lua path
app.integrations.plane.get_project- Full name
plane.plane_get_project
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
create_project Write
Create a new project in a Plane.so workspace. Requires a name and identifier (short code, e.g., "PROJ"). Optionally set description, cover image, project lead, and default assignee.
- Lua path
app.integrations.plane.create_project- Full name
plane.plane_create_project
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
name | string | yes | Project name. |
identifier | string | yes | Short identifier for the project (e.g., "PROJ", max 12 chars). |
description | string | no | Project description. |
cover_image | string | no | URL for the project cover image. |
project_lead | string | no | UUID of the project lead member. |
default_assignee | string | no | UUID of the default assignee for new issues. |
archive_project Write
Archive a Plane.so project. Archived projects are hidden from active views but retain all data.
- Lua path
app.integrations.plane.archive_project- Full name
plane.plane_archive_project
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID to archive. |
list_issues Read
List issues in a Plane.so project. Supports filtering by state, priority, assignee, labels, and more. Returns issue ID, name, sequence ID, state, priority, assignees, labels, start/target dates, and created date.
- Lua path
app.integrations.plane.list_issues- Full name
plane.plane_list_issues
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
state | string | no | Filter by state UUID. |
priority | string | no | Filter by priority: urgent, high, medium, low, none. |
assignee | string | no | Filter by assignee UUID. |
labels | string | no | Comma-separated label UUIDs to filter by. |
search | string | no | Search query to filter issues by name. |
parent | string | no | Filter by parent issue UUID. |
cycle | string | no | Filter by cycle UUID. |
module | string | no | Filter by module UUID. |
search_issues Read
Search issues across all projects in a Plane.so workspace. Provide a search query to find issues by name or description. Optionally filter by project, state, priority, or assignee.
- Lua path
app.integrations.plane.search_issues- Full name
plane.plane_search_issues
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
search | string | yes | Search query to find issues. |
project | string | no | Filter by project UUID. |
state | string | no | Filter by state UUID. |
priority | string | no | Filter by priority: urgent, high, medium, low, none. |
assignee | string | no | Filter by assignee UUID. |
get_issue Read
Get detailed information about a single Plane.so issue, including description, state, priority, assignees, labels, dates, and relations. The issue_id may be a UUID or an issue reference like KOS-55 on Plane deployments that support it.
- Lua path
app.integrations.plane.get_issue- Full name
plane.plane_get_issue
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID or reference (for example KOS-55). |
create_issue Write
Create a new issue in a Plane.so project. Requires a title. Optionally set description (HTML), state, priority, assignees, labels, start/target dates, and parent issue.
- Lua path
app.integrations.plane.create_issue- Full name
plane.plane_create_issue
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
name | string | yes | Issue title. |
description_html | string | no | Issue description in HTML format. |
state | string | no | State UUID to set the initial status. |
priority | string | no | Priority level: urgent, high, medium, low, none. |
assignees | array | no | Array of user UUIDs to assign. |
labels | array | no | Array of label UUIDs. |
start_date | string | no | Start date (YYYY-MM-DD). |
target_date | string | no | Target/due date (YYYY-MM-DD). |
parent | string | no | Parent issue UUID for sub-issues. |
update_issue Write
Update an existing Plane.so issue. Provide only the fields you want to change — name, description, state, priority, assignees, labels, dates, or parent.
- Lua path
app.integrations.plane.update_issue- Full name
plane.plane_update_issue
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID. |
name | string | no | New issue title. |
description_html | string | no | New description in HTML format. |
state | string | no | New state UUID. |
priority | string | no | New priority: urgent, high, medium, low, none. |
assignees | array | no | New array of assignee UUIDs (replaces existing). |
labels | array | no | New array of label UUIDs (replaces existing). |
start_date | string | no | New start date (YYYY-MM-DD). |
target_date | string | no | New target/due date (YYYY-MM-DD). |
parent | string | no | New parent issue UUID. |
delete_issue Write
Delete an issue from a Plane.so project. This action is permanent and cannot be undone.
- Lua path
app.integrations.plane.delete_issue- Full name
plane.plane_delete_issue
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID to delete. |
create_comment Write
Add a comment to a Plane.so issue. The comment body should be provided in HTML format.
- Lua path
app.integrations.plane.create_comment- Full name
plane.plane_create_comment
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID. |
comment_html | string | yes | Comment content in HTML format. |
list_comments Read
List all comments on a Plane.so issue. Returns comment ID, content, author, and timestamps.
- Lua path
app.integrations.plane.list_comments- Full name
plane.plane_list_comments
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID. |
list_cycles Read
List all cycles in a Plane.so project. Returns cycle ID, name, start/end dates, and progress info.
- Lua path
app.integrations.plane.list_cycles- Full name
plane.plane_list_cycles
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
get_cycle Read
Get detailed information about a Plane.so cycle, including name, description, start/end dates, and status.
- Lua path
app.integrations.plane.get_cycle- Full name
plane.plane_get_cycle
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
cycle_id | string | yes | The cycle UUID. |
create_cycle Write
Create a new cycle (sprint) in a Plane.so project. Optionally set name, description, and date range.
- Lua path
app.integrations.plane.create_cycle- Full name
plane.plane_create_cycle
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
name | string | no | Cycle name (e.g., "Sprint 14"). |
description | string | no | Cycle description. |
start_date | string | no | Start date (YYYY-MM-DD). |
end_date | string | no | End date (YYYY-MM-DD). |
add_issue_cycle Write
Add an existing issue to a Plane.so cycle. The issue will be tracked within the cycle's sprint/iteration.
- Lua path
app.integrations.plane.add_issue_cycle- Full name
plane.plane_add_issue_to_cycle
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
cycle_id | string | yes | The cycle UUID. |
issue_id | string | yes | The issue UUID to add to the cycle. |
list_modules Read
List all modules in a Plane.so project. Modules group related issues together (e.g., "Auth System", "Payment Integration"). Returns module ID, name, description, status, and dates.
- Lua path
app.integrations.plane.list_modules- Full name
plane.plane_list_modules
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
get_module Read
Get detailed information about a Plane.so module, including name, description, status, dates, and team.
- Lua path
app.integrations.plane.get_module- Full name
plane.plane_get_module
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
module_id | string | yes | The module UUID. |
create_module Write
Create a new module in a Plane.so project. Modules group related issues together (e.g., "Auth System", "Payment Integration"). Optionally set description, status, and date range.
- Lua path
app.integrations.plane.create_module- Full name
plane.plane_create_module
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
name | string | yes | Module name. |
description | string | no | Module description. |
status | string | no | Module status (e.g., "planning", "in_progress", "completed"). |
start_date | string | no | Start date (YYYY-MM-DD). |
target_date | string | no | Target date (YYYY-MM-DD). |
add_issue_module Write
Add an existing issue to a Plane.so module. Modules group related issues for feature-based organization.
- Lua path
app.integrations.plane.add_issue_module- Full name
plane.plane_add_issue_to_module
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
module_id | string | yes | The module UUID. |
issue_id | string | yes | The issue UUID to add to the module. |
list_states Read
List all workflow states in a Plane.so project. Returns state UUID, name, group (backlog/unstarted/started/completed/cancelled), and color. Use state UUIDs when creating or updating issues.
- Lua path
app.integrations.plane.list_states- Full name
plane.plane_list_states
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
create_state Write
Create a new workflow state in a Plane.so project. States represent issue statuses (e.g., "In Review", "Ready for QA"). Requires a name and group (backlog, unstarted, started, completed, cancelled). Optionally set color and description.
- Lua path
app.integrations.plane.create_state- Full name
plane.plane_create_state
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
name | string | yes | State name (e.g., "In Review"). |
group | string | yes | State group: backlog, unstarted, started, completed, cancelled. |
color | string | no | Hex color code (e.g., "#FF5733"). |
description | string | no | State description. |
slug | string | no | URL-friendly slug (auto-generated if omitted). |
list_labels Read
List all labels in a Plane.so project. Returns label UUID, name, color, and parent label. Use label UUIDs when creating or updating issues.
- Lua path
app.integrations.plane.list_labels- Full name
plane.plane_list_labels
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
create_label Write
Create a new label in a Plane.so project. Labels categorize issues (e.g., "bug", "feature", "urgent"). Requires a name. Optionally set color (hex) and description. Supports hierarchical labels via parent UUID.
- Lua path
app.integrations.plane.create_label- Full name
plane.plane_create_label
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
name | string | yes | Label name. |
color | string | no | Hex color code (e.g., "#FF5733"). |
description | string | no | Label description. |
parent | string | no | Parent label UUID for hierarchical labels. |
list_pages Read
List all pages in a Plane.so project. Pages are Notion-like documents for notes, specs, and documentation. Returns page ID, name, description, and ownership info.
- Lua path
app.integrations.plane.list_pages- Full name
plane.plane_list_pages
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
get_page Read
Get detailed content of a Plane.so page, including the full HTML description.
- Lua path
app.integrations.plane.get_page- Full name
plane.plane_get_page
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
page_id | string | yes | The page UUID. |
create_page Write
Create a new page in a Plane.so project. Pages are Notion-like documents for notes, specs, and documentation. Requires a name. Optionally set HTML content.
- Lua path
app.integrations.plane.create_page- Full name
plane.plane_create_page
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
name | string | yes | Page title. |
description_html | string | no | Page content in HTML format. |
list_issue_activities Read
List activity/audit events on a Plane.so issue. Returns changes made to the issue (state changes, assignments, updates, comments) with who made them and when.
- Lua path
app.integrations.plane.list_issue_activities- Full name
plane.plane_list_issue_activities
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID. |
create_issue_link Write
Attach an external link to a Plane.so issue. Provide a title and a valid URL.
- Lua path
app.integrations.plane.create_issue_link- Full name
plane.plane_create_issue_link
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID. |
title | string | yes | Display title for the link. |
url | string | yes | The URL to link to. |
list_issue_relations Read
List all relations on a Plane.so issue. Relations describe how issues connect: blocking, blocked_by, duplicate, relates_to, start_before, start_after, finish_before, finish_after.
- Lua path
app.integrations.plane.list_issue_relations- Full name
plane.plane_list_issue_relations
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | yes | The project UUID. |
issue_id | string | yes | The issue UUID. |
list_members Read
List members of a Plane.so workspace or project. If project_id is provided, returns project members only; otherwise returns all workspace members. Returns member ID, display name, email, and role.
- Lua path
app.integrations.plane.list_members- Full name
plane.plane_list_members
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_slug | string | no | The workspace slug. |
project_id | string | no | Optional project UUID to list project-specific members. |
get_current_user Read
Get the currently authenticated Plane.so user. Returns user ID, display name, email, and avatar. Useful for verifying API credentials and identifying the current user context. On some self-hosted Plane deployments where the user endpoint is unavailable, this falls back to verifying workspace-scoped access.
- Lua path
app.integrations.plane.get_current_user- Full name
plane.plane_get_current_user
| Parameter | Type | Required | Description |
|---|---|---|---|
| No parameters. | |||