diff --git a/apps/docs/app/llms-full.txt/route.ts b/apps/docs/app/llms-full.txt/route.ts index 244c7a62dc8..1a675331ffd 100644 --- a/apps/docs/app/llms-full.txt/route.ts +++ b/apps/docs/app/llms-full.txt/route.ts @@ -4,21 +4,41 @@ import { source } from '@/lib/source' const logger = createLogger('DocsLlmsFullText') -export const revalidate = false +export const dynamic = 'force-dynamic' export async function GET() { try { const pages = source.getPages().filter((page) => Boolean(page?.data && page.url)) - - const scan = pages.map((page) => getLLMText(page)) - const scanned = await Promise.all(scan) - - const filtered = scanned.filter((text) => text && text.length > 0) - - return new Response(filtered.join('\n\n---\n\n'), { - headers: { - 'Content-Type': 'text/plain; charset=utf-8', + const encoder = new TextEncoder() + let nextPage = 0 + let hasContent = false + let cancelled = false + const body = new ReadableStream({ + async pull(controller) { + try { + while (nextPage < pages.length) { + const page = pages[nextPage] + nextPage += 1 + const text = await getLLMText(page) + if (cancelled) return + if (!text) continue + controller.enqueue(encoder.encode(`${hasContent ? '\n\n---\n\n' : ''}${text}`)) + hasContent = true + return + } + controller.close() + } catch (error) { + if (cancelled) return + logger.error('Error streaming LLM full text:', error) + controller.error(error) + } }, + cancel() { + cancelled = true + }, + }) + return new Response(body, { + headers: { 'Content-Type': 'text/plain; charset=utf-8' }, }) } catch (error) { logger.error('Error generating LLM full text:', error) diff --git a/apps/docs/components/icons.tsx b/apps/docs/components/icons.tsx index c186ddf787a..28d02baf1c7 100644 --- a/apps/docs/components/icons.tsx +++ b/apps/docs/components/icons.tsx @@ -10124,3 +10124,11 @@ export function YouComIcon(props: SVGProps) { ) } + +export function PlaneIcon(props: SVGProps) { + return ( + + + + ) +} diff --git a/apps/docs/components/ui/icon-mapping.ts b/apps/docs/components/ui/icon-mapping.ts index 096652e0900..4195d7ec589 100644 --- a/apps/docs/components/ui/icon-mapping.ts +++ b/apps/docs/components/ui/icon-mapping.ts @@ -212,6 +212,7 @@ import { PineconeIcon, PipedriveIcon, PitchBookIcon, + PlaneIcon, PlanetScaleIcon, PolymarketIcon, PostgresIcon, @@ -558,6 +559,7 @@ export const blockTypeToIconMap: Record = { pinecone: PineconeIcon, pipedrive: PipedriveIcon, pitchbook: PitchBookIcon, + plane: PlaneIcon, planetscale: PlanetScaleIcon, polymarket: PolymarketIcon, postgresql: PostgresIcon, diff --git a/apps/docs/content/docs/integrations/meta.json b/apps/docs/content/docs/integrations/meta.json index 0d1a85b2e55..8ca9bbbddd6 100644 --- a/apps/docs/content/docs/integrations/meta.json +++ b/apps/docs/content/docs/integrations/meta.json @@ -199,6 +199,7 @@ "pipedrive", "pipedrive-service-account", "pitchbook", + "plane", "planetscale", "polymarket", "postgresql", diff --git a/apps/docs/content/docs/integrations/plane.mdx b/apps/docs/content/docs/integrations/plane.mdx new file mode 100644 index 00000000000..433b35cbeab --- /dev/null +++ b/apps/docs/content/docs/integrations/plane.mdx @@ -0,0 +1,5985 @@ +--- +title: Plane +description: Manage projects and work items in Plane +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + +{/* MANUAL-CONTENT-START:intro */} +[Plane](https://plane.so/) manages projects, work items, and team planning. + +With the Plane block, you can: + +- **Manage work**: Create and update projects, work items, states, labels, comments, and attachments. +- **Plan delivery**: Organize cycles and modules, and summarize project progress. +- **Keep knowledge current**: Manage pages and sync project work items or pages into a Sim knowledge base. +- **React to changes**: Start agents from authenticated Plane webhook events. + +Create a personal access token in Plane's profile settings and enter it as the API token. API v2 is the default. For Community Edition or an older self-hosted instance, select API v1 in the advanced settings and set the instance origin, optionally including its reverse-proxy path prefix. Omit `/api/v1` and `/api/v2` from the instance URL. The block exposes core workflow actions. Supported self-hosted actions use the same operation list. Resource availability depends on the instance's edition and version. + +Explicit empty strings, nulls, and empty arrays can be supplied through **Body Overrides** using the action's canonical input names. Clearing work item labels and assignees is verified through API v1 because Plane v2 can continue returning deleted relationship IDs. The update action returns the verified cleared state; subsequent v2 reads may still include those IDs. Use API v1 when reading active relationships after a clear. + +For webhooks, automatic registration requires API v2. On instances using API v1, create a webhook in Plane's settings and configure its signing secret in Sim. Project-filtered legacy deletion events that omit their project cannot be matched and are skipped. + +The knowledge connector reads API v1 to include full descriptions. It preserves existing documents when a listing is capped and disables automatic deletion reconciliation because offset listings can shift during concurrent changes. Project pages require an edition that exposes the pages API. + +In Sim, the Plane block lets your agents triage work, plan delivery, and keep project knowledge available. +{/* MANUAL-CONTENT-END */} + + +## Usage Instructions + +Connect Plane Cloud or a self-hosted Plane instance. API v2 is the default; choose API v1 for Community Edition or older instances. Actions with a current successor are consolidated. Unsupported version-specific inputs fail explicitly. Manage work items, projects, cycles, modules, states, labels, comments, links, attachments, pages, and webhooks. API v1 compatibility is available within supported current actions. + + + +## Actions + +### Plane Archive a project + +Archive a project in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The project id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Archive a work item + +Archive a work item in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `pk` | string | Yes | The work item's UUID. This lookup is UUID-only — a `PROJ-142` identifier here returns `404`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `custom_fields`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Items | +| ↳ `id` | string | Unique identifier for the work item. This is the `\{pk\}` on every project-scoped detail route. | +| ↳ `name` | string | Name | +| ↳ `identifier` | string | Identifier | +| ↳ `sequence_id` | number | Sequence id | +| ↳ `priority` | string | Priority | +| ↳ `state_id` | string | State id | +| ↳ `type_id` | string | Type id | +| ↳ `assignee_ids` | array | Assignee ids | +| ↳ `label_ids` | array | Label ids | +| ↳ `parent_id` | string | Parent id | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `is_draft` | boolean | Is draft | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `custom_fields` | json | Custom fields | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `cycle` | json | Cycle | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `modules` | array | Modules | +| ↳ `parent` | object | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | object | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Asset Id | +| ↳ `type` | object | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `module_ids` | array | Module ids | +| ↳ `project_id` | string | Project id | + +### Plane Confirm a work item attachment upload + +Confirm a work item attachment upload in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `pk` | string | Yes | The attachment id. | +| `is_uploaded` | boolean | No | Whether is uploaded. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `asset_url`, `attributes`, `content_type`, `created_at`, `created_by_id`, `external_id`, `external_source`, `id`, `is_uploaded`, `name`, `size`, `work_item_id`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Attachments | +| ↳ `asset_url` | string | Asset url | +| ↳ `attributes` | json | Attributes | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_uploaded` | boolean | Is uploaded | +| ↳ `name` | string | Name | +| ↳ `size` | json | Size | +| ↳ `work_item_id` | string | Work item id | +| `success` | boolean | Operation completed successfully. | + +### Plane Create a work item attachment upload + +Create a work item attachment upload in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `name` | string | Yes | Display name. | +| `size` | number | Yes | Attachment size in bytes. For signed form uploads, allow room for multipart overhead in the storage policy. | +| `external_id` | string | No | Your system's identifier for this record, for sync and import correlation. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Nullable. | +| `type` | string | No | Required with API v1: attachment type, for example work_item_attachment. Optional with API v2. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `asset_url`, `attributes`, `content_type`, `created_at`, `created_by_id`, `external_id`, `external_source`, `id`, `is_uploaded`, `name`, `size`, `work_item_id`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Attachments | +| ↳ `asset_url` | string | The asset url. | +| ↳ `attributes` | string | Attributes | +| ↳ `content_type` | string | The content type. | +| ↳ `created_at` | string | When the record was created. | +| ↳ `created_by_id` | string | The user who created the record. | +| ↳ `external_id` | json | External id | +| ↳ `external_source` | json | External source | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_uploaded` | boolean | Whether is uploaded. | +| ↳ `name` | string | Display name. | +| ↳ `size` | json | Size | +| ↳ `work_item_id` | string | The related work item. | +| ↳ `asset_id` | string | Asset id | +| ↳ `upload_data` | json | Upload data | +| ↳ `url` | string | Asset Id | +| ↳ `fields` | json | Fields | +| ↳ `attachment` | object | Attachment | +| ↳ `id` | json | Id | +| ↳ `asset_url` | string | Asset url | +| ↳ `attributes` | json | Attributes | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `is_uploaded` | boolean | Is uploaded | +| ↳ `name` | string | Name | +| ↳ `size` | json | Size | +| ↳ `work_item_id` | string | Work item id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `asset` | string | Asset | +| ↳ `entity_type` | string | Entity type | +| ↳ `entity_identifier` | string | Entity identifier | +| ↳ `is_deleted` | boolean | Is deleted | +| ↳ `is_archived` | boolean | Is archived | +| ↳ `storage_metadata` | json | Storage metadata | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `user` | string | User | +| ↳ `workspace` | string | Workspace | +| ↳ `draft_issue` | string | Draft issue | +| ↳ `project` | string | Project | +| ↳ `issue` | string | Issue | +| ↳ `comment` | string | Comment | +| ↳ `page` | string | Page | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `detail` | string | Provider confirmation message. | + +### Plane Create a comment + +Create a comment in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `work_item_id` | string | Yes | The work item to comment on. | +| `comment_html` | string | No | HTML comment content. Required with API v2; API v1 also supports comment_json. | +| `access` | string | No | Visibility of the comment. - `INTERNAL` — visible to the project team - `EXTERNAL` — marked as visible outside the team, for example on a published project Omit it to take the server's default. Change it later with a `PATCH`. | +| `external_id` | string | No | Your system's identifier for this comment, for sync and import correlation. Maximum 255 characters. Accepts `null`. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `zendesk`. Maximum 255 characters. Accepts `null`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `access`, `actor_id`, `comment_html`, `comment_stripped`, `created_at`, `created_by_id`, `edited_at`, `external_id`, `external_source`, `id`, `work_item_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `actor` \(the comment author\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `comment_json` | json | No | v1 compatibility only. Comment json. | +| `created_at` | string | No | v1 compatibility only. Creation timestamp for imports. | +| `created_by` | string | No | v1 compatibility only. Original creator user ID for imports. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Comments | +| ↳ `id` | json | Id | +| ↳ `work_item_id` | string | Work item id | +| ↳ `comment_html` | json | Comment html | +| ↳ `comment_stripped` | json | Comment stripped | +| ↳ `access` | json | Access | +| ↳ `actor_id` | string | Actor id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `edited_at` | string | Edited at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `actor` | json | Actor | +| ↳ `is_member` | boolean | Is member | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `attachments` | array | Attachments | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `parent` | string | Parent | +| ↳ `description` | string | Description | +| ↳ `comment_json` | object | Comment json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `text` | string | Asset Id | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_hidden` | boolean | Is hidden | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `hidden_reason` | json | Hidden reason | +| ↳ `hidden_at` | json | Hidden at | +| ↳ `hidden_by` | json | Hidden by | +| ↳ `source` | json | Source | + +### Plane Create a cycle + +Create a cycle in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project to add the cycle to. | +| `name` | string | Yes | Display name for the cycle, unique within the project. Maximum 255 characters. | +| `description` | string | No | Free-form description of what the cycle covers. | +| `start_date` | string | No | When the cycle opens, as an ISO 8601 date-time. Nullable — omit it or send `null` for an unscheduled cycle. | +| `end_date` | string | No | When the cycle closes, as an ISO 8601 date-time. Nullable. | +| `timezone` | string | No | The IANA time zone the cycle's dates are interpreted in, for example `America/New_York`, `Asia/Kolkata`, `Europe/London`, or `UTC`. Set it to the team's working zone so a cycle boundary lands at local midnight instead of UTC midnight. Any value outside the IANA list is rejected with `400 invalid_request`. | +| `sort_order` | number | No | Ordering weight for the cycle within the project. Lower values sort first when you list with `?order_by=sort_order`. | +| `logo_props` | json | No | JSON blob holding the cycle's icon configuration, as written by Plane clients. Stored and returned unchanged. | +| `external_id` | string | No | Your system's identifier for this cycle, for sync and import correlation. Maximum 255 characters. You can find the cycle again later with `?external_id=` on \[List cycles\]\(https://developers.plane.so/api-reference/v2/cycles/list-cycles). | +| `external_source` | string | No | The system `external_id` came from, for example `jira` or `linear`. Maximum 255 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `created_at`, `created_by_id`, `description`, `end_date`, `external_id`, `external_source`, `id`, `logo_props`, `name`, `owned_by_id`, `sort_order`, `start_date`, `timezone`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `owned_by` \(the cycle owner\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `owned_by` | string | No | v1 compatibility only. Cycle owner user ID; defaults to the authenticated user. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Cycles | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `start_date` | string | Start date | +| ↳ `end_date` | string | End date | +| ↳ `timezone` | json | Timezone | +| ↳ `owned_by_id` | string | Owned by id | +| ↳ `sort_order` | json | Sort order | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `owned_by` | json | Owned by | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `total_estimates` | number | Total estimates | +| ↳ `completed_estimates` | number | Completed estimates | +| ↳ `started_estimates` | number | Started estimates | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `view_props` | json | View props | +| ↳ `progress_snapshot` | json | Progress snapshot | +| ↳ `archived_at` | string | Archived at | +| ↳ `version` | json | Version | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `status` | string | Status | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Create a label + +Create a label in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project to add the label to. | +| `name` | string | Yes | Display name for the label, unique within the project. Maximum 255 characters. | +| `color` | string | No | Hex color used wherever the label is rendered, for example `#e5484d`. Maximum 255 characters. Send one if the label needs to be recognizable at a glance on a board. | +| `description` | string | No | Free-form note about what the label is for and when to apply it. | +| `parent_id` | string | No | The label this one nests under, for grouping related tags such as `Billing` and `Search` beneath an `Area` label. The parent must be a label in the same project — an id from another project is a `400`, not a silent link. Omit it, or send `null`, for a top-level label. | +| `sort_order` | number | No | Ordering weight within the project. Lower values sort first. Assigned automatically when omitted, so send it only when you are recreating a specific order. | +| `external_id` | string | No | Your system's identifier for this label, for sync and import correlation. Maximum 255 characters. Store it here and you can find the label later with `?external_id=`, without keeping a map of Plane ids. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `name`, `parent_id`, `sort_order`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Labels | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `color` | json | Color | +| ↳ `sort_order` | json | Sort order | +| ↳ `parent_id` | string | Parent id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `project` | string | Project | +| ↳ `parent` | string | Parent | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Create a link + +Create a link in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `url` | string | Yes | Target URL. | +| `metadata` | json | No | JSON metadata object for the link. API v2 only. | +| `title` | string | No | Title. Maximum 255 characters. Nullable. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `created_at`, `created_by_id`, `id`, `metadata`, `title`, `url`, `work_item_id`. | +| `created_by` | string | No | v1 compatibility only. Original creator user ID for imports. | +| `issue_id` | string | No | v1 compatibility only. Work item ID for the link. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Links | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | json | Id | +| ↳ `metadata` | json | Metadata | +| ↳ `title` | json | Title | +| ↳ `url` | json | Url | +| ↳ `work_item_id` | string | Work item id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Create a module + +Create a module in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project to create the module in. | +| `name` | string | Yes | Display name for the module, unique within the project. Maximum 255 characters. | +| `description` | string | No | Plain-text summary of what the module covers. | +| `status` | string | No | Where the module sits in its lifecycle. - `backlog` — Captured, not yet committed to - `planned` — Committed to but not started - `in-progress` — Actively being worked on - `paused` — Started, then put on hold - `completed` — Delivered - `cancelled` — Dropped without delivering Defaults to `planned` when omitted. A value outside this list is a `400 invalid_request`. | +| `start_date` | string | No | Date the module is scheduled to begin, as `YYYY-MM-DD`. Nullable. | +| `target_date` | string | No | Date the module is expected to land, as `YYYY-MM-DD`. Nullable, and must not be earlier than `start_date`. | +| `lead_id` | string | No | The user accountable for the module. Must be a member of this project — any other user id is rejected with a `400` naming `lead_id`, never linked silently. Nullable. | +| `sort_order` | number | No | Ordering weight used when modules are listed. Lower values sort first. In a project that already has modules, Plane positions the new module ahead of them on create, so send `sort_order` in a follow-up `PATCH` if you need a specific slot. | +| `logo_props` | json | No | Free-form JSON object holding the icon Plane renders for the module. | +| `external_id` | string | No | Your system's identifier for this module, for sync and import correlation. Maximum 255 characters. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Nullable. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `lead_id`, `logo_props`, `member_ids`, `name`, `sort_order`, `start_date`, `status`, `target_date`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `lead` \(the module lead\), `members` \(the module members\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `members` | json | No | v1 compatibility only. Members. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Modules | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `status` | json | Status | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `lead_id` | string | Lead id | +| ↳ `member_ids` | array | Member ids | +| ↳ `sort_order` | json | Sort order | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `lead` | json | Lead | +| ↳ `members` | array | Members | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `view_props` | json | View props | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Create a project + +Create a project in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `identifier` | string | Yes | Short project key used to prefix work item numbers, for example `ENG` in `ENG-142`. Maximum 255 characters. | +| `name` | string | Yes | Display name. Maximum 255 characters. | +| `archive_in` | number | No | The archive in. | +| `close_in` | number | No | The close in. | +| `cover_image` | string | No | URL of the cover image. Nullable. | +| `cycle_view` | boolean | No | Whether cycle view. | +| `default_assignee_id` | string | No | Id of the related default assignee. Nullable. | +| `default_state_id` | string | No | Id of the related default state. Nullable. | +| `description` | string | No | Free-form description. | +| `emoji` | string | No | Emoji shown alongside the name. Maximum 255 characters. Nullable. | +| `estimate_id` | string | No | Id of the related estimate. Nullable. | +| `external_id` | string | No | Your system's identifier for this record, for sync and import correlation. Maximum 255 characters. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Nullable. | +| `guest_view_all_features` | boolean | No | Whether guest view all features. | +| `icon_prop` | string | No | The icon prop. Nullable. | +| `intake_view` | boolean | No | Whether intake view. | +| `is_issue_type_enabled` | boolean | No | Whether is issue type enabled. | +| `is_time_tracking_enabled` | boolean | No | Whether is time tracking enabled. | +| `issue_views_view` | boolean | No | Whether issue views view. | +| `logo_props` | string | No | Editor-owned logo descriptor. Pass back what you read rather than composing it by hand. | +| `module_view` | boolean | No | Whether module view. | +| `network` | string | No | Project visibility: `0` is private to members, `2` is visible to the whole workspace. | +| `page_view` | boolean | No | Whether page view. | +| `priority` | string | No | - `none` - None - `low` - Low - `medium` - Medium - `high` - High - `urgent` - Urgent One of `none`, `low`, `medium`, `high`, `urgent`. | +| `project_lead_id` | string | No | Id of the related project lead. Nullable. | +| `start_date` | string | No | Planned start date, as `YYYY-MM-DD`. Nullable. | +| `state_id` | string | No | Id of the related state. Nullable. | +| `target_date` | string | No | Planned due date, as `YYYY-MM-DD`. Nullable. | +| `timezone` | string | No | - `Africa/Abidjan` - Africa/Abidjan - `Africa/Accra` - Africa/Accra - `Africa/Addis_Ababa` - Africa/Addis_Ababa - `Africa/Algiers` - Africa/Algiers - `Africa/Asmara` - Africa/Asmara - `Africa/Bamako` - Africa/Bamako - `Africa/Bangui` - Africa/Bangui - `Africa/Banjul` - Africa/Banjul - `Africa/Bissau` - Africa/Bissau - `Africa/Blantyre` - Africa/Blantyre - `Africa/Brazzaville` - Africa/Brazzaville - `Africa/Bujumbura` - Africa/Bujumbura - `Africa/Cairo` - Africa/Cairo - `Africa/Casablanca` - Africa/Casablanca - `Africa/Ceuta` - Africa/Ceuta - `Africa/Conakry` - Africa/Conakry - `Africa/Dakar` - Africa/Dakar - `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam - `Africa/Djibouti` - Africa/Djibouti - `Africa/Douala` - Africa/Douala - `Africa/El_Aaiun` - Africa/El_Aaiun - `Africa/Freetown` - Africa/Freetown - `Africa/Gaborone` - Africa/Gaborone - `Africa/Harare` - Africa/Harare - `Africa/Johannesburg` - Africa/Johannesburg - `Africa/Juba` - Africa/Juba - `Africa/Kampala` - Africa/Kampala - `Africa/Khartoum` - Africa/Khartoum - `Africa/Kigali` - Africa/Kigali - `Africa/Kinshasa` - Africa/Kinshasa - `Africa/Lagos` - Africa/Lagos - `Africa/Libreville` - Africa/Libreville - `Africa/Lome` - Africa/Lome - `Africa/Luanda` - Africa/Luanda - `Africa/Lubumbashi` - Africa/Lubumbashi - `Africa/Lusaka` - Africa/Lusaka - `Africa/Malabo` - Africa/Malabo - `Africa/Maputo` - Africa/Maputo - `Africa/Maseru` - Africa/Maseru - `Africa/Mbabane` - Africa/Mbabane - `Africa/Mogadishu` - Africa/Mogadishu - `Africa/Monrovia` - Africa/Monrovia - `Africa/Nairobi` - Africa/Nairobi - `Africa/Ndjamena` - Africa/Ndjamena - `Africa/Niamey` - Africa/Niamey - `Africa/Nouakchott` - Africa/Nouakchott - `Africa/Ouagadougou` - Africa/Ouagadougou - `Africa/Porto-Novo` - Africa/Porto-Novo - `Africa/Sao_Tome` - Africa/Sao_Tome - `Africa/Tripoli` - Africa/Tripoli - `Africa/Tunis` - Africa/Tunis - `Africa/Windhoek` - Africa/Windhoek - `America/Adak` - America/Adak - `America/Anchorage` - America/Anchorage - `America/Anguilla` - America/Anguilla - `America/Antigua` - America/Antigua - `America/Araguaina` - America/Araguaina - `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires - `America/Argentina/Catamarca` - America/Argentina/Catamarca - `America/Argentina/Cordoba` - America/Argentina/Cordoba - `America/Argentina/Jujuy` - America/Argentina/Jujuy - `America/Argentina/La_Rioja` - America/Argentina/La_Rioja - `America/Argentina/Mendoza` - America/Argentina/Mendoza - `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos - `America/Argentina/Salta` - America/Argentina/Salta - `America/Argentina/San_Juan` - America/Argentina/San_Juan - `America/Argentina/San_Luis` - America/Argentina/San_Luis - `America/Argentina/Tucuman` - America/Argentina/Tucuman - `America/Argentina/Ushuaia` - America/Argentina/Ushuaia - `America/Aruba` - America/Aruba - `America/Asuncion` - America/Asuncion - `America/Atikokan` - America/Atikokan - `America/Bahia` - America/Bahia - `America/Bahia_Banderas` - America/Bahia_Banderas - `America/Barbados` - America/Barbados - `America/Belem` - America/Belem - `America/Belize` - America/Belize - `America/Blanc-Sablon` - America/Blanc-Sablon - `America/Boa_Vista` - America/Boa_Vista - `America/Bogota` - America/Bogota - `America/Boise` - America/Boise - `America/Cambridge_Bay` - America/Cambridge_Bay - `America/Campo_Grande` - America/Campo_Grande - `America/Cancun` - America/Cancun - `America/Caracas` - America/Caracas - `America/Cayenne` - America/Cayenne - `America/Cayman` - America/Cayman - `America/Chicago` - America/Chicago - `America/Chihuahua` - America/Chihuahua - `America/Ciudad_Juarez` - America/Ciudad_Juarez - `America/Costa_Rica` - America/Costa_Rica - `America/Creston` - America/Creston - `America/Cuiaba` - America/Cuiaba - `America/Curacao` - America/Curacao - `America/Danmarkshavn` - America/Danmarkshavn - `America/Dawson` - America/Dawson - `America/Dawson_Creek` - America/Dawson_Creek - `America/Denver` - America/Denver - `America/Detroit` - America/Detroit - `America/Dominica` - America/Dominica - `America/Edmonton` - America/Edmonton - `America/Eirunepe` - America/Eirunepe - `America/El_Salvador` - America/El_Salvador - `America/Fort_Nelson` - America/Fort_Nelson - `America/Fortaleza` - America/Fortaleza - `America/Glace_Bay` - America/Glace_Bay - `America/Goose_Bay` - America/Goose_Bay - `America/Grand_Turk` - America/Grand_Turk - `America/Grenada` - America/Grenada - `America/Guadeloupe` - America/Guadeloupe - `America/Guatemala` - America/Guatemala - `America/Guayaquil` - America/Guayaquil - `America/Guyana` - America/Guyana - `America/Halifax` - America/Halifax - `America/Havana` - America/Havana - `America/Hermosillo` - America/Hermosillo - `America/Indiana/Indianapolis` - America/Indiana/Indianapolis - `America/Indiana/Knox` - America/Indiana/Knox - `America/Indiana/Marengo` - America/Indiana/Marengo - `America/Indiana/Petersburg` - America/Indiana/Petersburg - `America/Indiana/Tell_City` - America/Indiana/Tell_City - `America/Indiana/Vevay` - America/Indiana/Vevay - `America/Indiana/Vincennes` - America/Indiana/Vincennes - `America/Indiana/Winamac` - America/Indiana/Winamac - `America/Inuvik` - America/Inuvik - `America/Iqaluit` - America/Iqaluit - `America/Jamaica` - America/Jamaica - `America/Juneau` - America/Juneau - `America/Kentucky/Louisville` - America/Kentucky/Louisville - `America/Kentucky/Monticello` - America/Kentucky/Monticello - `America/Kralendijk` - America/Kralendijk - `America/La_Paz` - America/La_Paz - `America/Lima` - America/Lima - `America/Los_Angeles` - America/Los_Angeles - `America/Lower_Princes` - America/Lower_Princes - `America/Maceio` - America/Maceio - `America/Managua` - America/Managua - `America/Manaus` - America/Manaus - `America/Marigot` - America/Marigot - `America/Martinique` - America/Martinique - `America/Matamoros` - America/Matamoros - `America/Mazatlan` - America/Mazatlan - `America/Menominee` - America/Menominee - `America/Merida` - America/Merida - `America/Metlakatla` - America/Metlakatla - `America/Mexico_City` - America/Mexico_City - `America/Miquelon` - America/Miquelon - `America/Moncton` - America/Moncton - `America/Monterrey` - America/Monterrey - `America/Montevideo` - America/Montevideo - `America/Montserrat` - America/Montserrat - `America/Nassau` - America/Nassau - `America/New_York` - America/New_York - `America/Nome` - America/Nome - `America/Noronha` - America/Noronha - `America/North_Dakota/Beulah` - America/North_Dakota/Beulah - `America/North_Dakota/Center` - America/North_Dakota/Center - `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem - `America/Nuuk` - America/Nuuk - `America/Ojinaga` - America/Ojinaga - `America/Panama` - America/Panama - `America/Paramaribo` - America/Paramaribo - `America/Phoenix` - America/Phoenix - `America/Port-au-Prince` - America/Port-au-Prince - `America/Port_of_Spain` - America/Port_of_Spain - `America/Porto_Velho` - America/Porto_Velho - `America/Puerto_Rico` - America/Puerto_Rico - `America/Punta_Arenas` - America/Punta_Arenas - `America/Rankin_Inlet` - America/Rankin_Inlet - `America/Recife` - America/Recife - `America/Regina` - America/Regina - `America/Resolute` - America/Resolute - `America/Rio_Branco` - America/Rio_Branco - `America/Santarem` - America/Santarem - `America/Santiago` - America/Santiago - `America/Santo_Domingo` - America/Santo_Domingo - `America/Sao_Paulo` - America/Sao_Paulo - `America/Scoresbysund` - America/Scoresbysund - `America/Sitka` - America/Sitka - `America/St_Barthelemy` - America/St_Barthelemy - `America/St_Johns` - America/St_Johns - `America/St_Kitts` - America/St_Kitts - `America/St_Lucia` - America/St_Lucia - `America/St_Thomas` - America/St_Thomas - `America/St_Vincent` - America/St_Vincent - `America/Swift_Current` - America/Swift_Current - `America/Tegucigalpa` - America/Tegucigalpa - `America/Thule` - America/Thule - `America/Tijuana` - America/Tijuana - `America/Toronto` - America/Toronto - `America/Tortola` - America/Tortola - `America/Vancouver` - America/Vancouver - `America/Whitehorse` - America/Whitehorse - `America/Winnipeg` - America/Winnipeg - `America/Yakutat` - America/Yakutat - `Antarctica/Casey` - Antarctica/Casey - `Antarctica/Davis` - Antarctica/Davis - `Antarctica/DumontDUrville` - Antarctica/DumontDUrville - `Antarctica/Macquarie` - Antarctica/Macquarie - `Antarctica/Mawson` - Antarctica/Mawson - `Antarctica/McMurdo` - Antarctica/McMurdo - `Antarctica/Palmer` - Antarctica/Palmer - `Antarctica/Rothera` - Antarctica/Rothera - `Antarctica/Syowa` - Antarctica/Syowa - `Antarctica/Troll` - Antarctica/Troll - `Antarctica/Vostok` - Antarctica/Vostok - `Arctic/Longyearbyen` - Arctic/Longyearbyen - `Asia/Aden` - Asia/Aden - `Asia/Almaty` - Asia/Almaty - `Asia/Amman` - Asia/Amman - `Asia/Anadyr` - Asia/Anadyr - `Asia/Aqtau` - Asia/Aqtau - `Asia/Aqtobe` - Asia/Aqtobe - `Asia/Ashgabat` - Asia/Ashgabat - `Asia/Atyrau` - Asia/Atyrau - `Asia/Baghdad` - Asia/Baghdad - `Asia/Bahrain` - Asia/Bahrain - `Asia/Baku` - Asia/Baku - `Asia/Bangkok` - Asia/Bangkok - `Asia/Barnaul` - Asia/Barnaul - `Asia/Beirut` - Asia/Beirut - `Asia/Bishkek` - Asia/Bishkek - `Asia/Brunei` - Asia/Brunei - `Asia/Chita` - Asia/Chita - `Asia/Choibalsan` - Asia/Choibalsan - `Asia/Colombo` - Asia/Colombo - `Asia/Damascus` - Asia/Damascus - `Asia/Dhaka` - Asia/Dhaka - `Asia/Dili` - Asia/Dili - `Asia/Dubai` - Asia/Dubai - `Asia/Dushanbe` - Asia/Dushanbe - `Asia/Famagusta` - Asia/Famagusta - `Asia/Gaza` - Asia/Gaza - `Asia/Hebron` - Asia/Hebron - `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh - `Asia/Hong_Kong` - Asia/Hong_Kong - `Asia/Hovd` - Asia/Hovd - `Asia/Irkutsk` - Asia/Irkutsk - `Asia/Jakarta` - Asia/Jakarta - `Asia/Jayapura` - Asia/Jayapura - `Asia/Jerusalem` - Asia/Jerusalem - `Asia/Kabul` - Asia/Kabul - `Asia/Kamchatka` - Asia/Kamchatka - `Asia/Karachi` - Asia/Karachi - `Asia/Kathmandu` - Asia/Kathmandu - `Asia/Khandyga` - Asia/Khandyga - `Asia/Kolkata` - Asia/Kolkata - `Asia/Krasnoyarsk` - Asia/Krasnoyarsk - `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur - `Asia/Kuching` - Asia/Kuching - `Asia/Kuwait` - Asia/Kuwait - `Asia/Macau` - Asia/Macau - `Asia/Magadan` - Asia/Magadan - `Asia/Makassar` - Asia/Makassar - `Asia/Manila` - Asia/Manila - `Asia/Muscat` - Asia/Muscat - `Asia/Nicosia` - Asia/Nicosia - `Asia/Novokuznetsk` - Asia/Novokuznetsk - `Asia/Novosibirsk` - Asia/Novosibirsk - `Asia/Omsk` - Asia/Omsk - `Asia/Oral` - Asia/Oral - `Asia/Phnom_Penh` - Asia/Phnom_Penh - `Asia/Pontianak` - Asia/Pontianak - `Asia/Pyongyang` - Asia/Pyongyang - `Asia/Qatar` - Asia/Qatar - `Asia/Qostanay` - Asia/Qostanay - `Asia/Qyzylorda` - Asia/Qyzylorda - `Asia/Riyadh` - Asia/Riyadh - `Asia/Sakhalin` - Asia/Sakhalin - `Asia/Samarkand` - Asia/Samarkand - `Asia/Seoul` - Asia/Seoul - `Asia/Shanghai` - Asia/Shanghai - `Asia/Singapore` - Asia/Singapore - `Asia/Srednekolymsk` - Asia/Srednekolymsk - `Asia/Taipei` - Asia/Taipei - `Asia/Tashkent` - Asia/Tashkent - `Asia/Tbilisi` - Asia/Tbilisi - `Asia/Tehran` - Asia/Tehran - `Asia/Thimphu` - Asia/Thimphu - `Asia/Tokyo` - Asia/Tokyo - `Asia/Tomsk` - Asia/Tomsk - `Asia/Ulaanbaatar` - Asia/Ulaanbaatar - `Asia/Urumqi` - Asia/Urumqi - `Asia/Ust-Nera` - Asia/Ust-Nera - `Asia/Vientiane` - Asia/Vientiane - `Asia/Vladivostok` - Asia/Vladivostok - `Asia/Yakutsk` - Asia/Yakutsk - `Asia/Yangon` - Asia/Yangon - `Asia/Yekaterinburg` - Asia/Yekaterinburg - `Asia/Yerevan` - Asia/Yerevan - `Atlantic/Azores` - Atlantic/Azores - `Atlantic/Bermuda` - Atlantic/Bermuda - `Atlantic/Canary` - Atlantic/Canary - `Atlantic/Cape_Verde` - Atlantic/Cape_Verde - `Atlantic/Faroe` - Atlantic/Faroe - `Atlantic/Madeira` - Atlantic/Madeira - `Atlantic/Reykjavik` - Atlantic/Reykjavik - `Atlantic/South_Georgia` - Atlantic/South_Georgia - `Atlantic/St_Helena` - Atlantic/St_Helena - `Atlantic/Stanley` - Atlantic/Stanley - `Australia/Adelaide` - Australia/Adelaide - `Australia/Brisbane` - Australia/Brisbane - `Australia/Broken_Hill` - Australia/Broken_Hill - `Australia/Darwin` - Australia/Darwin - `Australia/Eucla` - Australia/Eucla - `Australia/Hobart` - Australia/Hobart - `Australia/Lindeman` - Australia/Lindeman - `Australia/Lord_Howe` - Australia/Lord_Howe - `Australia/Melbourne` - Australia/Melbourne - `Australia/Perth` - Australia/Perth - `Australia/Sydney` - Australia/Sydney - `Canada/Atlantic` - Canada/Atlantic - `Canada/Central` - Canada/Central - `Canada/Eastern` - Canada/Eastern - `Canada/Mountain` - Canada/Mountain - `Canada/Newfoundland` - Canada/Newfoundland - `Canada/Pacific` - Canada/Pacific - `Europe/Amsterdam` - Europe/Amsterdam - `Europe/Andorra` - Europe/Andorra - `Europe/Astrakhan` - Europe/Astrakhan - `Europe/Athens` - Europe/Athens - `Europe/Belgrade` - Europe/Belgrade - `Europe/Berlin` - Europe/Berlin - `Europe/Bratislava` - Europe/Bratislava - `Europe/Brussels` - Europe/Brussels - `Europe/Bucharest` - Europe/Bucharest - `Europe/Budapest` - Europe/Budapest - `Europe/Busingen` - Europe/Busingen - `Europe/Chisinau` - Europe/Chisinau - `Europe/Copenhagen` - Europe/Copenhagen - `Europe/Dublin` - Europe/Dublin - `Europe/Gibraltar` - Europe/Gibraltar - `Europe/Guernsey` - Europe/Guernsey - `Europe/Helsinki` - Europe/Helsinki - `Europe/Isle_of_Man` - Europe/Isle_of_Man - `Europe/Istanbul` - Europe/Istanbul - `Europe/Jersey` - Europe/Jersey - `Europe/Kaliningrad` - Europe/Kaliningrad - `Europe/Kirov` - Europe/Kirov - `Europe/Kyiv` - Europe/Kyiv - `Europe/Lisbon` - Europe/Lisbon - `Europe/Ljubljana` - Europe/Ljubljana - `Europe/London` - Europe/London - `Europe/Luxembourg` - Europe/Luxembourg - `Europe/Madrid` - Europe/Madrid - `Europe/Malta` - Europe/Malta - `Europe/Mariehamn` - Europe/Mariehamn - `Europe/Minsk` - Europe/Minsk - `Europe/Monaco` - Europe/Monaco - `Europe/Moscow` - Europe/Moscow - `Europe/Oslo` - Europe/Oslo - `Europe/Paris` - Europe/Paris - `Europe/Podgorica` - Europe/Podgorica - `Europe/Prague` - Europe/Prague - `Europe/Riga` - Europe/Riga - `Europe/Rome` - Europe/Rome - `Europe/Samara` - Europe/Samara - `Europe/San_Marino` - Europe/San_Marino - `Europe/Sarajevo` - Europe/Sarajevo - `Europe/Saratov` - Europe/Saratov - `Europe/Simferopol` - Europe/Simferopol - `Europe/Skopje` - Europe/Skopje - `Europe/Sofia` - Europe/Sofia - `Europe/Stockholm` - Europe/Stockholm - `Europe/Tallinn` - Europe/Tallinn - `Europe/Tirane` - Europe/Tirane - `Europe/Ulyanovsk` - Europe/Ulyanovsk - `Europe/Vaduz` - Europe/Vaduz - `Europe/Vatican` - Europe/Vatican - `Europe/Vienna` - Europe/Vienna - `Europe/Vilnius` - Europe/Vilnius - `Europe/Volgograd` - Europe/Volgograd - `Europe/Warsaw` - Europe/Warsaw - `Europe/Zagreb` - Europe/Zagreb - `Europe/Zurich` - Europe/Zurich - `GMT` - GMT - `Indian/Antananarivo` - Indian/Antananarivo - `Indian/Chagos` - Indian/Chagos - `Indian/Christmas` - Indian/Christmas - `Indian/Cocos` - Indian/Cocos - `Indian/Comoro` - Indian/Comoro - `Indian/Kerguelen` - Indian/Kerguelen - `Indian/Mahe` - Indian/Mahe - `Indian/Maldives` - Indian/Maldives - `Indian/Mauritius` - Indian/Mauritius - `Indian/Mayotte` - Indian/Mayotte - `Indian/Reunion` - Indian/Reunion - `Pacific/Apia` - Pacific/Apia - `Pacific/Auckland` - Pacific/Auckland - `Pacific/Bougainville` - Pacific/Bougainville - `Pacific/Chatham` - Pacific/Chatham - `Pacific/Chuuk` - Pacific/Chuuk - `Pacific/Easter` - Pacific/Easter - `Pacific/Efate` - Pacific/Efate - `Pacific/Fakaofo` - Pacific/Fakaofo - `Pacific/Fiji` - Pacific/Fiji - `Pacific/Funafuti` - Pacific/Funafuti - `Pacific/Galapagos` - Pacific/Galapagos - `Pacific/Gambier` - Pacific/Gambier - `Pacific/Guadalcanal` - Pacific/Guadalcanal - `Pacific/Guam` - Pacific/Guam - `Pacific/Honolulu` - Pacific/Honolulu - `Pacific/Kanton` - Pacific/Kanton - `Pacific/Kiritimati` - Pacific/Kiritimati - `Pacific/Kosrae` - Pacific/Kosrae - `Pacific/Kwajalein` - Pacific/Kwajalein - `Pacific/Majuro` - Pacific/Majuro - `Pacific/Marquesas` - Pacific/Marquesas - `Pacific/Midway` - Pacific/Midway - `Pacific/Nauru` - Pacific/Nauru - `Pacific/Niue` - Pacific/Niue - `Pacific/Norfolk` - Pacific/Norfolk - `Pacific/Noumea` - Pacific/Noumea - `Pacific/Pago_Pago` - Pacific/Pago_Pago - `Pacific/Palau` - Pacific/Palau - `Pacific/Pitcairn` - Pacific/Pitcairn - `Pacific/Pohnpei` - Pacific/Pohnpei - `Pacific/Port_Moresby` - Pacific/Port_Moresby - `Pacific/Rarotonga` - Pacific/Rarotonga - `Pacific/Saipan` - Pacific/Saipan - `Pacific/Tahiti` - Pacific/Tahiti - `Pacific/Tarawa` - Pacific/Tarawa - `Pacific/Tongatapu` - Pacific/Tongatapu - `Pacific/Wake` - Pacific/Wake - `Pacific/Wallis` - Pacific/Wallis - `US/Alaska` - US/Alaska - `US/Arizona` - US/Arizona - `US/Central` - US/Central - `US/Eastern` - US/Eastern - `US/Hawaii` - US/Hawaii - `US/Mountain` - US/Mountain - `US/Pacific` - US/Pacific - `UTC` - UTC One of `Africa/Abidjan`, `Africa/Accra`, `Africa/Addis_Ababa`, `Africa/Algiers`, `Africa/Asmara`, `Africa/Bamako`, `Africa/Bangui`, `Africa/Banjul`, `Africa/Bissau`, `Africa/Blantyre`, `Africa/Brazzaville`, `Africa/Bujumbura`, `Africa/Cairo`, `Africa/Casablanca`, `Africa/Ceuta`, `Africa/Conakry`, `Africa/Dakar`, `Africa/Dar_es_Salaam`, `Africa/Djibouti`, `Africa/Douala`, `Africa/El_Aaiun`, `Africa/Freetown`, `Africa/Gaborone`, `Africa/Harare`, `Africa/Johannesburg`, `Africa/Juba`, `Africa/Kampala`, `Africa/Khartoum`, `Africa/Kigali`, `Africa/Kinshasa`, `Africa/Lagos`, `Africa/Libreville`, `Africa/Lome`, `Africa/Luanda`, `Africa/Lubumbashi`, `Africa/Lusaka`, `Africa/Malabo`, `Africa/Maputo`, `Africa/Maseru`, `Africa/Mbabane`, `Africa/Mogadishu`, `Africa/Monrovia`, `Africa/Nairobi`, `Africa/Ndjamena`, `Africa/Niamey`, `Africa/Nouakchott`, `Africa/Ouagadougou`, `Africa/Porto-Novo`, `Africa/Sao_Tome`, `Africa/Tripoli`, `Africa/Tunis`, `Africa/Windhoek`, `America/Adak`, `America/Anchorage`, `America/Anguilla`, `America/Antigua`, `America/Araguaina`, `America/Argentina/Buenos_Aires`, `America/Argentina/Catamarca`, `America/Argentina/Cordoba`, `America/Argentina/Jujuy`, `America/Argentina/La_Rioja`, `America/Argentina/Mendoza`, `America/Argentina/Rio_Gallegos`, `America/Argentina/Salta`, `America/Argentina/San_Juan`, `America/Argentina/San_Luis`, `America/Argentina/Tucuman`, `America/Argentina/Ushuaia`, `America/Aruba`, `America/Asuncion`, `America/Atikokan`, `America/Bahia`, `America/Bahia_Banderas`, `America/Barbados`, `America/Belem`, `America/Belize`, `America/Blanc-Sablon`, `America/Boa_Vista`, `America/Bogota`, `America/Boise`, `America/Cambridge_Bay`, `America/Campo_Grande`, `America/Cancun`, `America/Caracas`, `America/Cayenne`, `America/Cayman`, `America/Chicago`, `America/Chihuahua`, `America/Ciudad_Juarez`, `America/Costa_Rica`, `America/Creston`, `America/Cuiaba`, `America/Curacao`, `America/Danmarkshavn`, `America/Dawson`, `America/Dawson_Creek`, `America/Denver`, `America/Detroit`, `America/Dominica`, `America/Edmonton`, `America/Eirunepe`, `America/El_Salvador`, `America/Fort_Nelson`, `America/Fortaleza`, `America/Glace_Bay`, `America/Goose_Bay`, `America/Grand_Turk`, `America/Grenada`, `America/Guadeloupe`, `America/Guatemala`, `America/Guayaquil`, `America/Guyana`, `America/Halifax`, `America/Havana`, `America/Hermosillo`, `America/Indiana/Indianapolis`, `America/Indiana/Knox`, `America/Indiana/Marengo`, `America/Indiana/Petersburg`, `America/Indiana/Tell_City`, `America/Indiana/Vevay`, `America/Indiana/Vincennes`, `America/Indiana/Winamac`, `America/Inuvik`, `America/Iqaluit`, `America/Jamaica`, `America/Juneau`, `America/Kentucky/Louisville`, `America/Kentucky/Monticello`, `America/Kralendijk`, `America/La_Paz`, `America/Lima`, `America/Los_Angeles`, `America/Lower_Princes`, `America/Maceio`, `America/Managua`, `America/Manaus`, `America/Marigot`, `America/Martinique`, `America/Matamoros`, `America/Mazatlan`, `America/Menominee`, `America/Merida`, `America/Metlakatla`, `America/Mexico_City`, `America/Miquelon`, `America/Moncton`, `America/Monterrey`, `America/Montevideo`, `America/Montserrat`, `America/Nassau`, `America/New_York`, `America/Nome`, `America/Noronha`, `America/North_Dakota/Beulah`, `America/North_Dakota/Center`, `America/North_Dakota/New_Salem`, `America/Nuuk`, `America/Ojinaga`, `America/Panama`, `America/Paramaribo`, `America/Phoenix`, `America/Port-au-Prince`, `America/Port_of_Spain`, `America/Porto_Velho`, `America/Puerto_Rico`, `America/Punta_Arenas`, `America/Rankin_Inlet`, `America/Recife`, `America/Regina`, `America/Resolute`, `America/Rio_Branco`, `America/Santarem`, `America/Santiago`, `America/Santo_Domingo`, `America/Sao_Paulo`, `America/Scoresbysund`, `America/Sitka`, `America/St_Barthelemy`, `America/St_Johns`, `America/St_Kitts`, `America/St_Lucia`, `America/St_Thomas`, `America/St_Vincent`, `America/Swift_Current`, `America/Tegucigalpa`, `America/Thule`, `America/Tijuana`, `America/Toronto`, `America/Tortola`, `America/Vancouver`, `America/Whitehorse`, `America/Winnipeg`, `America/Yakutat`, `Antarctica/Casey`, `Antarctica/Davis`, `Antarctica/DumontDUrville`, `Antarctica/Macquarie`, `Antarctica/Mawson`, `Antarctica/McMurdo`, `Antarctica/Palmer`, `Antarctica/Rothera`, `Antarctica/Syowa`, `Antarctica/Troll`, `Antarctica/Vostok`, `Arctic/Longyearbyen`, `Asia/Aden`, `Asia/Almaty`, `Asia/Amman`, `Asia/Anadyr`, `Asia/Aqtau`, `Asia/Aqtobe`, `Asia/Ashgabat`, `Asia/Atyrau`, `Asia/Baghdad`, `Asia/Bahrain`, `Asia/Baku`, `Asia/Bangkok`, `Asia/Barnaul`, `Asia/Beirut`, `Asia/Bishkek`, `Asia/Brunei`, `Asia/Chita`, `Asia/Choibalsan`, `Asia/Colombo`, `Asia/Damascus`, `Asia/Dhaka`, `Asia/Dili`, `Asia/Dubai`, `Asia/Dushanbe`, `Asia/Famagusta`, `Asia/Gaza`, `Asia/Hebron`, `Asia/Ho_Chi_Minh`, `Asia/Hong_Kong`, `Asia/Hovd`, `Asia/Irkutsk`, `Asia/Jakarta`, `Asia/Jayapura`, `Asia/Jerusalem`, `Asia/Kabul`, `Asia/Kamchatka`, `Asia/Karachi`, `Asia/Kathmandu`, `Asia/Khandyga`, `Asia/Kolkata`, `Asia/Krasnoyarsk`, `Asia/Kuala_Lumpur`, `Asia/Kuching`, `Asia/Kuwait`, `Asia/Macau`, `Asia/Magadan`, `Asia/Makassar`, `Asia/Manila`, `Asia/Muscat`, `Asia/Nicosia`, `Asia/Novokuznetsk`, `Asia/Novosibirsk`, `Asia/Omsk`, `Asia/Oral`, `Asia/Phnom_Penh`, `Asia/Pontianak`, `Asia/Pyongyang`, `Asia/Qatar`, `Asia/Qostanay`, `Asia/Qyzylorda`, `Asia/Riyadh`, `Asia/Sakhalin`, `Asia/Samarkand`, `Asia/Seoul`, `Asia/Shanghai`, `Asia/Singapore`, `Asia/Srednekolymsk`, `Asia/Taipei`, `Asia/Tashkent`, `Asia/Tbilisi`, `Asia/Tehran`, `Asia/Thimphu`, `Asia/Tokyo`, `Asia/Tomsk`, `Asia/Ulaanbaatar`, `Asia/Urumqi`, `Asia/Ust-Nera`, `Asia/Vientiane`, `Asia/Vladivostok`, `Asia/Yakutsk`, `Asia/Yangon`, `Asia/Yekaterinburg`, `Asia/Yerevan`, `Atlantic/Azores`, `Atlantic/Bermuda`, `Atlantic/Canary`, `Atlantic/Cape_Verde`, `Atlantic/Faroe`, `Atlantic/Madeira`, `Atlantic/Reykjavik`, `Atlantic/South_Georgia`, `Atlantic/St_Helena`, `Atlantic/Stanley`, `Australia/Adelaide`, `Australia/Brisbane`, `Australia/Broken_Hill`, `Australia/Darwin`, `Australia/Eucla`, `Australia/Hobart`, `Australia/Lindeman`, `Australia/Lord_Howe`, `Australia/Melbourne`, `Australia/Perth`, `Australia/Sydney`, `Canada/Atlantic`, `Canada/Central`, `Canada/Eastern`, `Canada/Mountain`, `Canada/Newfoundland`, `Canada/Pacific`, `Europe/Amsterdam`, `Europe/Andorra`, `Europe/Astrakhan`, `Europe/Athens`, `Europe/Belgrade`, `Europe/Berlin`, `Europe/Bratislava`, `Europe/Brussels`, `Europe/Bucharest`, `Europe/Budapest`, `Europe/Busingen`, `Europe/Chisinau`, `Europe/Copenhagen`, `Europe/Dublin`, `Europe/Gibraltar`, `Europe/Guernsey`, `Europe/Helsinki`, `Europe/Isle_of_Man`, `Europe/Istanbul`, `Europe/Jersey`, `Europe/Kaliningrad`, `Europe/Kirov`, `Europe/Kyiv`, `Europe/Lisbon`, `Europe/Ljubljana`, `Europe/London`, `Europe/Luxembourg`, `Europe/Madrid`, `Europe/Malta`, `Europe/Mariehamn`, `Europe/Minsk`, `Europe/Monaco`, `Europe/Moscow`, `Europe/Oslo`, `Europe/Paris`, `Europe/Podgorica`, `Europe/Prague`, `Europe/Riga`, `Europe/Rome`, `Europe/Samara`, `Europe/San_Marino`, `Europe/Sarajevo`, `Europe/Saratov`, `Europe/Simferopol`, `Europe/Skopje`, `Europe/Sofia`, `Europe/Stockholm`, `Europe/Tallinn`, `Europe/Tirane`, `Europe/Ulyanovsk`, `Europe/Vaduz`, `Europe/Vatican`, `Europe/Vienna`, `Europe/Vilnius`, `Europe/Volgograd`, `Europe/Warsaw`, `Europe/Zagreb`, `Europe/Zurich`, `GMT`, `Indian/Antananarivo`, `Indian/Chagos`, `Indian/Christmas`, `Indian/Cocos`, `Indian/Comoro`, `Indian/Kerguelen`, `Indian/Mahe`, `Indian/Maldives`, `Indian/Mauritius`, `Indian/Mayotte`, `Indian/Reunion`, `Pacific/Apia`, `Pacific/Auckland`, `Pacific/Bougainville`, `Pacific/Chatham`, `Pacific/Chuuk`, `Pacific/Easter`, `Pacific/Efate`, `Pacific/Fakaofo`, `Pacific/Fiji`, `Pacific/Funafuti`, `Pacific/Galapagos`, `Pacific/Gambier`, `Pacific/Guadalcanal`, `Pacific/Guam`, `Pacific/Honolulu`, `Pacific/Kanton`, `Pacific/Kiritimati`, `Pacific/Kosrae`, `Pacific/Kwajalein`, `Pacific/Majuro`, `Pacific/Marquesas`, `Pacific/Midway`, `Pacific/Nauru`, `Pacific/Niue`, `Pacific/Norfolk`, `Pacific/Noumea`, `Pacific/Pago_Pago`, `Pacific/Palau`, `Pacific/Pitcairn`, `Pacific/Pohnpei`, `Pacific/Port_Moresby`, `Pacific/Rarotonga`, `Pacific/Saipan`, `Pacific/Tahiti`, `Pacific/Tarawa`, `Pacific/Tongatapu`, `Pacific/Wake`, `Pacific/Wallis`, `US/Alaska`, `US/Arizona`, `US/Central`, `US/Eastern`, `US/Hawaii`, `US/Mountain`, `US/Pacific`, `UTC`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `archive_in`, `archived_at`, `close_in`, `cover_image`, `cover_image_url`, `created_at`, `created_by_id`, `cycle_view`, `default_assignee_id`, `default_state_id`, `description`, `emoji`, `estimate_id`, `external_id`, `external_source`, `guest_view_all_features`, `icon_prop`, `id`, `identifier`, `intake_view`, `is_issue_type_enabled`, `is_time_tracking_enabled`, `issue_views_view`, `logo_props`, `module_view`, `name`, `network`, `page_view`, `priority`, `project_lead_id`, `start_date`, `state_id`, `target_date`, `timezone`. | +| `expand` | string | No | Comma-separated relations to embed: `default_assignee`, `project_lead`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `v1_icon_prop` | json | No | v1 compatibility only. Icon prop. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Projects | +| ↳ `archive_in` | json | Archive in | +| ↳ `archived_at` | string | Archived at | +| ↳ `close_in` | json | Close in | +| ↳ `cover_image` | json | Cover image | +| ↳ `cover_image_url` | json | Cover image url | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `cycle_view` | json | Cycle view | +| ↳ `default_assignee_id` | string | Default assignee id | +| ↳ `default_state_id` | string | Default state id | +| ↳ `description` | json | Description | +| ↳ `emoji` | json | Emoji | +| ↳ `estimate_id` | string | Estimate id | +| ↳ `external_id` | json | External id | +| ↳ `external_source` | json | External source | +| ↳ `guest_view_all_features` | json | Guest view all features | +| ↳ `icon_prop` | json | Icon prop | +| ↳ `id` | json | Id | +| ↳ `identifier` | json | Identifier | +| ↳ `intake_view` | json | Intake view | +| ↳ `is_issue_type_enabled` | json | Is issue type enabled | +| ↳ `is_time_tracking_enabled` | json | Is time tracking enabled | +| ↳ `issue_views_view` | json | Issue views view | +| ↳ `logo_props` | json | Logo props | +| ↳ `module_view` | json | Module view | +| ↳ `name` | json | Name | +| ↳ `network` | json | Network | +| ↳ `page_view` | json | Page view | +| ↳ `priority` | json | Priority | +| ↳ `project_lead_id` | string | Project lead id | +| ↳ `start_date` | string | Start date | +| ↳ `state_id` | string | State id | +| ↳ `target_date` | string | Target date | +| ↳ `timezone` | json | Timezone | +| ↳ `default_assignee` | json | Default assignee | +| ↳ `project_lead` | json | Project lead | +| ↳ `total_members` | json | Total members | +| ↳ `total_cycles` | json | Total cycles | +| ↳ `total_modules` | json | Total modules | +| ↳ `is_member` | boolean | Is member | +| ↳ `sort_order` | number | Sort order | +| ↳ `member_role` | json | Member role | +| ↳ `is_deployed` | boolean | Is deployed | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `cover_image_asset` | string | Cover image asset | +| ↳ `estimate` | string | Estimate | +| ↳ `default_state` | string | Default state | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_voting_enabled` | boolean | Is voting enabled | +| ↳ `auto_reminder_days` | number | Auto reminder days | +| ↳ `state` | string | State | + +### Plane Create a project page + +Create a project page in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `name` | string | Yes | Display name. | +| `access` | string | No | Who can see this. | +| `archived_at` | string | No | The archived at. Nullable. | +| `collection_id` | string | No | Id of the related collection. Nullable. | +| `color` | string | No | Hex color used wherever this is rendered, for example `#3f76ff`. Maximum 255 characters. | +| `description_html` | string | No | Rich-text body as HTML. This is the field the Plane editor round-trips. | +| `external_id` | string | No | Your system's identifier for this record, for sync and import correlation. Maximum 255 characters. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Nullable. | +| `is_locked` | boolean | No | Prevents further edits to the content. | +| `logo_props` | string | No | Editor-owned logo descriptor. Pass back what you read rather than composing it by hand. | +| `parent_id` | string | No | Id of the related parent. Nullable. | +| `sort_order` | number | No | Manual ordering weight. Lower sorts first. | +| `view_props` | string | No | Editor-owned layout descriptor. Pass back what you read. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `access`, `archived_at`, `collection_id`, `color`, `created_at`, `created_by_id`, `description_html`, `description_stripped`, `external_id`, `external_source`, `id`, `is_global`, `is_locked`, `logo_props`, `name`, `owned_by_id`, `parent_id`, `sort_order`, `view_props`. | +| `expand` | string | No | Comma-separated relations to embed: `owned_by`, `parent`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `v1_access` | number | No | v1 compatibility only. - `0` - Public - `1` - Private | +| `v1_view_props` | json | No | v1 compatibility only. View props. | +| `v1_logo_props` | json | No | v1 compatibility only. Logo props. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Project- Pages | +| ↳ `access` | json | Access | +| ↳ `archived_at` | string | Archived at | +| ↳ `collection_id` | json | Collection id | +| ↳ `color` | json | Color | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `description_html` | json | Description html | +| ↳ `description_stripped` | json | Description stripped | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `id` | json | Id | +| ↳ `is_global` | boolean | Is global | +| ↳ `is_locked` | json | Is locked | +| ↳ `logo_props` | json | Logo props | +| ↳ `name` | json | Name | +| ↳ `owned_by_id` | string | Owned by id | +| ↳ `parent_id` | json | Parent id | +| ↳ `sort_order` | json | Sort order | +| ↳ `view_props` | json | View props | +| ↳ `owned_by` | json | Owned by | +| ↳ `parent` | json | Parent | +| ↳ `description_binary` | string | Description binary | +| ↳ `description` | json | Description | +| ↳ `updated_at` | string | Updated at | +| ↳ `anchor` | string | Anchor | +| ↳ `workspace` | string | Workspace | +| ↳ `projects` | array | Projects | +| ↳ `page_collection_id` | string | Page collection id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `description_json` | object | Description json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `attrs` | object | Attrs | +| ↳ `id` | json | Id | +| ↳ `textAlign` | json | Id | +| ↳ `aiSuggestion` | json | Id | +| ↳ `content` | array | Content | +| ↳ `text` | string | Asset Id | +| ↳ `type` | string | Asset Id | + +### Plane Create a state + +Create a state in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project to add the state to. | +| `name` | string | Yes | Display name for the state, unique within the project. Maximum 255 characters. | +| `color` | string | Yes | Hex color used wherever the state is rendered, for example `#3f76ff`. Maximum 255 characters. | +| `group` | string | No | The workflow group the state belongs to. Determines how the state is treated by boards, charts, and cycle progress. - `backlog` — Not yet scheduled - `unstarted` — Scheduled but not begun - `started` — Actively in progress - `completed` — Finished successfully - `cancelled` — Closed without completion - `triage` — Awaiting intake review Defaults to `backlog` when omitted. | +| `description` | string | No | Free-form description of what the state means in this workflow. | +| `sequence` | number | No | Ordering weight within the project. Lower values sort first. Assigned automatically when omitted. | +| `is_default` | boolean | No | Make this the project's default state — where work items land when no `state_id` is supplied. Setting it clears the flag on the previous default. | +| `external_id` | string | No | Your system's identifier for this state, for sync and import correlation. Maximum 255 characters. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `group`, `id`, `is_default`, `is_triage`, `name`, `sequence`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `is_triage` | boolean | No | v1 compatibility only. Is triage. | +| `default` | boolean | No | v1 compatibility only. Default. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 States | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `color` | json | Color | +| ↳ `group` | json | Group | +| ↳ `sequence` | json | Sequence | +| ↳ `is_default` | boolean | Is default | +| ↳ `is_triage` | json | Is triage | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `default` | boolean | Default | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `slug` | string | Slug | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Create a webhook + +Create a webhook in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `content_type` | string | No | - `application/json` - application/json - `application/x-www-form-urlencoded` - application/x-www-form-urlencoded One of `application/json`, `application/x-www-form-urlencoded`. | +| `is_active` | boolean | No | Whether the record is active. | +| `name` | string | No | Display name. Maximum 255 characters. Nullable. | +| `scopes` | json | No | The scopes. | +| `url` | string | Yes | Target URL. | +| `version` | string | No | Version string, for example `1.4.0`. Maximum 10 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `content_type`, `created_at`, `created_by_id`, `id`, `is_active`, `name`, `scopes`, `url`, `version`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Webhooks | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_active` | boolean | Is active | +| ↳ `name` | string | Name | +| ↳ `scopes` | array | Scopes | +| ↳ `url` | string | Url | +| ↳ `version` | string | Version | +| ↳ `secret_key` | string | Secret key | + +### Plane Create a work item + +Create a work item in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project to create the work item in. | +| `name` | string | Yes | Title of the work item. Maximum 255 characters. The only required field. | +| `description_html` | string | No | Rich-text body as HTML, for example `Steps to reproduce…`. The HTML is sanitized on the way in; content that can't be sanitized is rejected with a `400`. `description_html` is **not** part of the read shape, so it will not appear in the response. | +| `priority` | string | No | One of `urgent`, `high`, `medium`, `low`, `none`. Defaults to `none`. | +| `state_id` | string | No | The workflow state to create the work item in. Must be a state of this project. Omit it and the work item lands in the project's default state. | +| `state` | string | No | The state's **name** instead of its id, for example `In Progress`. Matched case-insensitively within the project. Write-only. Unknown name or a name that matches more than one state is a `400`. Sending both `state` and `state_id` is a `400`. | +| `type_id` | string | No | The work item type. Accepts a type owned by the project and a workspace-level type imported into it. Requires work item types to be enabled. | +| `type` | string | No | The type's **name** instead of its id, for example `Bug`. Matched case-insensitively among the project's non-epic types. Write-only. | +| `parent_id` | string | No | The parent work item. The parent must be in the same workspace, but it may live in a different project. | +| `parent` | string | No | The parent's **identifier** instead of its id, for example `PROJ-118`. Resolved within the workspace. Write-only. | +| `assignee_ids` | json | No | User ids to assign. Each must be an active, assignable member of the project. Leave it out and the project's default assignee is applied, if one is configured. Send `\[\]` to create the work item with no assignee at all. | +| `assignees` | json | No | Member **email addresses** instead of ids, for example `\["ana@example.com"\]`. Every address must belong to an active, assignable project member — any that don't are named in the `400`. Write-only. | +| `label_ids` | json | No | Label ids to apply. Each must be a label of this project, or a workspace-level label available to it. | +| `labels` | json | No | Label **names** instead of ids, for example `\["regression", "auth"\]`. Matched case-insensitively against the project's labels and the workspace-level labels available to it. A name that exists at both levels is ambiguous and returns a `400` telling you to use `label_ids`. Write-only. | +| `estimate_point_id` | string | No | The estimate point to assign, from the project's active estimate system. | +| `estimate` | string | No | The estimate point's **value** instead of its id, for example `5` or `L`. Resolved against the project's active estimate. Write-only. | +| `start_date` | string | No | Planned start, for example `2026-01-12`. Must not be after `target_date`. | +| `target_date` | string | No | Planned due date, for example `2026-01-20`. | +| `external_id` | string | No | Your system's identifier for this work item, for sync and import correlation. Maximum 255 characters. Stored and filterable on \[List work items\]\(https://developers.plane.so/api-reference/v2/work-items/list-work-items), but not returned on reads. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `custom_fields`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `deleted_at` | string | No | v1 compatibility only. Deleted at. | +| `point` | number | No | v1 compatibility only. Point. | +| `sequence_id` | number | No | v1 compatibility only. Sequence id. | +| `sort_order` | number | No | v1 compatibility only. Sort order. | +| `archived_at` | string | No | v1 compatibility only. Archived at. | +| `is_draft` | boolean | No | v1 compatibility only. Is draft. | +| `created_by` | string | No | v1 compatibility only. Created by. | +| `created_at` | string | No | v1 compatibility only. Creation timestamp for imports. | +| `custom_fields` | json | No | JSON custom field values. API v2 only. | +| `cycle_id` | string | No | Cycle ID. API v2 only. | +| `module_ids` | json | No | Module IDs. API v2 only. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Items | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `identifier` | string | Identifier | +| ↳ `sequence_id` | json | Sequence id | +| ↳ `priority` | json | Priority | +| ↳ `state_id` | string | State id | +| ↳ `type_id` | string | Type id | +| ↳ `assignee_ids` | array | Assignee ids | +| ↳ `label_ids` | array | Label ids | +| ↳ `parent_id` | string | Parent id | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `is_draft` | json | Is draft | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `custom_fields` | json | Custom fields | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `avatar` | string | Asset Id | +| ↳ `cycle` | json | Cycle | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `deleted_by` | json | Id | +| ↳ `created_at` | string | Asset Id | +| ↳ `updated_at` | string | Asset Id | +| ↳ `deleted_at` | json | Id | +| ↳ `name` | string | Asset Id | +| ↳ `description` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `sort_order` | number | Sort Order | +| ↳ `external_source` | json | Id | +| ↳ `external_id` | json | Id | +| ↳ `created_by` | string | Asset Id | +| ↳ `updated_by` | json | Id | +| ↳ `workspace` | string | Asset Id | +| ↳ `project` | string | Asset Id | +| ↳ `parent` | json | Id | +| ↳ `modules` | array | Modules | +| ↳ `parent` | json | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | json | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | json | Group | +| ↳ `type` | json | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `project_id` | string | Project id | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `module_ids` | array | Module ids | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `point` | number | Point | +| ↳ `description_html` | string | Description html | +| ↳ `description_stripped` | string | Description stripped | +| ↳ `description_binary` | string | Description binary | +| ↳ `sort_order` | number | Sort order | +| ↳ `completed_at` | string | Completed at | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | json | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `estimate_point` | string | Estimate point | +| ↳ `description` | string | Description | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `last_activity_at` | string | Last activity at | +| ↳ `min_assignee_first_name` | string | Min assignee first name | +| ↳ `min_label_name` | string | Min label name | +| ↳ `min_module_name` | string | Min module name | +| ↳ `priority_rank` | number | Priority rank | +| ↳ `state_group` | string | State group | + +### Plane Delete an attachment + +Delete an attachment in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `pk` | string | Yes | The attachment id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a comment + +Delete a comment in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `work_item_id` | string | Yes | The work item the comment is attached to. | +| `pk` | string | Yes | The comment to delete. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a cycle + +Delete a cycle in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the cycle belongs to. | +| `pk` | string | Yes | The cycle to delete. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a label + +Delete a label in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the label belongs to. | +| `pk` | string | Yes | The label id to delete. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a link + +Delete a link in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `pk` | string | Yes | The link id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a module + +Delete a module in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the module belongs to. | +| `pk` | string | Yes | The module to delete. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a project + +Delete a project in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The project id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a project page + +Delete a project page in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `pk` | string | Yes | The project page id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a state + +Delete a state in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the state belongs to. | +| `pk` | string | Yes | The id of the state to delete. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a webhook + +Delete a webhook in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The webhook id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Delete a work item + +Delete a work item in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `pk` | string | Yes | The work item's UUID. This lookup is UUID-only — a `PROJ-142` identifier here returns `404`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Get an attachment + +Get an attachment in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `pk` | string | Yes | The attachment id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `asset_url`, `attributes`, `content_type`, `created_at`, `created_by_id`, `external_id`, `external_source`, `id`, `is_uploaded`, `name`, `size`, `work_item_id`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Attachments | +| ↳ `asset_url` | string | Asset url | +| ↳ `attributes` | json | Attributes | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_uploaded` | boolean | Is uploaded | +| ↳ `name` | string | Name | +| ↳ `size` | json | Size | +| ↳ `work_item_id` | string | Work item id | + +### Plane Get a comment + +Get a comment in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `work_item_id` | string | Yes | The work item the comment is attached to. | +| `pk` | string | Yes | The comment to retrieve. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `access`, `actor_id`, `comment_html`, `comment_stripped`, `created_at`, `created_by_id`, `edited_at`, `external_id`, `external_source`, `id`, `work_item_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `actor` \(the comment author\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Comments | +| ↳ `id` | json | Id | +| ↳ `work_item_id` | string | Work item id | +| ↳ `comment_html` | json | Comment html | +| ↳ `comment_stripped` | json | Comment stripped | +| ↳ `access` | json | Access | +| ↳ `actor_id` | string | Actor id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `edited_at` | string | Edited at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `actor` | json | Actor | +| ↳ `is_member` | boolean | Is member | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `attachments` | array | Attachments | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `parent` | string | Parent | +| ↳ `description` | string | Description | +| ↳ `comment_json` | object | Comment json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `text` | string | Asset Id | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_hidden` | boolean | Is hidden | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `hidden_reason` | json | Hidden reason | +| ↳ `hidden_at` | json | Hidden at | +| ↳ `hidden_by` | json | Hidden by | +| ↳ `source` | json | Source | + +### Plane Get current user + +Get current user in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 Get Current Userresult | +| ↳ `id` | string | Id | +| ↳ `email` | string | Email | +| ↳ `display_name` | string | Display name | +| ↳ `principal_kind` | string | Principal kind | +| ↳ `scopes` | array | Scopes | +| ↳ `first_name` | string | First name | +| ↳ `last_name` | string | Last name | +| ↳ `avatar` | string | Avatar | +| ↳ `avatar_url` | string | Avatar URL | + +### Plane Get a cycle + +Get a cycle in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the cycle belongs to. A cycle id from a different project returns `404`, not the record. | +| `pk` | string | Yes | The cycle to retrieve. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `created_at`, `created_by_id`, `description`, `end_date`, `external_id`, `external_source`, `id`, `logo_props`, `name`, `owned_by_id`, `sort_order`, `start_date`, `timezone`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `owned_by` \(the cycle owner\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Cycles | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `start_date` | string | Start date | +| ↳ `end_date` | string | End date | +| ↳ `timezone` | json | Timezone | +| ↳ `owned_by_id` | string | Owned by id | +| ↳ `sort_order` | json | Sort order | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `owned_by` | json | Owned by | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `total_estimates` | number | Total estimates | +| ↳ `completed_estimates` | number | Completed estimates | +| ↳ `started_estimates` | number | Started estimates | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `view_props` | json | View props | +| ↳ `progress_snapshot` | json | Progress snapshot | +| ↳ `archived_at` | string | Archived at | +| ↳ `version` | json | Version | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `status` | string | Status | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Get a label + +Get a label in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the label belongs to. | +| `pk` | string | Yes | The label id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `name`, `parent_id`, `sort_order`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Labels | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `color` | json | Color | +| ↳ `sort_order` | json | Sort order | +| ↳ `parent_id` | string | Parent id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `project` | string | Project | +| ↳ `parent` | string | Parent | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Get a link + +Get a link in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `pk` | string | Yes | The link id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `created_at`, `created_by_id`, `id`, `metadata`, `title`, `url`, `work_item_id`. | +| `cursor` | string | No | v1 compatibility only. Pagination cursor for getting next set of results | +| `expand` | string | No | v1 compatibility only. Comma-separated list of related fields to expand in response Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `per_page` | number | No | v1 compatibility only. Number of results per page \(default: 20, max: 100\) | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Links | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | json | Id | +| ↳ `metadata` | json | Metadata | +| ↳ `url` | string | Asset Id | +| ↳ `title` | string | Asset Id | +| ↳ `favicon` | string | Asset Id | +| ↳ `favicon_url` | json | Logo Props | +| ↳ `title` | json | Title | +| ↳ `url` | json | Url | +| ↳ `work_item_id` | string | Work item id | +| ↳ `name` | string | Legacy link name. | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `grouped_by` | string | Grouped by | +| ↳ `sub_grouped_by` | string | Sub grouped by | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `prev_cursor` | string | Prev cursor | +| ↳ `next_page_results` | boolean | Next page results | +| ↳ `prev_page_results` | boolean | Prev page results | +| ↳ `count` | number | Count | +| ↳ `total_pages` | number | Total pages | +| ↳ `total_results` | number | Total results | +| ↳ `extra_stats` | json | Extra stats \(nullable provider value\). | +| ↳ `results` | array | Results | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `created_at` | string | Asset Id | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Get a module + +Get a module in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the module belongs to. | +| `pk` | string | Yes | The module to retrieve. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `lead_id`, `logo_props`, `member_ids`, `name`, `sort_order`, `start_date`, `status`, `target_date`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `lead` \(the module lead\), `members` \(the module members\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Modules | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `status` | json | Status | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `lead_id` | string | Lead id | +| ↳ `member_ids` | array | Member ids | +| ↳ `sort_order` | json | Sort order | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `lead` | json | Lead | +| ↳ `members` | array | Members | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `view_props` | json | View props | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Get a project + +Get a project in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The project id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `archive_in`, `archived_at`, `close_in`, `cover_image`, `cover_image_url`, `created_at`, `created_by_id`, `cycle_view`, `default_assignee_id`, `default_state_id`, `description`, `emoji`, `estimate_id`, `external_id`, `external_source`, `guest_view_all_features`, `icon_prop`, `id`, `identifier`, `intake_view`, `is_issue_type_enabled`, `is_time_tracking_enabled`, `issue_views_view`, `logo_props`, `module_view`, `name`, `network`, `page_view`, `priority`, `project_lead_id`, `start_date`, `state_id`, `target_date`, `timezone`. | +| `expand` | string | No | Comma-separated relations to embed: `default_assignee`, `project_lead`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Projects | +| ↳ `archive_in` | json | Archive in | +| ↳ `archived_at` | string | Archived at | +| ↳ `close_in` | json | Close in | +| ↳ `cover_image` | json | Cover image | +| ↳ `cover_image_url` | json | Cover image url | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `cycle_view` | json | Cycle view | +| ↳ `default_assignee_id` | string | Default assignee id | +| ↳ `default_state_id` | string | Default state id | +| ↳ `description` | json | Description | +| ↳ `emoji` | json | Emoji | +| ↳ `estimate_id` | string | Estimate id | +| ↳ `external_id` | json | External id | +| ↳ `external_source` | json | External source | +| ↳ `guest_view_all_features` | json | Guest view all features | +| ↳ `icon_prop` | json | Icon prop | +| ↳ `id` | json | Id | +| ↳ `identifier` | json | Identifier | +| ↳ `intake_view` | json | Intake view | +| ↳ `is_issue_type_enabled` | json | Is issue type enabled | +| ↳ `is_time_tracking_enabled` | json | Is time tracking enabled | +| ↳ `issue_views_view` | json | Issue views view | +| ↳ `logo_props` | json | Logo props | +| ↳ `module_view` | json | Module view | +| ↳ `name` | json | Name | +| ↳ `network` | json | Network | +| ↳ `page_view` | json | Page view | +| ↳ `priority` | json | Priority | +| ↳ `project_lead_id` | string | Project lead id | +| ↳ `start_date` | string | Start date | +| ↳ `state_id` | string | State id | +| ↳ `target_date` | string | Target date | +| ↳ `timezone` | json | Timezone | +| ↳ `default_assignee` | json | Default assignee | +| ↳ `project_lead` | json | Project lead | +| ↳ `total_members` | json | Total members | +| ↳ `total_cycles` | json | Total cycles | +| ↳ `total_modules` | json | Total modules | +| ↳ `is_member` | boolean | Is member | +| ↳ `sort_order` | number | Sort order | +| ↳ `member_role` | json | Member role | +| ↳ `is_deployed` | boolean | Is deployed | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `cover_image_asset` | string | Cover image asset | +| ↳ `estimate` | string | Estimate | +| ↳ `default_state` | string | Default state | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_voting_enabled` | boolean | Is voting enabled | +| ↳ `auto_reminder_days` | number | Auto reminder days | +| ↳ `state` | string | State | + +### Plane Get a project page + +Get a project page in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `pk` | string | Yes | The project page id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `access`, `archived_at`, `collection_id`, `color`, `created_at`, `created_by_id`, `description_html`, `description_stripped`, `external_id`, `external_source`, `id`, `is_global`, `is_locked`, `logo_props`, `name`, `owned_by_id`, `parent_id`, `sort_order`, `view_props`. | +| `expand` | string | No | Comma-separated relations to embed: `owned_by`, `parent`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `external_id` | string | No | v1 compatibility only. External system identifier for filtering or lookup | +| `external_source` | string | No | v1 compatibility only. External system source name for filtering or lookup | +| `order_by` | string | No | v1 compatibility only. Field to order results by. Prefix with '-' for descending order | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Project- Pages | +| ↳ `access` | json | Access | +| ↳ `archived_at` | string | Archived at | +| ↳ `collection_id` | json | Collection id | +| ↳ `color` | json | Color | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `description_html` | json | Description html | +| ↳ `description_stripped` | json | Description stripped | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `id` | json | Id | +| ↳ `is_global` | boolean | Is global | +| ↳ `is_locked` | json | Is locked | +| ↳ `logo_props` | json | Logo props | +| ↳ `name` | json | Name | +| ↳ `owned_by_id` | string | Owned by id | +| ↳ `parent_id` | json | Parent id | +| ↳ `sort_order` | json | Sort order | +| ↳ `view_props` | json | View props | +| ↳ `owned_by` | json | Owned by | +| ↳ `parent` | json | Parent | +| ↳ `description_binary` | string | Description binary | +| ↳ `description` | json | Description | +| ↳ `updated_at` | string | Updated at | +| ↳ `anchor` | string | Anchor | +| ↳ `workspace` | string | Workspace | +| ↳ `projects` | array | Projects | +| ↳ `page_collection_id` | string | Page collection id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | json | Updated by | +| ↳ `description_json` | object | Description json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `attrs` | object | Attrs | +| ↳ `id` | json | Id | +| ↳ `textAlign` | json | Id | +| ↳ `aiSuggestion` | json | Id | +| ↳ `content` | array | Content | +| ↳ `text` | string | Asset Id | +| ↳ `type` | string | Asset Id | + +### Plane Get a project summary + +Get a project summary in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | Project ID or bare project identifier whose summary to retrieve. | +| `counts` | string | No | Comma-separated count keys to include. Allowed: members, states, labels, cycles, modules, issues, intakes, work_item_types, work_item_properties, pages. Omitting returns all. Unknown keys are a 400. | +| `fields` | string | No | v1 compatibility only. Comma-separated list of fields. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 Get Project Summaryresult | +| ↳ `counts` | object | Counts | +| ↳ `modules` | number | Modules | +| ↳ `work_item_types` | number | Work item types | +| ↳ `issues` | number | Issues | +| ↳ `members` | number | Members | +| ↳ `work_item_properties` | number | Work item properties | +| ↳ `states` | number | States | +| ↳ `intakes` | number | Intakes | +| ↳ `cycles` | number | Cycles | +| ↳ `labels` | number | Labels | +| ↳ `pages` | number | Pages | +| ↳ `id` | string | Id | +| ↳ `identifier` | string | Identifier | +| ↳ `name` | string | Name | + +### Plane Get a state + +Get a state in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the state belongs to. A state id from a different project returns `404`, even inside the same workspace. | +| `pk` | string | Yes | The id of the state to retrieve. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `group`, `id`, `is_default`, `is_triage`, `name`, `sequence`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 States | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `color` | json | Color | +| ↳ `group` | json | Group | +| ↳ `sequence` | json | Sequence | +| ↳ `is_default` | boolean | Is default | +| ↳ `is_triage` | json | Is triage | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `default` | boolean | Default | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `slug` | string | Slug | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Get a webhook + +Get a webhook in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The webhook id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `content_type`, `created_at`, `created_by_id`, `id`, `is_active`, `name`, `scopes`, `url`, `version`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Webhooks | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_active` | boolean | Is active | +| ↳ `name` | string | Name | +| ↳ `scopes` | array | Scopes | +| ↳ `url` | string | Url | +| ↳ `version` | string | Version | + +### Plane Get a work item + +Get a work item in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `pk` | string | Yes | The work item's UUID. This lookup is UUID-only — a `PROJ-142` identifier here returns `404`. | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expansion is separate-key: `?expand=state` keeps `state_id` and adds a `state` object next to it, so an id is never replaced by an object. An unknown value is a `400`. `?fields=` and `?expand=` are independent namespaces. Relation names are not valid `?fields=` tokens \(and vice versa\), and an expanded object survives field filtering — `?fields=id,name&expand=state` returns `id`, `name` and `state`. See \[Expanding relations\]\(https://developers.plane.so/api-reference/v2/expanding-relations). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `custom_fields`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `external_id` | string | No | v1 compatibility only. External system identifier for filtering or lookup | +| `external_source` | string | No | v1 compatibility only. External system source name for filtering or lookup | +| `order_by` | string | No | v1 compatibility only. Field to order results by. Prefix with '-' for descending order | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Items | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `identifier` | string | Identifier | +| ↳ `sequence_id` | json | Sequence id | +| ↳ `priority` | json | Priority | +| ↳ `state_id` | string | State id | +| ↳ `type_id` | string | Type id | +| ↳ `assignee_ids` | array | Assignee ids | +| ↳ `label_ids` | array | Label ids | +| ↳ `parent_id` | string | Parent id | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `is_draft` | json | Is draft | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `custom_fields` | json | Custom fields | +| ↳ `state` | json | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | json | Group | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `avatar` | string | Asset Id | +| ↳ `cycle` | json | Cycle | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `deleted_by` | json | Id | +| ↳ `created_at` | string | Asset Id | +| ↳ `updated_at` | string | Asset Id | +| ↳ `deleted_at` | string | Asset Id | +| ↳ `description` | string | Asset Id | +| ↳ `sort_order` | number | Sort Order | +| ↳ `external_source` | string | Asset Id | +| ↳ `external_id` | string | Asset Id | +| ↳ `created_by` | string | Asset Id | +| ↳ `updated_by` | string | Asset Id | +| ↳ `workspace` | string | Asset Id | +| ↳ `project` | string | Asset Id | +| ↳ `parent` | string | Asset Id | +| ↳ `modules` | array | Modules | +| ↳ `parent` | json | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `type` | json | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `project_id` | string | Project id | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `module_ids` | array | Module ids | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `point` | number | Point | +| ↳ `description_html` | string | Description html | +| ↳ `description_stripped` | string | Description stripped | +| ↳ `description_binary` | string | Description binary | +| ↳ `sort_order` | number | Sort order | +| ↳ `completed_at` | string | Completed at | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | json | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `estimate_point` | string | Estimate point | +| ↳ `description` | string | Description | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `last_activity_at` | string | Last activity at | +| ↳ `min_assignee_first_name` | string | Min assignee first name | +| ↳ `min_label_name` | string | Min label name | +| ↳ `min_module_name` | string | Min module name | +| ↳ `priority_rank` | number | Priority rank | +| ↳ `state_group` | string | State group | + +### Plane Get a work item by identifier + +Get a work item by identifier in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `identifier` | string | Yes | The work item's human key: the project identifier, a hyphen, and the work item's number — `PROJ-142`. The project part must start with a letter, and it is upper-cased before lookup, so `proj-142` resolves the same work item as `PROJ-142`. A project identifier is unique within a workspace, which is what makes this key unambiguous. | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expansion is separate-key: `?expand=state` keeps `state_id` and adds a `state` object next to it, so an id is never replaced by an object. An unknown value is a `400`. `?fields=` and `?expand=` are independent namespaces. Relation names are not valid `?fields=` tokens \(and vice versa\), and an expanded object survives field filtering — `?fields=id,name&expand=state` returns `id`, `name` and `state`. See \[Expanding relations\]\(https://developers.plane.so/api-reference/v2/expanding-relations). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `custom_fields`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Items | +| ↳ `id` | string | Unique identifier for the work item. This is the `\{pk\}` on every project-scoped detail route. | +| ↳ `name` | string | Name | +| ↳ `identifier` | string | Identifier | +| ↳ `sequence_id` | json | Sequence id | +| ↳ `priority` | string | Priority | +| ↳ `state_id` | string | State id | +| ↳ `type_id` | string | Type id | +| ↳ `assignee_ids` | array | Assignee ids | +| ↳ `label_ids` | array | Label ids | +| ↳ `parent_id` | string | Parent id | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `is_draft` | boolean | Is draft | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `custom_fields` | json | Custom fields | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `cycle` | json | Cycle | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `modules` | array | Modules | +| ↳ `parent` | object | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | object | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Asset Id | +| ↳ `type` | object | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `project_id` | string | Project id | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `module_ids` | array | Module ids | + +### Plane List attachments + +List attachments in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `count` | boolean | No | Set to false to skip the total_count COUNT\(\*\) \(omits total_count\). | +| `external_id` | string | No | Filter by `external_id`. | +| `external_source` | string | No | Filter by `external_source`. | +| `is_uploaded` | boolean | No | Filter by `is_uploaded`. | +| `offset` | number | No | Number of rows to skip from the start of the result set. | +| `order_by` | string | No | Field to order the list by. Prefix with '-' for descending \(e.g. '-created_at'\). Annotation-backed orders sort semantically and ride the default offset page. | +| `paginate` | string | No | Set to 'cursor' to opt into the COUNT-free keyset cursor envelope \(use for deep traversal\); omit for the default offset envelope with total_count. One of `cursor`. | +| `per_page` | number | No | API v2 only. Page size \(maximum 200\). | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from each row, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400` that names the valid set, so a typo can't silently cost you the saving. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `asset_url`, `attributes`, `content_type`, `created_at`, `created_by_id`, `external_id`, `external_source`, `id`, `is_uploaded`, `name`, `size`, `work_item_id`. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Attachmentsresult | +| ↳ `data` | array | Data | +| ↳ `asset_url` | string | The asset url. | +| ↳ `attributes` | json | View Props | +| ↳ `content_type` | string | The content type. | +| ↳ `created_at` | string | When the record was created. | +| ↳ `created_by_id` | string | The user who created the record. | +| ↳ `external_id` | string | Your system's identifier for this record, for sync and import correlation. | +| ↳ `external_source` | string | The system `external_id` came from, for example `github` or `jira`. | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_uploaded` | boolean | Whether is uploaded. | +| ↳ `name` | string | Display name. | +| ↳ `size` | json | Size | +| ↳ `work_item_id` | string | The related work item. | +| ↳ `next` | number | Next | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `attributes` | json | Attributes | +| ↳ `asset` | string | Asset | +| ↳ `entity_type` | string | Entity type | +| ↳ `entity_identifier` | string | Entity identifier | +| ↳ `is_deleted` | boolean | Is deleted | +| ↳ `is_archived` | boolean | Is archived | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `size` | json | Size | +| ↳ `is_uploaded` | boolean | Is uploaded | +| ↳ `storage_metadata` | json | Storage metadata | +| ↳ `ETag` | string | Asset Id | +| ↳ `Metadata` | json | Progress Snapshot | +| ↳ `ContentType` | string | Asset Id | +| ↳ `LastModified` | string | Asset Id | +| ↳ `ContentLength` | number | Sort Order | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `user` | string | User | +| ↳ `workspace` | string | Workspace | +| ↳ `draft_issue` | string | Draft issue | +| ↳ `project` | string | Project | +| ↳ `issue` | string | Issue | +| ↳ `comment` | string | Comment | +| ↳ `page` | string | Page | +| ↳ `name` | string | Name | +| ↳ `asset_url` | string | Asset url | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | + +### Plane List comments + +List comments in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `work_item_id` | string | Yes | The work item whose comments you want. Comments never span work items, so this narrows the result set by itself. | +| `access` | string | No | Return only comments with this visibility. - `INTERNAL` — visible to the project team - `EXTERNAL` — marked as visible outside the team | +| `external_id` | string | No | Return comments carrying this identifier from your system. `external_id` is not a unique key, so this can match more than one comment — pair it with `external_source` and handle a multi-row result. | +| `external_source` | string | No | Return comments that came from this system, for example `github` or `zendesk`. | +| `search` | string | No | Match comments against their plain-text body \(`comment_stripped`\), so HTML markup in `comment_html` never affects whether a term hits. | +| `order_by` | string | No | Field to sort by. Prefix with `-` for descending. Send it explicitly whenever order matters — a thread you render should not depend on the server's unstated default. - `created_at` — oldest first - `-created_at` — newest first - `id` - `-id` | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `offset` | number | No | Number of rows to skip from the start of the result set. Maximum 10000 — for deeper traversal switch to cursor pagination. | +| `paginate` | string | No | Set to `cursor` to opt into the COUNT-free keyset envelope instead of the default offset envelope. The response then carries `next_cursor` and `has_more`; send the value of `next_cursor` back as `?cursor=` to fetch the next page. See \[Pagination\]\(https://developers.plane.so/api-reference/v2/pagination) for the full envelope. | +| `count` | boolean | No | Defaults to `true`. Set to `false` to skip the `COUNT\(*\)` and omit `total_count` from the offset envelope. | +| `fields` | string | No | Comma-separated list of fields to return on each row. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `access`, `actor_id`, `comment_html`, `comment_stripped`, `created_at`, `created_by_id`, `edited_at`, `external_id`, `external_source`, `id`, `work_item_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `actor` \(the comment author\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Commentsresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the comment. | +| ↳ `work_item_id` | string | The work item this comment is attached to. Always matches the `work_item_id` in the request path. | +| ↳ `comment_html` | string | The comment body, as HTML. This is the field you write. | +| ↳ `comment_stripped` | string | The plain-text version of `comment_html`, derived server-side. It is what `?search=` matches, so markup never affects a search hit. Read-only — you never send it. | +| ↳ `access` | string | Visibility of the comment. One of `INTERNAL` or `EXTERNAL`. `INTERNAL` keeps the comment inside the project team; `EXTERNAL` marks it as visible outside the team, for example on a published project. | +| ↳ `actor_id` | string | Asset Id | +| ↳ `external_id` | string | Asset Id | +| ↳ `external_source` | string | Asset Id | +| ↳ `edited_at` | string | Asset Id | +| ↳ `created_at` | string | When the comment was created. | +| ↳ `created_by_id` | string | Asset Id | +| ↳ `actor` | json | Logo Props | +| ↳ `next` | number | Next | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `is_member` | boolean | Is member | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `comment_stripped` | string | Comment stripped | +| ↳ `comment_html` | string | Comment html | +| ↳ `attachments` | array | Attachments | +| ↳ `access` | string | Access | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `edited_at` | string | Edited at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `actor` | string | Actor | +| ↳ `parent` | string | Parent | +| ↳ `description` | string | Description | +| ↳ `name` | string | Name | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_hidden` | boolean | Is hidden | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `hidden_reason` | json | Hidden reason | +| ↳ `hidden_at` | json | Hidden at | +| ↳ `hidden_by` | json | Hidden by | +| ↳ `source` | json | Source | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List cycles + +List cycles in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project whose cycles you want. | +| `owned_by_id` | string | No | Return only cycles owned by this user. This is how you build a "my cycles" view — pass the authenticated user's id. Ownership is assigned by Plane, so this is a read-side filter only. | +| `external_id` | string | No | Return only cycles whose `external_id` matches exactly. Pair it with `external_source` when the same identifier could come from more than one system. | +| `external_source` | string | No | Return only cycles imported from this source, for example `jira`. | +| `search` | string | No | Free-text search term matched against the cycle. | +| `order_by` | string | No | Field to sort by. Prefix with `-` for descending. - `sort_order` / `-sort_order` — the project's manual cycle ordering - `created_at` / `-created_at` — newest or oldest first - `id` / `-id` | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `offset` | number | No | Number of rows to skip from the start of the result set. Maximum 10000 — past that, switch to cursor pagination. | +| `paginate` | string | No | Set to `cursor` to opt into the COUNT-free keyset envelope instead of the default offset envelope. The response then carries `next_cursor` and `has_more` rather than `next`, `previous`, and `total_count`; pass `next_cursor` back as `cursor` to walk to the following page. Use it for deep traversal, where offset paging gets expensive. | +| `count` | boolean | No | Defaults to `true`. Set to `false` to skip the `COUNT\(*\)` behind `total_count` — the field is then omitted from the envelope. Worth doing when you only need the rows. | +| `fields` | string | No | Comma-separated list of fields to return on each row. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `created_at`, `created_by_id`, `description`, `end_date`, `external_id`, `external_source`, `id`, `logo_props`, `name`, `owned_by_id`, `sort_order`, `start_date`, `timezone`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `owned_by` \(the cycle owner\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | +| `cycle_view` | string | No | v1 compatibility only. Filter cycles by status | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Cyclesresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the cycle. | +| ↳ `name` | string | Display name, unique within the project. Maximum 255 characters. | +| ↳ `description` | string | Free-form description of what the cycle covers. | +| ↳ `start_date` | string | Asset Id | +| ↳ `end_date` | string | Asset Id | +| ↳ `timezone` | string | The IANA time zone the cycle's dates are interpreted in, for example `America/New_York` or `UTC`. This is what makes a cycle boundary land at local midnight rather than UTC midnight for a distributed team. | +| ↳ `owned_by_id` | string | The user who owns the cycle. Read-only — assigned by Plane and not settable through the API. Use it to filter cycles on list. | +| ↳ `sort_order` | json | Sort Order | +| ↳ `logo_props` | json | View Props | +| ↳ `external_id` | string | Asset Id | +| ↳ `external_source` | string | Asset Id | +| ↳ `created_at` | string | When the cycle was created. | +| ↳ `created_by_id` | string | The user who created the cycle. | +| ↳ `owned_by` | json | Logo Props | +| ↳ `next` | number | Next | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `total_estimates` | number | Total estimates | +| ↳ `completed_estimates` | number | Completed estimates | +| ↳ `started_estimates` | number | Started estimates | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `name` | string | Name | +| ↳ `description` | string | Description | +| ↳ `start_date` | string | Start date | +| ↳ `end_date` | string | End date | +| ↳ `view_props` | json | View props | +| ↳ `sort_order` | number | Sort order | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `progress_snapshot` | json | Progress snapshot | +| ↳ `archived_at` | string | Archived at | +| ↳ `logo_props` | json | Logo props | +| ↳ `timezone` | string | Timezone | +| ↳ `version` | json | Version | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `owned_by` | json | Owned by | +| ↳ `id` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `email` | string | Email | +| ↳ `avatar` | string | Asset Id | +| ↳ `avatar_url` | string | Avatar URL | +| ↳ `display_name` | string | Display name | +| ↳ `status` | string | Status | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List labels + +List labels in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project whose labels you want. | +| `parent_id` | string | No | Return only the labels nested under this label. Pair it with `parent_id__isnull=true` to get the opposite view — every top-level label in the project. Use `parent_id__isnull=false` for every label that has a parent. | +| `external_id` | string | No | Return labels whose `external_id` matches. Combine with `external_source` to resolve a record from another system to its Plane label without keeping a local id map. | +| `external_source` | string | No | Return labels that came from this system, for example `github` or `jira`. | +| `search` | string | No | A search term matched against the label `name`. Use it to power type-ahead in a picker rather than downloading every page and filtering client-side. | +| `order_by` | string | No | Field to sort by. Prefix with `-` for descending. Defaults to `sort_order`. - `sort_order` , `-sort_order` — the project's own label ordering - `created_at` , `-created_at` — newest or oldest first - `id` , `-id` A value outside this list is not rejected — it silently falls back to the default `sort_order`. Check your spelling: a typo in `order_by` fails silently and shows up as a differently sorted page, not as an error. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `offset` | number | No | Number of rows to skip from the start of the result set. Maximum 10000. Read the `next` value from the response and send it back as `offset` to walk forward. | +| `paginate` | string | No | Set to `cursor` to switch from the default offset envelope to the keyset cursor envelope, which skips the `COUNT\(*\)` and returns `next_cursor` and `has_more` instead of `next` and `total_count`. Send the returned `next_cursor` back as `cursor` to fetch the following page. Only `created_at` and `id` are cursor-eligible, because a keyset needs a strictly ordered column and `sort_order` is neither unique nor monotonic. Pair `paginate=cursor` with `order_by=created_at` or `order_by=id` — the default `sort_order` ordering is rejected with `400 ordering_not_cursor_eligible`. Most projects have few enough labels that the default offset envelope is all you need. | +| `count` | boolean | No | Defaults to `true`. Set to `false` to omit `total_count` and skip the count query. | +| `fields` | string | No | Comma-separated list of fields to return on each row. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `name`, `parent_id`, `sort_order`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | +| `expand` | string | No | API v1 only. Comma-separated relations: `created_by`, `updated_by`, `workspace`, `project`, `parent`. Expansion replaces each relation ID with an object. Include the relation in `fields` when also requesting sparse fields. | +| `parent_id__isnull` | boolean | No | API v2: true selects top-level labels, false selects labels with a parent. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Labelsresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the label. This is the value you send in a work item's `label_ids`. | +| ↳ `name` | string | Display name, unique within the project. Maximum 255 characters. | +| ↳ `description` | string | Free-form note about what the label is for. Useful when a team needs a convention written down next to the tag. | +| ↳ `color` | string | Hex color used wherever the label is rendered, for example `#e5484d`. | +| ↳ `sort_order` | json | Sort Order | +| ↳ `parent_id` | string | Asset Id | +| ↳ `external_id` | string | Asset Id | +| ↳ `external_source` | string | Asset Id | +| ↳ `created_at` | string | When the label was created. | +| ↳ `created_by_id` | string | Asset Id | +| ↳ `next` | number | Next | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `name` | string | Name | +| ↳ `description` | string | Description | +| ↳ `color` | string | Color | +| ↳ `sort_order` | number | Sort order | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | json | Creator ID or expanded user. | +| ↳ `id` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `email` | string | Email | +| ↳ `avatar` | string | Asset Id | +| ↳ `avatar_url` | string | Avatar URL | +| ↳ `display_name` | string | Display name | +| ↳ `updated_by` | json | Updater ID or expanded user. | +| ↳ `id` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `email` | string | Email | +| ↳ `avatar` | string | Asset Id | +| ↳ `avatar_url` | string | Avatar URL | +| ↳ `display_name` | string | Display name | +| ↳ `workspace` | json | Workspace ID or expanded workspace. | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `slug` | string | Slug | +| ↳ `project` | json | Project ID or expanded project. | +| ↳ `id` | string | Asset Id | +| ↳ `identifier` | string | Identifier | +| ↳ `name` | string | Asset Id | +| ↳ `cover_image` | string | Asset Id | +| ↳ `icon_prop` | json | Logo Props | +| ↳ `emoji` | string | Asset Id | +| ↳ `description` | string | Asset Id | +| ↳ `cover_image_url` | string | Asset Id | +| ↳ `archived_at` | string | Asset Id | +| ↳ `parent` | json | Parent ID or expanded parent reference. | +| ↳ `id` | string | Asset Id | +| ↳ `sequence_id` | number | Sequence ID | +| ↳ `project_id` | string | Asset Id | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List links + +List links in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `count` | boolean | No | Set to false to skip the total_count COUNT\(\*\) \(omits total_count\). | +| `offset` | number | No | Number of rows to skip from the start of the result set. | +| `order_by` | string | No | Field to order the list by. Prefix with '-' for descending \(e.g. '-created_at'\). Annotation-backed orders sort semantically and ride the default offset page. | +| `paginate` | string | No | Set to 'cursor' to opt into the COUNT-free keyset cursor envelope \(use for deep traversal\); omit for the default offset envelope with total_count. One of `cursor`. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `search` | string | No | A search term. | +| `title` | string | No | Filter by `title`. | +| `url` | string | No | Filter by `url`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from each row, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400` that names the valid set, so a typo can't silently cost you the saving. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `created_at`, `created_by_id`, `id`, `metadata`, `title`, `url`, `work_item_id`. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | +| `expand` | string | No | v1 compatibility only. Comma-separated list of related fields to expand in response Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Linksresult | +| ↳ `data` | array | Data | +| ↳ `created_at` | string | When the record was created. | +| ↳ `created_by_id` | string | The user who created the record. | +| ↳ `id` | string | Unique identifier. | +| ↳ `metadata` | json | Metadata | +| ↳ `title` | string | Title. | +| ↳ `url` | string | Target URL. | +| ↳ `work_item_id` | string | The related work item. | +| ↳ `next` | number | Next | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `title` | string | Title | +| ↳ `url` | string | Url | +| ↳ `metadata` | json | Metadata | +| ↳ `url` | string | Asset Id | +| ↳ `title` | string | Asset Id | +| ↳ `favicon` | string | Asset Id | +| ↳ `favicon_url` | json | Logo Props | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `name` | string | Name | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List modules + +List modules in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project whose modules you want. | +| `status` | string | No | Return only modules in this lifecycle position. One of `backlog`, `planned`, `in-progress`, `paused`, `completed`, or `cancelled`. Use `status__in` with a comma-separated list to match several at once, for example `?status__in=planned,in-progress`. | +| `lead_id` | string | No | Return only modules led by this user. Match is exact on the module's `lead_id`. | +| `external_id` | string | No | Return only modules carrying this external identifier. Pair it with `external_source` to resolve a record you imported from another system. | +| `external_source` | string | No | Return only modules that came from this system, for example `github` or `jira`. | +| `search` | string | No | Free-text match on the module name. | +| `order_by` | string | No | Field to sort by. Prefix with `-` for descending. - `sort_order` , `-sort_order` - `created_at` , `-created_at` - `id` , `-id` Defaults to `sort_order`. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `offset` | number | No | Number of rows to skip from the start of the result set. Maximum 10000 — go deeper with cursor pagination. | +| `paginate` | string | No | Set to `cursor` to opt into the COUNT-free keyset envelope, then follow `next_cursor` with `?cursor=`. | +| `count` | boolean | No | Set to `false` to skip the count query and omit `total_count` from the offset envelope. Defaults to `true`. | +| `fields` | string | No | Comma-separated list of fields to return on each row. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `lead_id`, `logo_props`, `member_ids`, `name`, `sort_order`, `start_date`, `status`, `target_date`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `status__in` | string | No | Documented filter variant. Return only modules in this lifecycle position. One of `backlog`, `planned`, `in-progress`, `paused`, `completed`, or `cancelled`. Use `status__in` with a comma-separated list to match several at once, for example `?status__in=planned,in-progress`. | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `lead` \(the module lead\), `members` \(the module members\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Modulesresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the module. | +| ↳ `name` | string | Display name, unique within the project. Maximum 255 characters. | +| ↳ `description` | string | Plain-text summary of what the module covers. | +| ↳ `status` | string | Where the module sits in its lifecycle. One of `backlog`, `planned`, `in-progress`, `paused`, `completed`, or `cancelled`. | +| ↳ `start_date` | string | Asset Id | +| ↳ `target_date` | string | Asset Id | +| ↳ `lead_id` | string | Asset Id | +| ↳ `member_ids` | array | Project members assigned to the module. Read-only in v2 — module membership is not yet writable through the v2 API. | +| ↳ `sort_order` | number | Ordering weight used when modules are listed. Lower values sort first. | +| ↳ `logo_props` | json | View Props | +| ↳ `external_id` | string | Asset Id | +| ↳ `external_source` | string | Asset Id | +| ↳ `archived_at` | string | Asset Id | +| ↳ `created_at` | string | When the module was created. | +| ↳ `created_by_id` | string | The user who created the module. | +| ↳ `lead` | json | Logo Props | +| ↳ `members` | array | Members | +| ↳ `next` | number | Next | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `name` | string | Name | +| ↳ `description` | string | Description | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `status` | string | Status | +| ↳ `view_props` | json | View props | +| ↳ `sort_order` | number | Sort order | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `archived_at` | string | Archived at | +| ↳ `logo_props` | json | Logo props | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `lead` | string | Lead | +| ↳ `members` | array | Members | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List project pages + +List project pages in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `access` | number | No | - `0` - Public - `1` - Private One of `0`, `1`. | +| `collection_id` | string | No | Filter by `collection_id`. | +| `count` | boolean | No | Set to false to skip the total_count COUNT\(\*\) \(omits total_count\). | +| `external_id` | string | No | Filter by `external_id`. | +| `external_source` | string | No | Filter by `external_source`. | +| `is_global` | boolean | No | Filter by `is_global`. | +| `is_locked` | boolean | No | Filter by `is_locked`. | +| `offset` | number | No | Number of rows to skip from the start of the result set. | +| `order_by` | string | No | Field to order the list by. Prefix with '-' for descending \(e.g. '-created_at'\). Annotation-backed orders sort semantically and ride the default offset page. | +| `owned_by_id` | string | No | Filter by `owned_by_id`. | +| `paginate` | string | No | Set to 'cursor' to opt into the COUNT-free keyset cursor envelope \(use for deep traversal\); omit for the default offset envelope with total_count. One of `cursor`. | +| `parent_id` | string | No | Filter by `parent_id`. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `search` | string | No | A search term. | +| `type` | string | No | - `all` - All - `public` - Public - `private` - Private - `shared` - Shared - `archived` - Archived One of `all`, `archived`, `private`, `public`, `shared`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from each row, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400` that names the valid set, so a typo can't silently cost you the saving. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `access`, `archived_at`, `collection_id`, `color`, `created_at`, `created_by_id`, `description_html`, `description_stripped`, `external_id`, `external_source`, `id`, `is_global`, `is_locked`, `logo_props`, `name`, `owned_by_id`, `parent_id`, `sort_order`, `view_props`. | +| `expand` | string | No | Comma-separated relations to embed: `owned_by`, `parent`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Project Pagesresult | +| ↳ `data` | array | Data | +| ↳ `access` | json | Access | +| ↳ `archived_at` | string | Asset Id | +| ↳ `collection_id` | string | The related collection. | +| ↳ `color` | string | Hex color used wherever this is rendered, for example `#3f76ff`. | +| ↳ `created_at` | string | When the record was created. | +| ↳ `created_by_id` | string | The user who created the record. | +| ↳ `description_html` | string | Rich-text body as HTML. This is the field the Plane editor round-trips. | +| ↳ `description_stripped` | string | The description stripped. | +| ↳ `external_id` | string | Your system's identifier for this record, for sync and import correlation. | +| ↳ `external_source` | string | The system `external_id` came from, for example `github` or `jira`. | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_global` | boolean | Whether this lives at the workspace level rather than inside a project. | +| ↳ `is_locked` | boolean | Prevents further edits to the content. | +| ↳ `logo_props` | json | View Props | +| ↳ `name` | string | Display name. | +| ↳ `owned_by_id` | string | The related owned by. | +| ↳ `parent_id` | string | The related parent. | +| ↳ `sort_order` | json | Sort Order | +| ↳ `view_props` | json | View Props | +| ↳ `owned_by` | json | Logo Props | +| ↳ `parent` | json | Logo Props | +| ↳ `next` | number | Next | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `name` | string | Name | +| ↳ `description_stripped` | string | Description stripped | +| ↳ `description_html` | string | Description html | +| ↳ `description_binary` | string | Description binary | +| ↳ `description` | json | Description | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `owned_by` | json | Owned by | +| ↳ `id` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `email` | string | Email | +| ↳ `avatar` | string | Asset Id | +| ↳ `avatar_url` | string | Avatar URL | +| ↳ `display_name` | string | Display name | +| ↳ `anchor` | string | Anchor | +| ↳ `workspace` | string | Workspace | +| ↳ `projects` | array | Projects | +| ↳ `access` | json | Access | +| ↳ `is_locked` | boolean | Is locked | +| ↳ `archived_at` | string | Archived at | +| ↳ `parent_id` | string | Parent id | +| ↳ `parent` | json | Parent page ID or expanded page object in API v1. | +| ↳ `collection_id` | string | Collection id | +| ↳ `page_collection_id` | string | Page collection id | +| ↳ `color` | string | Color | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | json | Updated by | +| ↳ `view_props` | json | View props | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | json | External id | +| ↳ `external_source` | json | External source | +| ↳ `description_json` | object | Description json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `attrs` | object | Attrs | +| ↳ `id` | json | Id | +| ↳ `textAlign` | json | Id | +| ↳ `aiSuggestion` | json | Id | +| ↳ `content` | array | Content | +| ↳ `text` | string | Asset Id | +| ↳ `type` | string | Asset Id | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List projects + +List projects in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `count` | boolean | No | Set to false to skip the total_count COUNT\(\*\) \(omits total_count\). | +| `external_id` | string | No | Filter by `external_id`. | +| `external_source` | string | No | Filter by `external_source`. | +| `identifier` | string | No | Filter by `identifier`. | +| `include_archived` | boolean | No | Filter by `include_archived`. | +| `is_archived` | boolean | No | Filter by `is_archived`. | +| `key` | string | No | Filter by `key`. | +| `name` | string | No | Filter by `name`. | +| `network` | number | No | Filter by `network`. | +| `offset` | number | No | Number of rows to skip from the start of the result set. | +| `order_by` | string | No | Field to order the list by. Prefix with '-' for descending \(e.g. '-created_at'\). Annotation-backed orders sort semantically and ride the default offset page. | +| `paginate` | string | No | Set to 'cursor' to opt into the COUNT-free keyset cursor envelope \(use for deep traversal\); omit for the default offset envelope with total_count. One of `cursor`. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `priority` | string | No | - `none` - None - `low` - Low - `medium` - Medium - `high` - High - `urgent` - Urgent One of `high`, `low`, `medium`, `none`, `urgent`. | +| `priority__in` | json | No | Multiple values may be separated by commas. - `none` - None - `low` - Low - `medium` - Medium - `high` - High - `urgent` - Urgent | +| `search` | string | No | A search term. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from each row, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400` that names the valid set, so a typo can't silently cost you the saving. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `archive_in`, `archived_at`, `close_in`, `cover_image`, `cover_image_url`, `created_at`, `created_by_id`, `cycle_view`, `default_assignee_id`, `default_state_id`, `description`, `emoji`, `estimate_id`, `external_id`, `external_source`, `guest_view_all_features`, `icon_prop`, `id`, `identifier`, `intake_view`, `is_issue_type_enabled`, `is_time_tracking_enabled`, `issue_views_view`, `logo_props`, `module_view`, `name`, `network`, `page_view`, `priority`, `project_lead_id`, `start_date`, `state_id`, `target_date`, `timezone`. | +| `expand` | string | No | Comma-separated relations to embed: `default_assignee`, `project_lead`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Projectsresult | +| ↳ `data` | array | Data | +| ↳ `archive_in` | json | Archive In | +| ↳ `archived_at` | string | Asset Id | +| ↳ `close_in` | json | Close In | +| ↳ `cover_image` | string | URL of the cover image. | +| ↳ `cover_image_url` | string | The cover image url. | +| ↳ `created_at` | string | When the record was created. | +| ↳ `created_by_id` | string | The user who created the record. | +| ↳ `cycle_view` | boolean | Whether cycle view. | +| ↳ `default_assignee_id` | string | The related default assignee. | +| ↳ `default_state_id` | string | The related default state. | +| ↳ `description` | string | Free-form description. | +| ↳ `emoji` | string | Emoji shown alongside the name. | +| ↳ `estimate_id` | string | The related estimate. | +| ↳ `external_id` | string | Your system's identifier for this record, for sync and import correlation. | +| ↳ `external_source` | string | The system `external_id` came from, for example `github` or `jira`. | +| ↳ `guest_view_all_features` | boolean | Whether guest view all features. | +| ↳ `icon_prop` | json | Icon Prop | +| ↳ `id` | string | Unique identifier. | +| ↳ `identifier` | string | Short project key used to prefix work item numbers, for example `ENG` in `ENG-142`. | +| ↳ `intake_view` | boolean | Whether intake view. | +| ↳ `is_issue_type_enabled` | boolean | Whether is issue type enabled. | +| ↳ `is_time_tracking_enabled` | boolean | Whether is time tracking enabled. | +| ↳ `issue_views_view` | boolean | Whether issue views view. | +| ↳ `logo_props` | json | View Props | +| ↳ `module_view` | boolean | Whether module view. | +| ↳ `name` | string | Display name. | +| ↳ `network` | json | Network | +| ↳ `page_view` | boolean | Whether page view. | +| ↳ `priority` | string | Urgency of the work item. | +| ↳ `project_lead_id` | string | The related project lead. | +| ↳ `start_date` | string | Planned start date, as `YYYY-MM-DD`. | +| ↳ `state_id` | string | The related state. | +| ↳ `target_date` | string | Planned due date, as `YYYY-MM-DD`. | +| ↳ `timezone` | string | IANA timezone name, for example `America/New_York`. | +| ↳ `default_assignee` | json | Logo Props | +| ↳ `project_lead` | json | Logo Props | +| ↳ `next` | number | Next | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `total_members` | json | Total members | +| ↳ `total_cycles` | json | Total cycles | +| ↳ `total_modules` | json | Total modules | +| ↳ `is_member` | boolean | Is member | +| ↳ `sort_order` | number | Sort order | +| ↳ `member_role` | json | Member role | +| ↳ `is_deployed` | boolean | Is deployed | +| ↳ `cover_image_url` | string | Cover image url | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `name` | string | Name | +| ↳ `description` | string | Description | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `network` | json | Network | +| ↳ `identifier` | string | Identifier | +| ↳ `emoji` | string | Emoji | +| ↳ `icon_prop` | json | Icon prop | +| ↳ `module_view` | boolean | Module view | +| ↳ `cycle_view` | boolean | Cycle view | +| ↳ `issue_views_view` | boolean | Issue views view | +| ↳ `page_view` | boolean | Page view | +| ↳ `intake_view` | boolean | Intake view | +| ↳ `is_time_tracking_enabled` | boolean | Is time tracking enabled | +| ↳ `is_issue_type_enabled` | boolean | Is issue type enabled | +| ↳ `guest_view_all_features` | boolean | Guest view all features | +| ↳ `cover_image` | string | Cover image | +| ↳ `archive_in` | json | Archive in | +| ↳ `close_in` | json | Close in | +| ↳ `logo_props` | json | Logo props | +| ↳ `archived_at` | string | Archived at | +| ↳ `timezone` | string | Timezone | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `default_assignee` | string | Default assignee | +| ↳ `project_lead` | string | Project lead | +| ↳ `cover_image_asset` | string | Cover image asset | +| ↳ `estimate` | string | Estimate | +| ↳ `default_state` | string | Default state | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `priority` | string | Priority | +| ↳ `start_date` | json | Start date | +| ↳ `target_date` | json | Target date | +| ↳ `is_voting_enabled` | boolean | Is voting enabled | +| ↳ `auto_reminder_days` | number | Auto reminder days | +| ↳ `state` | string | State | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List states + +List states in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project whose states you want to list. | +| `group` | string | No | Return only states in this workflow group. One of `backlog`, `unstarted`, `started`, `completed`, `cancelled`, or `triage`. Use the `group__in` variant to match several groups at once, passing them comma-separated — `?group__in=started,completed`. Filtering by group is the portable way to ask "what counts as in progress here", because every project names its states differently but the groups are fixed. | +| `is_default` | boolean | No | Return only the project's default state \(`true`\) or only the non-default states \(`false`\). Pairing `?is_default=true` with `?per_page=1` is the cheapest way to find where new work items will land. | +| `external_id` | string | No | Return states whose `external_id` matches exactly. Use it to find the state you previously created for a record in another system. | +| `external_source` | string | No | Return states that came from a particular system, for example `github` or `jira`. Combine it with `external_id` — an `external_id` is only unique within its source. | +| `search` | string | No | A search term matched against the state name. | +| `fields` | string | No | Comma-separated list of fields to return on each row. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `group`, `id`, `is_default`, `is_triage`, `name`, `sequence`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `group__in` | string | No | Documented filter variant. Return only states in this workflow group. One of `backlog`, `unstarted`, `started`, `completed`, `cancelled`, or `triage`. Use the `group__in` variant to match several groups at once, passing them comma-separated — `?group__in=started,completed`. Filtering by group is the portable way to ask "what counts as in progress here", because every project names its states differently but the groups are fixed. | +| `order_by` | string | No | Field to sort by. Prefix with `-` for descending. - `sequence` , `-sequence` — the project's own workflow order - `created_at` , `-created_at` — when each state was added - `id` , `-id` Order by `sequence` when you are rendering the workflow to a user; it is the order the project itself uses. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `offset` | number | No | Number of rows to skip from the start of the result set. Maximum 10000. Read the `next` value from the response rather than computing offsets yourself. | +| `paginate` | string | No | Set to `cursor` to opt into the COUNT-free keyset envelope, which returns `next_cursor` and `has_more` instead of `next` and `total_count`. Omit it for the default offset envelope. | +| `count` | boolean | No | Defaults to `true`. Set to `false` to skip the `COUNT\(*\)` behind `total_count`; the field is then omitted from the response. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | +| `expand` | string | No | v1 compatibility only. Comma-separated list of related fields to expand in response Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Statesresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the state. | +| ↳ `name` | string | Display name, unique within the project. Maximum 255 characters. | +| ↳ `description` | string | Free-form description of what the state means in this workflow. | +| ↳ `color` | string | Hex color used wherever the state is rendered, for example `#3f76ff`. | +| ↳ `group` | string | The workflow group this state belongs to. One of `backlog`, `unstarted`, `started`, `completed`, `cancelled`, or `triage`. | +| ↳ `sequence` | json | Sequence | +| ↳ `is_default` | boolean | Whether new work items land in this state when no `state_id` is supplied. Exactly one state per project is the default. | +| ↳ `is_triage` | boolean | Whether this is the project's triage state, used by intake. Read-only — a triage state is created and managed by Plane. | +| ↳ `external_id` | string | Asset Id | +| ↳ `external_source` | string | Asset Id | +| ↳ `created_at` | string | When the state was created. | +| ↳ `created_by_id` | string | The user who created the state. | +| ↳ `next` | number | Next | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `name` | string | Name | +| ↳ `description` | string | Description | +| ↳ `color` | string | Color | +| ↳ `sequence` | number | Sequence | +| ↳ `group` | string | Group | +| ↳ `is_triage` | boolean | Is triage | +| ↳ `default` | boolean | Default | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `slug` | string | Slug | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List webhooks + +List webhooks in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `count` | boolean | No | Set to false to skip the total_count COUNT\(\*\) \(omits total_count\). | +| `is_active` | boolean | No | Filter by `is_active`. | +| `name` | string | No | Filter by `name`. | +| `offset` | number | No | Number of rows to skip from the start of the result set. | +| `order_by` | string | No | Field to order the list by. Prefix with '-' for descending \(e.g. '-created_at'\). Annotation-backed orders sort semantically and ride the default offset page. | +| `paginate` | string | No | Set to 'cursor' to opt into the COUNT-free keyset cursor envelope \(use for deep traversal\); omit for the default offset envelope with total_count. One of `cursor`. | +| `per_page` | number | No | Page size \(max 200\). | +| `search` | string | No | A search term. | +| `url` | string | No | Filter by `url`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from each row, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400` that names the valid set, so a typo can't silently cost you the saving. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `content_type`, `created_at`, `created_by_id`, `id`, `is_active`, `name`, `scopes`, `url`, `version`. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Webhooksresult | +| ↳ `data` | array | Data | +| ↳ `content_type` | string | The content type. | +| ↳ `created_at` | string | When the record was created. | +| ↳ `created_by_id` | string | The user who created the record. | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_active` | boolean | Whether the record is active. | +| ↳ `name` | string | Display name. | +| ↳ `scopes` | array | The scopes. | +| ↳ `url` | string | Target URL. | +| ↳ `version` | string | Version string, for example `1.4.0`. | +| ↳ `next` | number | Next | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | + +### Plane List work items + +List work items in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project to list work items from. | +| `fields` | string | No | Comma-separated list of fields to return on each row. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. Naming `custom_fields` here is a `400` — it is only available on single-object responses. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `state_id` | string | No | Match work items in a specific state. Use `state_id__in` with a comma-separated list to match any of several states. | +| `state_id__in` | string | No | Documented filter variant. Match work items in a specific state. Use `state_id__in` with a comma-separated list to match any of several states. | +| `state_group` | string | No | Match by the state's workflow group instead of a specific state — stable across projects that name their states differently. One of `backlog`, `unstarted`, `started`, `completed`, `cancelled`, `triage`. Use `state_group__in` for several groups, for example `?state_group__in=started,completed`. | +| `state_group__in` | string | No | Documented filter variant. Match by the state's workflow group instead of a specific state — stable across projects that name their states differently. One of `backlog`, `unstarted`, `started`, `completed`, `cancelled`, `triage`. Use `state_group__in` for several groups, for example `?state_group__in=started,completed`. | +| `priority` | string | No | One of `urgent`, `high`, `medium`, `low`, `none`. Use `priority__in` for several, for example `?priority__in=urgent,high`. | +| `priority__in` | string | No | Documented filter variant. One of `urgent`, `high`, `medium`, `low`, `none`. Use `priority__in` for several, for example `?priority__in=urgent,high`. | +| `assignee_id` | string | No | Match work items assigned to a user. `assignee_id__in` matches any of several users; `assignee_id__isnull=true` returns only unassigned work items. | +| `assignee_id__in` | string | No | Documented filter variant. Match work items assigned to a user. `assignee_id__in` matches any of several users; `assignee_id__isnull=true` returns only unassigned work items. | +| `label_id` | string | No | Match work items carrying a label. `label_id__in` matches any of several labels; `label_id__isnull=true` returns only unlabeled work items. | +| `label_id__in` | string | No | Documented filter variant. Match work items carrying a label. `label_id__in` matches any of several labels; `label_id__isnull=true` returns only unlabeled work items. | +| `type_id` | string | No | Match work items of a given work item type. `type_id__in` accepts a comma-separated list. | +| `type_id__in` | string | No | Documented filter variant. Match work items of a given work item type. `type_id__in` accepts a comma-separated list. | +| `parent_id` | string | No | Match the children of a work item. `parent_id__in` accepts several parents; `parent_id__isnull=true` returns only top-level work items. | +| `parent_id__in` | string | No | Documented filter variant. Match the children of a work item. `parent_id__in` accepts several parents; `parent_id__isnull=true` returns only top-level work items. | +| `cycle_id` | string | No | Match work items in a cycle. `cycle_id__in` accepts several cycles; `cycle_id__isnull=true` returns the backlog of work items in no cycle at all. | +| `cycle_id__in` | string | No | Documented filter variant. Match work items in a cycle. `cycle_id__in` accepts several cycles; `cycle_id__isnull=true` returns the backlog of work items in no cycle at all. | +| `module_id` | string | No | Match work items in a module. `module_id__in` accepts several modules; `module_id__isnull=true` returns work items in no module. | +| `module_id__in` | string | No | Documented filter variant. Match work items in a module. `module_id__in` accepts several modules; `module_id__isnull=true` returns work items in no module. | +| `sequence_id` | number | No | Match the single work item with this number within the project — the `142` of `PROJ-142`. | +| `is_draft` | boolean | No | Filter drafts in or out. Drafts are work items still being composed in the Plane app. | +| `external_id` | string | No | Correlation filters for sync and import. `external_source` is the system a record came from and `external_id` is its key there, so the pair is how you find the Plane work item that mirrors a row in your own database. These values are not returned on reads — the lookup is one-way. | +| `external_source` | string | No | Correlation filters for sync and import. `external_source` is the system a record came from and `external_id` is its key there, so the pair is how you find the Plane work item that mirrors a row in your own database. These values are not returned on reads — the lookup is one-way. | +| `created_at__gte` | string | No | Bound the creation timestamp. Pass an ISO 8601 datetime, for example `2026-01-01T00:00:00Z`. Use both for a window. | +| `created_at__lte` | string | No | Bound the creation timestamp. Pass an ISO 8601 datetime, for example `2026-01-01T00:00:00Z`. Use both for a window. | +| `updated_at__gte` | string | No | Bound the last-modified timestamp. This is the pair to use for incremental sync — poll with `?updated_at__gte=&order_by=updated_at`. `updated_at` is filterable and orderable but is not part of the read shape, so it does not come back in the response body. | +| `updated_at__lte` | string | No | Bound the last-modified timestamp. This is the pair to use for incremental sync — poll with `?updated_at__gte=&order_by=updated_at`. `updated_at` is filterable and orderable but is not part of the read shape, so it does not come back in the response body. | +| `start_date__gte` | string | No | Bound the planned start date, for example `2026-01-01`. | +| `start_date__lte` | string | No | Bound the planned start date, for example `2026-01-01`. | +| `target_date__gte` | string | No | Bound the planned due date. `?target_date__lte=2026-01-31&state_group__in=backlog,unstarted,started` is the "what is about to slip" query. | +| `target_date__lte` | string | No | Bound the planned due date. `?target_date__lte=2026-01-31&state_group__in=backlog,unstarted,started` is the "what is about to slip" query. | +| `search` | string | No | Free-text search over the work item name. | +| `order_by` | string | No | Field to sort by. Prefix with `-` for descending. Defaults to `-created_at`. - `created_at`, `-created_at` - `updated_at`, `-updated_at` - `sequence_id`, `-sequence_id` - `id`, `-id` - `sort_order`, `-sort_order` — the manual board ordering - `priority`, `-priority` — semantic: `urgent` → `high` → `medium` → `low` → `none`, not alphabetical - `state_group`, `-state_group` — semantic: workflow order, not alphabetical `priority` and `state_group` sort by meaning, which is what you want for a board but is not cursor-eligible. Pair either with `?paginate=cursor` and you get `400 ordering_not_cursor_eligible`; use the default offset pages instead. | +| `per_page` | number | No | Page size. Maximum 200 for API v2 and 100 for API v1. | +| `offset` | number | No | Rows to skip from the start of the result set. Maximum 10000 — past that, switch to cursor pagination. | +| `count` | boolean | No | Defaults to `true`. Pass `?count=false` to skip the `COUNT\(*\)` and omit `total_count` from the envelope. Worth doing on large projects when you only need the rows. | +| `paginate` | string | No | Set to `cursor` to opt into keyset pagination. The envelope changes to `next_cursor` / `has_more` and drops `total_count`. Use it for deep or long-running traversals where offset pages would drift as rows are inserted. Follow the returned `next_cursor` as described in \[Pagination\]\(https://developers.plane.so/api-reference/v2/pagination). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | +| `pql` | string | No | v1 compatibility only. Plane Query Language expression. Human-readable alternative to `filters`. Example: `priority = "urgent" AND assignee = currentUser\(\)`. Requires a Plane edition with work item query filtering; Community Edition rejects this parameter. | +| `filters` | json | No | v1 compatibility only. Structured filter expression. Supports nested `and`/`or`/`not` groups and field comparisons with operators like `__in`, `__gte`, `__range`, `__isnull`, `__icontains`, etc. JSON-encoded into the `filters=` query param by the client. Requires a Plane edition with work item query filtering; Community Edition rejects this parameter. | +| `assignee_id__isnull` | boolean | No | API v2: select records with a missing assignee when true, or a present assignee when false. | +| `label_id__isnull` | boolean | No | API v2: select records with a missing label when true, or a present label when false. | +| `parent_id__isnull` | boolean | No | API v2: select records with a missing parent when true, or a present parent when false. | +| `cycle_id__isnull` | boolean | No | API v2: select records with a missing cycle when true, or a present cycle when false. | +| `module_id__isnull` | boolean | No | API v2: select records with a missing module when true, or a present module when false. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Work Itemsresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the work item. This is the `\{pk\}` on every project-scoped detail route. | +| ↳ `name` | string | Title of the work item. Maximum 255 characters. | +| ↳ `identifier` | string | The human key, for example `PROJ-142`. It is the project's identifier joined to `sequence_id`, and it is what people paste into chat and commit messages. Use it with \[Get a work item by identifier\]\(https://developers.plane.so/api-reference/v2/work-items/get-work-item-by-identifier) when you don't have the project UUID. | +| ↳ `sequence_id` | json | Sequence Id | +| ↳ `priority` | string | One of `urgent`, `high`, `medium`, `low`, or `none`. Never null — an unprioritized work item reads `none`. | +| ↳ `state_id` | string | The workflow state the work item is currently in. | +| ↳ `type_id` | string | Asset Id | +| ↳ `assignee_ids` | array | User ids assigned to the work item. Empty array when unassigned. | +| ↳ `label_ids` | array | Label ids applied to the work item. Empty array when unlabeled. | +| ↳ `parent_id` | string | Asset Id | +| ↳ `start_date` | string | Asset Id | +| ↳ `target_date` | string | Asset Id | +| ↳ `is_draft` | boolean | Whether the work item is still a draft. Drafts are created in the Plane app and are excluded from most boards. | +| ↳ `archived_at` | string | Asset Id | +| ↳ `created_at` | string | When the work item was created. | +| ↳ `created_by_id` | string | Asset Id | +| ↳ `custom_fields` | json | View Props | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `cycle` | json | Logo Props | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `modules` | array | Members | +| ↳ `parent` | object | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | object | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Asset Id | +| ↳ `type` | object | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `project_id` | string | Asset Id | +| ↳ `cycle_id` | string | Asset Id | +| ↳ `module_ids` | array | Module Ids | +| ↳ `next` | json | Next | +| ↳ `previous` | json | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `type_id` | string | Type id | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `point` | number | Point | +| ↳ `name` | string | Name | +| ↳ `description_html` | string | Description html | +| ↳ `description_stripped` | string | Description stripped | +| ↳ `description_binary` | string | Description binary | +| ↳ `priority` | string | Priority | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `sequence_id` | json | Sequence id | +| ↳ `sort_order` | number | Sort order | +| ↳ `completed_at` | string | Completed at | +| ↳ `archived_at` | string | Archived at | +| ↳ `is_draft` | boolean | Is draft | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | json | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `parent` | string | Parent | +| ↳ `state` | json | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Group | +| ↳ `estimate_point` | string | Estimate point | +| ↳ `type` | json | Type | +| ↳ `description` | string | Description | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `avatar` | string | Asset Id | +| ↳ `avatar_url` | json | Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `deleted_by` | json | Id | +| ↳ `created_at` | string | Asset Id | +| ↳ `updated_at` | string | Asset Id | +| ↳ `deleted_at` | json | Id | +| ↳ `name` | string | Asset Id | +| ↳ `description` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `sort_order` | number | Sort Order | +| ↳ `external_source` | json | Id | +| ↳ `external_id` | json | Id | +| ↳ `created_by` | string | Asset Id | +| ↳ `updated_by` | json | Id | +| ↳ `workspace` | string | Asset Id | +| ↳ `project` | string | Asset Id | +| ↳ `parent` | json | Id | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `last_activity_at` | string | Last activity at | +| ↳ `min_assignee_first_name` | string | Min assignee first name | +| ↳ `min_label_name` | string | Min label name | +| ↳ `min_module_name` | string | Min module name | +| ↳ `priority_rank` | number | Priority rank | +| ↳ `state_group` | string | State group | +| `detail` | string | Provider message when no records are returned. | +| `pagination` | object | Cursor pagination information. Bare-array responses have empty pagination. | +| ↳ `next_cursor` | string | Cursor for the next page. | +| ↳ `prev_cursor` | string | Cursor for the previous page. | +| ↳ `next_page_results` | boolean | Whether a next page exists. | +| ↳ `prev_page_results` | boolean | Whether a previous page exists. | +| ↳ `count` | number | Records on this page. | +| ↳ `total_pages` | number | Total pages. | +| ↳ `total_results` | number | Total records. | +| ↳ `total_count` | number | Total records when supplied by this endpoint. | +| ↳ `extra_stats` | json | Endpoint-specific aggregate statistics. | +| ↳ `grouped_by` | string | Grouping field. | +| ↳ `sub_grouped_by` | string | Secondary grouping field. | +| ↳ `total_groups` | number | Total primary groups. | +| ↳ `next_group_offset` | number | Next primary group offset. | +| ↳ `sub_total_groups` | number | Total secondary groups. | +| ↳ `sub_next_group_offset` | number | Next secondary group offset. | + +### Plane List work items across a workspace + +List work items across a workspace in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `assignee_id` | string | No | Filter by `assignee_id`. | +| `assignee_id__in` | json | No | Multiple values may be separated by commas. | +| `assignee_id__isnull` | boolean | No | Filter by `assignee_id__isnull`. | +| `count` | boolean | No | Set to false to skip the total_count COUNT\(\*\) \(omits total_count\). | +| `created_at__gte` | string | No | Filter by `created_at__gte`. | +| `created_at__lte` | string | No | Filter by `created_at__lte`. | +| `cycle_id` | string | No | Filter by `cycle_id`. | +| `cycle_id__in` | json | No | Multiple values may be separated by commas. | +| `cycle_id__isnull` | boolean | No | Filter by `cycle_id__isnull`. | +| `external_id` | string | No | Filter by `external_id`. | +| `external_source` | string | No | Filter by `external_source`. | +| `is_draft` | boolean | No | Filter by `is_draft`. | +| `label_id` | string | No | Filter by `label_id`. | +| `label_id__in` | json | No | Multiple values may be separated by commas. | +| `label_id__isnull` | boolean | No | Filter by `label_id__isnull`. | +| `module_id` | string | No | Filter by `module_id`. | +| `module_id__in` | json | No | Multiple values may be separated by commas. | +| `module_id__isnull` | boolean | No | Filter by `module_id__isnull`. | +| `offset` | number | No | Number of rows to skip from the start of the result set. | +| `order_by` | string | No | Field to order the list by. Prefix with '-' for descending \(e.g. '-created_at'\). Annotation-backed orders sort semantically and ride the default offset page. | +| `paginate` | string | No | Set to 'cursor' to opt into the COUNT-free keyset cursor envelope \(use for deep traversal\); omit for the default offset envelope with total_count. One of `cursor`. | +| `parent_id` | string | No | Filter by `parent_id`. | +| `parent_id__in` | json | No | Multiple values may be separated by commas. | +| `parent_id__isnull` | boolean | No | Filter by `parent_id__isnull`. | +| `per_page` | number | No | Page size \(max 200\). | +| `priority` | string | No | - `urgent` - Urgent - `high` - High - `medium` - Medium - `low` - Low - `none` - None One of `high`, `low`, `medium`, `none`, `urgent`. | +| `priority__in` | json | No | Multiple values may be separated by commas. - `urgent` - Urgent - `high` - High - `medium` - Medium - `low` - Low - `none` - None | +| `project_id` | string | No | Filter by `project_id`. | +| `project_id__in` | json | No | Multiple values may be separated by commas. | +| `search` | string | No | A search term. | +| `sequence_id` | number | No | Filter by `sequence_id`. | +| `start_date__gte` | string | No | Filter by `start_date__gte`. | +| `start_date__lte` | string | No | Filter by `start_date__lte`. | +| `state_group` | string | No | - `backlog` - Backlog - `unstarted` - Unstarted - `started` - Started - `completed` - Completed - `cancelled` - Cancelled - `triage` - Triage One of `backlog`, `cancelled`, `completed`, `started`, `triage`, `unstarted`. | +| `state_group__in` | json | No | Multiple values may be separated by commas. - `backlog` - Backlog - `unstarted` - Unstarted - `started` - Started - `completed` - Completed - `cancelled` - Cancelled - `triage` - Triage | +| `state_id` | string | No | Filter by `state_id`. | +| `state_id__in` | json | No | Multiple values may be separated by commas. | +| `target_date__gte` | string | No | Filter by `target_date__gte`. | +| `target_date__lte` | string | No | Filter by `target_date__lte`. | +| `type_id` | string | No | Filter by `type_id`. | +| `type_id__in` | json | No | Multiple values may be separated by commas. | +| `updated_at__gte` | string | No | Filter by `updated_at__gte`. | +| `updated_at__lte` | string | No | Filter by `updated_at__lte`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from each row, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400` that names the valid set, so a typo can't silently cost you the saving. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. | +| `expand` | string | No | Comma-separated relations to embed: `assignees`, `cycle`, `labels`, `modules`, `parent`, `state`, `type`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `cursor` | string | No | Cursor from next_cursor. Repeat the original filters, per_page, and order_by when following it. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 List Workspace Work Itemsresult | +| ↳ `data` | array | Data | +| ↳ `id` | string | Unique identifier for the work item. This is the `\{pk\}` on every project-scoped detail route. | +| ↳ `name` | string | Title of the work item. Maximum 255 characters. | +| ↳ `identifier` | string | The human key, for example `PROJ-142`. It is the project's identifier joined to `sequence_id`, and it is what people paste into chat and commit messages. Use it with \[Get a work item by identifier\]\(https://developers.plane.so/api-reference/v2/work-items/get-work-item-by-identifier) when you don't have the project UUID. | +| ↳ `sequence_id` | json | Sequence Id | +| ↳ `priority` | string | One of `urgent`, `high`, `medium`, `low`, or `none`. Never null — an unprioritized work item reads `none`. | +| ↳ `state_id` | string | The workflow state the work item is currently in. | +| ↳ `type_id` | string | Asset Id | +| ↳ `assignee_ids` | array | User ids assigned to the work item. Empty array when unassigned. | +| ↳ `label_ids` | array | Label ids applied to the work item. Empty array when unlabeled. | +| ↳ `parent_id` | string | Asset Id | +| ↳ `start_date` | string | Asset Id | +| ↳ `target_date` | string | Asset Id | +| ↳ `is_draft` | boolean | Whether the work item is still a draft. Drafts are created in the Plane app and are excluded from most boards. | +| ↳ `archived_at` | string | Asset Id | +| ↳ `created_at` | string | When the work item was created. | +| ↳ `created_by_id` | string | Asset Id | +| ↳ `custom_fields` | json | View Props | +| ↳ `cycle_id` | string | Asset Id | +| ↳ `module_ids` | array | Module Ids | +| ↳ `project_id` | string | Asset Id | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `cycle` | json | Logo Props | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `modules` | array | Members | +| ↳ `parent` | object | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | object | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Asset Id | +| ↳ `type` | object | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `next` | number | Next | +| ↳ `pagination` | object | Pagination | +| ↳ `style` | string | Style | +| ↳ `previous` | number | Previous | +| ↳ `total_count` | number | Total count | +| ↳ `next_cursor` | string | Next cursor | +| ↳ `has_more` | boolean | Has more | + +### Plane Add or remove cycle work items + +Add or remove cycle work items in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `pk` | string | Yes | The cycle work item id. | +| `add` | json | No | The add. | +| `remove` | json | No | The remove. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 Manage Cycle Work Itemsresult | +| ↳ `added` | array | Added | +| ↳ `removed` | array | Removed | +| `success` | boolean | v1 removal completed successfully. | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `sub_issues_count` | json | Sub issues count | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `cycle` | string | Cycle | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | + +### Plane Add or remove module work items + +Add or remove module work items in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `pk` | string | Yes | The module work item id. | +| `add` | json | No | The add. | +| `remove` | json | No | The remove. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 Manage Module Work Itemsresult | +| ↳ `added` | array | Added | +| ↳ `removed` | array | Removed | +| `success` | boolean | v1 removal completed successfully. | +| `results` | array | Returned Plane records. | +| ↳ `id` | string | Id | +| ↳ `sub_issues_count` | json | Sub issues count | +| ↳ `created_at` | string | Created at | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `module` | string | Module | +| ↳ `issue` | json | Issue | +| ↳ `id` | string | Asset Id | +| ↳ `cycle` | json | Logo Props | +| ↳ `module` | object | Lite module information. | +| ↳ `id` | string | Asset Id | +| ↳ `created_at` | string | Asset Id | +| ↳ `updated_at` | string | Asset Id | +| ↳ `deleted_at` | string | Asset Id | +| ↳ `name` | string | Name | +| ↳ `description` | string | Asset Id | +| ↳ `description_text` | json | Logo Props | +| ↳ `description_html` | json | Logo Props | +| ↳ `start_date` | string | Asset Id | +| ↳ `target_date` | string | Asset Id | +| ↳ `status` | string | Status | +| ↳ `view_props` | json | Logo Props | +| ↳ `sort_order` | number | Sort Order | +| ↳ `external_source` | string | Asset Id | +| ↳ `external_id` | string | Asset Id | +| ↳ `archived_at` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `created_by` | string | Asset Id | +| ↳ `updated_by` | string | Asset Id | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `lead` | string | Asset Id | +| ↳ `members` | array | Default Value | +| ↳ `labels` | json | Labels | +| ↳ `assignees` | json | Assignees | +| ↳ `state` | object | Lite state information. | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Group | +| ↳ `created_at` | string | Asset Id | +| ↳ `updated_at` | string | Asset Id | +| ↳ `deleted_at` | string | Asset Id | +| ↳ `point` | number | Access | +| ↳ `name` | string | Asset Id | +| ↳ `description` | json | Logo Props | +| ↳ `description_html` | string | Asset Id | +| ↳ `description_stripped` | string | Asset Id | +| ↳ `description_binary` | string | Asset Id | +| ↳ `priority` | string | Priority | +| ↳ `start_date` | string | Asset Id | +| ↳ `target_date` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `sort_order` | number | Sort Order | +| ↳ `completed_at` | string | Asset Id | +| ↳ `archived_at` | string | Asset Id | +| ↳ `is_draft` | boolean | Has Pages | +| ↳ `external_source` | string | Asset Id | +| ↳ `external_id` | string | Asset Id | +| ↳ `created_by` | string | Asset Id | +| ↳ `updated_by` | string | Asset Id | +| ↳ `project` | json | Project | +| ↳ `workspace` | string | Asset Id | +| ↳ `parent` | string | Asset Id | +| ↳ `estimate_point` | string | Asset Id | +| ↳ `type` | json | Type | +| ↳ `deleted_by` | json | Deleted by | +| `detail` | string | Provider message when no records are returned. | + +### Plane Regenerate a webhook secret + +Regenerate a webhook secret in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The webhook id. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `content_type`, `created_at`, `created_by_id`, `id`, `is_active`, `name`, `scopes`, `secret_key`, `url`, `version`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 Regenerate Webhook Secretresult | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | string | Id | +| ↳ `is_active` | boolean | Is active | +| ↳ `name` | string | Name | +| ↳ `scopes` | array | Scopes | +| ↳ `secret_key` | string | Secret key | +| ↳ `url` | string | Url | +| ↳ `version` | string | Version | + +### Plane Transfer work items between cycles + +Transfer work items between cycles in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `pk` | string | Yes | Source cycle ID. The source cycle must be completed. | +| `new_cycle_id` | string | Yes | Id of the related new cycle. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 V2 Transfer Cycle Work Itemsresult | +| ↳ `new_cycle_id` | string | New cycle id | +| ↳ `message` | string | Message | + +### Plane Unarchive a project + +Unarchive a project in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The project id. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `success` | boolean | Operation completed successfully. | + +### Plane Unarchive a work item + +Unarchive a work item in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `pk` | string | Yes | The work item's UUID. This lookup is UUID-only — a `PROJ-142` identifier here returns `404`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `custom_fields`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Items | +| ↳ `id` | string | Unique identifier for the work item. This is the `\{pk\}` on every project-scoped detail route. | +| ↳ `name` | string | Name | +| ↳ `identifier` | string | Identifier | +| ↳ `sequence_id` | json | Sequence id | +| ↳ `priority` | string | Priority | +| ↳ `state_id` | string | State id | +| ↳ `type_id` | string | Type id | +| ↳ `assignee_ids` | array | Assignee ids | +| ↳ `label_ids` | array | Label ids | +| ↳ `parent_id` | string | Parent id | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `is_draft` | boolean | Is draft | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `custom_fields` | json | Custom fields | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `cycle` | json | Cycle | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `modules` | array | Modules | +| ↳ `parent` | object | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | object | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | string | Asset Id | +| ↳ `type` | object | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `module_ids` | array | Module ids | +| ↳ `project_id` | string | Project id | + +### Plane Update a comment + +Update a comment in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `work_item_id` | string | Yes | The work item the comment is attached to. | +| `pk` | string | Yes | The comment to update. | +| `comment_html` | string | No | Replacement body for the comment, as HTML. It overwrites the previous body — there is no append mode, so send the full new text. | +| `access` | string | No | Change the comment's visibility. - `INTERNAL` — visible to the project team - `EXTERNAL` — marked as visible outside the team, for example on a published project | +| `external_id` | string | No | Your system's identifier for this comment. Maximum 255 characters. Accepts `null` to clear the correlation. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `zendesk`. Maximum 255 characters. Accepts `null`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `access`, `actor_id`, `comment_html`, `comment_stripped`, `created_at`, `created_by_id`, `edited_at`, `external_id`, `external_source`, `id`, `work_item_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `actor` \(the comment author\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `comment_json` | json | No | v1 compatibility only. Comment json. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Comments | +| ↳ `id` | json | Id | +| ↳ `work_item_id` | string | Work item id | +| ↳ `comment_html` | json | Comment html | +| ↳ `comment_stripped` | json | Comment stripped | +| ↳ `access` | json | Access | +| ↳ `actor_id` | string | Actor id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `edited_at` | string | Edited at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `actor` | json | Actor | +| ↳ `is_member` | boolean | Is member | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `attachments` | array | Attachments | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `parent` | string | Parent | +| ↳ `description` | string | Description | +| ↳ `comment_json` | object | Comment json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `text` | string | Asset Id | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_hidden` | boolean | Is hidden | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `hidden_reason` | json | Hidden reason | +| ↳ `hidden_at` | json | Hidden at | +| ↳ `hidden_by` | json | Hidden by | +| ↳ `source` | json | Source | + +### Plane Update a cycle + +Update a cycle in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the cycle belongs to. | +| `pk` | string | Yes | The cycle to update. | +| `name` | string | No | New display name, unique within the project. Maximum 255 characters. Renaming onto a name another cycle already holds returns `409 conflict`. | +| `description` | string | No | Free-form description of what the cycle covers. | +| `start_date` | string | No | New opening date-time, in ISO 8601. Send `null` to unschedule the start. | +| `end_date` | string | No | New closing date-time, in ISO 8601. Send `null` to unschedule the end. | +| `timezone` | string | No | The IANA time zone the cycle's dates are interpreted in, for example `America/New_York` or `UTC`. Changing it re-anchors where the existing boundaries fall locally, so send it together with the dates when you are moving a cycle between regions. Any value outside the IANA list is rejected with `400 invalid_request`. | +| `sort_order` | number | No | Ordering weight for the cycle within the project. Lower values sort first when you list with `?order_by=sort_order`. | +| `logo_props` | json | No | JSON blob holding the cycle's icon configuration. Replaces the stored value outright — it is not merged key by key. | +| `external_id` | string | No | Your system's identifier for this cycle. Maximum 255 characters, nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `jira`. Maximum 255 characters, nullable. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `created_at`, `created_by_id`, `description`, `end_date`, `external_id`, `external_source`, `id`, `logo_props`, `name`, `owned_by_id`, `sort_order`, `start_date`, `timezone`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `owned_by` \(the cycle owner\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `owned_by` | string | No | v1 compatibility only. User who owns the cycle. If not provided, defaults to the current user. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Cycles | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `start_date` | string | Start date | +| ↳ `end_date` | string | End date | +| ↳ `timezone` | json | Timezone | +| ↳ `owned_by_id` | string | Owned by id | +| ↳ `sort_order` | json | Sort order | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `owned_by` | json | Owned by | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `total_estimates` | number | Total estimates | +| ↳ `completed_estimates` | number | Completed estimates | +| ↳ `started_estimates` | number | Started estimates | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `view_props` | json | View props | +| ↳ `progress_snapshot` | json | Progress snapshot | +| ↳ `archived_at` | string | Archived at | +| ↳ `version` | json | Version | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `status` | string | Status | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Update a label + +Update a label in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the label belongs to. | +| `pk` | string | Yes | The label id. | +| `name` | string | No | New display name, unique within the project. Maximum 255 characters. Renaming onto a name another label already holds returns `409 conflict`. | +| `color` | string | No | Hex color used wherever the label is rendered, for example `#e5484d`. Maximum 255 characters. | +| `description` | string | No | Free-form note about what the label is for. | +| `parent_id` | string | No | Move the label under a different parent. The new parent must be a label in the same project. Send `null` to make the label top-level again. | +| `sort_order` | number | No | Ordering weight within the project. Lower values sort first. | +| `external_id` | string | No | Your system's identifier for this label, for sync and import correlation. Maximum 255 characters. Send `null` to clear it. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Send `null` to clear it. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `name`, `parent_id`, `sort_order`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Labels | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `color` | json | Color | +| ↳ `sort_order` | json | Sort order | +| ↳ `parent_id` | string | Parent id | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `project` | string | Project | +| ↳ `parent` | string | Parent | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Update a link + +Update a link in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `work_item_id` | string | Yes | The work item the resource hangs off. Accepts the work item UUID or its `PROJ-123` identifier. | +| `pk` | string | Yes | The link id. | +| `metadata` | json | No | JSON metadata object for the link. API v2 only. | +| `title` | string | No | Title. Maximum 255 characters. Nullable. | +| `url` | string | No | Target URL. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `created_at`, `created_by_id`, `id`, `metadata`, `title`, `url`, `work_item_id`. | +| `issue_id` | string | No | v1 compatibility only. Work item ID for the link. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Item- Links | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | json | Id | +| ↳ `metadata` | json | Metadata | +| ↳ `url` | string | Asset Id | +| ↳ `title` | string | Asset Id | +| ↳ `favicon` | string | Asset Id | +| ↳ `favicon_url` | json | Logo Props | +| ↳ `title` | json | Title | +| ↳ `url` | json | Url | +| ↳ `work_item_id` | string | Work item id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `issue` | string | Issue | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Update a module + +Update a module in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the module belongs to. | +| `pk` | string | Yes | The module to update. | +| `name` | string | No | New display name, unique within the project. Maximum 255 characters. Renaming onto an existing module's name returns `409 conflict`. | +| `description` | string | No | Plain-text summary of what the module covers. | +| `status` | string | No | Move the module to a different lifecycle position. - `backlog` — Captured, not yet committed to - `planned` — Committed to but not started - `in-progress` — Actively being worked on - `paused` — Started, then put on hold - `completed` — Delivered - `cancelled` — Dropped without delivering Any value outside this list is a `400 invalid_request`. Transitions are unrestricted — a `completed` module can be sent back to `in-progress`. | +| `start_date` | string | No | Date the module is scheduled to begin, as `YYYY-MM-DD`. Send `null` to clear it. | +| `target_date` | string | No | Date the module is expected to land, as `YYYY-MM-DD`. Send `null` to clear it. Must not be earlier than the module's `start_date` — including the `start_date` already stored when you only send `target_date`. | +| `lead_id` | string | No | Reassign the module. Must be a member of this project — any other user id is rejected with a `400` naming `lead_id`. Send `null` to leave the module without a lead. | +| `sort_order` | number | No | Ordering weight used when modules are listed. Lower values sort first. | +| `logo_props` | json | No | Free-form JSON object holding the icon Plane renders for the module. The value you send replaces the stored object. | +| `external_id` | string | No | Your system's identifier for this module, for sync and import correlation. Maximum 255 characters. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Nullable. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `id`, `lead_id`, `logo_props`, `member_ids`, `name`, `sort_order`, `start_date`, `status`, `target_date`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `lead` \(the module lead\), `members` \(the module members\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `members` | json | No | v1 compatibility only. Members. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Modules | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `status` | json | Status | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `lead_id` | string | Lead id | +| ↳ `member_ids` | array | Member ids | +| ↳ `sort_order` | json | Sort order | +| ↳ `logo_props` | json | Logo props | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `lead` | json | Lead | +| ↳ `members` | array | Members | +| ↳ `total_issues` | json | Total issues | +| ↳ `cancelled_issues` | json | Cancelled issues | +| ↳ `completed_issues` | json | Completed issues | +| ↳ `started_issues` | json | Started issues | +| ↳ `unstarted_issues` | json | Unstarted issues | +| ↳ `backlog_issues` | json | Backlog issues | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `view_props` | json | View props | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Update a project + +Update a project in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The project id. | +| `archive_in` | number | No | The archive in. | +| `close_in` | number | No | The close in. | +| `cover_image` | string | No | URL of the cover image. Nullable. | +| `cycle_view` | boolean | No | Whether cycle view. | +| `default_assignee_id` | string | No | Id of the related default assignee. Nullable. | +| `default_state_id` | string | No | Id of the related default state. Nullable. | +| `description` | string | No | Free-form description. | +| `emoji` | string | No | Emoji shown alongside the name. Maximum 255 characters. Nullable. | +| `estimate_id` | string | No | Id of the related estimate. Nullable. | +| `external_id` | string | No | Your system's identifier for this record, for sync and import correlation. Maximum 255 characters. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Nullable. | +| `guest_view_all_features` | boolean | No | Whether guest view all features. | +| `icon_prop` | string | No | The icon prop. Nullable. | +| `identifier` | string | No | Short project key used to prefix work item numbers, for example `ENG` in `ENG-142`. Maximum 255 characters. | +| `intake_view` | boolean | No | Whether intake view. | +| `is_issue_type_enabled` | boolean | No | Whether is issue type enabled. | +| `is_time_tracking_enabled` | boolean | No | Whether is time tracking enabled. | +| `issue_views_view` | boolean | No | Whether issue views view. | +| `logo_props` | string | No | Editor-owned logo descriptor. Pass back what you read rather than composing it by hand. | +| `module_view` | boolean | No | Whether module view. | +| `name` | string | No | Display name. Maximum 255 characters. | +| `network` | string | No | Project visibility: `0` is private to members, `2` is visible to the whole workspace. | +| `page_view` | boolean | No | Whether page view. | +| `priority` | string | No | - `none` - None - `low` - Low - `medium` - Medium - `high` - High - `urgent` - Urgent One of `none`, `low`, `medium`, `high`, `urgent`. | +| `project_lead_id` | string | No | Id of the related project lead. Nullable. | +| `start_date` | string | No | Planned start date, as `YYYY-MM-DD`. Nullable. | +| `state_id` | string | No | Id of the related state. Nullable. | +| `target_date` | string | No | Planned due date, as `YYYY-MM-DD`. Nullable. | +| `timezone` | string | No | - `Africa/Abidjan` - Africa/Abidjan - `Africa/Accra` - Africa/Accra - `Africa/Addis_Ababa` - Africa/Addis_Ababa - `Africa/Algiers` - Africa/Algiers - `Africa/Asmara` - Africa/Asmara - `Africa/Bamako` - Africa/Bamako - `Africa/Bangui` - Africa/Bangui - `Africa/Banjul` - Africa/Banjul - `Africa/Bissau` - Africa/Bissau - `Africa/Blantyre` - Africa/Blantyre - `Africa/Brazzaville` - Africa/Brazzaville - `Africa/Bujumbura` - Africa/Bujumbura - `Africa/Cairo` - Africa/Cairo - `Africa/Casablanca` - Africa/Casablanca - `Africa/Ceuta` - Africa/Ceuta - `Africa/Conakry` - Africa/Conakry - `Africa/Dakar` - Africa/Dakar - `Africa/Dar_es_Salaam` - Africa/Dar_es_Salaam - `Africa/Djibouti` - Africa/Djibouti - `Africa/Douala` - Africa/Douala - `Africa/El_Aaiun` - Africa/El_Aaiun - `Africa/Freetown` - Africa/Freetown - `Africa/Gaborone` - Africa/Gaborone - `Africa/Harare` - Africa/Harare - `Africa/Johannesburg` - Africa/Johannesburg - `Africa/Juba` - Africa/Juba - `Africa/Kampala` - Africa/Kampala - `Africa/Khartoum` - Africa/Khartoum - `Africa/Kigali` - Africa/Kigali - `Africa/Kinshasa` - Africa/Kinshasa - `Africa/Lagos` - Africa/Lagos - `Africa/Libreville` - Africa/Libreville - `Africa/Lome` - Africa/Lome - `Africa/Luanda` - Africa/Luanda - `Africa/Lubumbashi` - Africa/Lubumbashi - `Africa/Lusaka` - Africa/Lusaka - `Africa/Malabo` - Africa/Malabo - `Africa/Maputo` - Africa/Maputo - `Africa/Maseru` - Africa/Maseru - `Africa/Mbabane` - Africa/Mbabane - `Africa/Mogadishu` - Africa/Mogadishu - `Africa/Monrovia` - Africa/Monrovia - `Africa/Nairobi` - Africa/Nairobi - `Africa/Ndjamena` - Africa/Ndjamena - `Africa/Niamey` - Africa/Niamey - `Africa/Nouakchott` - Africa/Nouakchott - `Africa/Ouagadougou` - Africa/Ouagadougou - `Africa/Porto-Novo` - Africa/Porto-Novo - `Africa/Sao_Tome` - Africa/Sao_Tome - `Africa/Tripoli` - Africa/Tripoli - `Africa/Tunis` - Africa/Tunis - `Africa/Windhoek` - Africa/Windhoek - `America/Adak` - America/Adak - `America/Anchorage` - America/Anchorage - `America/Anguilla` - America/Anguilla - `America/Antigua` - America/Antigua - `America/Araguaina` - America/Araguaina - `America/Argentina/Buenos_Aires` - America/Argentina/Buenos_Aires - `America/Argentina/Catamarca` - America/Argentina/Catamarca - `America/Argentina/Cordoba` - America/Argentina/Cordoba - `America/Argentina/Jujuy` - America/Argentina/Jujuy - `America/Argentina/La_Rioja` - America/Argentina/La_Rioja - `America/Argentina/Mendoza` - America/Argentina/Mendoza - `America/Argentina/Rio_Gallegos` - America/Argentina/Rio_Gallegos - `America/Argentina/Salta` - America/Argentina/Salta - `America/Argentina/San_Juan` - America/Argentina/San_Juan - `America/Argentina/San_Luis` - America/Argentina/San_Luis - `America/Argentina/Tucuman` - America/Argentina/Tucuman - `America/Argentina/Ushuaia` - America/Argentina/Ushuaia - `America/Aruba` - America/Aruba - `America/Asuncion` - America/Asuncion - `America/Atikokan` - America/Atikokan - `America/Bahia` - America/Bahia - `America/Bahia_Banderas` - America/Bahia_Banderas - `America/Barbados` - America/Barbados - `America/Belem` - America/Belem - `America/Belize` - America/Belize - `America/Blanc-Sablon` - America/Blanc-Sablon - `America/Boa_Vista` - America/Boa_Vista - `America/Bogota` - America/Bogota - `America/Boise` - America/Boise - `America/Cambridge_Bay` - America/Cambridge_Bay - `America/Campo_Grande` - America/Campo_Grande - `America/Cancun` - America/Cancun - `America/Caracas` - America/Caracas - `America/Cayenne` - America/Cayenne - `America/Cayman` - America/Cayman - `America/Chicago` - America/Chicago - `America/Chihuahua` - America/Chihuahua - `America/Ciudad_Juarez` - America/Ciudad_Juarez - `America/Costa_Rica` - America/Costa_Rica - `America/Creston` - America/Creston - `America/Cuiaba` - America/Cuiaba - `America/Curacao` - America/Curacao - `America/Danmarkshavn` - America/Danmarkshavn - `America/Dawson` - America/Dawson - `America/Dawson_Creek` - America/Dawson_Creek - `America/Denver` - America/Denver - `America/Detroit` - America/Detroit - `America/Dominica` - America/Dominica - `America/Edmonton` - America/Edmonton - `America/Eirunepe` - America/Eirunepe - `America/El_Salvador` - America/El_Salvador - `America/Fort_Nelson` - America/Fort_Nelson - `America/Fortaleza` - America/Fortaleza - `America/Glace_Bay` - America/Glace_Bay - `America/Goose_Bay` - America/Goose_Bay - `America/Grand_Turk` - America/Grand_Turk - `America/Grenada` - America/Grenada - `America/Guadeloupe` - America/Guadeloupe - `America/Guatemala` - America/Guatemala - `America/Guayaquil` - America/Guayaquil - `America/Guyana` - America/Guyana - `America/Halifax` - America/Halifax - `America/Havana` - America/Havana - `America/Hermosillo` - America/Hermosillo - `America/Indiana/Indianapolis` - America/Indiana/Indianapolis - `America/Indiana/Knox` - America/Indiana/Knox - `America/Indiana/Marengo` - America/Indiana/Marengo - `America/Indiana/Petersburg` - America/Indiana/Petersburg - `America/Indiana/Tell_City` - America/Indiana/Tell_City - `America/Indiana/Vevay` - America/Indiana/Vevay - `America/Indiana/Vincennes` - America/Indiana/Vincennes - `America/Indiana/Winamac` - America/Indiana/Winamac - `America/Inuvik` - America/Inuvik - `America/Iqaluit` - America/Iqaluit - `America/Jamaica` - America/Jamaica - `America/Juneau` - America/Juneau - `America/Kentucky/Louisville` - America/Kentucky/Louisville - `America/Kentucky/Monticello` - America/Kentucky/Monticello - `America/Kralendijk` - America/Kralendijk - `America/La_Paz` - America/La_Paz - `America/Lima` - America/Lima - `America/Los_Angeles` - America/Los_Angeles - `America/Lower_Princes` - America/Lower_Princes - `America/Maceio` - America/Maceio - `America/Managua` - America/Managua - `America/Manaus` - America/Manaus - `America/Marigot` - America/Marigot - `America/Martinique` - America/Martinique - `America/Matamoros` - America/Matamoros - `America/Mazatlan` - America/Mazatlan - `America/Menominee` - America/Menominee - `America/Merida` - America/Merida - `America/Metlakatla` - America/Metlakatla - `America/Mexico_City` - America/Mexico_City - `America/Miquelon` - America/Miquelon - `America/Moncton` - America/Moncton - `America/Monterrey` - America/Monterrey - `America/Montevideo` - America/Montevideo - `America/Montserrat` - America/Montserrat - `America/Nassau` - America/Nassau - `America/New_York` - America/New_York - `America/Nome` - America/Nome - `America/Noronha` - America/Noronha - `America/North_Dakota/Beulah` - America/North_Dakota/Beulah - `America/North_Dakota/Center` - America/North_Dakota/Center - `America/North_Dakota/New_Salem` - America/North_Dakota/New_Salem - `America/Nuuk` - America/Nuuk - `America/Ojinaga` - America/Ojinaga - `America/Panama` - America/Panama - `America/Paramaribo` - America/Paramaribo - `America/Phoenix` - America/Phoenix - `America/Port-au-Prince` - America/Port-au-Prince - `America/Port_of_Spain` - America/Port_of_Spain - `America/Porto_Velho` - America/Porto_Velho - `America/Puerto_Rico` - America/Puerto_Rico - `America/Punta_Arenas` - America/Punta_Arenas - `America/Rankin_Inlet` - America/Rankin_Inlet - `America/Recife` - America/Recife - `America/Regina` - America/Regina - `America/Resolute` - America/Resolute - `America/Rio_Branco` - America/Rio_Branco - `America/Santarem` - America/Santarem - `America/Santiago` - America/Santiago - `America/Santo_Domingo` - America/Santo_Domingo - `America/Sao_Paulo` - America/Sao_Paulo - `America/Scoresbysund` - America/Scoresbysund - `America/Sitka` - America/Sitka - `America/St_Barthelemy` - America/St_Barthelemy - `America/St_Johns` - America/St_Johns - `America/St_Kitts` - America/St_Kitts - `America/St_Lucia` - America/St_Lucia - `America/St_Thomas` - America/St_Thomas - `America/St_Vincent` - America/St_Vincent - `America/Swift_Current` - America/Swift_Current - `America/Tegucigalpa` - America/Tegucigalpa - `America/Thule` - America/Thule - `America/Tijuana` - America/Tijuana - `America/Toronto` - America/Toronto - `America/Tortola` - America/Tortola - `America/Vancouver` - America/Vancouver - `America/Whitehorse` - America/Whitehorse - `America/Winnipeg` - America/Winnipeg - `America/Yakutat` - America/Yakutat - `Antarctica/Casey` - Antarctica/Casey - `Antarctica/Davis` - Antarctica/Davis - `Antarctica/DumontDUrville` - Antarctica/DumontDUrville - `Antarctica/Macquarie` - Antarctica/Macquarie - `Antarctica/Mawson` - Antarctica/Mawson - `Antarctica/McMurdo` - Antarctica/McMurdo - `Antarctica/Palmer` - Antarctica/Palmer - `Antarctica/Rothera` - Antarctica/Rothera - `Antarctica/Syowa` - Antarctica/Syowa - `Antarctica/Troll` - Antarctica/Troll - `Antarctica/Vostok` - Antarctica/Vostok - `Arctic/Longyearbyen` - Arctic/Longyearbyen - `Asia/Aden` - Asia/Aden - `Asia/Almaty` - Asia/Almaty - `Asia/Amman` - Asia/Amman - `Asia/Anadyr` - Asia/Anadyr - `Asia/Aqtau` - Asia/Aqtau - `Asia/Aqtobe` - Asia/Aqtobe - `Asia/Ashgabat` - Asia/Ashgabat - `Asia/Atyrau` - Asia/Atyrau - `Asia/Baghdad` - Asia/Baghdad - `Asia/Bahrain` - Asia/Bahrain - `Asia/Baku` - Asia/Baku - `Asia/Bangkok` - Asia/Bangkok - `Asia/Barnaul` - Asia/Barnaul - `Asia/Beirut` - Asia/Beirut - `Asia/Bishkek` - Asia/Bishkek - `Asia/Brunei` - Asia/Brunei - `Asia/Chita` - Asia/Chita - `Asia/Choibalsan` - Asia/Choibalsan - `Asia/Colombo` - Asia/Colombo - `Asia/Damascus` - Asia/Damascus - `Asia/Dhaka` - Asia/Dhaka - `Asia/Dili` - Asia/Dili - `Asia/Dubai` - Asia/Dubai - `Asia/Dushanbe` - Asia/Dushanbe - `Asia/Famagusta` - Asia/Famagusta - `Asia/Gaza` - Asia/Gaza - `Asia/Hebron` - Asia/Hebron - `Asia/Ho_Chi_Minh` - Asia/Ho_Chi_Minh - `Asia/Hong_Kong` - Asia/Hong_Kong - `Asia/Hovd` - Asia/Hovd - `Asia/Irkutsk` - Asia/Irkutsk - `Asia/Jakarta` - Asia/Jakarta - `Asia/Jayapura` - Asia/Jayapura - `Asia/Jerusalem` - Asia/Jerusalem - `Asia/Kabul` - Asia/Kabul - `Asia/Kamchatka` - Asia/Kamchatka - `Asia/Karachi` - Asia/Karachi - `Asia/Kathmandu` - Asia/Kathmandu - `Asia/Khandyga` - Asia/Khandyga - `Asia/Kolkata` - Asia/Kolkata - `Asia/Krasnoyarsk` - Asia/Krasnoyarsk - `Asia/Kuala_Lumpur` - Asia/Kuala_Lumpur - `Asia/Kuching` - Asia/Kuching - `Asia/Kuwait` - Asia/Kuwait - `Asia/Macau` - Asia/Macau - `Asia/Magadan` - Asia/Magadan - `Asia/Makassar` - Asia/Makassar - `Asia/Manila` - Asia/Manila - `Asia/Muscat` - Asia/Muscat - `Asia/Nicosia` - Asia/Nicosia - `Asia/Novokuznetsk` - Asia/Novokuznetsk - `Asia/Novosibirsk` - Asia/Novosibirsk - `Asia/Omsk` - Asia/Omsk - `Asia/Oral` - Asia/Oral - `Asia/Phnom_Penh` - Asia/Phnom_Penh - `Asia/Pontianak` - Asia/Pontianak - `Asia/Pyongyang` - Asia/Pyongyang - `Asia/Qatar` - Asia/Qatar - `Asia/Qostanay` - Asia/Qostanay - `Asia/Qyzylorda` - Asia/Qyzylorda - `Asia/Riyadh` - Asia/Riyadh - `Asia/Sakhalin` - Asia/Sakhalin - `Asia/Samarkand` - Asia/Samarkand - `Asia/Seoul` - Asia/Seoul - `Asia/Shanghai` - Asia/Shanghai - `Asia/Singapore` - Asia/Singapore - `Asia/Srednekolymsk` - Asia/Srednekolymsk - `Asia/Taipei` - Asia/Taipei - `Asia/Tashkent` - Asia/Tashkent - `Asia/Tbilisi` - Asia/Tbilisi - `Asia/Tehran` - Asia/Tehran - `Asia/Thimphu` - Asia/Thimphu - `Asia/Tokyo` - Asia/Tokyo - `Asia/Tomsk` - Asia/Tomsk - `Asia/Ulaanbaatar` - Asia/Ulaanbaatar - `Asia/Urumqi` - Asia/Urumqi - `Asia/Ust-Nera` - Asia/Ust-Nera - `Asia/Vientiane` - Asia/Vientiane - `Asia/Vladivostok` - Asia/Vladivostok - `Asia/Yakutsk` - Asia/Yakutsk - `Asia/Yangon` - Asia/Yangon - `Asia/Yekaterinburg` - Asia/Yekaterinburg - `Asia/Yerevan` - Asia/Yerevan - `Atlantic/Azores` - Atlantic/Azores - `Atlantic/Bermuda` - Atlantic/Bermuda - `Atlantic/Canary` - Atlantic/Canary - `Atlantic/Cape_Verde` - Atlantic/Cape_Verde - `Atlantic/Faroe` - Atlantic/Faroe - `Atlantic/Madeira` - Atlantic/Madeira - `Atlantic/Reykjavik` - Atlantic/Reykjavik - `Atlantic/South_Georgia` - Atlantic/South_Georgia - `Atlantic/St_Helena` - Atlantic/St_Helena - `Atlantic/Stanley` - Atlantic/Stanley - `Australia/Adelaide` - Australia/Adelaide - `Australia/Brisbane` - Australia/Brisbane - `Australia/Broken_Hill` - Australia/Broken_Hill - `Australia/Darwin` - Australia/Darwin - `Australia/Eucla` - Australia/Eucla - `Australia/Hobart` - Australia/Hobart - `Australia/Lindeman` - Australia/Lindeman - `Australia/Lord_Howe` - Australia/Lord_Howe - `Australia/Melbourne` - Australia/Melbourne - `Australia/Perth` - Australia/Perth - `Australia/Sydney` - Australia/Sydney - `Canada/Atlantic` - Canada/Atlantic - `Canada/Central` - Canada/Central - `Canada/Eastern` - Canada/Eastern - `Canada/Mountain` - Canada/Mountain - `Canada/Newfoundland` - Canada/Newfoundland - `Canada/Pacific` - Canada/Pacific - `Europe/Amsterdam` - Europe/Amsterdam - `Europe/Andorra` - Europe/Andorra - `Europe/Astrakhan` - Europe/Astrakhan - `Europe/Athens` - Europe/Athens - `Europe/Belgrade` - Europe/Belgrade - `Europe/Berlin` - Europe/Berlin - `Europe/Bratislava` - Europe/Bratislava - `Europe/Brussels` - Europe/Brussels - `Europe/Bucharest` - Europe/Bucharest - `Europe/Budapest` - Europe/Budapest - `Europe/Busingen` - Europe/Busingen - `Europe/Chisinau` - Europe/Chisinau - `Europe/Copenhagen` - Europe/Copenhagen - `Europe/Dublin` - Europe/Dublin - `Europe/Gibraltar` - Europe/Gibraltar - `Europe/Guernsey` - Europe/Guernsey - `Europe/Helsinki` - Europe/Helsinki - `Europe/Isle_of_Man` - Europe/Isle_of_Man - `Europe/Istanbul` - Europe/Istanbul - `Europe/Jersey` - Europe/Jersey - `Europe/Kaliningrad` - Europe/Kaliningrad - `Europe/Kirov` - Europe/Kirov - `Europe/Kyiv` - Europe/Kyiv - `Europe/Lisbon` - Europe/Lisbon - `Europe/Ljubljana` - Europe/Ljubljana - `Europe/London` - Europe/London - `Europe/Luxembourg` - Europe/Luxembourg - `Europe/Madrid` - Europe/Madrid - `Europe/Malta` - Europe/Malta - `Europe/Mariehamn` - Europe/Mariehamn - `Europe/Minsk` - Europe/Minsk - `Europe/Monaco` - Europe/Monaco - `Europe/Moscow` - Europe/Moscow - `Europe/Oslo` - Europe/Oslo - `Europe/Paris` - Europe/Paris - `Europe/Podgorica` - Europe/Podgorica - `Europe/Prague` - Europe/Prague - `Europe/Riga` - Europe/Riga - `Europe/Rome` - Europe/Rome - `Europe/Samara` - Europe/Samara - `Europe/San_Marino` - Europe/San_Marino - `Europe/Sarajevo` - Europe/Sarajevo - `Europe/Saratov` - Europe/Saratov - `Europe/Simferopol` - Europe/Simferopol - `Europe/Skopje` - Europe/Skopje - `Europe/Sofia` - Europe/Sofia - `Europe/Stockholm` - Europe/Stockholm - `Europe/Tallinn` - Europe/Tallinn - `Europe/Tirane` - Europe/Tirane - `Europe/Ulyanovsk` - Europe/Ulyanovsk - `Europe/Vaduz` - Europe/Vaduz - `Europe/Vatican` - Europe/Vatican - `Europe/Vienna` - Europe/Vienna - `Europe/Vilnius` - Europe/Vilnius - `Europe/Volgograd` - Europe/Volgograd - `Europe/Warsaw` - Europe/Warsaw - `Europe/Zagreb` - Europe/Zagreb - `Europe/Zurich` - Europe/Zurich - `GMT` - GMT - `Indian/Antananarivo` - Indian/Antananarivo - `Indian/Chagos` - Indian/Chagos - `Indian/Christmas` - Indian/Christmas - `Indian/Cocos` - Indian/Cocos - `Indian/Comoro` - Indian/Comoro - `Indian/Kerguelen` - Indian/Kerguelen - `Indian/Mahe` - Indian/Mahe - `Indian/Maldives` - Indian/Maldives - `Indian/Mauritius` - Indian/Mauritius - `Indian/Mayotte` - Indian/Mayotte - `Indian/Reunion` - Indian/Reunion - `Pacific/Apia` - Pacific/Apia - `Pacific/Auckland` - Pacific/Auckland - `Pacific/Bougainville` - Pacific/Bougainville - `Pacific/Chatham` - Pacific/Chatham - `Pacific/Chuuk` - Pacific/Chuuk - `Pacific/Easter` - Pacific/Easter - `Pacific/Efate` - Pacific/Efate - `Pacific/Fakaofo` - Pacific/Fakaofo - `Pacific/Fiji` - Pacific/Fiji - `Pacific/Funafuti` - Pacific/Funafuti - `Pacific/Galapagos` - Pacific/Galapagos - `Pacific/Gambier` - Pacific/Gambier - `Pacific/Guadalcanal` - Pacific/Guadalcanal - `Pacific/Guam` - Pacific/Guam - `Pacific/Honolulu` - Pacific/Honolulu - `Pacific/Kanton` - Pacific/Kanton - `Pacific/Kiritimati` - Pacific/Kiritimati - `Pacific/Kosrae` - Pacific/Kosrae - `Pacific/Kwajalein` - Pacific/Kwajalein - `Pacific/Majuro` - Pacific/Majuro - `Pacific/Marquesas` - Pacific/Marquesas - `Pacific/Midway` - Pacific/Midway - `Pacific/Nauru` - Pacific/Nauru - `Pacific/Niue` - Pacific/Niue - `Pacific/Norfolk` - Pacific/Norfolk - `Pacific/Noumea` - Pacific/Noumea - `Pacific/Pago_Pago` - Pacific/Pago_Pago - `Pacific/Palau` - Pacific/Palau - `Pacific/Pitcairn` - Pacific/Pitcairn - `Pacific/Pohnpei` - Pacific/Pohnpei - `Pacific/Port_Moresby` - Pacific/Port_Moresby - `Pacific/Rarotonga` - Pacific/Rarotonga - `Pacific/Saipan` - Pacific/Saipan - `Pacific/Tahiti` - Pacific/Tahiti - `Pacific/Tarawa` - Pacific/Tarawa - `Pacific/Tongatapu` - Pacific/Tongatapu - `Pacific/Wake` - Pacific/Wake - `Pacific/Wallis` - Pacific/Wallis - `US/Alaska` - US/Alaska - `US/Arizona` - US/Arizona - `US/Central` - US/Central - `US/Eastern` - US/Eastern - `US/Hawaii` - US/Hawaii - `US/Mountain` - US/Mountain - `US/Pacific` - US/Pacific - `UTC` - UTC One of `Africa/Abidjan`, `Africa/Accra`, `Africa/Addis_Ababa`, `Africa/Algiers`, `Africa/Asmara`, `Africa/Bamako`, `Africa/Bangui`, `Africa/Banjul`, `Africa/Bissau`, `Africa/Blantyre`, `Africa/Brazzaville`, `Africa/Bujumbura`, `Africa/Cairo`, `Africa/Casablanca`, `Africa/Ceuta`, `Africa/Conakry`, `Africa/Dakar`, `Africa/Dar_es_Salaam`, `Africa/Djibouti`, `Africa/Douala`, `Africa/El_Aaiun`, `Africa/Freetown`, `Africa/Gaborone`, `Africa/Harare`, `Africa/Johannesburg`, `Africa/Juba`, `Africa/Kampala`, `Africa/Khartoum`, `Africa/Kigali`, `Africa/Kinshasa`, `Africa/Lagos`, `Africa/Libreville`, `Africa/Lome`, `Africa/Luanda`, `Africa/Lubumbashi`, `Africa/Lusaka`, `Africa/Malabo`, `Africa/Maputo`, `Africa/Maseru`, `Africa/Mbabane`, `Africa/Mogadishu`, `Africa/Monrovia`, `Africa/Nairobi`, `Africa/Ndjamena`, `Africa/Niamey`, `Africa/Nouakchott`, `Africa/Ouagadougou`, `Africa/Porto-Novo`, `Africa/Sao_Tome`, `Africa/Tripoli`, `Africa/Tunis`, `Africa/Windhoek`, `America/Adak`, `America/Anchorage`, `America/Anguilla`, `America/Antigua`, `America/Araguaina`, `America/Argentina/Buenos_Aires`, `America/Argentina/Catamarca`, `America/Argentina/Cordoba`, `America/Argentina/Jujuy`, `America/Argentina/La_Rioja`, `America/Argentina/Mendoza`, `America/Argentina/Rio_Gallegos`, `America/Argentina/Salta`, `America/Argentina/San_Juan`, `America/Argentina/San_Luis`, `America/Argentina/Tucuman`, `America/Argentina/Ushuaia`, `America/Aruba`, `America/Asuncion`, `America/Atikokan`, `America/Bahia`, `America/Bahia_Banderas`, `America/Barbados`, `America/Belem`, `America/Belize`, `America/Blanc-Sablon`, `America/Boa_Vista`, `America/Bogota`, `America/Boise`, `America/Cambridge_Bay`, `America/Campo_Grande`, `America/Cancun`, `America/Caracas`, `America/Cayenne`, `America/Cayman`, `America/Chicago`, `America/Chihuahua`, `America/Ciudad_Juarez`, `America/Costa_Rica`, `America/Creston`, `America/Cuiaba`, `America/Curacao`, `America/Danmarkshavn`, `America/Dawson`, `America/Dawson_Creek`, `America/Denver`, `America/Detroit`, `America/Dominica`, `America/Edmonton`, `America/Eirunepe`, `America/El_Salvador`, `America/Fort_Nelson`, `America/Fortaleza`, `America/Glace_Bay`, `America/Goose_Bay`, `America/Grand_Turk`, `America/Grenada`, `America/Guadeloupe`, `America/Guatemala`, `America/Guayaquil`, `America/Guyana`, `America/Halifax`, `America/Havana`, `America/Hermosillo`, `America/Indiana/Indianapolis`, `America/Indiana/Knox`, `America/Indiana/Marengo`, `America/Indiana/Petersburg`, `America/Indiana/Tell_City`, `America/Indiana/Vevay`, `America/Indiana/Vincennes`, `America/Indiana/Winamac`, `America/Inuvik`, `America/Iqaluit`, `America/Jamaica`, `America/Juneau`, `America/Kentucky/Louisville`, `America/Kentucky/Monticello`, `America/Kralendijk`, `America/La_Paz`, `America/Lima`, `America/Los_Angeles`, `America/Lower_Princes`, `America/Maceio`, `America/Managua`, `America/Manaus`, `America/Marigot`, `America/Martinique`, `America/Matamoros`, `America/Mazatlan`, `America/Menominee`, `America/Merida`, `America/Metlakatla`, `America/Mexico_City`, `America/Miquelon`, `America/Moncton`, `America/Monterrey`, `America/Montevideo`, `America/Montserrat`, `America/Nassau`, `America/New_York`, `America/Nome`, `America/Noronha`, `America/North_Dakota/Beulah`, `America/North_Dakota/Center`, `America/North_Dakota/New_Salem`, `America/Nuuk`, `America/Ojinaga`, `America/Panama`, `America/Paramaribo`, `America/Phoenix`, `America/Port-au-Prince`, `America/Port_of_Spain`, `America/Porto_Velho`, `America/Puerto_Rico`, `America/Punta_Arenas`, `America/Rankin_Inlet`, `America/Recife`, `America/Regina`, `America/Resolute`, `America/Rio_Branco`, `America/Santarem`, `America/Santiago`, `America/Santo_Domingo`, `America/Sao_Paulo`, `America/Scoresbysund`, `America/Sitka`, `America/St_Barthelemy`, `America/St_Johns`, `America/St_Kitts`, `America/St_Lucia`, `America/St_Thomas`, `America/St_Vincent`, `America/Swift_Current`, `America/Tegucigalpa`, `America/Thule`, `America/Tijuana`, `America/Toronto`, `America/Tortola`, `America/Vancouver`, `America/Whitehorse`, `America/Winnipeg`, `America/Yakutat`, `Antarctica/Casey`, `Antarctica/Davis`, `Antarctica/DumontDUrville`, `Antarctica/Macquarie`, `Antarctica/Mawson`, `Antarctica/McMurdo`, `Antarctica/Palmer`, `Antarctica/Rothera`, `Antarctica/Syowa`, `Antarctica/Troll`, `Antarctica/Vostok`, `Arctic/Longyearbyen`, `Asia/Aden`, `Asia/Almaty`, `Asia/Amman`, `Asia/Anadyr`, `Asia/Aqtau`, `Asia/Aqtobe`, `Asia/Ashgabat`, `Asia/Atyrau`, `Asia/Baghdad`, `Asia/Bahrain`, `Asia/Baku`, `Asia/Bangkok`, `Asia/Barnaul`, `Asia/Beirut`, `Asia/Bishkek`, `Asia/Brunei`, `Asia/Chita`, `Asia/Choibalsan`, `Asia/Colombo`, `Asia/Damascus`, `Asia/Dhaka`, `Asia/Dili`, `Asia/Dubai`, `Asia/Dushanbe`, `Asia/Famagusta`, `Asia/Gaza`, `Asia/Hebron`, `Asia/Ho_Chi_Minh`, `Asia/Hong_Kong`, `Asia/Hovd`, `Asia/Irkutsk`, `Asia/Jakarta`, `Asia/Jayapura`, `Asia/Jerusalem`, `Asia/Kabul`, `Asia/Kamchatka`, `Asia/Karachi`, `Asia/Kathmandu`, `Asia/Khandyga`, `Asia/Kolkata`, `Asia/Krasnoyarsk`, `Asia/Kuala_Lumpur`, `Asia/Kuching`, `Asia/Kuwait`, `Asia/Macau`, `Asia/Magadan`, `Asia/Makassar`, `Asia/Manila`, `Asia/Muscat`, `Asia/Nicosia`, `Asia/Novokuznetsk`, `Asia/Novosibirsk`, `Asia/Omsk`, `Asia/Oral`, `Asia/Phnom_Penh`, `Asia/Pontianak`, `Asia/Pyongyang`, `Asia/Qatar`, `Asia/Qostanay`, `Asia/Qyzylorda`, `Asia/Riyadh`, `Asia/Sakhalin`, `Asia/Samarkand`, `Asia/Seoul`, `Asia/Shanghai`, `Asia/Singapore`, `Asia/Srednekolymsk`, `Asia/Taipei`, `Asia/Tashkent`, `Asia/Tbilisi`, `Asia/Tehran`, `Asia/Thimphu`, `Asia/Tokyo`, `Asia/Tomsk`, `Asia/Ulaanbaatar`, `Asia/Urumqi`, `Asia/Ust-Nera`, `Asia/Vientiane`, `Asia/Vladivostok`, `Asia/Yakutsk`, `Asia/Yangon`, `Asia/Yekaterinburg`, `Asia/Yerevan`, `Atlantic/Azores`, `Atlantic/Bermuda`, `Atlantic/Canary`, `Atlantic/Cape_Verde`, `Atlantic/Faroe`, `Atlantic/Madeira`, `Atlantic/Reykjavik`, `Atlantic/South_Georgia`, `Atlantic/St_Helena`, `Atlantic/Stanley`, `Australia/Adelaide`, `Australia/Brisbane`, `Australia/Broken_Hill`, `Australia/Darwin`, `Australia/Eucla`, `Australia/Hobart`, `Australia/Lindeman`, `Australia/Lord_Howe`, `Australia/Melbourne`, `Australia/Perth`, `Australia/Sydney`, `Canada/Atlantic`, `Canada/Central`, `Canada/Eastern`, `Canada/Mountain`, `Canada/Newfoundland`, `Canada/Pacific`, `Europe/Amsterdam`, `Europe/Andorra`, `Europe/Astrakhan`, `Europe/Athens`, `Europe/Belgrade`, `Europe/Berlin`, `Europe/Bratislava`, `Europe/Brussels`, `Europe/Bucharest`, `Europe/Budapest`, `Europe/Busingen`, `Europe/Chisinau`, `Europe/Copenhagen`, `Europe/Dublin`, `Europe/Gibraltar`, `Europe/Guernsey`, `Europe/Helsinki`, `Europe/Isle_of_Man`, `Europe/Istanbul`, `Europe/Jersey`, `Europe/Kaliningrad`, `Europe/Kirov`, `Europe/Kyiv`, `Europe/Lisbon`, `Europe/Ljubljana`, `Europe/London`, `Europe/Luxembourg`, `Europe/Madrid`, `Europe/Malta`, `Europe/Mariehamn`, `Europe/Minsk`, `Europe/Monaco`, `Europe/Moscow`, `Europe/Oslo`, `Europe/Paris`, `Europe/Podgorica`, `Europe/Prague`, `Europe/Riga`, `Europe/Rome`, `Europe/Samara`, `Europe/San_Marino`, `Europe/Sarajevo`, `Europe/Saratov`, `Europe/Simferopol`, `Europe/Skopje`, `Europe/Sofia`, `Europe/Stockholm`, `Europe/Tallinn`, `Europe/Tirane`, `Europe/Ulyanovsk`, `Europe/Vaduz`, `Europe/Vatican`, `Europe/Vienna`, `Europe/Vilnius`, `Europe/Volgograd`, `Europe/Warsaw`, `Europe/Zagreb`, `Europe/Zurich`, `GMT`, `Indian/Antananarivo`, `Indian/Chagos`, `Indian/Christmas`, `Indian/Cocos`, `Indian/Comoro`, `Indian/Kerguelen`, `Indian/Mahe`, `Indian/Maldives`, `Indian/Mauritius`, `Indian/Mayotte`, `Indian/Reunion`, `Pacific/Apia`, `Pacific/Auckland`, `Pacific/Bougainville`, `Pacific/Chatham`, `Pacific/Chuuk`, `Pacific/Easter`, `Pacific/Efate`, `Pacific/Fakaofo`, `Pacific/Fiji`, `Pacific/Funafuti`, `Pacific/Galapagos`, `Pacific/Gambier`, `Pacific/Guadalcanal`, `Pacific/Guam`, `Pacific/Honolulu`, `Pacific/Kanton`, `Pacific/Kiritimati`, `Pacific/Kosrae`, `Pacific/Kwajalein`, `Pacific/Majuro`, `Pacific/Marquesas`, `Pacific/Midway`, `Pacific/Nauru`, `Pacific/Niue`, `Pacific/Norfolk`, `Pacific/Noumea`, `Pacific/Pago_Pago`, `Pacific/Palau`, `Pacific/Pitcairn`, `Pacific/Pohnpei`, `Pacific/Port_Moresby`, `Pacific/Rarotonga`, `Pacific/Saipan`, `Pacific/Tahiti`, `Pacific/Tarawa`, `Pacific/Tongatapu`, `Pacific/Wake`, `Pacific/Wallis`, `US/Alaska`, `US/Arizona`, `US/Central`, `US/Eastern`, `US/Hawaii`, `US/Mountain`, `US/Pacific`, `UTC`. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `archive_in`, `archived_at`, `close_in`, `cover_image`, `cover_image_url`, `created_at`, `created_by_id`, `cycle_view`, `default_assignee_id`, `default_state_id`, `description`, `emoji`, `estimate_id`, `external_id`, `external_source`, `guest_view_all_features`, `icon_prop`, `id`, `identifier`, `intake_view`, `is_issue_type_enabled`, `is_time_tracking_enabled`, `issue_views_view`, `logo_props`, `module_view`, `name`, `network`, `page_view`, `priority`, `project_lead_id`, `start_date`, `state_id`, `target_date`, `timezone`. | +| `expand` | string | No | Comma-separated relations to embed: `default_assignee`, `project_lead`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `v1_icon_prop` | json | No | v1 compatibility only. Icon prop. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Projects | +| ↳ `archive_in` | json | Archive in | +| ↳ `archived_at` | string | Archived at | +| ↳ `close_in` | json | Close in | +| ↳ `cover_image` | json | Cover image | +| ↳ `cover_image_url` | json | Cover image url | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `cycle_view` | json | Cycle view | +| ↳ `default_assignee_id` | string | Default assignee id | +| ↳ `default_state_id` | string | Default state id | +| ↳ `description` | json | Description | +| ↳ `emoji` | json | Emoji | +| ↳ `estimate_id` | string | Estimate id | +| ↳ `external_id` | json | External id | +| ↳ `external_source` | json | External source | +| ↳ `guest_view_all_features` | json | Guest view all features | +| ↳ `icon_prop` | json | Icon prop | +| ↳ `id` | json | Id | +| ↳ `identifier` | json | Identifier | +| ↳ `intake_view` | json | Intake view | +| ↳ `is_issue_type_enabled` | json | Is issue type enabled | +| ↳ `is_time_tracking_enabled` | json | Is time tracking enabled | +| ↳ `issue_views_view` | json | Issue views view | +| ↳ `logo_props` | json | Logo props | +| ↳ `module_view` | json | Module view | +| ↳ `name` | json | Name | +| ↳ `network` | json | Network | +| ↳ `page_view` | json | Page view | +| ↳ `priority` | json | Priority | +| ↳ `project_lead_id` | string | Project lead id | +| ↳ `start_date` | string | Start date | +| ↳ `state_id` | string | State id | +| ↳ `target_date` | string | Target date | +| ↳ `timezone` | json | Timezone | +| ↳ `default_assignee` | json | Default assignee | +| ↳ `project_lead` | json | Project lead | +| ↳ `total_members` | json | Total members | +| ↳ `total_cycles` | json | Total cycles | +| ↳ `total_modules` | json | Total modules | +| ↳ `is_member` | boolean | Is member | +| ↳ `sort_order` | number | Sort order | +| ↳ `member_role` | json | Member role | +| ↳ `is_deployed` | boolean | Is deployed | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `description_text` | json | Description text | +| ↳ `description_html` | json | Description html | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `workspace` | string | Workspace | +| ↳ `cover_image_asset` | string | Cover image asset | +| ↳ `estimate` | string | Estimate | +| ↳ `default_state` | string | Default state | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `is_voting_enabled` | boolean | Is voting enabled | +| ↳ `auto_reminder_days` | number | Auto reminder days | +| ↳ `state` | string | State | + +### Plane Update a project page + +Update a project page in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the resource belongs to. Accepts the project UUID or its bare identifier, for example `ENG`. | +| `pk` | string | Yes | The project page id. | +| `access` | string | No | Who can see this. | +| `archived_at` | string | No | The archived at. Nullable. | +| `collection_id` | string | No | Id of the related collection. Nullable. | +| `color` | string | No | Hex color used wherever this is rendered, for example `#3f76ff`. Maximum 255 characters. | +| `description_html` | string | No | Rich-text body as HTML. This is the field the Plane editor round-trips. | +| `external_id` | string | No | Your system's identifier for this record, for sync and import correlation. Maximum 255 characters. Nullable. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. Nullable. | +| `is_locked` | boolean | No | Prevents further edits to the content. | +| `logo_props` | string | No | Editor-owned logo descriptor. Pass back what you read rather than composing it by hand. | +| `name` | string | No | Display name. | +| `parent_id` | string | No | Id of the related parent. Nullable. | +| `sort_order` | number | No | Manual ordering weight. Lower sorts first. | +| `view_props` | string | No | Editor-owned layout descriptor. Pass back what you read. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `access`, `archived_at`, `collection_id`, `color`, `created_at`, `created_by_id`, `description_html`, `description_stripped`, `external_id`, `external_source`, `id`, `is_global`, `is_locked`, `logo_props`, `name`, `owned_by_id`, `parent_id`, `sort_order`, `view_props`. | +| `expand` | string | No | Comma-separated relations to embed: `owned_by`, `parent`. Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `v1_access` | number | No | v1 compatibility only. Access | +| `v1_view_props` | json | No | v1 compatibility only. View props | +| `v1_logo_props` | json | No | v1 compatibility only. Logo props | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Project- Pages | +| ↳ `access` | json | Access | +| ↳ `archived_at` | string | Archived at | +| ↳ `collection_id` | json | Collection id | +| ↳ `color` | json | Color | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `description_html` | json | Description html | +| ↳ `description_stripped` | json | Description stripped | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `id` | json | Id | +| ↳ `is_global` | boolean | Is global | +| ↳ `is_locked` | json | Is locked | +| ↳ `logo_props` | json | Logo props | +| ↳ `name` | json | Name | +| ↳ `owned_by_id` | string | Owned by id | +| ↳ `parent_id` | json | Parent id | +| ↳ `sort_order` | json | Sort order | +| ↳ `view_props` | json | View props | +| ↳ `owned_by` | json | Owned by | +| ↳ `parent` | json | Parent | +| ↳ `description_binary` | string | Description binary | +| ↳ `description` | json | Description | +| ↳ `updated_at` | string | Updated at | +| ↳ `anchor` | string | Anchor | +| ↳ `workspace` | string | Workspace | +| ↳ `projects` | array | Projects | +| ↳ `page_collection_id` | string | Page collection id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | json | Updated by | +| ↳ `description_json` | object | Description json | +| ↳ `type` | string | Type | +| ↳ `content` | array | Content | +| ↳ `type` | string | Asset Id | +| ↳ `attrs` | object | Attrs | +| ↳ `id` | json | Id | +| ↳ `textAlign` | json | Id | +| ↳ `aiSuggestion` | json | Id | +| ↳ `content` | array | Content | +| ↳ `text` | string | Asset Id | +| ↳ `type` | string | Asset Id | + +### Plane Update a state + +Update a state in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the state belongs to. | +| `pk` | string | Yes | The id of the state to update. | +| `name` | string | No | New display name, unique within the project. Maximum 255 characters. Renaming is safe for reporting: boards and charts key off `group`, not `name`. | +| `color` | string | No | Hex color used wherever the state is rendered, for example `#3f76ff`. Maximum 255 characters. | +| `description` | string | No | Free-form description of what the state means in this workflow. | +| `group` | string | No | Move the state to a different workflow group. This changes how every work item in the state is counted by boards, charts, and cycle progress, so switching a state from `started` to `completed` retroactively changes what those work items report as. - `backlog` — Not yet scheduled - `unstarted` — Scheduled but not begun - `started` — Actively in progress - `completed` — Finished successfully - `cancelled` — Closed without completion - `triage` — Awaiting intake review | +| `sequence` | number | No | Ordering weight within the project. Lower values sort first. Set it to reposition the state in the workflow. | +| `is_default` | boolean | No | Make this the project's default state — where work items land when no `state_id` is supplied. A project has exactly one default, so setting this to `true` clears the flag on the state that held it. | +| `external_id` | string | No | Your system's identifier for this state, for sync and import correlation. Maximum 255 characters. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `color`, `created_at`, `created_by_id`, `description`, `external_id`, `external_source`, `group`, `id`, `is_default`, `is_triage`, `name`, `sequence`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `is_triage` | boolean | No | v1 compatibility only. Is triage. | +| `default` | boolean | No | v1 compatibility only. Default. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 States | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `description` | json | Description | +| ↳ `color` | json | Color | +| ↳ `group` | json | Group | +| ↳ `sequence` | json | Sequence | +| ↳ `is_default` | boolean | Is default | +| ↳ `is_triage` | json | Is triage | +| ↳ `external_id` | string | External id | +| ↳ `external_source` | string | External source | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `default` | boolean | Default | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | string | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `slug` | string | Slug | +| ↳ `deleted_by` | json | Deleted by | + +### Plane Update a webhook + +Update a webhook in Plane. Requires API v2. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `pk` | string | Yes | The webhook id. | +| `content_type` | string | No | - `application/json` - application/json - `application/x-www-form-urlencoded` - application/x-www-form-urlencoded One of `application/json`, `application/x-www-form-urlencoded`. | +| `is_active` | boolean | No | Whether the record is active. | +| `name` | string | No | Display name. Maximum 255 characters. Nullable. | +| `scopes` | json | No | The scopes. | +| `url` | string | No | Target URL. | +| `version` | string | No | Version string, for example `1.4.0`. Maximum 10 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted**, not returned as `null`. `id` always comes back. Pass `all` for every requestable field. An unknown name is a `400`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). Requestable here: `content_type`, `created_at`, `created_by_id`, `id`, `is_active`, `name`, `scopes`, `url`, `version`. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Webhooks | +| ↳ `content_type` | string | Content type | +| ↳ `created_at` | string | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `id` | string | Unique identifier. | +| ↳ `is_active` | boolean | Is active | +| ↳ `name` | string | Name | +| ↳ `scopes` | array | Scopes | +| ↳ `url` | string | Url | +| ↳ `version` | string | Version | + +### Plane Update a work item + +Update a work item in Plane. Supports API v1 compatibility. + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Plane personal access token from Profile → API tokens. | +| `baseUrl` | string | No | Plane instance origin, optionally with a reverse-proxy path prefix. Defaults to https://api.plane.so. Do not include /api/v1 or /api/v2. | +| `apiVersion` | string | No | API version: v2 \(default\) for Plane Cloud and current commercial instances; v1 for Community Edition or older self-hosted instances. Unsupported operations or fields fail explicitly. | +| `bodyOverrides` | json | No | JSON overrides using the canonical input names for the selected API version. Preserves empty strings, null, and empty arrays; unsupported fields are rejected. | +| `workspace_slug` | string | Yes | Workspace slug from the Plane URL \(for example, my-team\). | +| `project_id` | string | Yes | The project the work item belongs to. | +| `pk` | string | Yes | The work item's UUID. This lookup is UUID-only — a `PROJ-142` identifier here returns `404`. | +| `name` | string | No | New title. Maximum 255 characters. | +| `description_html` | string | No | Replacement rich-text body as HTML. Sanitized on the way in; content that can't be sanitized is rejected with a `400`. Not part of the read shape, so it won't appear in the response. | +| `priority` | string | No | One of `urgent`, `high`, `medium`, `low`, `none`. | +| `state_id` | string | No | Move the work item to another state of the same project. This is the field workflow rules police — see \[Workflow rules\]\(#workflow-rules-can-reject-a-transition\). | +| `state` | string | No | The target state's **name** instead of its id, for example `Done`. Matched case-insensitively within the project. Write-only. Sending both `state` and `state_id` is a `400`. | +| `type_id` | string | No | Change the work item type. Send `null` to make the work item untyped. | +| `type` | string | No | The type's **name** instead of its id, for example `Bug`. Write-only. | +| `parent_id` | string | No | Re-parent the work item. The parent must be in the same workspace and may be in a different project. Send `null` to detach it and make it top-level. | +| `parent` | string | No | The parent's **identifier** instead of its id, for example `PROJ-118`. Write-only. | +| `assignee_ids` | json | No | **Replaces** the whole assignee set — it is not additive. Send the complete list you want, `\[\]` to unassign everyone, or omit the field to leave assignees untouched. | +| `assignees` | json | No | Member **email addresses** instead of ids. Same replace-the-set semantics. Every address must belong to an active, assignable project member. Write-only. | +| `label_ids` | json | No | **Replaces** the whole label set. Send `\[\]` to strip all labels, or omit the field to leave them untouched. | +| `labels` | json | No | Label **names** instead of ids. Same replace-the-set semantics. A name that exists at both project and workspace level is ambiguous and returns a `400` telling you to use `label_ids`. Write-only. | +| `estimate_point_id` | string | No | Change the estimate point, from the project's active estimate system. Send `null` to clear the estimate. | +| `estimate` | string | No | The estimate point's **value** instead of its id, for example `5`. Write-only. | +| `start_date` | string | No | Planned start, or `null` to clear it. Must not be after `target_date`. | +| `target_date` | string | No | Planned due date, or `null` to clear it. | +| `external_id` | string | No | Your system's identifier for this work item. Maximum 255 characters. Filterable on \[List work items\]\(https://developers.plane.so/api-reference/v2/work-items/list-work-items), but not returned on reads. | +| `external_source` | string | No | The system `external_id` came from, for example `github` or `jira`. Maximum 255 characters. | +| `fields` | string | No | Comma-separated list of fields to return. Unrequested keys are **omitted** from the response, not returned as `null`, so absent means "not requested" and `null` means "actually null". `id` always comes back whether or not you name it. Pass `all` for every requestable field. An unknown name is a `400` that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving. Requestable here: `archived_at`, `assignee_ids`, `created_at`, `created_by_id`, `custom_fields`, `cycle_id`, `id`, `identifier`, `is_draft`, `label_ids`, `module_ids`, `name`, `parent_id`, `priority`, `project_id`, `sequence_id`, `start_date`, `state_id`, `target_date`, `type_id`. See \[Sparse fields\]\(https://developers.plane.so/api-reference/v2/sparse-fields). | +| `expand` | string | No | Comma-separated relations to embed alongside the ids: `assignees` \(the assigned users\), `cycle` \(the cycle it belongs to\), `labels` \(the applied labels\), `modules` \(the modules it belongs to\), `parent` \(its parent work item\), `state` \(the work item's state object\), `type` \(its work item type\). Expanded relations appear beside their ID fields and survive sparse field filtering. Use only the relation names listed above. | +| `deleted_at` | string | No | v1 compatibility only. Deleted at. | +| `point` | number | No | v1 compatibility only. Point. | +| `sequence_id` | number | No | v1 compatibility only. Sequence id. | +| `sort_order` | number | No | v1 compatibility only. Sort order. | +| `archived_at` | string | No | v1 compatibility only. Archived at. | +| `is_draft` | boolean | No | v1 compatibility only. Is draft. | +| `created_by` | string | No | v1 compatibility only. Created by. | +| `custom_fields` | json | No | JSON custom field values. API v2 only. | +| `cycle_id` | string | No | Cycle ID. API v2 only. | +| `module_ids` | json | No | Module IDs. API v2 only. | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `result` | object | Plane V2 Work- Items | +| ↳ `id` | json | Id | +| ↳ `name` | json | Name | +| ↳ `identifier` | string | Identifier | +| ↳ `sequence_id` | json | Sequence id | +| ↳ `priority` | json | Priority | +| ↳ `state_id` | string | State id | +| ↳ `type_id` | string | Type id | +| ↳ `assignee_ids` | array | Assignee ids | +| ↳ `label_ids` | array | Label ids | +| ↳ `parent_id` | string | Parent id | +| ↳ `start_date` | string | Start date | +| ↳ `target_date` | string | Target date | +| ↳ `is_draft` | json | Is draft | +| ↳ `archived_at` | string | Archived at | +| ↳ `created_at` | json | Created at | +| ↳ `created_by_id` | string | Created by id | +| ↳ `custom_fields` | json | Custom fields | +| ↳ `assignees` | array | Assignees | +| ↳ `id` | string | Asset Id | +| ↳ `display_name` | string | Asset Id | +| ↳ `avatar_url` | string | Asset Id | +| ↳ `email` | string | Asset Id | +| ↳ `first_name` | string | Asset Id | +| ↳ `last_name` | string | Asset Id | +| ↳ `avatar` | string | Asset Id | +| ↳ `cycle` | json | Cycle | +| ↳ `labels` | array | Labels | +| ↳ `id` | string | Asset Id | +| ↳ `deleted_by` | json | Id | +| ↳ `created_at` | string | Asset Id | +| ↳ `updated_at` | string | Asset Id | +| ↳ `deleted_at` | json | Id | +| ↳ `name` | string | Asset Id | +| ↳ `description` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `sort_order` | number | Sort Order | +| ↳ `external_source` | json | Id | +| ↳ `external_id` | json | Id | +| ↳ `created_by` | string | Asset Id | +| ↳ `updated_by` | json | Id | +| ↳ `workspace` | string | Asset Id | +| ↳ `project` | string | Asset Id | +| ↳ `parent` | json | Id | +| ↳ `modules` | array | Modules | +| ↳ `parent` | json | Parent | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `sequence_id` | number | Access | +| ↳ `state` | json | State | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `color` | string | Asset Id | +| ↳ `group` | json | Group | +| ↳ `type` | json | Type | +| ↳ `id` | string | Asset Id | +| ↳ `name` | string | Asset Id | +| ↳ `logo_props` | json | Logo Props | +| ↳ `is_epic` | boolean | Has Pages | +| ↳ `project_id` | string | Project id | +| ↳ `cycle_id` | string | Cycle id | +| ↳ `module_ids` | array | Module ids | +| ↳ `updated_at` | string | Updated at | +| ↳ `deleted_at` | string | Deleted at | +| ↳ `point` | number | Point | +| ↳ `description_html` | string | Description html | +| ↳ `description_stripped` | string | Description stripped | +| ↳ `description_binary` | string | Description binary | +| ↳ `sort_order` | number | Sort order | +| ↳ `completed_at` | string | Completed at | +| ↳ `external_source` | string | External source | +| ↳ `external_id` | string | External id | +| ↳ `created_by` | string | Created by | +| ↳ `updated_by` | string | Updated by | +| ↳ `project` | json | Project | +| ↳ `workspace` | string | Workspace | +| ↳ `estimate_point` | string | Estimate point | +| ↳ `description` | string | Description | +| ↳ `deleted_by` | json | Deleted by | +| ↳ `created_via` | json | Created via | +| ↳ `updated_via` | json | Updated via | +| ↳ `last_activity_at` | string | Last activity at | +| ↳ `min_assignee_first_name` | string | Min assignee first name | +| ↳ `min_label_name` | string | Min label name | +| ↳ `min_module_name` | string | Min module name | +| ↳ `priority_rank` | number | Priority rank | +| ↳ `state_group` | string | State group | + + + +## Triggers + +A **Trigger** is a block that starts a workflow when an event happens in this service. + +### Plane All Events + +Trigger a workflow for any signed Plane event. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Cycle Archived + +Trigger a workflow for Plane cycle archived events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Cycle Created + +Trigger a workflow for Plane cycle created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Cycle Deleted + +Trigger a workflow for Plane cycle deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Cycle Updated + +Trigger a workflow for Plane cycle updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Milestone Created + +Trigger a workflow for Plane milestone created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Milestone Deleted + +Trigger a workflow for Plane milestone deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Milestone Updated + +Trigger a workflow for Plane milestone updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Module Archived + +Trigger a workflow for Plane module archived events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Module Created + +Trigger a workflow for Plane module created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Module Deleted + +Trigger a workflow for Plane module deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Module Updated + +Trigger a workflow for Plane module updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Archived + +Trigger a workflow for Plane page archived events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Comment Created + +Trigger a workflow for Plane page comment created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Comment Deleted + +Trigger a workflow for Plane page comment deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Comment Updated + +Trigger a workflow for Plane page comment updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Created + +Trigger a workflow for Plane page created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Deleted + +Trigger a workflow for Plane page deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Page Updated + +Trigger a workflow for Plane page updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Project Archived + +Trigger a workflow for Plane project archived events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Project Created + +Trigger a workflow for Plane project created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Project Deleted + +Trigger a workflow for Plane project deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Project Updated + +Trigger a workflow for Plane project updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Archived + +Trigger a workflow for Plane work item archived events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Attachment Created + +Trigger a workflow for Plane work item attachment created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Attachment Deleted + +Trigger a workflow for Plane work item attachment deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Attachment Updated + +Trigger a workflow for Plane work item attachment updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Comment Created + +Trigger a workflow for Plane work item comment created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Comment Deleted + +Trigger a workflow for Plane work item comment deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Comment Updated + +Trigger a workflow for Plane work item comment updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Created + +Trigger a workflow for Plane work item created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Deleted + +Trigger a workflow for Plane work item deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Dependency Created + +Trigger a workflow for Plane work item dependency created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Dependency Deleted + +Trigger a workflow for Plane work item dependency deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Link Created + +Trigger a workflow for Plane work item link created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Link Deleted + +Trigger a workflow for Plane work item link deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Link Updated + +Trigger a workflow for Plane work item link updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Page Link Created + +Trigger a workflow for Plane work item page link created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Page Link Deleted + +Trigger a workflow for Plane work item page link deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Relation Created + +Trigger a workflow for Plane work item relation created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Relation Deleted + +Trigger a workflow for Plane work item relation deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Updated + +Trigger a workflow for Plane work item updated events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Vote Created + +Trigger a workflow for Plane work item vote created events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + + +--- + +### Plane Work Item Vote Deleted + +Trigger a workflow for Plane work item vote deleted events. + +#### Configuration + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `autoRegister` | boolean | No | Requires the Plane v2 webhook API. Use manual setup for Community Edition. | +| `triggerApiKey` | string | Yes | API Token | +| `triggerBaseUrl` | string | No | Instance URL | +| `triggerWorkspaceSlug` | string | Yes | Workspace Slug | +| `webhookSecret` | string | Yes | Webhook Secret | +| `projectId` | string | No | Self-hosted v1 deletions without project information are skipped when this filter is set. | +| `workspaceId` | string | No | Workspace ID | + +#### Output + +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `version` | string | Payload version: v1 or v2. | +| `event` | string | Original Plane event or v1 resource name. | +| `eventName` | string | Normalized event name, such as workitem.updated. | +| `action` | string | v1 action; null for v2. | +| `event_id` | string | v2 event ID, stable across retries; null for v1. | +| `delivery_id` | string | Delivery attempt ID from the payload or X-Plane-Delivery header. | +| `entity_id` | string | v2 primary entity ID; null for v1. | +| `entity_type` | string | v2 entity type; null for v1. | +| `webhook_id` | string | Plane webhook configuration ID. | +| `workspace_id` | string | Plane workspace ID. | +| `workspace_slug` | string | v1 workspace slug; null for v2. | +| `data` | json | Complete entity payload, including resource-specific fields. v2 deletions send an empty object. | +| `activity` | json | v1 changed field, old/new values, actor and identifiers; null for v2. | +| `previous_attributes` | json | v2 previous changed values or full deleted record; null for v1. | + diff --git a/apps/sim/app/api/webhooks/route.test.ts b/apps/sim/app/api/webhooks/route.test.ts index 64773264d92..6417c4382b5 100644 --- a/apps/sim/app/api/webhooks/route.test.ts +++ b/apps/sim/app/api/webhooks/route.test.ts @@ -12,9 +12,12 @@ import { telemetryMock, workflowAuthzMockFns, } from '@sim/testing' +import { toRecord } from '@sim/utils/object' import { beforeEach, describe, expect, it, vi } from 'vitest' const mocks = vi.hoisted(() => ({ + activateExternalWebhookSubscription: vi.fn(), + cleanupExternalWebhook: vi.fn(), authorizeCredentialUseForAuth: vi.fn(), configurePolling: vi.fn(), createExternalWebhookSubscription: vi.fn(), @@ -35,7 +38,8 @@ vi.mock('@/lib/webhooks/env-resolver', () => ({ resolveEnvVarsInObject: mocks.resolveEnvVarsInObject, })) vi.mock('@/lib/webhooks/provider-subscriptions', () => ({ - cleanupExternalWebhook: vi.fn(), + activateExternalWebhookSubscription: mocks.activateExternalWebhookSubscription, + cleanupExternalWebhook: mocks.cleanupExternalWebhook, createExternalWebhookSubscription: mocks.createExternalWebhookSubscription, shouldRecreateExternalWebhookSubscription: mocks.shouldRecreateExternalWebhookSubscription, })) @@ -462,3 +466,156 @@ describe('POST /api/webhooks credential references', () => { expect(mocks.authorizeCredentialUseForAuth).not.toHaveBeenCalled() }) }) + +describe('POST /api/webhooks subscription replacement recovery', () => { + beforeEach(setupUpsertMocks) + it.each(['create', 'save'])( + 'preserves the live subscription when replacement fails at %s', + async (failure) => { + queueUpdatePathRows(true, { + autoRegister: true, + externalId: 'external-old', + webhookSecret: 'old-secret', + }) + mocks.getProviderHandler.mockReturnValue({ activateSubscription: async () => undefined }) + mocks.shouldRecreateExternalWebhookSubscription.mockReturnValue(true) + const external = new Set(['external-old']) + mocks.createExternalWebhookSubscription.mockImplementation(async () => { + if (failure === 'create') throw new Error('creation unavailable') + external.add('external-new') + return { + updatedProviderConfig: { + autoRegister: true, + externalId: 'external-new', + webhookSecret: 'new-secret', + subscriptionActivationPending: true, + }, + externalSubscriptionCreated: true, + } + }) + if (failure === 'save') + dbChainMockFns.set.mockImplementation(() => { + throw new Error('database unavailable') + }) + mocks.cleanupExternalWebhook.mockImplementation(async (row) => { + external.delete(String(toRecord(row.providerConfig).externalId)) + }) + expect((await POST(upsertRequest({ autoRegister: true }))).status).toBe(500) + expect([...external]).toEqual(['external-old']) + } + ) + it.each([false, true])( + 'retains recoverable state when prior cleanup fails: %s', + async (priorCleanupFails) => { + let cleanupUnavailable = priorCleanupFails + let activationMustFail = !priorCleanupFails + let nextExternalId = 0 + let persisted: Record = { + id: 'webhook-1', + workflowId: 'workflow-1', + blockId: 'block-1', + path: 'inbound-orders', + provider: 'plane', + isActive: true, + archivedAt: null, + providerConfig: { + autoRegister: true, + projectId: 'prior', + externalId: 'external-old', + webhookSecret: 'old-secret', + }, + } + const external = new Map([['external-old', { active: true }]]) + const desired = { autoRegister: true, projectId: 'next' } + mocks.getProviderHandler.mockReturnValue({ + createSubscription: async () => undefined, + activateSubscription: async () => undefined, + }) + mocks.shouldRecreateExternalWebhookSubscription.mockImplementation( + ({ previousConfig, nextConfig }) => previousConfig.projectId !== nextConfig.projectId + ) + const defaultSet = dbChainMockFns.set.getMockImplementation() + dbChainMockFns.set.mockImplementation((...args: unknown[]) => { + persisted = { ...persisted, ...structuredClone(toRecord(args[0])) } + return defaultSet?.(...args) + }) + dbChainMockFns.returning.mockImplementation(async () => [structuredClone(persisted)]) + mocks.createExternalWebhookSubscription.mockImplementation(async (_request, row) => { + const externalId = `external-${++nextExternalId}` + external.set(externalId, { active: false }) + return { + updatedProviderConfig: { + ...toRecord(row.providerConfig), + externalId, + webhookSecret: 'new-secret', + subscriptionActivationPending: true, + }, + externalSubscriptionCreated: true, + } + }) + mocks.activateExternalWebhookSubscription.mockImplementation(async (_request, row) => { + const resource = external.get(String(toRecord(row.providerConfig).externalId)) + if (!resource) throw new Error('provider subscription missing') + if (activationMustFail) { + activationMustFail = false + throw new Error('activation unavailable') + } + resource.active = true + }) + mocks.cleanupExternalWebhook.mockImplementation( + async (row, _workflow, _requestId, options) => { + const externalId = String(toRecord(row.providerConfig).externalId) + if (cleanupUnavailable && externalId === 'external-old') { + if (options?.throwOnError) throw new Error('cleanup unavailable') + return + } + external.delete(externalId) + } + ) + function queueCurrentRows(): void { + queueTableRows(workflow, [ + { id: 'workflow-1', userId: 'actor-1', workspaceId: 'workspace-1' }, + ]) + queueTableRows(webhook, [{ id: 'webhook-1' }]) + queueTableRows(webhook, [structuredClone(persisted)]) + } + function replacementRequest() { + return createMockRequest('POST', { + workflowId: 'workflow-1', + path: 'inbound-orders', + provider: 'plane', + providerConfig: desired, + }) + } + queueCurrentRows() + expect((await POST(replacementRequest())).status).toBe(500) + expect(external.size).toBe(2) + const retainedConfig = toRecord(persisted.providerConfig) + if (priorCleanupFails) { + expect(retainedConfig.projectId).toBe('next') + expect(toRecord(retainedConfig.previousSubscription).providerConfig).toEqual({ + autoRegister: true, + projectId: 'prior', + externalId: 'external-old', + webhookSecret: 'old-secret', + }) + expect(external.get('external-old')?.active).toBe(true) + expect(external.get(String(retainedConfig.externalId))?.active).toBe(true) + } else { + expect(retainedConfig.projectId).toBe('next') + expect(retainedConfig.webhookSecret).toBe('new-secret') + expect(external.get('external-old')?.active).toBe(true) + expect(external.get(String(retainedConfig.externalId))?.active).toBe(false) + } + cleanupUnavailable = false + queueCurrentRows() + expect((await POST(replacementRequest())).status).toBe(200) + expect(external.size).toBe(1) + const recoveredConfig = toRecord(persisted.providerConfig) + expect(recoveredConfig.projectId).toBe('next') + expect(recoveredConfig.webhookSecret).toBe('new-secret') + expect(external.get(String(recoveredConfig.externalId))?.active).toBe(true) + if (!priorCleanupFails) expect(recoveredConfig.externalId).toBe(retainedConfig.externalId) + } + ) +}) diff --git a/apps/sim/app/api/webhooks/route.ts b/apps/sim/app/api/webhooks/route.ts index c41fea88902..61f8d30c54d 100644 --- a/apps/sim/app/api/webhooks/route.ts +++ b/apps/sim/app/api/webhooks/route.ts @@ -27,6 +27,7 @@ import { import { captureServerEvent } from '@/lib/posthog/server' import { resolveEnvVarsInObject } from '@/lib/webhooks/env-resolver' import { + activateExternalWebhookSubscription, cleanupExternalWebhook, createExternalWebhookSubscription, shouldRecreateExternalWebhookSubscription, @@ -383,7 +384,11 @@ export const POST = withRouteHandler(async (request: NextRequest) => { * from the client nor carried forward from a stored row; Gmail and Outlook * polling setup derive it again from the credential after the save. */ - const originalProviderConfig: Record = omit(providerConfig || {}, ['userId']) + const originalProviderConfig: Record = omit(providerConfig || {}, [ + 'userId', + 'previousSubscription', + 'subscriptionActivationPending', + ]) let resolvedProviderConfig = await resolveEnvVarsInObject( originalProviderConfig, userId, @@ -471,6 +476,10 @@ export const POST = withRouteHandler(async (request: NextRequest) => { const credentialIds = [ originalProviderConfig.credentialId, usesStoredCredential ? existingWebhook.providerConfig?.credentialId : undefined, + existingWebhook + ? toRecord(toRecord(existingWebhook.providerConfig?.previousSubscription).providerConfig) + .credentialId + : undefined, ].filter((id) => id != null && id !== '') /** The row stores the unresolved text, so only a literal credential id can be authorized. */ @@ -500,6 +509,50 @@ export const POST = withRouteHandler(async (request: NextRequest) => { } } + if (existingWebhook && shouldRecreateSubscription) { + const pendingPrevious = toRecord(existingWebhook.providerConfig?.previousSubscription) + if (typeof pendingPrevious.provider === 'string') { + if (existingWebhook.providerConfig?.subscriptionActivationPending === true) { + await activateExternalWebhookSubscription( + request, + existingWebhook, + workflowRecord, + userId, + requestId + ) + existingWebhook.providerConfig.subscriptionActivationPending = false + await db + .update(webhook) + .set({ providerConfig: existingWebhook.providerConfig }) + .where(eq(webhook.id, existingWebhook.id)) + } + await cleanupExternalWebhook( + { + ...existingWebhook, + provider: pendingPrevious.provider, + providerConfig: pendingPrevious.providerConfig, + }, + workflowRecord, + requestId, + { throwOnError: true } + ) + const currentConfig = omit(toRecord(existingWebhook.providerConfig), [ + 'previousSubscription', + ]) + await db + .update(webhook) + .set({ providerConfig: currentConfig }) + .where(eq(webhook.id, existingWebhook.id)) + existingWebhook.providerConfig = currentConfig + } + } + + const deferPreviousCleanup = Boolean( + existingWebhook && + shouldRecreateSubscription && + (getProviderHandler(provider).activateSubscription || + getProviderHandler(existingWebhook.provider).activateSubscription) + ) if (!existingWebhook || shouldRecreateSubscription) { try { const result = await createExternalWebhookSubscription( @@ -513,6 +566,12 @@ export const POST = withRouteHandler(async (request: NextRequest) => { mergeNonUserFields(configToSave, updatedConfig, userProvided) resolvedProviderConfig = updatedConfig externalSubscriptionCreated = result.externalSubscriptionCreated + if (deferPreviousCleanup && existingWebhook) { + configToSave.previousSubscription = { + provider: existingWebhook.provider, + providerConfig: existingWebhook.providerConfig, + } + } } catch (err) { logger.error(`[${requestId}] Error creating external webhook subscription`, err) return NextResponse.json( @@ -583,7 +642,7 @@ export const POST = withRouteHandler(async (request: NextRequest) => { logger.error(`[${requestId}] DB save failed, cleaning up external subscription`, dbError) try { await cleanupExternalWebhook( - createTempWebhookData(configToSave), + createTempWebhookData(omit(configToSave, ['previousSubscription'])), workflowRecord, requestId ) @@ -597,7 +656,50 @@ export const POST = withRouteHandler(async (request: NextRequest) => { throw dbError } - if (existingWebhook && shouldRecreateSubscription) { + if (savedWebhook) { + if ( + !existingWebhook || + shouldRecreateSubscription || + configToSave.subscriptionActivationPending === true + ) { + await activateExternalWebhookSubscription( + request, + savedWebhook, + workflowRecord, + userId, + requestId + ) + if (configToSave.subscriptionActivationPending === true) { + configToSave.subscriptionActivationPending = false + await db + .update(webhook) + .set({ providerConfig: configToSave }) + .where(eq(webhook.id, savedWebhook.id)) + savedWebhook.providerConfig = configToSave + } + } + const previousSubscription = toRecord(configToSave.previousSubscription) + if (typeof previousSubscription.provider === 'string') { + await cleanupExternalWebhook( + { + ...savedWebhook, + provider: previousSubscription.provider, + providerConfig: previousSubscription.providerConfig, + }, + workflowRecord, + requestId, + { throwOnError: true } + ) + configToSave.previousSubscription = undefined + await db + .update(webhook) + .set({ providerConfig: configToSave }) + .where(eq(webhook.id, savedWebhook.id)) + savedWebhook.providerConfig = configToSave + } + } + + if (existingWebhook && shouldRecreateSubscription && !deferPreviousCleanup) { try { await cleanupExternalWebhook(existingWebhook, workflowRecord, requestId) } catch (cleanupError) { diff --git a/apps/sim/blocks/blocks/plane.ts b/apps/sim/blocks/blocks/plane.ts new file mode 100644 index 00000000000..9020a07f185 --- /dev/null +++ b/apps/sim/blocks/blocks/plane.ts @@ -0,0 +1,4533 @@ +import { PlaneIcon } from '@/components/icons' +import type { BlockConfig, BlockMeta } from '@/blocks/types' +import { AuthMode, IntegrationType } from '@/blocks/types' +import { getTrigger } from '@/triggers' + +interface PlaneOperationField { + field: string + type: string + required: boolean +} + +const OPERATION_FIELDS: Record> = { + plane_get_current_user: {}, + plane_create_cycle: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + description: { field: 'description', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + end_date: { field: 'end_date', type: 'string', required: false }, + timezone: { field: 'timezone', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + logo_props: { field: 'logo_props_json', type: 'json', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + owned_by: { field: 'owned_by', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_cycle: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_cycle: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_list_cycles: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + owned_by_id: { field: 'owned_by_id', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + search: { field: 'search', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + cycle_view: { field: 'cycle_view_string', type: 'string', required: false }, + }, + plane_manage_cycle_work_items: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + add: { field: 'add', type: 'array', required: false }, + remove: { field: 'remove', type: 'array', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_transfer_cycle_work_items: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + new_cycle_id: { field: 'new_cycle_id', type: 'string', required: true }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_update_cycle: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + end_date: { field: 'end_date', type: 'string', required: false }, + timezone: { field: 'timezone', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + logo_props: { field: 'logo_props_json', type: 'json', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + owned_by: { field: 'owned_by', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_label: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + color: { field: 'color', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_label: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_label: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_list_labels: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + search: { field: 'search', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + parent_id__isnull: { field: 'parent_id__isnull', type: 'boolean', required: false }, + }, + plane_update_label: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: false }, + color: { field: 'color', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_module: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + description: { field: 'description', type: 'string', required: false }, + status: { field: 'status', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + target_date: { field: 'target_date', type: 'string', required: false }, + lead_id: { field: 'lead_id', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + logo_props: { field: 'logo_props_json', type: 'json', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + members: { field: 'members', type: 'array', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_module: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_module: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_list_modules: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + status: { field: 'status', type: 'string', required: false }, + lead_id: { field: 'lead_id', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + search: { field: 'search', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + status__in: { field: 'status__in', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_manage_module_work_items: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + add: { field: 'add', type: 'array', required: false }, + remove: { field: 'remove', type: 'array', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_update_module: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + status: { field: 'status', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + target_date: { field: 'target_date', type: 'string', required: false }, + lead_id: { field: 'lead_id', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + logo_props: { field: 'logo_props_json', type: 'json', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + members: { field: 'members', type: 'array', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_project_page: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + access: { field: 'access_string', type: 'string', required: false }, + archived_at: { field: 'archived_at', type: 'string', required: false }, + collection_id: { field: 'collection_id', type: 'string', required: false }, + color: { field: 'color', type: 'string', required: false }, + description_html: { field: 'description_html', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + is_locked: { field: 'is_locked', type: 'boolean', required: false }, + logo_props: { field: 'logo_props_string', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + view_props: { field: 'view_props', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + v1_access: { field: 'v1_access', type: 'integer', required: false }, + v1_view_props: { field: 'v1_view_props', type: 'object', required: false }, + v1_logo_props: { field: 'v1_logo_props', type: 'object', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_project_page: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_project_page: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + }, + plane_list_project_pages: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + access: { field: 'access_integer', type: 'integer', required: false }, + collection_id: { field: 'collection_id', type: 'string', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + is_global: { field: 'is_global', type: 'boolean', required: false }, + is_locked: { field: 'is_locked', type: 'boolean', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + owned_by_id: { field: 'owned_by_id', type: 'string', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + search: { field: 'search', type: 'string', required: false }, + type: { field: 'type', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_update_project_page: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + access: { field: 'access_string', type: 'string', required: false }, + archived_at: { field: 'archived_at', type: 'string', required: false }, + collection_id: { field: 'collection_id', type: 'string', required: false }, + color: { field: 'color', type: 'string', required: false }, + description_html: { field: 'description_html', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + is_locked: { field: 'is_locked', type: 'boolean', required: false }, + logo_props: { field: 'logo_props_string', type: 'string', required: false }, + name: { field: 'name', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + view_props: { field: 'view_props', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + v1_access: { field: 'v1_access', type: 'integer', required: false }, + v1_view_props: { field: 'v1_view_props', type: 'object', required: false }, + v1_logo_props: { field: 'v1_logo_props', type: 'object', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_archive_project: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_create_project: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + identifier: { field: 'identifier', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + archive_in: { field: 'archive_in', type: 'integer', required: false }, + close_in: { field: 'close_in', type: 'integer', required: false }, + cover_image: { field: 'cover_image', type: 'string', required: false }, + cycle_view: { field: 'cycle_view_boolean', type: 'boolean', required: false }, + default_assignee_id: { field: 'default_assignee_id', type: 'string', required: false }, + default_state_id: { field: 'default_state_id', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + emoji: { field: 'emoji', type: 'string', required: false }, + estimate_id: { field: 'estimate_id', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + guest_view_all_features: { field: 'guest_view_all_features', type: 'boolean', required: false }, + icon_prop: { field: 'icon_prop', type: 'string', required: false }, + intake_view: { field: 'intake_view', type: 'boolean', required: false }, + is_issue_type_enabled: { field: 'is_issue_type_enabled', type: 'boolean', required: false }, + is_time_tracking_enabled: { + field: 'is_time_tracking_enabled', + type: 'boolean', + required: false, + }, + issue_views_view: { field: 'issue_views_view', type: 'boolean', required: false }, + logo_props: { field: 'logo_props_string', type: 'string', required: false }, + module_view: { field: 'module_view', type: 'boolean', required: false }, + network: { field: 'network_string', type: 'string', required: false }, + page_view: { field: 'page_view', type: 'boolean', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + project_lead_id: { field: 'project_lead_id', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + state_id: { field: 'state_id', type: 'string', required: false }, + target_date: { field: 'target_date', type: 'string', required: false }, + timezone: { field: 'timezone', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + v1_icon_prop: { field: 'v1_icon_prop', type: 'object', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_project: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_project_summary: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + counts: { field: 'counts', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_get_project: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_list_projects: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + count: { field: 'count', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + identifier: { field: 'identifier', type: 'string', required: false }, + include_archived: { field: 'include_archived', type: 'boolean', required: false }, + is_archived: { field: 'is_archived', type: 'boolean', required: false }, + key: { field: 'key', type: 'string', required: false }, + name: { field: 'name', type: 'string', required: false }, + network: { field: 'network_integer', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + priority__in: { field: 'priority__in_array', type: 'array', required: false }, + search: { field: 'search', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_unarchive_project: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_update_project: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + archive_in: { field: 'archive_in', type: 'integer', required: false }, + close_in: { field: 'close_in', type: 'integer', required: false }, + cover_image: { field: 'cover_image', type: 'string', required: false }, + cycle_view: { field: 'cycle_view_boolean', type: 'boolean', required: false }, + default_assignee_id: { field: 'default_assignee_id', type: 'string', required: false }, + default_state_id: { field: 'default_state_id', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + emoji: { field: 'emoji', type: 'string', required: false }, + estimate_id: { field: 'estimate_id', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + guest_view_all_features: { field: 'guest_view_all_features', type: 'boolean', required: false }, + icon_prop: { field: 'icon_prop', type: 'string', required: false }, + identifier: { field: 'identifier', type: 'string', required: false }, + intake_view: { field: 'intake_view', type: 'boolean', required: false }, + is_issue_type_enabled: { field: 'is_issue_type_enabled', type: 'boolean', required: false }, + is_time_tracking_enabled: { + field: 'is_time_tracking_enabled', + type: 'boolean', + required: false, + }, + issue_views_view: { field: 'issue_views_view', type: 'boolean', required: false }, + logo_props: { field: 'logo_props_string', type: 'string', required: false }, + module_view: { field: 'module_view', type: 'boolean', required: false }, + name: { field: 'name', type: 'string', required: false }, + network: { field: 'network_string', type: 'string', required: false }, + page_view: { field: 'page_view', type: 'boolean', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + project_lead_id: { field: 'project_lead_id', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + state_id: { field: 'state_id', type: 'string', required: false }, + target_date: { field: 'target_date', type: 'string', required: false }, + timezone: { field: 'timezone', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + v1_icon_prop: { field: 'v1_icon_prop', type: 'object', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_state: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + color: { field: 'color', type: 'string', required: true }, + group: { field: 'group', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + sequence: { field: 'sequence', type: 'number', required: false }, + is_default: { field: 'is_default', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + is_triage: { field: 'is_triage', type: 'boolean', required: false }, + default: { field: 'default', type: 'boolean', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_state: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_state: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_list_states: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + group: { field: 'group', type: 'string', required: false }, + is_default: { field: 'is_default', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + search: { field: 'search', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + group__in: { field: 'group__in', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_update_state: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: false }, + color: { field: 'color', type: 'string', required: false }, + description: { field: 'description', type: 'string', required: false }, + group: { field: 'group', type: 'string', required: false }, + sequence: { field: 'sequence', type: 'number', required: false }, + is_default: { field: 'is_default', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + is_triage: { field: 'is_triage', type: 'boolean', required: false }, + default: { field: 'default', type: 'boolean', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_webhook: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + content_type: { field: 'content_type', type: 'string', required: false }, + is_active: { field: 'is_active', type: 'boolean', required: false }, + name: { field: 'name', type: 'string', required: false }, + scopes: { field: 'scopes', type: 'array', required: false }, + url: { field: 'url', type: 'string', required: true }, + version: { field: 'version', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_webhook: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_webhook: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_list_webhooks: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + count: { field: 'count', type: 'boolean', required: false }, + is_active: { field: 'is_active', type: 'boolean', required: false }, + name: { field: 'name', type: 'string', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + search: { field: 'search', type: 'string', required: false }, + url: { field: 'url', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_regenerate_webhook_secret: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_update_webhook: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + content_type: { field: 'content_type', type: 'string', required: false }, + is_active: { field: 'is_active', type: 'boolean', required: false }, + name: { field: 'name', type: 'string', required: false }, + scopes: { field: 'scopes', type: 'array', required: false }, + url: { field: 'url', type: 'string', required: false }, + version: { field: 'version', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_confirm_attachment_upload: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + is_uploaded: { field: 'upload_confirmed', type: 'boolean', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_attachment_upload: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + size: { field: 'size', type: 'integer', required: true }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + type: { field: 'attachment_type', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_attachment: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_attachment: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_list_attachments: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + count: { field: 'count', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + is_uploaded: { field: 'is_uploaded', type: 'boolean', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_create_comment: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + comment_html: { field: 'comment_html', type: 'string', required: false }, + access: { field: 'access_string', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + comment_json: { field: 'comment_json', type: 'object', required: false }, + created_at: { field: 'created_at', type: 'string', required: false }, + created_by: { field: 'created_by', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_comment: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_comment: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_list_comments: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + access: { field: 'access_string', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + search: { field: 'search', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_update_comment: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + comment_html: { field: 'comment_html', type: 'string', required: false }, + access: { field: 'access_string', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + comment_json: { field: 'comment_json', type: 'object', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_create_link: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + url: { field: 'url', type: 'string', required: true }, + metadata: { field: 'metadata', type: 'object', required: false }, + title: { field: 'title', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + created_by: { field: 'created_by', type: 'string', required: false }, + issue_id: { field: 'issue_id', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_link: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_link: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + }, + plane_list_links: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + count: { field: 'count', type: 'boolean', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + search: { field: 'search', type: 'string', required: false }, + title: { field: 'title', type: 'string', required: false }, + url: { field: 'url', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_update_link: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + work_item_id: { field: 'work_item_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + metadata: { field: 'metadata', type: 'object', required: false }, + title: { field: 'title', type: 'string', required: false }, + url: { field: 'url', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + issue_id: { field: 'issue_id', type: 'string', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_archive_work_item: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_create_work_item: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: true }, + description_html: { field: 'description_html', type: 'string', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + state_id: { field: 'state_id', type: 'string', required: false }, + state: { field: 'state', type: 'string', required: false }, + type_id: { field: 'type_id', type: 'string', required: false }, + type: { field: 'type', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + parent: { field: 'parent', type: 'string', required: false }, + assignee_ids: { field: 'assignee_ids', type: 'array', required: false }, + assignees: { field: 'assignees', type: 'array', required: false }, + label_ids: { field: 'label_ids', type: 'array', required: false }, + labels: { field: 'labels', type: 'array', required: false }, + estimate_point_id: { field: 'estimate_point_id', type: 'string', required: false }, + estimate: { field: 'estimate', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + target_date: { field: 'target_date', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + deleted_at: { field: 'deleted_at', type: 'string', required: false }, + point: { field: 'point', type: 'integer', required: false }, + sequence_id: { field: 'sequence_id', type: 'integer', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + archived_at: { field: 'archived_at', type: 'string', required: false }, + is_draft: { field: 'is_draft', type: 'boolean', required: false }, + created_by: { field: 'created_by', type: 'string', required: false }, + created_at: { field: 'created_at', type: 'string', required: false }, + custom_fields: { field: 'custom_fields', type: 'object', required: false }, + cycle_id: { field: 'cycle_id', type: 'string', required: false }, + module_ids: { field: 'module_ids', type: 'array', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, + plane_delete_work_item: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + }, + plane_get_work_item_by_identifier: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + identifier: { field: 'identifier', type: 'string', required: true }, + expand: { field: 'expand', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + }, + plane_get_work_item: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + expand: { field: 'expand', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + }, + plane_list_work_items: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + state_id: { field: 'state_id', type: 'string', required: false }, + state_id__in: { field: 'state_id__in_string', type: 'string', required: false }, + state_group: { field: 'state_group', type: 'string', required: false }, + state_group__in: { field: 'state_group__in_string', type: 'string', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + priority__in: { field: 'priority__in_string', type: 'string', required: false }, + assignee_id: { field: 'assignee_id', type: 'string', required: false }, + assignee_id__in: { field: 'assignee_id__in_string', type: 'string', required: false }, + label_id: { field: 'label_id', type: 'string', required: false }, + label_id__in: { field: 'label_id__in_string', type: 'string', required: false }, + type_id: { field: 'type_id', type: 'string', required: false }, + type_id__in: { field: 'type_id__in_string', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + parent_id__in: { field: 'parent_id__in_string', type: 'string', required: false }, + cycle_id: { field: 'cycle_id', type: 'string', required: false }, + cycle_id__in: { field: 'cycle_id__in_string', type: 'string', required: false }, + module_id: { field: 'module_id', type: 'string', required: false }, + module_id__in: { field: 'module_id__in_string', type: 'string', required: false }, + sequence_id: { field: 'sequence_id', type: 'integer', required: false }, + is_draft: { field: 'is_draft', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + created_at__gte: { field: 'created_at__gte', type: 'string', required: false }, + created_at__lte: { field: 'created_at__lte', type: 'string', required: false }, + updated_at__gte: { field: 'updated_at__gte', type: 'string', required: false }, + updated_at__lte: { field: 'updated_at__lte', type: 'string', required: false }, + start_date__gte: { field: 'start_date__gte', type: 'string', required: false }, + start_date__lte: { field: 'start_date__lte', type: 'string', required: false }, + target_date__gte: { field: 'target_date__gte', type: 'string', required: false }, + target_date__lte: { field: 'target_date__lte', type: 'string', required: false }, + search: { field: 'search', type: 'string', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + pql: { field: 'pql', type: 'string', required: false }, + filters: { field: 'filters', type: 'object', required: false }, + assignee_id__isnull: { field: 'assignee_id__isnull', type: 'boolean', required: false }, + label_id__isnull: { field: 'label_id__isnull', type: 'boolean', required: false }, + parent_id__isnull: { field: 'parent_id__isnull', type: 'boolean', required: false }, + cycle_id__isnull: { field: 'cycle_id__isnull', type: 'boolean', required: false }, + module_id__isnull: { field: 'module_id__isnull', type: 'boolean', required: false }, + }, + plane_list_workspace_work_items: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + assignee_id: { field: 'assignee_id', type: 'string', required: false }, + assignee_id__in: { field: 'assignee_id__in_array', type: 'array', required: false }, + assignee_id__isnull: { field: 'assignee_id__isnull', type: 'boolean', required: false }, + count: { field: 'count', type: 'boolean', required: false }, + created_at__gte: { field: 'created_at__gte', type: 'string', required: false }, + created_at__lte: { field: 'created_at__lte', type: 'string', required: false }, + cycle_id: { field: 'cycle_id', type: 'string', required: false }, + cycle_id__in: { field: 'cycle_id__in_array', type: 'array', required: false }, + cycle_id__isnull: { field: 'cycle_id__isnull', type: 'boolean', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + is_draft: { field: 'is_draft', type: 'boolean', required: false }, + label_id: { field: 'label_id', type: 'string', required: false }, + label_id__in: { field: 'label_id__in_array', type: 'array', required: false }, + label_id__isnull: { field: 'label_id__isnull', type: 'boolean', required: false }, + module_id: { field: 'module_id', type: 'string', required: false }, + module_id__in: { field: 'module_id__in_array', type: 'array', required: false }, + module_id__isnull: { field: 'module_id__isnull', type: 'boolean', required: false }, + offset: { field: 'offset', type: 'integer', required: false }, + order_by: { field: 'order_by', type: 'string', required: false }, + paginate: { field: 'paginate', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + parent_id__in: { field: 'parent_id__in_array', type: 'array', required: false }, + parent_id__isnull: { field: 'parent_id__isnull', type: 'boolean', required: false }, + per_page: { field: 'per_page', type: 'integer', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + priority__in: { field: 'priority__in_array', type: 'array', required: false }, + project_id: { field: 'project_id', type: 'string', required: false }, + project_id__in: { field: 'project_id__in', type: 'array', required: false }, + search: { field: 'search', type: 'string', required: false }, + sequence_id: { field: 'sequence_id', type: 'integer', required: false }, + start_date__gte: { field: 'start_date__gte', type: 'string', required: false }, + start_date__lte: { field: 'start_date__lte', type: 'string', required: false }, + state_group: { field: 'state_group', type: 'string', required: false }, + state_group__in: { field: 'state_group__in_array', type: 'array', required: false }, + state_id: { field: 'state_id', type: 'string', required: false }, + state_id__in: { field: 'state_id__in_array', type: 'array', required: false }, + target_date__gte: { field: 'target_date__gte', type: 'string', required: false }, + target_date__lte: { field: 'target_date__lte', type: 'string', required: false }, + type_id: { field: 'type_id', type: 'string', required: false }, + type_id__in: { field: 'type_id__in_array', type: 'array', required: false }, + updated_at__gte: { field: 'updated_at__gte', type: 'string', required: false }, + updated_at__lte: { field: 'updated_at__lte', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + cursor: { field: 'cursor', type: 'string', required: false }, + }, + plane_unarchive_work_item: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + }, + plane_update_work_item: { + workspace_slug: { field: 'workspace_slug', type: 'string', required: true }, + project_id: { field: 'project_id', type: 'string', required: true }, + pk: { field: 'pk', type: 'string', required: true }, + name: { field: 'name', type: 'string', required: false }, + description_html: { field: 'description_html', type: 'string', required: false }, + priority: { field: 'priority', type: 'string', required: false }, + state_id: { field: 'state_id', type: 'string', required: false }, + state: { field: 'state', type: 'string', required: false }, + type_id: { field: 'type_id', type: 'string', required: false }, + type: { field: 'type', type: 'string', required: false }, + parent_id: { field: 'parent_id', type: 'string', required: false }, + parent: { field: 'parent', type: 'string', required: false }, + assignee_ids: { field: 'assignee_ids', type: 'array', required: false }, + assignees: { field: 'assignees', type: 'array', required: false }, + label_ids: { field: 'label_ids', type: 'array', required: false }, + labels: { field: 'labels', type: 'array', required: false }, + estimate_point_id: { field: 'estimate_point_id', type: 'string', required: false }, + estimate: { field: 'estimate', type: 'string', required: false }, + start_date: { field: 'start_date', type: 'string', required: false }, + target_date: { field: 'target_date', type: 'string', required: false }, + external_id: { field: 'external_id', type: 'string', required: false }, + external_source: { field: 'external_source', type: 'string', required: false }, + fields: { field: 'fields', type: 'string', required: false }, + expand: { field: 'expand', type: 'string', required: false }, + deleted_at: { field: 'deleted_at', type: 'string', required: false }, + point: { field: 'point', type: 'integer', required: false }, + sequence_id: { field: 'sequence_id', type: 'integer', required: false }, + sort_order: { field: 'sort_order', type: 'number', required: false }, + archived_at: { field: 'archived_at', type: 'string', required: false }, + is_draft: { field: 'is_draft', type: 'boolean', required: false }, + created_by: { field: 'created_by', type: 'string', required: false }, + custom_fields: { field: 'custom_fields', type: 'object', required: false }, + cycle_id: { field: 'cycle_id', type: 'string', required: false }, + module_ids: { field: 'module_ids', type: 'array', required: false }, + bodyOverrides: { field: 'bodyOverrides', type: 'object', required: false }, + }, +} + +export const PlaneBlock: BlockConfig = { + triggerAllowed: true, + type: 'plane', + name: 'Plane', + description: 'Manage projects and work items in Plane', + authMode: AuthMode.ApiKey, + longDescription: + 'Connect Plane Cloud or a self-hosted Plane instance. API v2 is the default; choose API v1 for Community Edition or older instances. Actions with a current successor are consolidated. Unsupported version-specific inputs fail explicitly. Manage work items, projects, cycles, modules, states, labels, comments, links, attachments, pages, and webhooks. API v1 compatibility is available within supported current actions.', + docsLink: 'https://docs.sim.ai/integrations/plane', + category: 'tools', + integrationType: IntegrationType.Productivity, + icon: PlaneIcon, + bgColor: '#3F76FF', + canvasPresentation: { + defaultTitle: 'Plane', + sentences: { + byOperation: { + plane_get_current_user: ['Get current user'], + plane_create_cycle: [ + 'Create a cycle', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_cycle: [ + 'Delete a cycle', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_cycle: [ + 'Get a cycle', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_cycles: [ + 'List cycles', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_manage_cycle_work_items: [ + 'Add or remove cycle work items', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_transfer_cycle_work_items: [ + 'Transfer work items between cycles', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_cycle: [ + 'Update a cycle', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_label: [ + 'Create a label', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_label: [ + 'Delete a label', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_label: [ + 'Get a label', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_labels: [ + 'List labels', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_label: [ + 'Update a label', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_module: [ + 'Create a module', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_module: [ + 'Delete a module', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_module: [ + 'Get a module', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_modules: [ + 'List modules', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_manage_module_work_items: [ + 'Add or remove module work items', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_module: [ + 'Update a module', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_project_page: [ + 'Create a project page', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_project_page: [ + 'Delete a project page', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_project_page: [ + 'Get a project page', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_project_pages: [ + 'List project pages', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_project_page: [ + 'Update a project page', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_archive_project: [ + 'Archive a project', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_create_project: [ + 'Create a project', + { text: 'for', field: 'name', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_delete_project: [ + 'Delete a project', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_get_project_summary: [ + 'Get a project summary', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_get_project: [ + 'Get a project', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_list_projects: [ + 'List projects', + { text: 'for', field: 'search' }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_unarchive_project: [ + 'Unarchive a project', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_update_project: [ + 'Update a project', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_create_state: [ + 'Create a state', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_state: [ + 'Delete a state', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_state: [ + 'Get a state', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_states: [ + 'List states', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_state: [ + 'Update a state', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_webhook: [ + 'Create a webhook', + { text: 'for', field: 'name', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_delete_webhook: [ + 'Delete a webhook', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_get_webhook: [ + 'Get a webhook', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_list_webhooks: [ + 'List webhooks', + { text: 'for', field: 'search' }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_regenerate_webhook_secret: [ + 'Regenerate a webhook secret', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_update_webhook: [ + 'Update a webhook', + { text: 'for', field: 'pk', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_confirm_attachment_upload: [ + 'Confirm a work item attachment upload', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_attachment_upload: [ + 'Create a work item attachment upload', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_attachment: [ + 'Delete an attachment', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_attachment: [ + 'Get an attachment', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_attachments: [ + 'List attachments', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_comment: [ + 'Create a comment', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_comment: [ + 'Delete a comment', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_comment: [ + 'Get a comment', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_comments: [ + 'List comments', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_comment: [ + 'Update a comment', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_link: [ + 'Create a link', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_link: [ + 'Delete a link', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_link: [ + 'Get a link', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_links: [ + 'List links', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_link: [ + 'Update a link', + { text: 'for', field: 'work_item_id', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_archive_work_item: [ + 'Archive a work item', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_create_work_item: [ + 'Create a work item', + { text: 'for', field: 'name', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_delete_work_item: [ + 'Delete a work item', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_get_work_item_by_identifier: [ + 'Get a work item by identifier', + { text: 'for', field: 'identifier', core: true }, + { text: 'in workspace', field: 'workspace_slug' }, + ], + plane_get_work_item: [ + 'Get a work item', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_work_items: [ + 'List work items', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_list_workspace_work_items: [ + 'List work items across a workspace', + { text: 'for', field: 'search' }, + { text: 'in project', field: 'project_id' }, + ], + plane_unarchive_work_item: [ + 'Unarchive a work item', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + plane_update_work_item: [ + 'Update a work item', + { text: 'for', field: 'pk', core: true }, + { text: 'in project', field: 'project_id' }, + ], + }, + }, + }, + subBlocks: [ + { + id: 'operation', + title: 'Operation', + type: 'dropdown', + options: [ + { label: 'Add or remove cycle work items', id: 'plane_manage_cycle_work_items' }, + { label: 'Add or remove module work items', id: 'plane_manage_module_work_items' }, + { label: 'Archive a project', id: 'plane_archive_project' }, + { label: 'Archive a work item', id: 'plane_archive_work_item' }, + { label: 'Confirm a work item attachment upload', id: 'plane_confirm_attachment_upload' }, + { label: 'Create a comment', id: 'plane_create_comment' }, + { label: 'Create a cycle', id: 'plane_create_cycle' }, + { label: 'Create a label', id: 'plane_create_label' }, + { label: 'Create a link', id: 'plane_create_link' }, + { label: 'Create a module', id: 'plane_create_module' }, + { label: 'Create a project', id: 'plane_create_project' }, + { label: 'Create a project page', id: 'plane_create_project_page' }, + { label: 'Create a state', id: 'plane_create_state' }, + { label: 'Create a webhook', id: 'plane_create_webhook' }, + { label: 'Create a work item', id: 'plane_create_work_item' }, + { label: 'Create a work item attachment upload', id: 'plane_create_attachment_upload' }, + { label: 'Delete a comment', id: 'plane_delete_comment' }, + { label: 'Delete a cycle', id: 'plane_delete_cycle' }, + { label: 'Delete a label', id: 'plane_delete_label' }, + { label: 'Delete a link', id: 'plane_delete_link' }, + { label: 'Delete a module', id: 'plane_delete_module' }, + { label: 'Delete a project', id: 'plane_delete_project' }, + { label: 'Delete a project page', id: 'plane_delete_project_page' }, + { label: 'Delete a state', id: 'plane_delete_state' }, + { label: 'Delete a webhook', id: 'plane_delete_webhook' }, + { label: 'Delete a work item', id: 'plane_delete_work_item' }, + { label: 'Delete an attachment', id: 'plane_delete_attachment' }, + { label: 'Get a comment', id: 'plane_get_comment' }, + { label: 'Get a cycle', id: 'plane_get_cycle' }, + { label: 'Get a label', id: 'plane_get_label' }, + { label: 'Get a link', id: 'plane_get_link' }, + { label: 'Get a module', id: 'plane_get_module' }, + { label: 'Get a project', id: 'plane_get_project' }, + { label: 'Get a project page', id: 'plane_get_project_page' }, + { label: 'Get a project summary', id: 'plane_get_project_summary' }, + { label: 'Get a state', id: 'plane_get_state' }, + { label: 'Get a webhook', id: 'plane_get_webhook' }, + { label: 'Get a work item', id: 'plane_get_work_item' }, + { label: 'Get a work item by identifier', id: 'plane_get_work_item_by_identifier' }, + { label: 'Get an attachment', id: 'plane_get_attachment' }, + { label: 'Get current user', id: 'plane_get_current_user' }, + { label: 'List attachments', id: 'plane_list_attachments' }, + { label: 'List comments', id: 'plane_list_comments' }, + { label: 'List cycles', id: 'plane_list_cycles' }, + { label: 'List labels', id: 'plane_list_labels' }, + { label: 'List links', id: 'plane_list_links' }, + { label: 'List modules', id: 'plane_list_modules' }, + { label: 'List project pages', id: 'plane_list_project_pages' }, + { label: 'List projects', id: 'plane_list_projects' }, + { label: 'List states', id: 'plane_list_states' }, + { label: 'List webhooks', id: 'plane_list_webhooks' }, + { label: 'List work items', id: 'plane_list_work_items' }, + { label: 'List work items across a workspace', id: 'plane_list_workspace_work_items' }, + { label: 'Regenerate a webhook secret', id: 'plane_regenerate_webhook_secret' }, + { label: 'Transfer work items between cycles', id: 'plane_transfer_cycle_work_items' }, + { label: 'Unarchive a project', id: 'plane_unarchive_project' }, + { label: 'Unarchive a work item', id: 'plane_unarchive_work_item' }, + { label: 'Update a comment', id: 'plane_update_comment' }, + { label: 'Update a cycle', id: 'plane_update_cycle' }, + { label: 'Update a label', id: 'plane_update_label' }, + { label: 'Update a link', id: 'plane_update_link' }, + { label: 'Update a module', id: 'plane_update_module' }, + { label: 'Update a project', id: 'plane_update_project' }, + { label: 'Update a project page', id: 'plane_update_project_page' }, + { label: 'Update a state', id: 'plane_update_state' }, + { label: 'Update a webhook', id: 'plane_update_webhook' }, + { label: 'Update a work item', id: 'plane_update_work_item' }, + ], + value: () => 'plane_list_projects', + }, + { + id: 'apiKey', + title: 'API Token', + type: 'short-input', + password: true, + placeholder: 'Enter your Plane API token', + required: true, + paramVisibility: 'user-only', + }, + { + id: 'apiVersion', + title: 'API Version', + type: 'dropdown', + options: [ + { label: 'v2 (current)', id: 'v2' }, + { label: 'v1 (Community Edition / older instance)', id: 'v1' }, + ], + value: () => 'v2', + paramVisibility: 'user-only', + mode: 'advanced', + }, + { + id: 'baseUrl', + title: 'Instance URL', + type: 'short-input', + placeholder: 'https://api.plane.so', + paramVisibility: 'user-only', + }, + { + id: 'workspace_slug', + title: 'Workspace Slug', + type: 'short-input', + placeholder: 'my-team', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_delete_cycle', + 'plane_get_cycle', + 'plane_list_cycles', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_create_label', + 'plane_delete_label', + 'plane_get_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_delete_module', + 'plane_get_module', + 'plane_list_modules', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_create_project_page', + 'plane_delete_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_archive_project', + 'plane_create_project', + 'plane_delete_project', + 'plane_get_project_summary', + 'plane_get_project', + 'plane_list_projects', + 'plane_unarchive_project', + 'plane_update_project', + 'plane_create_state', + 'plane_delete_state', + 'plane_get_state', + 'plane_list_states', + 'plane_update_state', + 'plane_create_webhook', + 'plane_delete_webhook', + 'plane_get_webhook', + 'plane_list_webhooks', + 'plane_regenerate_webhook_secret', + 'plane_update_webhook', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_delete_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_create_work_item', + 'plane_delete_work_item', + 'plane_get_work_item_by_identifier', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + required: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_delete_cycle', + 'plane_get_cycle', + 'plane_list_cycles', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_create_label', + 'plane_delete_label', + 'plane_get_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_delete_module', + 'plane_get_module', + 'plane_list_modules', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_create_project_page', + 'plane_delete_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_archive_project', + 'plane_create_project', + 'plane_delete_project', + 'plane_get_project_summary', + 'plane_get_project', + 'plane_list_projects', + 'plane_unarchive_project', + 'plane_update_project', + 'plane_create_state', + 'plane_delete_state', + 'plane_get_state', + 'plane_list_states', + 'plane_update_state', + 'plane_create_webhook', + 'plane_delete_webhook', + 'plane_get_webhook', + 'plane_list_webhooks', + 'plane_regenerate_webhook_secret', + 'plane_update_webhook', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_delete_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_create_work_item', + 'plane_delete_work_item', + 'plane_get_work_item_by_identifier', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + }, + { + id: 'project_id', + title: 'Project ID', + type: 'short-input', + placeholder: 'Enter project id', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_delete_cycle', + 'plane_get_cycle', + 'plane_list_cycles', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_create_label', + 'plane_delete_label', + 'plane_get_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_delete_module', + 'plane_get_module', + 'plane_list_modules', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_create_project_page', + 'plane_delete_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_state', + 'plane_delete_state', + 'plane_get_state', + 'plane_list_states', + 'plane_update_state', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_delete_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_create_work_item', + 'plane_delete_work_item', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + required: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_delete_cycle', + 'plane_get_cycle', + 'plane_list_cycles', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_create_label', + 'plane_delete_label', + 'plane_get_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_delete_module', + 'plane_get_module', + 'plane_list_modules', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_create_project_page', + 'plane_delete_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_state', + 'plane_delete_state', + 'plane_get_state', + 'plane_list_states', + 'plane_update_state', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_delete_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_create_work_item', + 'plane_delete_work_item', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + }, + { + id: 'assignee_id', + title: 'Assignee ID', + type: 'short-input', + placeholder: 'Enter assignee id', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'collection_id', + title: 'Collection ID', + type: 'short-input', + placeholder: 'Enter collection id', + condition: { + field: 'operation', + value: [ + 'plane_create_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + ], + }, + mode: 'advanced', + }, + { + id: 'cycle_id', + title: 'Cycle ID', + type: 'short-input', + placeholder: 'Enter cycle id', + condition: { + field: 'operation', + value: [ + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'default_assignee_id', + title: 'Default Assignee ID', + type: 'short-input', + placeholder: 'Enter default assignee id', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'default_state_id', + title: 'Default State ID', + type: 'short-input', + placeholder: 'Enter default state id', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'estimate_id', + title: 'Estimate ID', + type: 'short-input', + placeholder: 'Enter estimate id', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'estimate_point_id', + title: 'Estimate Point ID', + type: 'short-input', + placeholder: 'Enter estimate point id', + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'external_id', + title: 'External ID', + type: 'short-input', + placeholder: 'Enter external id', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_list_cycles', + 'plane_update_cycle', + 'plane_create_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_list_modules', + 'plane_update_module', + 'plane_create_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_create_state', + 'plane_list_states', + 'plane_update_state', + 'plane_create_attachment_upload', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_work_item', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'issue_id', + title: 'Issue ID', + type: 'short-input', + placeholder: 'Enter issue id', + condition: { field: 'operation', value: ['plane_create_link', 'plane_update_link'] }, + mode: 'advanced', + }, + { + id: 'label_id', + title: 'Label ID', + type: 'short-input', + placeholder: 'Enter label id', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'lead_id', + title: 'Lead ID', + type: 'short-input', + placeholder: 'Enter lead id', + condition: { + field: 'operation', + value: ['plane_create_module', 'plane_list_modules', 'plane_update_module'], + }, + mode: 'advanced', + }, + { + id: 'module_id', + title: 'Module ID', + type: 'short-input', + placeholder: 'Enter module id', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'new_cycle_id', + title: 'New Cycle ID', + type: 'short-input', + placeholder: 'Enter new cycle id', + condition: { field: 'operation', value: ['plane_transfer_cycle_work_items'] }, + required: { field: 'operation', value: ['plane_transfer_cycle_work_items'] }, + }, + { + id: 'owned_by_id', + title: 'Owned By ID', + type: 'short-input', + placeholder: 'Enter owned by id', + condition: { field: 'operation', value: ['plane_list_cycles', 'plane_list_project_pages'] }, + mode: 'advanced', + }, + { + id: 'parent_id', + title: 'Parent ID', + type: 'short-input', + placeholder: 'Enter parent id', + condition: { + field: 'operation', + value: [ + 'plane_create_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'project_lead_id', + title: 'Project Lead ID', + type: 'short-input', + placeholder: 'Enter project lead id', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'sequence_id', + title: 'Sequence ID', + type: 'short-input', + placeholder: 'Enter sequence id', + condition: { + field: 'operation', + value: [ + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'state_id', + title: 'State ID', + type: 'short-input', + placeholder: 'Enter state id', + condition: { + field: 'operation', + value: [ + 'plane_create_project', + 'plane_update_project', + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'type_id', + title: 'Type ID', + type: 'short-input', + placeholder: 'Enter type id', + condition: { + field: 'operation', + value: [ + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'work_item_id', + title: 'Work Item ID', + type: 'short-input', + placeholder: 'Enter work item id', + condition: { + field: 'operation', + value: [ + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_delete_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + ], + }, + required: { + field: 'operation', + value: [ + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_delete_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + ], + }, + }, + { + id: 'color', + title: 'Color', + type: 'short-input', + placeholder: 'Enter color', + condition: { + field: 'operation', + value: [ + 'plane_create_label', + 'plane_update_label', + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_state', + 'plane_update_state', + ], + }, + required: { field: 'operation', value: ['plane_create_state'] }, + }, + { + id: 'identifier', + title: 'Identifier', + type: 'short-input', + placeholder: 'Enter identifier', + condition: { + field: 'operation', + value: [ + 'plane_create_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_get_work_item_by_identifier', + ], + }, + required: { + field: 'operation', + value: ['plane_create_project', 'plane_get_work_item_by_identifier'], + }, + }, + { + id: 'name', + title: 'Name', + type: 'short-input', + placeholder: 'Enter name', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_update_cycle', + 'plane_create_label', + 'plane_update_label', + 'plane_create_module', + 'plane_update_module', + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_create_state', + 'plane_update_state', + 'plane_create_webhook', + 'plane_list_webhooks', + 'plane_update_webhook', + 'plane_create_attachment_upload', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + required: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_create_label', + 'plane_create_module', + 'plane_create_project_page', + 'plane_create_project', + 'plane_create_state', + 'plane_create_attachment_upload', + 'plane_create_work_item', + ], + }, + }, + { + id: 'pk', + title: 'Resource ID', + type: 'short-input', + placeholder: 'Enter resource id', + condition: { + field: 'operation', + value: [ + 'plane_delete_cycle', + 'plane_get_cycle', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_delete_label', + 'plane_get_label', + 'plane_update_label', + 'plane_delete_module', + 'plane_get_module', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_delete_project_page', + 'plane_get_project_page', + 'plane_update_project_page', + 'plane_archive_project', + 'plane_delete_project', + 'plane_get_project_summary', + 'plane_get_project', + 'plane_unarchive_project', + 'plane_update_project', + 'plane_delete_state', + 'plane_get_state', + 'plane_update_state', + 'plane_delete_webhook', + 'plane_get_webhook', + 'plane_regenerate_webhook_secret', + 'plane_update_webhook', + 'plane_confirm_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_update_comment', + 'plane_delete_link', + 'plane_get_link', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_delete_work_item', + 'plane_get_work_item', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + required: { + field: 'operation', + value: [ + 'plane_delete_cycle', + 'plane_get_cycle', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_delete_label', + 'plane_get_label', + 'plane_update_label', + 'plane_delete_module', + 'plane_get_module', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_delete_project_page', + 'plane_get_project_page', + 'plane_update_project_page', + 'plane_archive_project', + 'plane_delete_project', + 'plane_get_project_summary', + 'plane_get_project', + 'plane_unarchive_project', + 'plane_update_project', + 'plane_delete_state', + 'plane_get_state', + 'plane_update_state', + 'plane_delete_webhook', + 'plane_get_webhook', + 'plane_regenerate_webhook_secret', + 'plane_update_webhook', + 'plane_confirm_attachment_upload', + 'plane_delete_attachment', + 'plane_get_attachment', + 'plane_delete_comment', + 'plane_get_comment', + 'plane_update_comment', + 'plane_delete_link', + 'plane_get_link', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_delete_work_item', + 'plane_get_work_item', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + }, + { + id: 'size', + title: 'Size', + type: 'short-input', + placeholder: 'Enter size', + condition: { field: 'operation', value: ['plane_create_attachment_upload'] }, + required: { field: 'operation', value: ['plane_create_attachment_upload'] }, + }, + { + id: 'url', + title: 'Url', + type: 'short-input', + placeholder: 'Enter url', + condition: { + field: 'operation', + value: [ + 'plane_create_webhook', + 'plane_list_webhooks', + 'plane_update_webhook', + 'plane_create_link', + 'plane_list_links', + 'plane_update_link', + ], + }, + required: { field: 'operation', value: ['plane_create_webhook', 'plane_create_link'] }, + }, + { + id: 'access_integer', + title: 'Access', + type: 'short-input', + placeholder: 'Enter access', + condition: { field: 'operation', value: ['plane_list_project_pages'] }, + mode: 'advanced', + }, + { + id: 'access_string', + title: 'Access', + type: 'short-input', + placeholder: 'Enter access', + condition: { + field: 'operation', + value: [ + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_comment', + 'plane_list_comments', + 'plane_update_comment', + ], + }, + mode: 'advanced', + }, + { + id: 'add', + title: 'Add', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane add parameter. Return only JSON. The add.', + }, + condition: { + field: 'operation', + value: ['plane_manage_cycle_work_items', 'plane_manage_module_work_items'], + }, + }, + { + id: 'archive_in', + title: 'Archive In', + type: 'short-input', + placeholder: 'Enter archive in', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'archived_at', + title: 'Archived At', + type: 'short-input', + placeholder: 'Enter archived at', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: [ + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'assignee_id__in_array', + title: 'Assignee ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane assignee_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'assignee_id__in_string', + title: 'Assignee ID In', + type: 'short-input', + placeholder: 'Enter assignee id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'assignee_id__isnull', + title: 'Assignee ID Isnull', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'assignee_ids', + title: 'Assignee IDs', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + "Generate a valid JSON array for the Plane assignee_ids parameter. Return only JSON. User ids to assign. Each must be an active, assignable member of the project.\n\nLeave it out and the project's default assignee is applied, if one is configured. Send `[]` to create the work item\nwith no assignee at all.", + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'assignees', + title: 'Assignees', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane assignees parameter. Return only JSON. Member **email addresses** instead of ids, for example `["ana@example.com"]`. Every address must belong to an active,\nassignable project member — any that don\'t are named in the `400`. Write-only.', + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'attachment_type', + title: 'Type', + type: 'short-input', + placeholder: 'Enter type', + condition: { field: 'operation', value: ['plane_create_attachment_upload'] }, + required: { field: 'apiVersion', value: 'v1' }, + }, + { + id: 'bodyOverrides', + title: 'Bodyoverrides', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane bodyOverrides parameter. Return only JSON. Override documented write fields with explicit empty strings, null, or empty arrays. Unknown fields are rejected.', + }, + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_manage_cycle_work_items', + 'plane_transfer_cycle_work_items', + 'plane_update_cycle', + 'plane_create_label', + 'plane_update_label', + 'plane_create_module', + 'plane_manage_module_work_items', + 'plane_update_module', + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_project', + 'plane_update_project', + 'plane_create_state', + 'plane_update_state', + 'plane_create_webhook', + 'plane_update_webhook', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_create_comment', + 'plane_update_comment', + 'plane_create_link', + 'plane_update_link', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'close_in', + title: 'Close In', + type: 'short-input', + placeholder: 'Enter close in', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'comment_html', + title: 'Comment Html', + type: 'long-input', + placeholder: 'Enter comment html', + condition: { field: 'operation', value: ['plane_create_comment', 'plane_update_comment'] }, + required: { + field: 'operation', + value: 'plane_create_comment', + and: { field: 'apiVersion', value: 'v1', not: true }, + }, + }, + { + id: 'comment_json', + title: 'Comment Json', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane comment_json parameter. Return only JSON. v1 compatibility only. Comment json.', + }, + condition: { field: 'operation', value: ['plane_create_comment', 'plane_update_comment'] }, + mode: 'advanced', + }, + { + id: 'content_type', + title: 'Content Type', + type: 'long-input', + placeholder: 'Enter content type', + condition: { field: 'operation', value: ['plane_create_webhook', 'plane_update_webhook'] }, + mode: 'advanced', + }, + { + id: 'count', + title: 'Count', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_list_links', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'counts', + title: 'Counts', + type: 'short-input', + placeholder: 'Enter counts', + condition: { field: 'operation', value: ['plane_get_project_summary'] }, + mode: 'advanced', + }, + { + id: 'cover_image', + title: 'Cover Image', + type: 'short-input', + placeholder: 'Enter cover image', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'created_at', + title: 'Created At', + type: 'short-input', + placeholder: 'Enter created at', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { field: 'operation', value: ['plane_create_comment', 'plane_create_work_item'] }, + mode: 'advanced', + }, + { + id: 'created_at__gte', + title: 'Created At Gte', + type: 'short-input', + placeholder: 'Enter created at gte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'created_at__lte', + title: 'Created At Lte', + type: 'short-input', + placeholder: 'Enter created at lte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'created_by', + title: 'Created By', + type: 'short-input', + placeholder: 'Enter created by', + condition: { + field: 'operation', + value: [ + 'plane_create_comment', + 'plane_create_link', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'cursor', + title: 'Cursor', + type: 'short-input', + placeholder: 'Enter cursor', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_get_link', + 'plane_list_links', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'custom_fields', + title: 'Custom Fields', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane custom_fields parameter. Return only JSON. JSON custom field values. API v2 only.', + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'cycle_id__in_array', + title: 'Cycle ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane cycle_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'cycle_id__in_string', + title: 'Cycle ID In', + type: 'short-input', + placeholder: 'Enter cycle id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'cycle_id__isnull', + title: 'Cycle ID Isnull', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'cycle_view_boolean', + title: 'Cycle View', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'cycle_view_string', + title: 'Cycle View', + type: 'short-input', + placeholder: 'Enter cycle view', + condition: { field: 'operation', value: ['plane_list_cycles'] }, + mode: 'advanced', + }, + { + id: 'default', + title: 'Default', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_state', 'plane_update_state'] }, + mode: 'advanced', + }, + { + id: 'deleted_at', + title: 'Deleted At', + type: 'short-input', + placeholder: 'Enter deleted at', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'description', + title: 'Description', + type: 'long-input', + placeholder: 'Enter description', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_update_cycle', + 'plane_create_label', + 'plane_update_label', + 'plane_create_module', + 'plane_update_module', + 'plane_create_project', + 'plane_update_project', + 'plane_create_state', + 'plane_update_state', + ], + }, + mode: 'advanced', + }, + { + id: 'description_html', + title: 'Description Html', + type: 'long-input', + placeholder: 'Enter description html', + condition: { + field: 'operation', + value: [ + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + }, + { + id: 'emoji', + title: 'Emoji', + type: 'short-input', + placeholder: 'Enter emoji', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'end_date', + title: 'End Date', + type: 'short-input', + placeholder: 'Enter end date', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { field: 'operation', value: ['plane_create_cycle', 'plane_update_cycle'] }, + mode: 'advanced', + }, + { + id: 'estimate', + title: 'Estimate', + type: 'short-input', + placeholder: 'Enter estimate', + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'expand', + title: 'Expand', + type: 'short-input', + placeholder: 'Enter expand', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_get_cycle', + 'plane_list_cycles', + 'plane_update_cycle', + 'plane_list_labels', + 'plane_create_module', + 'plane_get_module', + 'plane_list_modules', + 'plane_update_module', + 'plane_create_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_project', + 'plane_get_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_list_states', + 'plane_create_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_get_link', + 'plane_list_links', + 'plane_archive_work_item', + 'plane_create_work_item', + 'plane_get_work_item_by_identifier', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'external_source', + title: 'External Source', + type: 'short-input', + placeholder: 'Enter external source', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_list_cycles', + 'plane_update_cycle', + 'plane_create_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_list_modules', + 'plane_update_module', + 'plane_create_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_create_state', + 'plane_list_states', + 'plane_update_state', + 'plane_create_attachment_upload', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_work_item', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'fields', + title: 'Fields', + type: 'short-input', + placeholder: 'Enter fields', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_get_cycle', + 'plane_list_cycles', + 'plane_update_cycle', + 'plane_create_label', + 'plane_get_label', + 'plane_list_labels', + 'plane_update_label', + 'plane_create_module', + 'plane_get_module', + 'plane_list_modules', + 'plane_update_module', + 'plane_create_project_page', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + 'plane_create_project', + 'plane_get_project_summary', + 'plane_get_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_create_state', + 'plane_get_state', + 'plane_list_states', + 'plane_update_state', + 'plane_create_webhook', + 'plane_get_webhook', + 'plane_list_webhooks', + 'plane_regenerate_webhook_secret', + 'plane_update_webhook', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_get_attachment', + 'plane_list_attachments', + 'plane_create_comment', + 'plane_get_comment', + 'plane_list_comments', + 'plane_update_comment', + 'plane_create_link', + 'plane_get_link', + 'plane_list_links', + 'plane_update_link', + 'plane_archive_work_item', + 'plane_create_work_item', + 'plane_get_work_item_by_identifier', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_unarchive_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'filters', + title: 'Filters', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane filters parameter. Return only JSON. v1 compatibility only. Structured filter expression. Supports nested `and`/`or`/`not` groups and field comparisons with operators like `__in`, `__gte`, `__range`, `__isnull`, `__icontains`, etc. JSON-encoded into the `filters=` query param by the client. Requires a Plane edition with work item query filtering; Community Edition rejects this parameter.', + }, + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'group', + title: 'Group', + type: 'short-input', + placeholder: 'Enter group', + condition: { + field: 'operation', + value: ['plane_create_state', 'plane_list_states', 'plane_update_state'], + }, + mode: 'advanced', + }, + { + id: 'group__in', + title: 'Group In', + type: 'short-input', + placeholder: 'Enter group in', + condition: { field: 'operation', value: ['plane_list_states'] }, + mode: 'advanced', + }, + { + id: 'guest_view_all_features', + title: 'Guest View All Features', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'icon_prop', + title: 'Icon Prop', + type: 'short-input', + placeholder: 'Enter icon prop', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'include_archived', + title: 'Include Archived', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_list_projects'] }, + mode: 'advanced', + }, + { + id: 'intake_view', + title: 'Intake View', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'is_active', + title: 'Is Active', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_create_webhook', 'plane_list_webhooks', 'plane_update_webhook'], + }, + mode: 'advanced', + }, + { + id: 'is_archived', + title: 'Is Archived', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_list_projects'] }, + mode: 'advanced', + }, + { + id: 'is_default', + title: 'Is Default', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_create_state', 'plane_list_states', 'plane_update_state'], + }, + mode: 'advanced', + }, + { + id: 'is_draft', + title: 'Is Draft', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: [ + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'is_global', + title: 'Is Global', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_list_project_pages'] }, + mode: 'advanced', + }, + { + id: 'is_issue_type_enabled', + title: 'Is Issue Type Enabled', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'is_locked', + title: 'Is Locked', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: [ + 'plane_create_project_page', + 'plane_list_project_pages', + 'plane_update_project_page', + ], + }, + mode: 'advanced', + }, + { + id: 'is_time_tracking_enabled', + title: 'Is Time Tracking Enabled', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'is_triage', + title: 'Is Triage', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_state', 'plane_update_state'] }, + mode: 'advanced', + }, + { + id: 'is_uploaded', + title: 'Is Uploaded', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_list_attachments'] }, + mode: 'advanced', + }, + { + id: 'issue_views_view', + title: 'Issue Views View', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'key', + title: 'Key', + type: 'short-input', + placeholder: 'Enter key', + condition: { field: 'operation', value: ['plane_list_projects'] }, + mode: 'advanced', + }, + { + id: 'label_id__in_array', + title: 'Label ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane label_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'label_id__in_string', + title: 'Label ID In', + type: 'short-input', + placeholder: 'Enter label id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'label_id__isnull', + title: 'Label ID Isnull', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'label_ids', + title: 'Label IDs', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane label_ids parameter. Return only JSON. Label ids to apply. Each must be a label of this project, or a workspace-level label available to it.', + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'labels', + title: 'Labels', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane labels parameter. Return only JSON. Label **names** instead of ids, for example `["regression", "auth"]`. Matched case-insensitively against the project\'s\nlabels and the workspace-level labels available to it. A name that exists at both levels is ambiguous and returns a\n`400` telling you to use `label_ids`. Write-only.', + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'logo_props_json', + title: 'Logo Props', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + "Generate a valid JSON json for the Plane logo_props parameter. Return only JSON. JSON blob holding the cycle's icon configuration, as written by Plane clients. Stored and returned unchanged.", + }, + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_update_cycle', + 'plane_create_module', + 'plane_update_module', + ], + }, + mode: 'advanced', + }, + { + id: 'logo_props_string', + title: 'Logo Props', + type: 'short-input', + placeholder: 'Enter logo props', + condition: { + field: 'operation', + value: [ + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_project', + 'plane_update_project', + ], + }, + mode: 'advanced', + }, + { + id: 'members', + title: 'Members', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane members parameter. Return only JSON. v1 compatibility only. Members.', + }, + condition: { field: 'operation', value: ['plane_create_module', 'plane_update_module'] }, + mode: 'advanced', + }, + { + id: 'metadata', + title: 'Metadata', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane metadata parameter. Return only JSON. JSON metadata object for the link. API v2 only.', + }, + condition: { field: 'operation', value: ['plane_create_link', 'plane_update_link'] }, + mode: 'advanced', + }, + { + id: 'module_id__in_array', + title: 'Module ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane module_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'module_id__in_string', + title: 'Module ID In', + type: 'short-input', + placeholder: 'Enter module id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'module_id__isnull', + title: 'Module ID Isnull', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'module_ids', + title: 'Module IDs', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane module_ids parameter. Return only JSON. Module IDs. API v2 only.', + }, + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'module_view', + title: 'Module View', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'network_integer', + title: 'Network', + type: 'short-input', + placeholder: 'Enter network', + condition: { field: 'operation', value: ['plane_list_projects'] }, + mode: 'advanced', + }, + { + id: 'network_string', + title: 'Network', + type: 'short-input', + placeholder: 'Enter network', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'offset', + title: 'Offset', + type: 'short-input', + placeholder: 'Enter offset', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_list_links', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'order_by', + title: 'Order By', + type: 'short-input', + placeholder: 'Enter order by', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_get_project_page', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_list_links', + 'plane_get_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'owned_by', + title: 'Owned By', + type: 'short-input', + placeholder: 'Enter owned by', + condition: { field: 'operation', value: ['plane_create_cycle', 'plane_update_cycle'] }, + mode: 'advanced', + }, + { + id: 'page_view', + title: 'Page View', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'paginate', + title: 'Paginate', + type: 'short-input', + placeholder: 'Enter paginate', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_list_links', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'parent', + title: 'Parent', + type: 'short-input', + placeholder: 'Enter parent', + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'parent_id__in_array', + title: 'Parent ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane parent_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'parent_id__in_string', + title: 'Parent ID In', + type: 'short-input', + placeholder: 'Enter parent id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'parent_id__isnull', + title: 'Parent ID Isnull', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { + field: 'operation', + value: ['plane_list_labels', 'plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'per_page', + title: 'Per Page', + type: 'short-input', + placeholder: 'Enter per page', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_get_link', + 'plane_list_links', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'point', + title: 'Point', + type: 'short-input', + placeholder: 'Enter point', + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'pql', + title: 'Pql', + type: 'short-input', + placeholder: 'Enter pql', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'priority', + title: 'Priority', + type: 'short-input', + placeholder: 'Enter priority', + condition: { + field: 'operation', + value: [ + 'plane_create_project', + 'plane_list_projects', + 'plane_update_project', + 'plane_create_work_item', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'priority__in_array', + title: 'Priority In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane priority__in parameter. Return only JSON. Multiple values may be separated by commas.\n\n- `none` - None\n- `low` - Low\n- `medium` - Medium\n- `high` - High\n- `urgent` - Urgent', + }, + condition: { + field: 'operation', + value: ['plane_list_projects', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'priority__in_string', + title: 'Priority In', + type: 'short-input', + placeholder: 'Enter priority in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'project_id__in', + title: 'Project ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane project_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'remove', + title: 'Remove', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane remove parameter. Return only JSON. The remove.', + }, + condition: { + field: 'operation', + value: ['plane_manage_cycle_work_items', 'plane_manage_module_work_items'], + }, + }, + { + id: 'scopes', + title: 'Scopes', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane scopes parameter. Return only JSON. The scopes.', + }, + condition: { field: 'operation', value: ['plane_create_webhook', 'plane_update_webhook'] }, + mode: 'advanced', + }, + { + id: 'search', + title: 'Search', + type: 'short-input', + placeholder: 'Enter search', + condition: { + field: 'operation', + value: [ + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_comments', + 'plane_list_links', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + ], + }, + mode: 'advanced', + }, + { + id: 'sequence', + title: 'Sequence', + type: 'short-input', + placeholder: 'Enter sequence', + condition: { field: 'operation', value: ['plane_create_state', 'plane_update_state'] }, + mode: 'advanced', + }, + { + id: 'sort_order', + title: 'Sort Order', + type: 'short-input', + placeholder: 'Enter sort order', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_update_cycle', + 'plane_create_label', + 'plane_update_label', + 'plane_create_module', + 'plane_update_module', + 'plane_create_project_page', + 'plane_update_project_page', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'start_date', + title: 'Start Date', + type: 'short-input', + placeholder: 'Enter start date', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_update_cycle', + 'plane_create_module', + 'plane_update_module', + 'plane_create_project', + 'plane_update_project', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'start_date__gte', + title: 'Start Date Gte', + type: 'short-input', + placeholder: 'Enter start date gte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'start_date__lte', + title: 'Start Date Lte', + type: 'short-input', + placeholder: 'Enter start date lte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'state', + title: 'State', + type: 'short-input', + placeholder: 'Enter state', + condition: { + field: 'operation', + value: ['plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'state_group', + title: 'State Group', + type: 'short-input', + placeholder: 'Enter state group', + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'state_group__in_array', + title: 'State Group In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane state_group__in parameter. Return only JSON. Multiple values may be separated by commas.\n\n- `backlog` - Backlog\n- `unstarted` - Unstarted\n- `started` - Started\n- `completed` - Completed\n- `cancelled` - Cancelled\n- `triage` - Triage', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'state_group__in_string', + title: 'State Group In', + type: 'short-input', + placeholder: 'Enter state group in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'state_id__in_array', + title: 'State ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane state_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'state_id__in_string', + title: 'State ID In', + type: 'short-input', + placeholder: 'Enter state id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'status', + title: 'Status', + type: 'short-input', + placeholder: 'Enter status', + condition: { + field: 'operation', + value: ['plane_create_module', 'plane_list_modules', 'plane_update_module'], + }, + mode: 'advanced', + }, + { + id: 'status__in', + title: 'Status In', + type: 'short-input', + placeholder: 'Enter status in', + condition: { field: 'operation', value: ['plane_list_modules'] }, + mode: 'advanced', + }, + { + id: 'target_date', + title: 'Target Date', + type: 'short-input', + placeholder: 'Enter target date', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: [ + 'plane_create_module', + 'plane_update_module', + 'plane_create_project', + 'plane_update_project', + 'plane_create_work_item', + 'plane_update_work_item', + ], + }, + mode: 'advanced', + }, + { + id: 'target_date__gte', + title: 'Target Date Gte', + type: 'short-input', + placeholder: 'Enter target date gte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'target_date__lte', + title: 'Target Date Lte', + type: 'short-input', + placeholder: 'Enter target date lte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'timezone', + title: 'Timezone', + type: 'short-input', + placeholder: 'Enter timezone', + condition: { + field: 'operation', + value: [ + 'plane_create_cycle', + 'plane_update_cycle', + 'plane_create_project', + 'plane_update_project', + ], + }, + mode: 'advanced', + }, + { + id: 'title', + title: 'Title', + type: 'short-input', + placeholder: 'Enter title', + condition: { + field: 'operation', + value: ['plane_create_link', 'plane_list_links', 'plane_update_link'], + }, + mode: 'advanced', + }, + { + id: 'type', + title: 'Type', + type: 'short-input', + placeholder: 'Enter type', + condition: { + field: 'operation', + value: ['plane_list_project_pages', 'plane_create_work_item', 'plane_update_work_item'], + }, + mode: 'advanced', + }, + { + id: 'type_id__in_array', + title: 'Type ID In', + type: 'code', + language: 'json', + placeholder: '[]', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON array for the Plane type_id__in parameter. Return only JSON. Multiple values may be separated by commas.', + }, + condition: { field: 'operation', value: ['plane_list_workspace_work_items'] }, + mode: 'advanced', + }, + { + id: 'type_id__in_string', + title: 'Type ID In', + type: 'short-input', + placeholder: 'Enter type id in', + condition: { field: 'operation', value: ['plane_list_work_items'] }, + mode: 'advanced', + }, + { + id: 'updated_at__gte', + title: 'Updated At Gte', + type: 'short-input', + placeholder: 'Enter updated at gte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'updated_at__lte', + title: 'Updated At Lte', + type: 'short-input', + placeholder: 'Enter updated at lte', + wandConfig: { + enabled: true, + generationType: 'timestamp', + prompt: 'Return an ISO 8601 date or timestamp matching the Plane API field.', + }, + condition: { + field: 'operation', + value: ['plane_list_work_items', 'plane_list_workspace_work_items'], + }, + mode: 'advanced', + }, + { + id: 'upload_confirmed', + title: 'Is Uploaded', + type: 'dropdown', + emptyIsValid: true, + options: [ + { label: 'Use default', id: '' }, + { label: 'True', id: 'true' }, + { label: 'False', id: 'false' }, + ], + value: () => '', + condition: { field: 'operation', value: ['plane_confirm_attachment_upload'] }, + required: { field: 'apiVersion', value: 'v1' }, + }, + { + id: 'v1_access', + title: 'V1 Access', + type: 'short-input', + placeholder: 'Enter v1 access', + condition: { + field: 'operation', + value: ['plane_create_project_page', 'plane_update_project_page'], + }, + mode: 'advanced', + }, + { + id: 'v1_icon_prop', + title: 'V1 Icon Prop', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane v1_icon_prop parameter. Return only JSON. v1 compatibility only. Icon prop.', + }, + condition: { field: 'operation', value: ['plane_create_project', 'plane_update_project'] }, + mode: 'advanced', + }, + { + id: 'v1_logo_props', + title: 'V1 Logo Props', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane v1_logo_props parameter. Return only JSON. v1 compatibility only. Logo props.', + }, + condition: { + field: 'operation', + value: ['plane_create_project_page', 'plane_update_project_page'], + }, + mode: 'advanced', + }, + { + id: 'v1_view_props', + title: 'V1 View Props', + type: 'code', + language: 'json', + placeholder: '{}', + wandConfig: { + enabled: true, + generationType: 'json-object', + prompt: + 'Generate a valid JSON object for the Plane v1_view_props parameter. Return only JSON. v1 compatibility only. View props.', + }, + condition: { + field: 'operation', + value: ['plane_create_project_page', 'plane_update_project_page'], + }, + mode: 'advanced', + }, + { + id: 'version', + title: 'Version', + type: 'short-input', + placeholder: 'Enter version', + condition: { field: 'operation', value: ['plane_create_webhook', 'plane_update_webhook'] }, + mode: 'advanced', + }, + { + id: 'view_props', + title: 'View Props', + type: 'short-input', + placeholder: 'Enter view props', + condition: { + field: 'operation', + value: ['plane_create_project_page', 'plane_update_project_page'], + }, + mode: 'advanced', + }, + ...getTrigger('plane_webhook').subBlocks, + ...getTrigger('plane_project_created').subBlocks, + ...getTrigger('plane_project_updated').subBlocks, + ...getTrigger('plane_project_archived').subBlocks, + ...getTrigger('plane_project_deleted').subBlocks, + ...getTrigger('plane_cycle_created').subBlocks, + ...getTrigger('plane_cycle_updated').subBlocks, + ...getTrigger('plane_cycle_archived').subBlocks, + ...getTrigger('plane_cycle_deleted').subBlocks, + ...getTrigger('plane_module_created').subBlocks, + ...getTrigger('plane_module_updated').subBlocks, + ...getTrigger('plane_module_archived').subBlocks, + ...getTrigger('plane_module_deleted').subBlocks, + ...getTrigger('plane_milestone_created').subBlocks, + ...getTrigger('plane_milestone_updated').subBlocks, + ...getTrigger('plane_milestone_deleted').subBlocks, + ...getTrigger('plane_page_created').subBlocks, + ...getTrigger('plane_page_updated').subBlocks, + ...getTrigger('plane_page_archived').subBlocks, + ...getTrigger('plane_page_deleted').subBlocks, + ...getTrigger('plane_page_comment_created').subBlocks, + ...getTrigger('plane_page_comment_updated').subBlocks, + ...getTrigger('plane_page_comment_deleted').subBlocks, + ...getTrigger('plane_workitem_created').subBlocks, + ...getTrigger('plane_workitem_updated').subBlocks, + ...getTrigger('plane_workitem_archived').subBlocks, + ...getTrigger('plane_workitem_deleted').subBlocks, + ...getTrigger('plane_workitem_comment_created').subBlocks, + ...getTrigger('plane_workitem_comment_updated').subBlocks, + ...getTrigger('plane_workitem_comment_deleted').subBlocks, + ...getTrigger('plane_workitem_link_created').subBlocks, + ...getTrigger('plane_workitem_link_updated').subBlocks, + ...getTrigger('plane_workitem_link_deleted').subBlocks, + ...getTrigger('plane_workitem_vote_created').subBlocks, + ...getTrigger('plane_workitem_vote_deleted').subBlocks, + ...getTrigger('plane_workitem_attachment_created').subBlocks, + ...getTrigger('plane_workitem_attachment_updated').subBlocks, + ...getTrigger('plane_workitem_attachment_deleted').subBlocks, + ...getTrigger('plane_workitem_relation_created').subBlocks, + ...getTrigger('plane_workitem_relation_deleted').subBlocks, + ...getTrigger('plane_workitem_dependency_created').subBlocks, + ...getTrigger('plane_workitem_dependency_deleted').subBlocks, + ...getTrigger('plane_workitem_page_link_created').subBlocks, + ...getTrigger('plane_workitem_page_link_deleted').subBlocks, + ], + tools: { + access: [ + 'plane_archive_project', + 'plane_archive_work_item', + 'plane_confirm_attachment_upload', + 'plane_create_attachment_upload', + 'plane_create_comment', + 'plane_create_cycle', + 'plane_create_label', + 'plane_create_link', + 'plane_create_module', + 'plane_create_project', + 'plane_create_project_page', + 'plane_create_state', + 'plane_create_webhook', + 'plane_create_work_item', + 'plane_delete_attachment', + 'plane_delete_comment', + 'plane_delete_cycle', + 'plane_delete_label', + 'plane_delete_link', + 'plane_delete_module', + 'plane_delete_project', + 'plane_delete_project_page', + 'plane_delete_state', + 'plane_delete_webhook', + 'plane_delete_work_item', + 'plane_get_attachment', + 'plane_get_comment', + 'plane_get_current_user', + 'plane_get_cycle', + 'plane_get_label', + 'plane_get_link', + 'plane_get_module', + 'plane_get_project', + 'plane_get_project_page', + 'plane_get_project_summary', + 'plane_get_state', + 'plane_get_webhook', + 'plane_get_work_item', + 'plane_get_work_item_by_identifier', + 'plane_list_attachments', + 'plane_list_comments', + 'plane_list_cycles', + 'plane_list_labels', + 'plane_list_links', + 'plane_list_modules', + 'plane_list_project_pages', + 'plane_list_projects', + 'plane_list_states', + 'plane_list_webhooks', + 'plane_list_work_items', + 'plane_list_workspace_work_items', + 'plane_manage_cycle_work_items', + 'plane_manage_module_work_items', + 'plane_regenerate_webhook_secret', + 'plane_transfer_cycle_work_items', + 'plane_unarchive_project', + 'plane_unarchive_work_item', + 'plane_update_comment', + 'plane_update_cycle', + 'plane_update_label', + 'plane_update_link', + 'plane_update_module', + 'plane_update_project', + 'plane_update_project_page', + 'plane_update_state', + 'plane_update_webhook', + 'plane_update_work_item', + ], + config: { + tool: (params) => String(params.operation || 'plane_list_projects'), + params: (params) => { + const operation = String(params.operation || 'plane_list_projects') + const result: Record = { + apiKey: params.apiKey, + baseUrl: params.baseUrl, + apiVersion: params.apiVersion, + } + for (const [key, config] of Object.entries(OPERATION_FIELDS[operation] ?? {})) { + const value: unknown = params[config.field] + if (value === undefined || value === '') continue + result[key] = + config.type === 'boolean' && + typeof value === 'string' && + ['true', 'false'].includes(value) + ? value === 'true' + : (config.type === 'number' || config.type === 'integer') && typeof value === 'string' + ? Number(value) + : value + } + return result + }, + }, + }, + inputs: { + apiKey: { type: 'string', description: 'Plane API token.' }, + baseUrl: { type: 'string', description: 'Plane instance URL; defaults to Plane Cloud.' }, + apiVersion: { + type: 'string', + description: 'v2 by default; choose v1 for Community Edition or older self-hosted instances.', + }, + access_integer: { type: 'number', description: 'Access integer.' }, + access_string: { type: 'string', description: 'Access string.' }, + add: { type: 'json', description: 'Add.' }, + archive_in: { type: 'number', description: 'Archive in.' }, + archived_at: { type: 'string', description: 'Archived at.' }, + assignee_id: { type: 'string', description: 'Assignee id.' }, + assignee_id__in_array: { type: 'json', description: 'Assignee id in array.' }, + assignee_id__in_string: { type: 'string', description: 'Assignee id in string.' }, + assignee_id__isnull: { type: 'boolean', description: 'Assignee id isnull.' }, + assignee_ids: { type: 'json', description: 'Assignee ids.' }, + assignees: { type: 'json', description: 'Assignees.' }, + attachment_type: { type: 'string', description: 'Attachment type.' }, + bodyOverrides: { type: 'json', description: 'Bodyoverrides.' }, + close_in: { type: 'number', description: 'Close in.' }, + collection_id: { type: 'string', description: 'Collection id.' }, + color: { type: 'string', description: 'Color.' }, + comment_html: { type: 'string', description: 'Comment html.' }, + comment_json: { type: 'json', description: 'Comment json.' }, + content_type: { type: 'string', description: 'Content type.' }, + count: { type: 'boolean', description: 'Count.' }, + counts: { type: 'string', description: 'Counts.' }, + cover_image: { type: 'string', description: 'Cover image.' }, + created_at: { type: 'string', description: 'Created at.' }, + created_at__gte: { type: 'string', description: 'Created at gte.' }, + created_at__lte: { type: 'string', description: 'Created at lte.' }, + created_by: { type: 'string', description: 'Created by.' }, + cursor: { type: 'string', description: 'Cursor.' }, + custom_fields: { type: 'json', description: 'Custom fields.' }, + cycle_id: { type: 'string', description: 'Cycle id.' }, + cycle_id__in_array: { type: 'json', description: 'Cycle id in array.' }, + cycle_id__in_string: { type: 'string', description: 'Cycle id in string.' }, + cycle_id__isnull: { type: 'boolean', description: 'Cycle id isnull.' }, + cycle_view_boolean: { type: 'boolean', description: 'Cycle view boolean.' }, + cycle_view_string: { type: 'string', description: 'Cycle view string.' }, + default: { type: 'boolean', description: 'Default.' }, + default_assignee_id: { type: 'string', description: 'Default assignee id.' }, + default_state_id: { type: 'string', description: 'Default state id.' }, + deleted_at: { type: 'string', description: 'Deleted at.' }, + description: { type: 'string', description: 'Description.' }, + description_html: { type: 'string', description: 'Description html.' }, + emoji: { type: 'string', description: 'Emoji.' }, + end_date: { type: 'string', description: 'End date.' }, + estimate: { type: 'string', description: 'Estimate.' }, + estimate_id: { type: 'string', description: 'Estimate id.' }, + estimate_point_id: { type: 'string', description: 'Estimate point id.' }, + expand: { type: 'string', description: 'Expand.' }, + external_id: { type: 'string', description: 'External id.' }, + external_source: { type: 'string', description: 'External source.' }, + fields: { type: 'string', description: 'Fields.' }, + filters: { type: 'json', description: 'Filters.' }, + group: { type: 'string', description: 'Group.' }, + group__in: { type: 'string', description: 'Group in.' }, + guest_view_all_features: { type: 'boolean', description: 'Guest view all features.' }, + icon_prop: { type: 'string', description: 'Icon prop.' }, + identifier: { type: 'string', description: 'Identifier.' }, + include_archived: { type: 'boolean', description: 'Include archived.' }, + intake_view: { type: 'boolean', description: 'Intake view.' }, + is_active: { type: 'boolean', description: 'Is active.' }, + is_archived: { type: 'boolean', description: 'Is archived.' }, + is_default: { type: 'boolean', description: 'Is default.' }, + is_draft: { type: 'boolean', description: 'Is draft.' }, + is_global: { type: 'boolean', description: 'Is global.' }, + is_issue_type_enabled: { type: 'boolean', description: 'Is issue type enabled.' }, + is_locked: { type: 'boolean', description: 'Is locked.' }, + is_time_tracking_enabled: { type: 'boolean', description: 'Is time tracking enabled.' }, + is_triage: { type: 'boolean', description: 'Is triage.' }, + is_uploaded: { type: 'boolean', description: 'Is uploaded.' }, + issue_id: { type: 'string', description: 'Issue id.' }, + issue_views_view: { type: 'boolean', description: 'Issue views view.' }, + key: { type: 'string', description: 'Key.' }, + label_id: { type: 'string', description: 'Label id.' }, + label_id__in_array: { type: 'json', description: 'Label id in array.' }, + label_id__in_string: { type: 'string', description: 'Label id in string.' }, + label_id__isnull: { type: 'boolean', description: 'Label id isnull.' }, + label_ids: { type: 'json', description: 'Label ids.' }, + labels: { type: 'json', description: 'Labels.' }, + lead_id: { type: 'string', description: 'Lead id.' }, + logo_props_json: { type: 'json', description: 'Logo props json.' }, + logo_props_string: { type: 'string', description: 'Logo props string.' }, + members: { type: 'json', description: 'Members.' }, + metadata: { type: 'json', description: 'Metadata.' }, + module_id: { type: 'string', description: 'Module id.' }, + module_id__in_array: { type: 'json', description: 'Module id in array.' }, + module_id__in_string: { type: 'string', description: 'Module id in string.' }, + module_id__isnull: { type: 'boolean', description: 'Module id isnull.' }, + module_ids: { type: 'json', description: 'Module ids.' }, + module_view: { type: 'boolean', description: 'Module view.' }, + name: { type: 'string', description: 'Name.' }, + network_integer: { type: 'number', description: 'Network integer.' }, + network_string: { type: 'string', description: 'Network string.' }, + new_cycle_id: { type: 'string', description: 'New cycle id.' }, + offset: { type: 'number', description: 'Offset.' }, + order_by: { type: 'string', description: 'Order by.' }, + owned_by: { type: 'string', description: 'Owned by.' }, + owned_by_id: { type: 'string', description: 'Owned by id.' }, + page_view: { type: 'boolean', description: 'Page view.' }, + paginate: { type: 'string', description: 'Paginate.' }, + parent: { type: 'string', description: 'Parent.' }, + parent_id: { type: 'string', description: 'Parent id.' }, + parent_id__in_array: { type: 'json', description: 'Parent id in array.' }, + parent_id__in_string: { type: 'string', description: 'Parent id in string.' }, + parent_id__isnull: { type: 'boolean', description: 'Parent id isnull.' }, + per_page: { type: 'number', description: 'Per page.' }, + pk: { type: 'string', description: 'Resource ID.' }, + point: { type: 'number', description: 'Point.' }, + pql: { type: 'string', description: 'Pql.' }, + priority: { type: 'string', description: 'Priority.' }, + priority__in_array: { type: 'json', description: 'Priority in array.' }, + priority__in_string: { type: 'string', description: 'Priority in string.' }, + project_id: { type: 'string', description: 'Project id.' }, + project_id__in: { type: 'json', description: 'Project id in.' }, + project_lead_id: { type: 'string', description: 'Project lead id.' }, + remove: { type: 'json', description: 'Remove.' }, + scopes: { type: 'json', description: 'Scopes.' }, + search: { type: 'string', description: 'Search.' }, + sequence: { type: 'number', description: 'Sequence.' }, + sequence_id: { type: 'number', description: 'Sequence id.' }, + size: { type: 'number', description: 'Size.' }, + sort_order: { type: 'number', description: 'Sort order.' }, + start_date: { type: 'string', description: 'Start date.' }, + start_date__gte: { type: 'string', description: 'Start date gte.' }, + start_date__lte: { type: 'string', description: 'Start date lte.' }, + state: { type: 'string', description: 'State.' }, + state_group: { type: 'string', description: 'State group.' }, + state_group__in_array: { type: 'json', description: 'State group in array.' }, + state_group__in_string: { type: 'string', description: 'State group in string.' }, + state_id: { type: 'string', description: 'State id.' }, + state_id__in_array: { type: 'json', description: 'State id in array.' }, + state_id__in_string: { type: 'string', description: 'State id in string.' }, + status: { type: 'string', description: 'Status.' }, + status__in: { type: 'string', description: 'Status in.' }, + target_date: { type: 'string', description: 'Target date.' }, + target_date__gte: { type: 'string', description: 'Target date gte.' }, + target_date__lte: { type: 'string', description: 'Target date lte.' }, + timezone: { type: 'string', description: 'Timezone.' }, + title: { type: 'string', description: 'Title.' }, + type: { type: 'string', description: 'Type.' }, + type_id: { type: 'string', description: 'Type id.' }, + type_id__in_array: { type: 'json', description: 'Type id in array.' }, + type_id__in_string: { type: 'string', description: 'Type id in string.' }, + updated_at__gte: { type: 'string', description: 'Updated at gte.' }, + updated_at__lte: { type: 'string', description: 'Updated at lte.' }, + upload_confirmed: { type: 'boolean', description: 'Upload confirmed.' }, + url: { type: 'string', description: 'Url.' }, + v1_access: { type: 'number', description: 'V1 access.' }, + v1_icon_prop: { type: 'json', description: 'V1 icon prop.' }, + v1_logo_props: { type: 'json', description: 'V1 logo props.' }, + v1_view_props: { type: 'json', description: 'V1 view props.' }, + version: { type: 'string', description: 'Version.' }, + view_props: { type: 'string', description: 'View props.' }, + work_item_id: { type: 'string', description: 'Work item id.' }, + workspace_slug: { type: 'string', description: 'Workspace slug.' }, + }, + outputs: { + success: { type: 'boolean', description: 'Operation completed successfully.' }, + result: { type: 'json', description: 'Operation-specific resource with documented fields.' }, + results: { type: 'json', description: 'List of returned resources.' }, + pagination: { + type: 'json', + description: 'API v1 cursor pagination. API v2 pagination is returned inside result.', + }, + }, + triggers: { + enabled: true, + available: [ + 'plane_webhook', + 'plane_project_created', + 'plane_project_updated', + 'plane_project_archived', + 'plane_project_deleted', + 'plane_cycle_created', + 'plane_cycle_updated', + 'plane_cycle_archived', + 'plane_cycle_deleted', + 'plane_module_created', + 'plane_module_updated', + 'plane_module_archived', + 'plane_module_deleted', + 'plane_milestone_created', + 'plane_milestone_updated', + 'plane_milestone_deleted', + 'plane_page_created', + 'plane_page_updated', + 'plane_page_archived', + 'plane_page_deleted', + 'plane_page_comment_created', + 'plane_page_comment_updated', + 'plane_page_comment_deleted', + 'plane_workitem_created', + 'plane_workitem_updated', + 'plane_workitem_archived', + 'plane_workitem_deleted', + 'plane_workitem_comment_created', + 'plane_workitem_comment_updated', + 'plane_workitem_comment_deleted', + 'plane_workitem_link_created', + 'plane_workitem_link_updated', + 'plane_workitem_link_deleted', + 'plane_workitem_vote_created', + 'plane_workitem_vote_deleted', + 'plane_workitem_attachment_created', + 'plane_workitem_attachment_updated', + 'plane_workitem_attachment_deleted', + 'plane_workitem_relation_created', + 'plane_workitem_relation_deleted', + 'plane_workitem_dependency_created', + 'plane_workitem_dependency_deleted', + 'plane_workitem_page_link_created', + 'plane_workitem_page_link_deleted', + ], + }, +} + +export const PlaneBlockMeta: BlockMeta = { + url: 'https://plane.so', + tags: ['project-management', 'ticketing'], + skills: [ + { + name: 'plane-work-item-triage', + description: 'Triage incoming work items and assign their states, labels, and owners.', + content: + '# Plane Work Item Triage\n\nList project states and labels before creating or updating work items. Resolve names to IDs. Use description_html for formatted descriptions and assignee_ids/label_ids arrays for memberships. Set priority to none, low, medium, high, or urgent. Follow pagination cursors. Report each created or updated work item ID.\n\nReference: https://docs.plane.so/work-items/create-and-manage-work-items', + }, + { + name: 'plane-cycle-planning', + description: 'Plan and monitor a sprint using Plane cycles.', + content: + '# Plane Cycle Planning\n\nList project cycles and work items, resolve IDs, and create a cycle with matching start and end dates when requested. Add work items using their IDs. List project work items filtered by the cycle ID to verify membership. Transfer incomplete work items from a completed cycle only when requested, using the destination cycle ID. Report the cycle and work items included.\n\nReference: https://docs.plane.so/core-concepts/cycles', + }, + { + name: 'plane-module-tracking', + description: 'Track related work across a Plane module.', + content: + '# Plane Module Tracking\n\nList modules, then create or update a module with its lead, status, and dates. Add work items by ID. List project work items filtered by the module ID to confirm membership. Report work item states and module progress without changing work item states unless requested.\n\nReference: https://docs.plane.so/core-concepts/modules', + }, + { + name: 'plane-project-documentation', + description: 'Maintain project documentation alongside work items.', + content: + '# Plane Project Documentation\n\nList project pages, read the selected page, and create or update its name and HTML content. Link the documentation to work items using their link operations. Use comments for status notes. Verify the saved page and link IDs.\n\nReference: https://docs.plane.so/pages/overview', + }, + { + name: 'plane-project-digest', + description: 'Summarize project progress from paginated work items.', + content: + '# Plane Project Digest\n\nList projects, states, and work items. With API v2 offset pagination, follow result.next until null; with cursor pagination, follow result.next_cursor while result.has_more is true. With API v1, follow pagination.next_cursor while pagination.next_page_results is true. Group results by state, assignee, priority, and target date. Read cycles or modules when useful. Report overdue and blocked work with IDs and owners; treat missing fields as unavailable. Advanced features depend on the instance edition and version.\n\nReference: https://docs.plane.so/core-concepts/analytics', + }, + ], + templates: [ + { + icon: PlaneIcon, + title: 'Plane backlog triage', + prompt: + 'Build an agent that reads incoming Plane work items, resolves project states and labels, proposes triage decisions, and applies approved priority, ownership, and state changes.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + }, + { + icon: PlaneIcon, + title: 'Plane sprint planner', + prompt: + 'Build an agent that selects ready Plane work items, creates a dated cycle, assigns those work items, and reports the resulting sprint scope.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + }, + { + icon: PlaneIcon, + title: 'Plane daily project digest', + prompt: + 'Build a scheduled workflow that pages through Plane work items and sends a daily summary of overdue, blocked, and completed work to Slack.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + alsoIntegrations: ['slack'], + }, + { + icon: PlaneIcon, + title: 'Plane module progress report', + prompt: + 'Build an agent that reads Plane modules and their work items, summarizes progress and overdue work, and reports the module lead and next steps.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + }, + { + icon: PlaneIcon, + title: 'Plane work item intake', + prompt: + 'Build a workflow that receives requests, creates Plane work items with structured descriptions, and reports their IDs for triage.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + }, + { + icon: PlaneIcon, + title: 'Plane project documentation', + prompt: + 'Build an agent that reads Plane project work items, summarizes decisions and progress, and updates a project page with the resulting documentation.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + }, + { + icon: PlaneIcon, + title: 'Plane self-hosted project sync', + prompt: + 'Build a workflow that connects to my self-hosted Plane instance, pages through project work items, and syncs changed work items into a Sim table without losing the pagination cursor.', + modules: ['agent', 'workflows'], + category: 'productivity', + tags: ['project-management', 'automation'], + }, + ], +} diff --git a/apps/sim/blocks/registry-maps.ts b/apps/sim/blocks/registry-maps.ts index a8ff079286f..d1bdc7bf953 100644 --- a/apps/sim/blocks/registry-maps.ts +++ b/apps/sim/blocks/registry-maps.ts @@ -266,6 +266,7 @@ import { PiBlock } from '@/blocks/blocks/pi' import { PineconeBlock, PineconeBlockMeta } from '@/blocks/blocks/pinecone' import { PipedriveBlock, PipedriveBlockMeta } from '@/blocks/blocks/pipedrive' import { PitchBookBlock, PitchBookBlockMeta } from '@/blocks/blocks/pitchbook' +import { PlaneBlock, PlaneBlockMeta } from '@/blocks/blocks/plane' import { PlanetScaleBlock, PlanetScaleBlockMeta } from '@/blocks/blocks/planetscale' import { PolymarketBlock, PolymarketBlockMeta } from '@/blocks/blocks/polymarket' import { PostgreSQLBlock, PostgreSQLBlockMeta } from '@/blocks/blocks/postgresql' @@ -622,6 +623,7 @@ export const BLOCK_REGISTRY: Record = { pinecone: PineconeBlock, pipedrive: PipedriveBlock, pitchbook: PitchBookBlock, + plane: PlaneBlock, planetscale: PlanetScaleBlock, polymarket: PolymarketBlock, postgresql: PostgreSQLBlock, @@ -956,6 +958,7 @@ export const BLOCK_META_REGISTRY: Record = { pinecone: PineconeBlockMeta, pipedrive: PipedriveBlockMeta, pitchbook: PitchBookBlockMeta, + plane: PlaneBlockMeta, planetscale: PlanetScaleBlockMeta, polymarket: PolymarketBlockMeta, postgresql: PostgreSQLBlockMeta, diff --git a/apps/sim/components/icons.tsx b/apps/sim/components/icons.tsx index c186ddf787a..28d02baf1c7 100644 --- a/apps/sim/components/icons.tsx +++ b/apps/sim/components/icons.tsx @@ -10124,3 +10124,11 @@ export function YouComIcon(props: SVGProps) { ) } + +export function PlaneIcon(props: SVGProps) { + return ( + + + + ) +} diff --git a/apps/sim/connectors/plane/index.ts b/apps/sim/connectors/plane/index.ts new file mode 100644 index 00000000000..4673ab9c090 --- /dev/null +++ b/apps/sim/connectors/plane/index.ts @@ -0,0 +1 @@ +export { planeConnector } from './plane' diff --git a/apps/sim/connectors/plane/meta.ts b/apps/sim/connectors/plane/meta.ts new file mode 100644 index 00000000000..fcb90a6ff10 --- /dev/null +++ b/apps/sim/connectors/plane/meta.ts @@ -0,0 +1,75 @@ +import { PlaneIcon } from '@/components/icons' +import type { ConnectorMeta } from '@/connectors/types' + +export const planeConnectorMeta: ConnectorMeta = { + id: 'plane', + name: 'Plane', + description: 'Sync work items or project pages from Plane', + version: '1.0.0', + icon: PlaneIcon, + auth: { + mode: 'apiKey', + label: 'API Token', + placeholder: 'Enter your Plane personal access token', + }, + configFields: [ + { + id: 'workspaceSlug', + title: 'Workspace Slug', + type: 'short-input', + required: true, + placeholder: 'my-team', + }, + { + id: 'projectId', + title: 'Project ID', + type: 'short-input', + required: true, + placeholder: 'Project UUID', + }, + { + id: 'contentType', + title: 'Content', + type: 'dropdown', + required: false, + options: [ + { id: 'work_items', label: 'Work items' }, + { id: 'pages', label: 'Project pages' }, + ], + description: 'Project pages require a Plane edition with the public pages API.', + }, + { + id: 'baseUrl', + title: 'Instance URL', + type: 'short-input', + required: false, + placeholder: 'https://api.plane.so', + description: + 'Cloud API or self-hosted instance origin, optionally with a path prefix. Omit /api/v1 and /api/v2.', + }, + { + id: 'webUrl', + title: 'App URL', + type: 'short-input', + required: false, + placeholder: 'https://app.plane.so', + description: + 'Plane app origin for source links. Defaults to the cloud app, or the configured self-hosted instance.', + }, + { + id: 'maxDocuments', + title: 'Max Documents', + type: 'short-input', + required: false, + placeholder: 'Unlimited', + }, + ], + tagDefinitions: [ + { id: 'projectId', displayName: 'Project ID', fieldType: 'text' }, + { id: 'state', displayName: 'State', fieldType: 'text' }, + { id: 'priority', displayName: 'Priority', fieldType: 'text' }, + { id: 'assignees', displayName: 'Assignees', fieldType: 'text' }, + { id: 'labels', displayName: 'Labels', fieldType: 'text' }, + { id: 'lastModified', displayName: 'Last Modified', fieldType: 'date' }, + ], +} diff --git a/apps/sim/connectors/plane/plane.ts b/apps/sim/connectors/plane/plane.ts new file mode 100644 index 00000000000..ba65b0c7675 --- /dev/null +++ b/apps/sim/connectors/plane/plane.ts @@ -0,0 +1,212 @@ +import { createLogger } from '@sim/logger' +import { getErrorMessage } from '@sim/utils/errors' +import { secureFetchWithRetry } from '@/lib/knowledge/documents/secure-fetch.server' +import { type RetryOptions, VALIDATE_RETRY_OPTIONS } from '@/lib/knowledge/documents/utils' +import { planeConnectorMeta } from '@/connectors/plane/meta' +import { + type PlaneContentConfig, + parsePlanePage, + planePageDocument, + planeWorkItemDocument, +} from '@/connectors/plane/utils' +import type { ConnectorConfig, ExternalDocument } from '@/connectors/types' +import { joinTagArray, listingRequestError, parseTagDate } from '@/connectors/utils' +import { planeApiUrl, planeHeaders, planeRedirectPolicy } from '@/tools/plane/utils' +import { safeUrlPathSegment } from '@/tools/url-path' + +const logger = createLogger('PlaneConnector') +const PAGE_SIZE = 100 +const WORK_ITEM_FIELDS = + 'id,name,sequence_id,description_html,description_stripped,priority,state,assignees,labels,updated_at' +const PAGE_FIELDS = 'id,name,updated_at' + +interface PlaneSourceConfig extends PlaneContentConfig { + baseUrl?: string + contentType: 'work_items' | 'pages' + maxDocuments: number +} + +function readConfig(source: Record): PlaneSourceConfig { + const workspaceSlug = typeof source.workspaceSlug === 'string' ? source.workspaceSlug.trim() : '' + const projectId = typeof source.projectId === 'string' ? source.projectId.trim() : '' + if (!workspaceSlug || !projectId) throw new Error('Workspace slug and project ID are required') + safeUrlPathSegment(workspaceSlug, 'workspaceSlug') + safeUrlPathSegment(projectId, 'projectId') + const contentType = source.contentType || 'work_items' + if (contentType !== 'work_items' && contentType !== 'pages') + throw new Error('Content must be work items or project pages') + const maxInput = source.maxDocuments + if ( + maxInput !== undefined && + maxInput !== null && + typeof maxInput !== 'string' && + typeof maxInput !== 'number' + ) + throw new Error('Max documents must be a positive integer') + const maxDocuments = + maxInput === undefined || maxInput === null || maxInput === '' ? 0 : Number(maxInput) + if ( + !Number.isSafeInteger(maxDocuments) || + maxDocuments < 0 || + (maxDocuments === 0 && maxInput !== undefined && maxInput !== null && maxInput !== '') + ) + throw new Error('Max documents must be a positive integer') + const baseUrl = + typeof source.baseUrl === 'string' && source.baseUrl.trim() ? source.baseUrl.trim() : undefined + const apiOrigin = new URL(planeApiUrl(baseUrl, '/')) + const defaultWebUrl = + apiOrigin.origin === 'https://api.plane.so' + ? 'https://app.plane.so' + : `${apiOrigin.origin}${apiOrigin.pathname.replace(/\/+$/, '')}` + const webUrl = + typeof source.webUrl === 'string' && source.webUrl.trim() ? source.webUrl.trim() : defaultWebUrl + const normalizedWeb = new URL(planeApiUrl(webUrl, '/')) + return { + workspaceSlug, + projectId, + contentType, + maxDocuments, + baseUrl, + webUrl: `${normalizedWeb.origin}${normalizedWeb.pathname.replace(/\/+$/, '')}`, + } +} + +function resourcePath(config: PlaneSourceConfig, id?: string): string { + const resource = config.contentType === 'pages' ? 'pages' : 'work-items' + return `/api/v1/workspaces/${safeUrlPathSegment(config.workspaceSlug, 'workspaceSlug')}/projects/${safeUrlPathSegment(config.projectId, 'projectId')}/${resource}/${id ? `${safeUrlPathSegment(id, 'externalId')}/` : ''}` +} + +async function requestPlane( + token: string, + config: PlaneSourceConfig, + path: string, + query: Record = {}, + retryOptions?: RetryOptions +) { + return secureFetchWithRetry( + planeApiUrl(config.baseUrl, path, query), + { + method: 'GET', + headers: planeHeaders(token), + profile: 'configuredEndpoint', + redirectPolicy: planeRedirectPolicy(), + maxResponseBytes: 8 * 1024 * 1024, + }, + retryOptions + ) +} + +export const planeConnector: ConnectorConfig = { + ...planeConnectorMeta, + + async listDocuments(token, sourceConfig, cursor, syncContext) { + const config = readConfig(sourceConfig) + const fetched = + typeof syncContext?.totalDocsFetched === 'number' ? syncContext.totalDocsFetched : 0 + const remaining = + config.maxDocuments > 0 ? Math.max(0, config.maxDocuments - fetched) : PAGE_SIZE + if (remaining === 0) { + if (syncContext) syncContext.listingCapped = true + return { documents: [], hasMore: false, reconciliationSafe: false } + } + const response = await requestPlane(token, config, resourcePath(config), { + cursor, + per_page: PAGE_SIZE, + fields: config.contentType === 'pages' ? PAGE_FIELDS : WORK_ITEM_FIELDS, + ...(config.contentType === 'work_items' + ? { expand: 'state,assignees,labels', order_by: 'created_at' } + : {}), + }) + if (!response.ok) throw listingRequestError('Plane listing failed', response.status) + const page = parsePlanePage(await response.json(), cursor) + const documents = await Promise.all( + page.results + .slice(0, remaining) + .map((item) => + config.contentType === 'pages' + ? planePageDocument(item, config, true) + : planeWorkItemDocument(item, config) + ) + ) + const total = fetched + documents.length + if (syncContext) syncContext.totalDocsFetched = total + const capped = + config.maxDocuments > 0 && total >= config.maxDocuments && page.nextCursor !== undefined + if (capped && syncContext) syncContext.listingCapped = true + logger.info('Listed Plane documents', { + count: documents.length, + hasMore: page.nextCursor !== undefined && !capped, + capped, + }) + return { + documents, + nextCursor: capped ? undefined : page.nextCursor, + hasMore: page.nextCursor !== undefined && !capped, + // Plane v1 cursors encode offsets, so concurrent source changes can shift records between pages. + reconciliationSafe: false, + } + }, + + async getDocument(token, sourceConfig, externalId): Promise { + const config = readConfig(sourceConfig) + const prefix = config.contentType === 'pages' ? 'page:' : 'work_item:' + if (!externalId.startsWith(prefix) || externalId.length === prefix.length) return null + const response = await requestPlane( + token, + config, + resourcePath(config, externalId.slice(prefix.length)), + { + fields: + config.contentType === 'pages' + ? 'id,name,updated_at,description_html,description_stripped,description' + : WORK_ITEM_FIELDS, + ...(config.contentType === 'work_items' ? { expand: 'state,assignees,labels' } : {}), + } + ) + if (response.status === 404) return null + if (!response.ok) throw new Error(`Plane document read failed (HTTP ${response.status})`) + const payload: unknown = await response.json() + return config.contentType === 'pages' + ? planePageDocument(payload, config, false) + : planeWorkItemDocument(payload, config) + }, + + async validateConfig(token, sourceConfig) { + try { + const config = readConfig(sourceConfig) + const response = await requestPlane( + token, + config, + resourcePath(config), + { + per_page: 1, + fields: config.contentType === 'pages' ? PAGE_FIELDS : 'id,name', + }, + VALIDATE_RETRY_OPTIONS + ) + if (!response.ok) + return { + valid: false, + error: `Plane access failed (HTTP ${response.status}). Check the token, workspace, project and edition.`, + } + parsePlanePage(await response.json()) + return { valid: true } + } catch (error) { + return { + valid: false, + error: getErrorMessage(error, 'Failed to validate Plane configuration'), + } + } + }, + + mapTags(metadata) { + return { + projectId: metadata.projectId, + state: metadata.state, + priority: metadata.priority, + assignees: joinTagArray(metadata.assignees), + labels: joinTagArray(metadata.labels), + lastModified: parseTagDate(metadata.lastModified), + } + }, +} diff --git a/apps/sim/connectors/plane/utils.test.ts b/apps/sim/connectors/plane/utils.test.ts new file mode 100644 index 00000000000..b652bbb834d --- /dev/null +++ b/apps/sim/connectors/plane/utils.test.ts @@ -0,0 +1,65 @@ +import { describe, expect, it } from 'vitest' +import { parsePlanePage, planePageDocument, planeWorkItemDocument } from '@/connectors/plane/utils' + +const CONFIG = { + workspaceSlug: 'example', + projectId: 'project-a', + webUrl: 'https://plane.example.com/prefix', +} + +describe('Plane connector listing integrity', () => { + it.each([ + {}, + { results: [] }, + { results: [], next_page_results: true }, + { results: [], next_page_results: true, next_cursor: '' }, + ])('rejects incomplete pagination instead of treating it as exhaustion', (body) => { + expect(() => parsePlanePage(body)).toThrow() + }) + it('stops when the provider says exhausted even though an offset cursor is present', () => { + expect( + parsePlanePage({ results: [], next_page_results: false, next_cursor: '100:1:0' }).nextCursor + ).toBeUndefined() + }) + it('rejects a cursor that repeats the current page', () => { + expect(() => + parsePlanePage({ results: [], next_page_results: true, next_cursor: '100:1:0' }, '100:1:0') + ).toThrow() + }) +}) + +describe('Plane knowledge content', () => { + it('keeps the same page version hash before and after content hydration', () => { + const page = { id: 'page-a', name: 'Example page', updated_at: '2026-01-01T00:00:00Z' } + const stub = planePageDocument(page, CONFIG, true) + const full = planePageDocument( + { ...page, description_html: '

Useful content

' }, + CONFIG, + false + ) + expect(stub.contentDeferred).toBe(true) + expect(stub.content).toBe('') + expect(full.contentHash).toBe(stub.contentHash) + expect(full.content).toContain('Useful content') + expect(full.content).not.toContain('

') + }) + it('extracts work item HTML and expanded names without exposing markup', async () => { + const document = await planeWorkItemDocument( + { + id: 'item-a', + name: 'Fix setup', + sequence_id: 7, + description_html: '

Keep code examples

', + priority: 'high', + state: { id: 'state-a', name: 'In Progress' }, + assignees: [{ id: 'user-a', display_name: 'Person' }], + labels: [{ id: 'label-a', name: 'Bug' }], + }, + CONFIG + ) + expect(document.content).toContain('Keep code examples') + expect(document.content).toContain('In Progress') + expect(document.content).toContain('Person') + expect(document.content).not.toContain('') + }) +}) diff --git a/apps/sim/connectors/plane/utils.ts b/apps/sim/connectors/plane/utils.ts new file mode 100644 index 00000000000..98a456f13df --- /dev/null +++ b/apps/sim/connectors/plane/utils.ts @@ -0,0 +1,114 @@ +import { toArray, toRecord } from '@sim/utils/object' +import { z } from 'zod' +import type { ExternalDocument } from '@/connectors/types' +import { computeContentHash, htmlToPlainText } from '@/connectors/utils' +import { planePageContentSchema, planeWorkItemContentSchema } from '@/tools/plane/schemas' +import { safeUrlPathSegment } from '@/tools/url-path' + +export interface PlaneContentConfig { + workspaceSlug: string + projectId: string + webUrl: string +} + +const paginationResponseSchema = z.object({ + results: z.array(z.unknown()), + next_page_results: z.boolean(), + next_cursor: z.string().nullable().optional(), +}) + +/** Rejects malformed or non-advancing listings instead of reporting a complete empty source. */ +export function parsePlanePage(value: unknown, currentCursor?: string) { + const page = paginationResponseSchema.parse(value) + if (page.next_page_results && (!page.next_cursor || page.next_cursor === currentCursor)) { + throw new Error('Plane returned a missing or repeated pagination cursor') + } + return { + results: page.results, + nextCursor: page.next_page_results ? (page.next_cursor ?? undefined) : undefined, + } +} + +function sourceUrl(config: PlaneContentConfig, resource: string, id: string): string { + return `${config.webUrl}/${safeUrlPathSegment(config.workspaceSlug, 'workspaceSlug')}/projects/${safeUrlPathSegment(config.projectId, 'projectId')}/${resource}/${safeUrlPathSegment(id, 'id')}` +} + +function contentText(record: Record): string { + if (typeof record.description_html === 'string' && record.description_html) + return htmlToPlainText(record.description_html) + if (typeof record.description_stripped === 'string') return record.description_stripped + return typeof record.description === 'string' ? htmlToPlainText(record.description) : '' +} + +function names(value: unknown): string[] { + return toArray(value).flatMap((entry) => { + if (typeof entry === 'string') return [entry] + const record = toRecord(entry) + const name = record.display_name ?? record.name ?? record.id + return typeof name === 'string' ? [name] : [] + }) +} + +/** Maps inline work item content consistently for both listing and detail reads. */ +export async function planeWorkItemDocument( + value: unknown, + config: PlaneContentConfig +): Promise { + const item = planeWorkItemContentSchema.parse(value) + if (!item.id) throw new Error('Plane work item response is missing its ID') + const name = item.name?.trim() || 'Untitled work item' + const title = item.sequence_id == null ? name : `#${item.sequence_id}: ${name}` + const state = typeof item.state === 'string' ? item.state : toRecord(item.state).name + const assignees = names(item.assignees) + const labels = names(item.labels) + const content = [ + title, + typeof state === 'string' ? `State: ${state}` : '', + item.priority ? `Priority: ${item.priority}` : '', + assignees.length ? `Assignees: ${assignees.join(', ')}` : '', + labels.length ? `Labels: ${labels.join(', ')}` : '', + item.updated_at ? `Last updated: ${item.updated_at}` : '', + '', + contentText(item), + ] + .filter((line) => line !== '') + .join('\n') + return { + externalId: `work_item:${item.id}`, + title, + content, + mimeType: 'text/plain', + contentHash: await computeContentHash(content), + sourceUrl: sourceUrl(config, 'issues', item.id), + metadata: { + projectId: config.projectId, + state, + priority: item.priority, + assignees, + labels, + lastModified: item.updated_at, + }, + } +} + +/** A page's list and hydrated representations share the provider's modification-version hash. */ +export function planePageDocument( + value: unknown, + config: PlaneContentConfig, + deferred: boolean +): ExternalDocument { + const page = planePageContentSchema.parse(value) + if (!page.id || !page.updated_at) + throw new Error('Plane page response is missing its ID or modification timestamp') + const title = page.name?.trim() || 'Untitled page' + return { + externalId: `page:${page.id}`, + title, + content: deferred ? '' : [title, contentText(page)].filter(Boolean).join('\n\n'), + contentDeferred: deferred, + mimeType: 'text/plain', + contentHash: `plane:page:${page.id}:${page.updated_at}`, + sourceUrl: sourceUrl(config, 'pages', page.id), + metadata: { projectId: config.projectId, lastModified: page.updated_at }, + } +} diff --git a/apps/sim/connectors/registry.server.ts b/apps/sim/connectors/registry.server.ts index bb95a749a47..e527dc09cac 100644 --- a/apps/sim/connectors/registry.server.ts +++ b/apps/sim/connectors/registry.server.ts @@ -46,6 +46,7 @@ import { onedriveConnector } from '@/connectors/onedrive' import { otterConnector } from '@/connectors/otter' import { outlookConnector } from '@/connectors/outlook' import { pagerdutyConnector } from '@/connectors/pagerduty' +import { planeConnector } from '@/connectors/plane' import { redditConnector } from '@/connectors/reddit' import { rootlyConnector } from '@/connectors/rootly' import { s3Connector } from '@/connectors/s3' @@ -123,6 +124,7 @@ export const CONNECTOR_REGISTRY: ConnectorRegistry = { otter: otterConnector, outlook: outlookConnector, pagerduty: pagerdutyConnector, + plane: planeConnector, reddit: redditConnector, rootly: rootlyConnector, s3: s3Connector, diff --git a/apps/sim/connectors/registry.ts b/apps/sim/connectors/registry.ts index 03d6947fb8a..9f36e4fd565 100644 --- a/apps/sim/connectors/registry.ts +++ b/apps/sim/connectors/registry.ts @@ -46,6 +46,7 @@ import { onedriveConnectorMeta } from '@/connectors/onedrive/meta' import { otterConnectorMeta } from '@/connectors/otter/meta' import { outlookConnectorMeta } from '@/connectors/outlook/meta' import { pagerdutyConnectorMeta } from '@/connectors/pagerduty/meta' +import { planeConnectorMeta } from '@/connectors/plane/meta' import { redditConnectorMeta } from '@/connectors/reddit/meta' import { rootlyConnectorMeta } from '@/connectors/rootly/meta' import { s3ConnectorMeta } from '@/connectors/s3/meta' @@ -123,6 +124,7 @@ export const CONNECTOR_META_REGISTRY: ConnectorMetaRegistry = { otter: otterConnectorMeta, outlook: outlookConnectorMeta, pagerduty: pagerdutyConnectorMeta, + plane: planeConnectorMeta, reddit: redditConnectorMeta, rootly: rootlyConnectorMeta, s3: s3ConnectorMeta, diff --git a/apps/sim/lib/block-metadata/names.generated.ts b/apps/sim/lib/block-metadata/names.generated.ts index 3f517a01c3c..35348a6e7ab 100644 --- a/apps/sim/lib/block-metadata/names.generated.ts +++ b/apps/sim/lib/block-metadata/names.generated.ts @@ -205,6 +205,7 @@ export const BLOCK_NAMES: Readonly> = { pinecone: 'Pinecone', pipedrive: 'Pipedrive', pitchbook: 'PitchBook', + plane: 'Plane', planetscale: 'PlanetScale', polymarket: 'Polymarket', postgresql: 'PostgreSQL', diff --git a/apps/sim/lib/integrations/icon-mapping.ts b/apps/sim/lib/integrations/icon-mapping.ts index 34c62ec06c2..819dd9316ea 100644 --- a/apps/sim/lib/integrations/icon-mapping.ts +++ b/apps/sim/lib/integrations/icon-mapping.ts @@ -187,6 +187,7 @@ import { PineconeIcon, PipedriveIcon, PitchBookIcon, + PlaneIcon, PlanetScaleIcon, PolymarketIcon, PostgresIcon, @@ -484,6 +485,7 @@ export const blockTypeToIconMap: Record = { pinecone: PineconeIcon, pipedrive: PipedriveIcon, pitchbook: PitchBookIcon, + plane: PlaneIcon, planetscale: PlanetScaleIcon, polymarket: PolymarketIcon, postgresql: PostgresIcon, diff --git a/apps/sim/lib/mothership/generated/docs-manifest.ts b/apps/sim/lib/mothership/generated/docs-manifest.ts index c2a8e16efcd..63cf583bb7e 100644 --- a/apps/sim/lib/mothership/generated/docs-manifest.ts +++ b/apps/sim/lib/mothership/generated/docs-manifest.ts @@ -265,6 +265,7 @@ export const DOCS_MANIFEST: readonly string[] = [ 'integrations/pipedrive-service-account.mdx', 'integrations/pipedrive.mdx', 'integrations/pitchbook.mdx', + 'integrations/plane.mdx', 'integrations/planetscale.mdx', 'integrations/polymarket.mdx', 'integrations/postgresql.mdx', diff --git a/apps/sim/lib/webhooks/deploy.test.ts b/apps/sim/lib/webhooks/deploy.test.ts index 7a14c48ed39..5867a54e4d2 100644 --- a/apps/sim/lib/webhooks/deploy.test.ts +++ b/apps/sim/lib/webhooks/deploy.test.ts @@ -1,5 +1,6 @@ import { account, credential, webhook, workflowDeploymentVersion } from '@sim/db/schema' import { + createMockRequest, dbChainMockFns, queueTableRows, resetDbChainMock, @@ -10,6 +11,7 @@ import { } from '@sim/testing' import { authOAuthUtilsMock, authOAuthUtilsMockFns } from '@sim/testing/mocks/auth-oauth-utils.mock' import { triggersMock, triggersMockFns } from '@sim/testing/mocks/triggers.mock' +import { toRecord } from '@sim/utils/object' import { eq, ne } from 'drizzle-orm' import { afterAll, beforeEach, describe, expect, it, type Mock, vi } from 'vitest' import type { SubBlockConfig } from '@/blocks/types' @@ -26,6 +28,7 @@ vi.mock('@/blocks', async () => ({ getBlock: (await import('@/blocks/registry')) vi.mock('@/triggers', () => triggersMock) vi.mock('@/lib/webhooks/providers', () => ({ getProviderHandler: vi.fn() })) vi.mock('@/lib/webhooks/provider-subscriptions', () => ({ + activateExternalWebhookSubscription: vi.fn(), cleanupExternalWebhook: vi.fn(), createExternalWebhookSubscription: vi.fn(), hasWebhookConfigChanged: vi.fn(), @@ -34,7 +37,10 @@ vi.mock('@/lib/webhooks/utils.server', () => ({ findConflictingWebhookPathOwner: vi.fn(), })) vi.mock('@/lib/webhooks/pending-verification', () => ({ - PendingWebhookVerificationTracker: vi.fn(), + PendingWebhookVerificationTracker: class { + register = vi.fn().mockResolvedValue(undefined) + clearAll = vi.fn().mockResolvedValue(undefined) + }, })) const { mockIsDeploymentVersionActive, mockIsDeploymentVersionProtected } = vi.hoisted(() => ({ mockIsDeploymentVersionActive: vi.fn(), @@ -63,10 +69,17 @@ import { cleanupInactiveDeploymentWebhooks, resolveTriggerCredentialId, resolveWebhookConfigForBlock, + saveTriggerWebhooksForDeploy, } from '@/lib/webhooks/deploy' -import { cleanupExternalWebhook } from '@/lib/webhooks/provider-subscriptions' +import { + activateExternalWebhookSubscription, + cleanupExternalWebhook, + createExternalWebhookSubscription, + hasWebhookConfigChanged, +} from '@/lib/webhooks/provider-subscriptions' import { getProviderHandler } from '@/lib/webhooks/providers' import { quickBooksHandler } from '@/lib/webhooks/providers/quickbooks' +import { findConflictingWebhookPathOwner } from '@/lib/webhooks/utils.server' import { getBlock } from '@/blocks' import { getTrigger } from '@/triggers' @@ -150,6 +163,21 @@ beforeEach(() => { }) describe('buildProviderConfig canonical collapse', () => { + it('does not accept subscription cleanup credentials from an authored block', () => { + const block = makeBlock('google_drive_poller', { + triggerConfig: { + previousSubscription: { + provider: 'slack', + providerConfig: { credentialId: 'foreign-credential' }, + }, + subscriptionActivationPending: false, + }, + }) + const { providerConfig } = buildProviderConfig(block, 'google_drive_poller', driveTrigger) + expect(providerConfig).not.toHaveProperty('previousSubscription') + expect(providerConfig).not.toHaveProperty('subscriptionActivationPending') + }) + it('collapses a drift block (stale basic + active advanced via override) to the active value', () => { const block = makeBlock( 'google_drive_poller', @@ -606,3 +634,116 @@ describe('cleanupInactiveDeploymentWebhooks', () => { expect(dbChainMockFns.delete).not.toHaveBeenCalled() }) }) + +describe('saveTriggerWebhooksForDeploy activation recovery', () => { + beforeEach(() => { + resetDbChainMock() + }) + it.each([false, true])( + 'recovers activation failure when cleanup fails: %s', + async (cleanupFails) => { + const persisted = new Map>() + const external = new Map() + let activationMustFail = true + let nextExternalId = 0 + vi.mocked(getBlock).mockReturnValue({ category: 'triggers' }) + triggersMockFns.mockIsTriggerValid.mockReturnValue(true) + triggersMockFns.mockGetTrigger.mockReturnValue({ + provider: 'plane', + name: 'Plane', + subBlocks: [], + }) + vi.mocked(getProviderHandler).mockReturnValue({ + createSubscription: async () => undefined, + activateSubscription: async () => undefined, + }) + vi.mocked(hasWebhookConfigChanged).mockReturnValue(false) + vi.mocked(findConflictingWebhookPathOwner).mockResolvedValue(null) + dbChainMockFns.values.mockImplementation((...args: unknown[]) => { + const row = toRecord(args[0]) + if (typeof row.id !== 'string' || persisted.has(row.id)) + throw new Error('duplicate or invalid webhook ID') + persisted.set(row.id, structuredClone(row)) + return { + returning: dbChainMockFns.returning, + onConflictDoUpdate: dbChainMockFns.onConflictDoUpdate, + onConflictDoNothing: dbChainMockFns.onConflictDoNothing, + } + }) + dbChainMockFns.set.mockImplementation((values: unknown) => { + const row = [...persisted.values()][0] + if (row && typeof row.id === 'string') + persisted.set(row.id, { ...row, ...structuredClone(toRecord(values)) }) + return { where: async () => [] } + }) + dbChainMockFns.delete.mockImplementation(() => ({ + where: async () => { + persisted.clear() + return [] + }, + })) + vi.mocked(createExternalWebhookSubscription).mockImplementation(async (_request, row) => { + const externalId = `external-${++nextExternalId}` + external.set(externalId, { active: false }) + return { + updatedProviderConfig: { + ...toRecord(row.providerConfig), + externalId, + webhookSecret: 'test-secret', + subscriptionActivationPending: true, + }, + externalSubscriptionCreated: true, + } + }) + vi.mocked(activateExternalWebhookSubscription).mockImplementation(async (_request, row) => { + const externalId = String(toRecord(row.providerConfig).externalId) + const resource = external.get(externalId) + if (!resource) throw new Error('provider subscription missing') + if (activationMustFail) { + activationMustFail = false + throw new Error('activation unavailable') + } + resource.active = true + }) + vi.mocked(cleanupExternalWebhook).mockImplementation( + async (row, _workflow, _requestId, options) => { + if (cleanupFails) { + if (options?.throwOnError) throw new Error('cleanup unavailable') + return + } + external.delete(String(toRecord(row.providerConfig).externalId)) + } + ) + const block = makeBlock('plane_workitem_created', {}) + const input = { + request: createMockRequest('POST'), + workflowId: 'workflow-1', + workflow: { id: 'workflow-1', workspaceId: 'workspace-1' }, + userId: 'user-1', + blocks: { [block.id]: block }, + requestId: 'request-1', + deploymentVersionId: 'version-1', + } + queueTableRows(webhook, []) + expect((await saveTriggerWebhooksForDeploy(input)).success).toBe(false) + expect(persisted.size).toBe(cleanupFails ? 1 : 0) + expect(external.size).toBe(cleanupFails ? 1 : 0) + const retainedExternalId = cleanupFails + ? String(toRecord([...persisted.values()][0].providerConfig).externalId) + : undefined + queueTableRows(webhook, [...persisted.values()]) + expect((await saveTriggerWebhooksForDeploy(input)).success).toBe(true) + expect(persisted.size).toBe(1) + expect(external.size).toBe(1) + const config = toRecord([...persisted.values()][0].providerConfig) + expect(config.webhookSecret).toBe('test-secret') + expect(external.get(String(config.externalId))?.active).toBe(true) + if (cleanupFails) expect(config.externalId).toBe(retainedExternalId) + vi.mocked(activateExternalWebhookSubscription).mockRejectedValue( + new Error('provider unavailable') + ) + queueTableRows(webhook, [...persisted.values()]) + expect((await saveTriggerWebhooksForDeploy(input)).success).toBe(true) + } + ) +}) diff --git a/apps/sim/lib/webhooks/deploy.ts b/apps/sim/lib/webhooks/deploy.ts index e3456e48eba..3289637fd89 100644 --- a/apps/sim/lib/webhooks/deploy.ts +++ b/apps/sim/lib/webhooks/deploy.ts @@ -3,7 +3,7 @@ import { account, credential, webhook, workflowDeploymentVersion } from '@sim/db import { createLogger } from '@sim/logger' import { getErrorMessage } from '@sim/utils/errors' import { generateShortId } from '@sim/utils/id' -import { toRecord } from '@sim/utils/object' +import { omit, toRecord } from '@sim/utils/object' import { and, asc, eq, inArray, isNull, ne, or } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { isSlackExtendedScopesEnabled } from '@/lib/core/config/env-flags' @@ -16,6 +16,7 @@ import { import { WebhookPathClaimConflictError } from '@/lib/webhooks/path-claims' import { PendingWebhookVerificationTracker } from '@/lib/webhooks/pending-verification' import { + activateExternalWebhookSubscription, cleanupExternalWebhook, createExternalWebhookSubscription, hasWebhookConfigChanged, @@ -214,7 +215,10 @@ export function buildProviderConfig( const triggerConfigValue = getSubBlockValue(block, 'triggerConfig') const baseConfig = triggerConfigValue && typeof triggerConfigValue === 'object' - ? (triggerConfigValue as Record) + ? omit(triggerConfigValue as Record, [ + 'previousSubscription', + 'subscriptionActivationPending', + ]) : {} const providerConfig: Record = { ...baseConfig } @@ -979,7 +983,29 @@ export async function saveTriggerWebhooksForDeploy({ logger.info(`[${requestId}] Webhook config changed for block ${block.id}, will recreate`) } } - // else: config unchanged and not forcing recreation, keep existing webhook + if (!needsRecreation && existingConfig.subscriptionActivationPending === true) { + try { + await activateExternalWebhookSubscription( + request, + existingWh, + workflow, + userId, + requestId + ) + await db + .update(webhook) + .set({ providerConfig: { ...existingConfig, subscriptionActivationPending: false } }) + .where(eq(webhook.id, existingWh.id)) + } catch (error) { + return { + success: false, + error: { + message: getErrorMessage(error, 'Failed to activate webhook subscription'), + status: 500, + }, + } + } + } } } @@ -1118,6 +1144,7 @@ export async function saveTriggerWebhooksForDeploy({ } // Phase 2: Insert all DB records in a transaction + let recordsCommitted = false try { await db.transaction(async (tx) => { for (const sub of createdSubscriptions) { @@ -1137,9 +1164,32 @@ export async function saveTriggerWebhooksForDeploy({ } }) + recordsCommitted = true await pendingVerificationTracker.clearAll() for (const sub of createdSubscriptions) { + await activateExternalWebhookSubscription( + request, + { + id: sub.webhookId, + path: sub.triggerPath, + provider: sub.provider, + providerConfig: sub.updatedProviderConfig, + }, + workflow, + userId, + requestId + ) + if (sub.updatedProviderConfig.subscriptionActivationPending === true) { + sub.updatedProviderConfig = { + ...sub.updatedProviderConfig, + subscriptionActivationPending: false, + } + await db + .update(webhook) + .set({ providerConfig: sub.updatedProviderConfig }) + .where(eq(webhook.id, sub.webhookId)) + } const pollingError = await configurePollingIfNeeded( sub.provider, { id: sub.webhookId, path: sub.triggerPath, providerConfig: sub.updatedProviderConfig }, @@ -1190,7 +1240,7 @@ export async function saveTriggerWebhooksForDeploy({ } } catch (error: unknown) { await pendingVerificationTracker.clearAll() - logger.error(`[${requestId}] Failed to insert webhook records`, error) + logger.error(`[${requestId}] Failed to save or activate webhook records`, error) let cleanupFailure: unknown for (const sub of createdSubscriptions) { if (sub.externalSubscriptionCreated) { @@ -1204,21 +1254,29 @@ export async function saveTriggerWebhooksForDeploy({ }, workflow, requestId, - { throwOnError: strictExternalCleanup } + { + throwOnError: + strictExternalCleanup || + Boolean(getProviderHandler(sub.provider).activateSubscription), + } ) + if (recordsCommitted) await db.delete(webhook).where(eq(webhook.id, sub.webhookId)) } catch (cleanupError) { cleanupFailure = cleanupError logger.warn( `[${requestId}] Failed to cleanup external subscription for ${sub.block.id}`, cleanupError ) - await persistCreatedWebhookRecordAfterCleanupFailure({ - workflowId, - deploymentVersionId, - sub, - requestId, - }) + if (!recordsCommitted) + await persistCreatedWebhookRecordAfterCleanupFailure({ + workflowId, + deploymentVersionId, + sub, + requestId, + }) } + } else if (recordsCommitted) { + await db.delete(webhook).where(eq(webhook.id, sub.webhookId)) } } return { diff --git a/apps/sim/lib/webhooks/provider-subscriptions.test.ts b/apps/sim/lib/webhooks/provider-subscriptions.test.ts index 45cb9f976a8..9e9c48ec0a4 100644 --- a/apps/sim/lib/webhooks/provider-subscriptions.test.ts +++ b/apps/sim/lib/webhooks/provider-subscriptions.test.ts @@ -146,6 +146,34 @@ describe('cleanupExternalWebhook', () => { } ) + it('cleans the tracked prior subscription when the replacement has no deletion handler', async () => { + const external = new Set(['previous-registration']) + mockGetProviderHandler.mockImplementation((provider: string) => + provider === 'plane' + ? { + deleteSubscription: async () => { + external.delete('previous-registration') + }, + } + : {} + ) + await cleanupExternalWebhook( + { + provider: 'webhook', + providerConfig: { + previousSubscription: { + provider: 'plane', + providerConfig: { externalId: 'previous-registration' }, + }, + }, + }, + { userId: 'user-1', workspaceId: 'workspace-1' }, + 'request-1', + { throwOnError: true } + ) + expect(external.size).toBe(0) + }) + it('resolves {{ENV_VAR}} references before deleting the provider subscription', async () => { const deleteSubscription = vi.fn().mockResolvedValue(undefined) mockGetProviderHandler.mockReturnValue({ deleteSubscription }) diff --git a/apps/sim/lib/webhooks/provider-subscriptions.ts b/apps/sim/lib/webhooks/provider-subscriptions.ts index 91360774825..2a99362f276 100644 --- a/apps/sim/lib/webhooks/provider-subscriptions.ts +++ b/apps/sim/lib/webhooks/provider-subscriptions.ts @@ -69,6 +69,8 @@ type RecreateCheckInput = { /** System-managed fields that should not trigger recreation. */ const SYSTEM_MANAGED_FIELDS = new Set([ 'externalId', + 'previousSubscription', + 'subscriptionActivationPending', 'externalSubscriptionId', 'eventTypes', 'webhookTag', @@ -219,6 +221,44 @@ export async function createExternalWebhookSubscription( } } +/** Activates provider state after the authorized caller has durably stored its external ID and credentials. */ +export async function activateExternalWebhookSubscription( + request: NextRequest, + webhookData: Record, + workflow: Record, + userId: string, + requestId: string, + options: { signal?: AbortSignal } = {} +): Promise { + const handler = getProviderHandler(String(webhookData.provider)) + const activateSubscription = handler.activateSubscription + if ( + !activateSubscription || + toRecord(webhookData.providerConfig).subscriptionActivationPending === false + ) + return + const workspaceId = typeof workflow.workspaceId === 'string' ? workflow.workspaceId : undefined + const secrets = new Map() + const providerConfig = await resolveWebhookProviderConfig( + toRecord(webhookData.providerConfig), + userId, + workspaceId, + { onResolved: (name, value) => secrets.set(name, value) } + ) + await withResourceOutboundScope({ workspaceId }, () => { + options.signal?.throwIfAborted() + return activateSubscription({ + request, + webhook: { ...webhookData, providerConfig }, + workflow, + userId, + requestId, + }) + }).catch((error: unknown) => { + throw projectProviderFailure(error, secrets, providerConfig) + }) +} + /** * Clean up external webhook subscriptions for a webhook. * @@ -242,8 +282,9 @@ export async function cleanupExternalWebhook( ): Promise { const provider = webhook.provider as string const handler = getProviderHandler(provider) + const previousSubscription = toRecord(toRecord(webhook.providerConfig).previousSubscription) - if (!handler.deleteSubscription) { + if (!handler.deleteSubscription && typeof previousSubscription.provider !== 'string') { return } @@ -263,6 +304,20 @@ export async function cleanupExternalWebhook( { envVars, onResolved: (name, value) => secrets.set(name, value) } ) resolvedProviderConfig = resolvedWebhook.providerConfig + if (typeof previousSubscription.provider === 'string') { + await cleanupExternalWebhook( + { + ...webhook, + provider: previousSubscription.provider, + providerConfig: previousSubscription.providerConfig, + }, + workflow, + requestId, + options + ) + } + + if (!handler.deleteSubscription) return /** Workspace archival precedes provider cleanup; routing still uses its canonical owner. */ await withResourceOutboundScope( diff --git a/apps/sim/lib/webhooks/providers/plane.test.ts b/apps/sim/lib/webhooks/providers/plane.test.ts new file mode 100644 index 00000000000..4fdd079dc43 --- /dev/null +++ b/apps/sim/lib/webhooks/providers/plane.test.ts @@ -0,0 +1,192 @@ +import { createHmac } from 'node:crypto' +import { createMockRequest } from '@sim/testing/mocks/request.mock' +import { describe, expect, it } from 'vitest' +import { planeHandler } from '@/lib/webhooks/providers/plane' +import type { AuthContext, EventMatchContext } from '@/lib/webhooks/providers/types' + +const SECRET = 'plane_wh_test-fixture' +const V1 = { + event: 'issue', + action: 'updated', + webhook_id: 'webhook-a', + workspace_id: 'workspace-a', + workspace_slug: 'example', + data: { id: 'item-a', project: 'project-a', name: 'Example' }, + activity: { field: 'name', old_value: 'Before', new_value: 'Example' }, +} +const V2 = { + version: 'v2', + event: 'workitem.deleted', + event_id: 'event-a', + delivery_id: 'delivery-a', + entity_id: 'item-a', + entity_type: 'issue', + webhook_id: 'webhook-a', + workspace_id: 'workspace-a', + data: {}, + previous_attributes: { id: 'item-a', project_id: 'project-a' }, +} + +function authContext(rawBody: string, signature?: string, secret?: string): AuthContext { + return { + webhook: {}, + workflow: {}, + rawBody, + requestId: 'test', + providerConfig: secret === undefined ? {} : { webhookSecret: secret }, + request: createMockRequest({ + url: 'https://example.com/webhook', + method: 'POST', + headers: signature ? { 'X-Plane-Signature': signature } : {}, + rawBody, + }), + } +} + +function matchContext(body: unknown, providerConfig: Record): EventMatchContext { + return { ...authContext(JSON.stringify(body)), body, providerConfig } +} + +describe('Plane signed webhook delivery', () => { + it('verifies raw bytes and rejects altered JSON even when it parses to the same object', async () => { + const raw = JSON.stringify(V1) + const signature = createHmac('sha256', SECRET).update(raw).digest('hex') + if (!planeHandler.verifyAuth) throw new Error('Plane authentication is missing') + expect(await planeHandler.verifyAuth(authContext(raw, signature, SECRET))).toBeNull() + expect( + (await planeHandler.verifyAuth(authContext(`${raw}\n`, signature, SECRET)))?.status + ).toBe(401) + }) + + it.each([ + [undefined, SECRET], + ['invalid-signature', SECRET], + ['valid-looking-signature', undefined], + ])('fails closed for absent or invalid authentication', async (signature, secret) => { + if (!planeHandler.verifyAuth) throw new Error('Plane authentication is missing') + expect( + (await planeHandler.verifyAuth(authContext(JSON.stringify(V1), signature, secret)))?.status + ).toBe(401) + }) + + it.each([ + ['webhook-a', true, 200], + ['webhook-a', false, 401], + ['webhook-a', undefined, 401], + ['untracked-webhook', true, 401], + ])( + 'accepts the tracked previous secret only during pending activation: %s, %s', + async (webhookId, pending, expectedStatus) => { + const raw = JSON.stringify({ ...V2, webhook_id: webhookId }) + const signature = createHmac('sha256', SECRET).update(raw).digest('hex') + const ctx = authContext(raw, signature, 'replacement-secret') + ctx.providerConfig.subscriptionActivationPending = pending + ctx.providerConfig.previousSubscription = { + provider: 'plane', + providerConfig: { externalId: 'webhook-a', webhookSecret: SECRET }, + } + if (!planeHandler.verifyAuth) throw new Error('Plane authentication is missing') + const response = await planeHandler.verifyAuth(ctx) + expect(response?.status ?? 200).toBe(expectedStatus) + } + ) + + it('keeps the previous event scope until replacement activation succeeds', async () => { + if (!planeHandler.matchEvent) throw new Error('Plane event filtering is missing') + const config = { + triggerId: 'plane_workitem_created', + projectId: 'project-b', + subscriptionActivationPending: true, + previousSubscription: { + provider: 'plane', + providerConfig: { + externalId: 'webhook-a', + triggerId: 'plane_workitem_updated', + projectId: 'project-a', + }, + }, + } + expect(await planeHandler.matchEvent(matchContext(V1, config))).toBe(true) + expect( + await planeHandler.matchEvent( + matchContext(V1, { ...config, subscriptionActivationPending: false }) + ) + ).toBe(false) + expect( + await planeHandler.matchEvent(matchContext({ ...V1, webhook_id: 'replacement' }, config)) + ).toBe(false) + }) + + it('deduplicates v2 retries by event ID while separating distinct events', () => { + if (!planeHandler.extractIdempotencyId) throw new Error('Plane deduplication is missing') + const original = planeHandler.extractIdempotencyId(V2) + expect(original).toBeTruthy() + expect(planeHandler.extractIdempotencyId({ ...V2, delivery_id: 'retry-b' })).toBe(original) + expect(planeHandler.extractIdempotencyId({ ...V2, event_id: 'event-b' })).not.toBe(original) + }) + + it('deduplicates v1 retries without collapsing different changes to one work item', () => { + if (!planeHandler.extractIdempotencyId) throw new Error('Plane deduplication is missing') + const original = planeHandler.extractIdempotencyId(V1) + expect(original).toBeTruthy() + expect(planeHandler.extractIdempotencyId(structuredClone(V1))).toBe(original) + expect( + planeHandler.extractIdempotencyId({ + ...V1, + activity: { field: 'priority', new_value: 'high' }, + }) + ).not.toBe(original) + }) + + it('filters both v1 and v2 deliveries by event and canonical project/workspace scope', async () => { + if (!planeHandler.matchEvent) throw new Error('Plane event filtering is missing') + expect( + await planeHandler.matchEvent( + matchContext(V1, { + triggerId: 'plane_workitem_updated', + projectId: 'project-a', + workspaceId: 'workspace-a', + }) + ) + ).toBe(true) + expect( + await planeHandler.matchEvent(matchContext(V1, { triggerId: 'plane_workitem_created' })) + ).toBe(false) + expect( + await planeHandler.matchEvent( + matchContext(V1, { triggerId: 'plane_webhook', workspaceId: 'workspace-b' }) + ) + ).toBe(false) + expect( + await planeHandler.matchEvent( + matchContext(V2, { triggerId: 'plane_workitem_deleted', projectId: 'project-a' }) + ) + ).toBe(true) + expect( + await planeHandler.matchEvent( + matchContext(V2, { triggerId: 'plane_workitem_deleted', projectId: 'project-b' }) + ) + ).toBe(false) + expect( + await planeHandler.matchEvent( + matchContext( + { ...V1, event: 'project', action: 'created', data: { id: 'project-a' } }, + { triggerId: 'plane_project_created', projectId: 'project-a' } + ) + ) + ).toBe(true) + expect( + await planeHandler.matchEvent( + matchContext( + { + ...V2, + event: 'project.deleted', + entity_id: 'project-a', + previous_attributes: { id: 'project-a' }, + }, + { triggerId: 'plane_project_deleted', projectId: 'project-a' } + ) + ) + ).toBe(true) + }) +}) diff --git a/apps/sim/lib/webhooks/providers/plane.ts b/apps/sim/lib/webhooks/providers/plane.ts new file mode 100644 index 00000000000..8bbf999e555 --- /dev/null +++ b/apps/sim/lib/webhooks/providers/plane.ts @@ -0,0 +1,319 @@ +import { createLogger } from '@sim/logger' +import { safeCompare } from '@sim/security/compare' +import { hmacSha256Hex } from '@sim/security/hmac' +import { getErrorMessage } from '@sim/utils/errors' +import { isRecordLike, toRecord } from '@sim/utils/object' +import { secureFetchWithValidation } from '@/lib/core/security/input-validation.server' +import { getNotificationUrl, getProviderConfig } from '@/lib/webhooks/provider-subscription-utils' +import type { WebhookProviderHandler } from '@/lib/webhooks/providers/types' +import { + buildFallbackDeliveryFingerprint, + createHmacVerifier, + isProviderConfigFlagEnabled, +} from '@/lib/webhooks/providers/utils' +import { planeApiUrl, planeHeaders, planeRedirectPolicy } from '@/tools/plane/utils' +import { safeUrlPathSegment } from '@/tools/url-path' + +const logger = createLogger('WebhookProvider:Plane') + +function planeEventIdentifier(body: unknown): string { + const payload = toRecord(body) + if (payload.version === 'v2' && typeof payload.event_id === 'string' && payload.event_id) { + return `event:${payload.event_id}` + } + return buildFallbackDeliveryFingerprint(body) +} + +function recordProjectId(value: unknown): string | null { + const record = toRecord(value) + if (typeof record.project_id === 'string') return record.project_id + if (typeof record.project === 'string') return record.project + const project = toRecord(record.project) + return typeof project.id === 'string' ? project.id : null +} + +async function planeWebhookRequest( + config: Record, + method: string, + suffix = '', + body?: Record +) { + const slug = config.triggerWorkspaceSlug + const apiKey = config.triggerApiKey + if (typeof slug !== 'string' || !slug.trim() || typeof apiKey !== 'string') { + throw new Error('Plane workspace slug and API token are required for automatic registration') + } + const baseUrl = typeof config.triggerBaseUrl === 'string' ? config.triggerBaseUrl : undefined + return secureFetchWithValidation( + planeApiUrl( + baseUrl, + `/api/v2/workspaces/${safeUrlPathSegment(slug.trim(), 'workspaceSlug')}/webhooks/${suffix}` + ), + { + method, + headers: planeHeaders(apiKey), + body: body === undefined ? undefined : JSON.stringify(body), + profile: 'configuredEndpoint', + redirectPolicy: planeRedirectPolicy(), + timeout: 30_000, + maxResponseBytes: 1024 * 1024, + }, + 'Plane instance URL' + ) +} + +async function deletePlaneWebhook( + config: Record, + externalId: string +): Promise { + const response = await planeWebhookRequest( + config, + 'DELETE', + `${safeUrlPathSegment(externalId, 'webhookId')}/` + ) + if (!response.ok && response.status !== 404) + throw new Error(`Plane webhook deletion failed (HTTP ${response.status})`) +} + +function previousPlaneDeliveryConfig( + providerConfig: Record, + payload: unknown +): Record | undefined { + const previous = toRecord(providerConfig.previousSubscription) + const config = toRecord(previous.providerConfig) + return previous.provider === 'plane' && + typeof config.externalId === 'string' && + toRecord(payload).webhook_id === config.externalId + ? config + : undefined +} + +const verifyPlaneSignature = createHmacVerifier({ + configKey: 'webhookSecret', + headerName: 'X-Plane-Signature', + providerLabel: 'Plane', + requireSecret: true, + validateFn: (secret, signature, rawBody) => + typeof secret === 'string' && + secret.length > 0 && + /^[a-f0-9]{64}$/.test(signature) && + safeCompare(hmacSha256Hex(rawBody, secret), signature), +}) + +export const planeHandler: WebhookProviderHandler = { + verifyAuth(ctx) { + let providerConfig = ctx.providerConfig + if ( + providerConfig.subscriptionActivationPending === true && + providerConfig.previousSubscription + ) { + try { + const payload: unknown = JSON.parse(ctx.rawBody) + providerConfig = previousPlaneDeliveryConfig(providerConfig, payload) ?? providerConfig + } catch {} + } + return verifyPlaneSignature({ ...ctx, providerConfig }) + }, + + async matchEvent({ body, providerConfig }) { + const { planeEventName, PLANE_TRIGGER_EVENTS } = await import('@/triggers/plane/utils') + const payload = toRecord(body) + const matchConfig = + (providerConfig.subscriptionActivationPending === true + ? previousPlaneDeliveryConfig(providerConfig, payload) + : undefined) ?? providerConfig + const eventName = planeEventName(body) + if (!eventName) return false + const triggerId = matchConfig.triggerId + if ( + typeof triggerId === 'string' && + triggerId !== 'plane_webhook' && + PLANE_TRIGGER_EVENTS[triggerId] !== eventName + ) + return false + const workspaceId = matchConfig.workspaceId + if ( + typeof workspaceId === 'string' && + workspaceId.trim() && + workspaceId.trim() !== payload.workspace_id + ) + return false + const projectId = matchConfig.projectId + if (typeof projectId === 'string' && projectId.trim()) { + const records = Array.isArray(payload.data) + ? payload.data + : [payload.data, payload.previous_attributes] + const isProjectEvent = eventName.startsWith('project.') + const matchesProject = records.some( + (record) => + (isProjectEvent ? toRecord(record).id : recordProjectId(record)) === projectId.trim() + ) + if (!matchesProject && !(isProjectEvent && payload.entity_id === projectId.trim())) + return false + } + return true + }, + + enrichHeaders({ body }, headers) { + headers['x-sim-idempotency-key'] = planeEventIdentifier(body) + }, + + extractIdempotencyId: planeEventIdentifier, + + async formatInput({ body, headers }) { + const { planeEventName } = await import('@/triggers/plane/utils') + const payload = toRecord(body) + return { + input: { + version: payload.version ?? 'v1', + event: payload.event ?? null, + eventName: planeEventName(body), + action: payload.action ?? null, + event_id: payload.event_id ?? null, + delivery_id: payload.delivery_id ?? headers['x-plane-delivery'] ?? null, + entity_id: payload.entity_id ?? null, + entity_type: payload.entity_type ?? null, + webhook_id: payload.webhook_id ?? null, + workspace_id: payload.workspace_id ?? null, + workspace_slug: payload.workspace_slug ?? null, + data: payload.data ?? null, + activity: payload.activity ?? null, + previous_attributes: payload.previous_attributes ?? null, + }, + } + }, + + async createSubscription(ctx) { + const config = getProviderConfig(ctx.webhook) + if (!isProviderConfigFlagEnabled(config.autoRegister)) return undefined + const { PLANE_TRIGGER_EVENTS } = await import('@/triggers/plane/utils') + const event = + typeof config.triggerId === 'string' ? PLANE_TRIGGER_EVENTS[config.triggerId] : undefined + if ( + config.triggerId !== 'plane_webhook' && + (typeof config.triggerId !== 'string' || + !Object.hasOwn(PLANE_TRIGGER_EVENTS, config.triggerId)) + ) + throw new Error('Unknown Plane trigger for automatic registration') + const scopes = event + ? [event] + : Object.values(PLANE_TRIGGER_EVENTS).filter( + (scope) => !/^(cycle_issue|module_issue|intake_issue)\./.test(scope) + ) + if (scopes.some((scope) => /^(cycle_issue|module_issue|intake_issue)\./.test(scope))) { + throw new Error('This Plane v1 event requires manual webhook setup') + } + if ( + typeof config.externalId === 'string' && + config.externalId && + typeof config.webhookSecret === 'string' && + config.webhookSecret + ) { + const existing = await planeWebhookRequest( + config, + 'GET', + `${safeUrlPathSegment(config.externalId, 'webhookId')}/` + ) + if (existing.ok) { + const payload: unknown = await existing.json() + if ( + isRecordLike(payload) && + payload.url === getNotificationUrl(ctx.webhook) && + Array.isArray(payload.scopes) && + JSON.stringify([...payload.scopes].sort()) === JSON.stringify([...scopes].sort()) + ) { + return { + providerConfigUpdates: { + externalId: config.externalId, + webhookSecret: config.webhookSecret, + subscriptionActivationPending: payload.is_active !== true, + }, + } + } + throw new Error( + 'The stored Plane webhook URL or scopes changed; update or remove it in Plane before retrying registration' + ) + } + if (existing.status !== 404) { + throw new Error(`Plane webhook recovery failed (HTTP ${existing.status})`) + } + } + const created = await planeWebhookRequest(config, 'POST', '', { + name: 'Sim workflow', + url: getNotificationUrl(ctx.webhook), + version: 'v2', + content_type: 'application/json', + scopes, + is_active: false, + }) + if (!created.ok) + throw new Error( + `Plane webhook creation failed (HTTP ${created.status}). Automatic registration requires the v2 webhook API and administrator access.` + ) + const payload: unknown = await created.json() + if (!isRecordLike(payload) || typeof payload.id !== 'string' || !payload.id) + throw new Error('Plane did not return a webhook ID') + const externalId = payload.id + const suffix = `${safeUrlPathSegment(externalId, 'webhookId')}/` + try { + const regenerated = await planeWebhookRequest(config, 'POST', `${suffix}regenerate/`) + if (!regenerated.ok) + throw new Error(`Plane webhook secret generation failed (HTTP ${regenerated.status})`) + const secretPayload: unknown = await regenerated.json() + if ( + !isRecordLike(secretPayload) || + typeof secretPayload.secret_key !== 'string' || + !secretPayload.secret_key + ) + throw new Error('Plane did not return a webhook secret') + return { + providerConfigUpdates: { + externalId, + webhookSecret: secretPayload.secret_key, + subscriptionActivationPending: true, + }, + } + } catch (error) { + try { + await deletePlaneWebhook(config, externalId) + } catch { + logger.warn('Plane webhook rollback failed; remove the inactive webhook in Plane settings') + } + throw error + } + }, + + async activateSubscription(ctx) { + const config = getProviderConfig(ctx.webhook) + if (!isProviderConfigFlagEnabled(config.autoRegister)) return + if ( + typeof config.externalId !== 'string' || + !config.externalId || + typeof config.webhookSecret !== 'string' || + !config.webhookSecret + ) + throw new Error('Plane webhook ID and signing secret must be persisted before activation') + const activated = await planeWebhookRequest( + config, + 'PATCH', + `${safeUrlPathSegment(config.externalId, 'webhookId')}/`, + { is_active: true } + ) + if (!activated.ok) throw new Error(`Plane webhook activation failed (HTTP ${activated.status})`) + }, + + async deleteSubscription(ctx) { + const config = getProviderConfig(ctx.webhook) + if (!isProviderConfigFlagEnabled(config.autoRegister)) return + try { + if (typeof config.externalId !== 'string' || !config.externalId) { + if (ctx.strict) throw new Error('Plane webhook ID is missing during cleanup') + return + } + await deletePlaneWebhook(config, config.externalId) + } catch (error) { + logger.warn('Plane webhook cleanup failed', { error: getErrorMessage(error) }) + if (ctx.strict) throw error + } + }, +} diff --git a/apps/sim/lib/webhooks/providers/registry.ts b/apps/sim/lib/webhooks/providers/registry.ts index 9a690cb9e27..fa4de8b8098 100644 --- a/apps/sim/lib/webhooks/providers/registry.ts +++ b/apps/sim/lib/webhooks/providers/registry.ts @@ -41,6 +41,7 @@ import { notionHandler } from '@/lib/webhooks/providers/notion' import { otterHandler } from '@/lib/webhooks/providers/otter' import { outlookHandler } from '@/lib/webhooks/providers/outlook' import { pagerdutyHandler } from '@/lib/webhooks/providers/pagerduty' +import { planeHandler } from '@/lib/webhooks/providers/plane' import { quickBooksHandler } from '@/lib/webhooks/providers/quickbooks' import { resendHandler } from '@/lib/webhooks/providers/resend' import { revenueCatHandler } from '@/lib/webhooks/providers/revenuecat' @@ -115,6 +116,7 @@ const PROVIDER_HANDLERS: Record = { otter: otterHandler, outlook: outlookHandler, pagerduty: pagerdutyHandler, + plane: planeHandler, quickbooks: quickBooksHandler, rss: rssHandler, salesforce: salesforceHandler, diff --git a/apps/sim/lib/webhooks/providers/types.ts b/apps/sim/lib/webhooks/providers/types.ts index dc9d8ffb273..c0ada8f5aea 100644 --- a/apps/sim/lib/webhooks/providers/types.ts +++ b/apps/sim/lib/webhooks/providers/types.ts @@ -200,6 +200,9 @@ export interface WebhookProviderHandler { /** Create an external webhook subscription (e.g., register with Telegram, Airtable, etc.). */ createSubscription?(ctx: SubscriptionContext): Promise + /** Activate a prepared subscription only after its provider-managed credentials are durable. */ + activateSubscription?(ctx: SubscriptionContext): Promise + /** Delete an external webhook subscription during cleanup. Strict outbox cleanup should throw. */ deleteSubscription?(ctx: DeleteSubscriptionContext): Promise diff --git a/apps/sim/lib/webhooks/registration-service.test.ts b/apps/sim/lib/webhooks/registration-service.test.ts index 42059607c5f..97ba80ebc34 100644 --- a/apps/sim/lib/webhooks/registration-service.test.ts +++ b/apps/sim/lib/webhooks/registration-service.test.ts @@ -64,12 +64,95 @@ function dependencies( getCleanupSnapshot: vi.fn(), deleteAfterCleanup: vi.fn(), createExternal: vi.fn(), + activateExternal: vi.fn(), cleanupExternal: vi.fn(), ...overrides, } as unknown as StableWebhookRegistrationDependencies } describe('stable webhook registration service', () => { + it.each(['success', 'checkpoint failure', 'activation failure', 'deferred activation'] as const)( + 'records subscription credentials before activation: %s', + async (failure) => { + const desired: DesiredWebhookRegistrationIntent = { + blockId: 'trigger-1', + provider: 'parallel-provider', + path: 'events', + routingKey: null, + providerConfig: {}, + configFingerprint: 'fingerprint-5', + } + const candidate = registrationRow({ + id: 'candidate-5', + registrationStatus: 'candidate', + registrationGeneration: fence.generation, + preparedAt: null, + providerConfig: {}, + }) + let persisted: Record = {} + let active = false + let credentialsAtActivation: Record | undefined + const store = dependencies({ + prepareIntents: async () => ({ + candidates: [{ desired, row: candidate }], + orphanedCandidates: [], + }), + createExternal: async () => ({ + updatedProviderConfig: { + externalId: 'external-new', + webhookSecret: 'test-secret', + ...(failure === 'deferred activation' ? { subscriptionActivationPending: true } : {}), + }, + externalSubscriptionCreated: true, + }), + checkpointCandidate: async (input) => { + if (failure === 'checkpoint failure') throw new Error('checkpoint failed') + persisted = structuredClone(input.providerConfig) + return { ...candidate, providerConfig: persisted } + }, + activateExternal: async () => { + credentialsAtActivation = structuredClone(persisted) + if (failure === 'activation failure') throw new Error('activation failed') + active = true + }, + }) + const preparation = prepareStableWebhookRegistrations( + { + request: {} as NextRequest, + fence, + workflow: { id: fence.workflowId }, + userId: 'user-1', + requestId: 'request-1', + desired: [{ ...desired, desiredConfig: {} }], + }, + store + ) + if (failure === 'success' || failure === 'deferred activation') await preparation + else + await expect(preparation).rejects.toThrow( + failure === 'checkpoint failure' ? 'checkpoint failed' : 'activation failed' + ) + expect(active).toBe(failure === 'success') + if (failure === 'deferred activation') { + expect(credentialsAtActivation).toBeUndefined() + expect(persisted).toEqual({ + externalId: 'external-new', + webhookSecret: 'test-secret', + subscriptionActivationPending: true, + }) + } else if (failure === 'checkpoint failure') { + expect(credentialsAtActivation).toBeUndefined() + expect(persisted).toEqual({}) + } else { + expect(credentialsAtActivation).toEqual({ + externalId: 'external-new', + webhookSecret: 'test-secret', + }) + expect(persisted).toEqual(credentialsAtActivation) + } + } + ) + it('persists candidate intent as invisible to legacy delivery queries', () => { const now = new Date('2026-07-14T00:00:00Z') const desired: DesiredWebhookRegistrationIntent = { diff --git a/apps/sim/lib/webhooks/registration-service.ts b/apps/sim/lib/webhooks/registration-service.ts index a32ab8932dd..896fbd1ed22 100644 --- a/apps/sim/lib/webhooks/registration-service.ts +++ b/apps/sim/lib/webhooks/registration-service.ts @@ -3,6 +3,7 @@ import { toError } from '@sim/utils/errors' import type { NextRequest } from 'next/server' import { PendingWebhookVerificationTracker } from '@/lib/webhooks/pending-verification' import { + activateExternalWebhookSubscription, cleanupExternalWebhook, createExternalWebhookSubscription, } from '@/lib/webhooks/provider-subscriptions' @@ -13,8 +14,11 @@ import { checkpointWebhookCandidate, type DesiredWebhookRegistrationIntent, deleteWebhookRegistrationAfterCleanup, + getPendingWebhookSubscriptionActivation, getWebhookCleanupSnapshotIfCurrent, + listPendingWebhookSubscriptionActivations, listRetiredWebhookRegistrationsForCleanup, + markWebhookSubscriptionActivated, type PreparedWebhookCandidate, type PreparedWebhookRegistrationWork, prepareWebhookRegistrationIntents, @@ -42,6 +46,10 @@ export interface StableWebhookRegistrationDependencies { listRetired: typeof listRetiredWebhookRegistrationsForCleanup getCleanupSnapshot: typeof getWebhookCleanupSnapshotIfCurrent deleteAfterCleanup: typeof deleteWebhookRegistrationAfterCleanup + listPendingActivations: typeof listPendingWebhookSubscriptionActivations + getPendingActivation: typeof getPendingWebhookSubscriptionActivation + markActivated: typeof markWebhookSubscriptionActivated + activateExternal: typeof activateExternalWebhookSubscription createExternal: typeof createExternalWebhookSubscription cleanupExternal: typeof cleanupExternalWebhook } @@ -52,6 +60,10 @@ const DEFAULT_DEPENDENCIES: StableWebhookRegistrationDependencies = { listRetired: listRetiredWebhookRegistrationsForCleanup, getCleanupSnapshot: getWebhookCleanupSnapshotIfCurrent, deleteAfterCleanup: deleteWebhookRegistrationAfterCleanup, + listPendingActivations: listPendingWebhookSubscriptionActivations, + getPendingActivation: getPendingWebhookSubscriptionActivation, + markActivated: markWebhookSubscriptionActivated, + activateExternal: activateExternalWebhookSubscription, createExternal: createExternalWebhookSubscription, cleanupExternal: cleanupExternalWebhook, } @@ -158,6 +170,17 @@ async function createCandidateProviderState( }) } + if (providerConfig.subscriptionActivationPending !== true) { + await dependencies.activateExternal( + input.request, + { ...webhookData, providerConfig }, + input.workflow, + input.userId, + input.requestId, + { signal: input.signal } + ) + } + if (handler.configurePolling) { let persistedProviderConfig: Record | undefined const configured = await handler.configurePolling({ @@ -392,3 +415,28 @@ export async function cleanupRetiredWebhookRegistrationsAfterActivation( } } } + +/** Activates prepared provider subscriptions only after their deployment is the live version. */ +export async function activatePendingWebhookSubscriptionsAfterActivation( + input: Omit, + dependencies: StableWebhookRegistrationDependencies = DEFAULT_DEPENDENCIES +): Promise { + input.signal?.throwIfAborted() + const rows = await dependencies.listPendingActivations(input.fence) + for (const row of rows) { + input.signal?.throwIfAborted() + const current = await dependencies.getPendingActivation({ ...input.fence, webhookId: row.id }) + if (!current) continue + await dependencies.activateExternal( + input.request, + current, + input.workflow, + input.userId, + input.requestId, + { signal: input.signal } + ) + input.signal?.throwIfAborted() + await dependencies.markActivated({ fence: input.fence, row: current }) + } + return (await dependencies.listPendingActivations(input.fence)).length > 0 +} diff --git a/apps/sim/lib/webhooks/registration-store.ts b/apps/sim/lib/webhooks/registration-store.ts index 78617e1f7b4..bb6352c412d 100644 --- a/apps/sim/lib/webhooks/registration-store.ts +++ b/apps/sim/lib/webhooks/registration-store.ts @@ -6,7 +6,7 @@ import { workflowDeploymentVersion, } from '@sim/db/schema' import { generateShortId } from '@sim/utils/id' -import { isPlainRecord } from '@sim/utils/object' +import { isPlainRecord, toRecord } from '@sim/utils/object' import type { DbOrTx } from '@sim/workflow-persistence/types' import { and, eq, exists, gt, inArray, isNull, lt, lte, notExists, sql } from 'drizzle-orm' import { claimWebhookPath, WebhookPathClaimConflictError } from '@/lib/webhooks/path-claims' @@ -652,3 +652,74 @@ export async function deleteWebhookRegistrationAfterCleanup(input: { .returning({ id: webhook.id }) return Boolean(deleted) } + +const WEBHOOK_ACTIVATION_BATCH_SIZE = 50 + +function liveSubscriptionActivationCondition(fence: WebhookRegistrationOperationFence) { + return and( + eq(webhook.workflowId, fence.workflowId), + eq(webhook.deploymentVersionId, fence.deploymentVersionId), + eq(webhook.registrationStatus, 'active'), + eq(webhook.isActive, true), + isNull(webhook.archivedAt), + sql`${webhook.providerConfig}->>'subscriptionActivationPending' = 'true'`, + exists( + db + .select({ id: workflowDeploymentVersion.id }) + .from(workflowDeploymentVersion) + .where( + and( + eq(workflowDeploymentVersion.workflowId, fence.workflowId), + eq(workflowDeploymentVersion.id, fence.deploymentVersionId), + eq(workflowDeploymentVersion.isActive, true) + ) + ) + ) + ) +} + +/** Selects one bounded batch from the actual live version, even when a newer version is preparing. */ +export async function listPendingWebhookSubscriptionActivations( + fence: WebhookRegistrationOperationFence +): Promise { + return db + .select() + .from(webhook) + .where(liveSubscriptionActivationCondition(fence)) + .limit(WEBHOOK_ACTIVATION_BATCH_SIZE) +} + +/** Rechecks live ownership immediately before contacting a provider. */ +export async function getPendingWebhookSubscriptionActivation( + input: WebhookRegistrationOperationFence & { webhookId: string } +): Promise { + const [row] = await db + .select() + .from(webhook) + .where(and(liveSubscriptionActivationCondition(input), eq(webhook.id, input.webhookId))) + .limit(1) + return row ?? null +} + +/** Clears pending activation only if the observed subscription still owns the live registration. */ +export async function markWebhookSubscriptionActivated(input: { + fence: WebhookRegistrationOperationFence + row: WebhookRegistrationRow +}): Promise { + if (input.row.registrationGeneration === null) return + const config = toRecord(input.row.providerConfig) + await db + .update(webhook) + .set({ + providerConfig: sql`jsonb_set(${webhook.providerConfig}::jsonb, '{subscriptionActivationPending}', 'false'::jsonb)`, + updatedAt: new Date(), + }) + .where( + and( + liveSubscriptionActivationCondition(input.fence), + eq(webhook.id, input.row.id), + eq(webhook.registrationGeneration, input.row.registrationGeneration), + sql`${webhook.providerConfig}::jsonb = ${JSON.stringify(config)}::jsonb` + ) + ) +} diff --git a/apps/sim/lib/workflows/deployment-outbox.test.ts b/apps/sim/lib/workflows/deployment-outbox.test.ts index 3ec1bff2595..809723eb7e5 100644 --- a/apps/sim/lib/workflows/deployment-outbox.test.ts +++ b/apps/sim/lib/workflows/deployment-outbox.test.ts @@ -6,6 +6,7 @@ import { posthogServerMock, posthogServerMockFns } from '@sim/testing/mocks/post import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest' const { + mockActivatePendingWebhookSubscriptions, mockPrepareWebhooks, mockGetDeploymentOperation, mockMarkDeploymentComponentReadiness, @@ -28,6 +29,7 @@ const { mockGetProtectedDeploymentVersionId, mockIsDeploymentVersionActive, } = vi.hoisted(() => ({ + mockActivatePendingWebhookSubscriptions: vi.fn(), mockPrepareWebhooks: vi.fn(), mockGetDeploymentOperation: vi.fn(), mockMarkDeploymentComponentReadiness: vi.fn(), @@ -75,6 +77,7 @@ vi.mock('@/lib/webhooks/deploy', () => ({ })) vi.mock('@/lib/webhooks/registration-service', () => ({ + activatePendingWebhookSubscriptionsAfterActivation: mockActivatePendingWebhookSubscriptions, cleanupRetiredWebhookRegistrationsAfterActivation: mockCleanupRetiredWebhookRegistrations, })) @@ -200,6 +203,7 @@ describe('versioned deployment preparation outbox', () => { mockPrepareWebhooks.mockResolvedValue(undefined) mockActivateWebhookRegistrations.mockResolvedValue(undefined) mockCleanupRetiredWebhookRegistrations.mockResolvedValue(undefined) + mockActivatePendingWebhookSubscriptions.mockResolvedValue(false) mockCreateSchedulesForDeploy.mockResolvedValue({ success: true }) mockSyncMcpToolsForWorkflow.mockResolvedValue([{ serverId: 'mcp-server-1' }]) mockSetWorkflowMcpTransactionLockTimeout.mockResolvedValue(undefined) @@ -263,13 +267,21 @@ describe('versioned deployment preparation outbox', () => { success: true, operation: activating, }) + let committed = false + let activatedAfterCommit: boolean | undefined + mockActivatePendingWebhookSubscriptions.mockImplementation(async () => { + activatedAfterCommit = committed + return false + }) mockActivateDeploymentOperation.mockImplementation(async (input) => { await input.onActivateTransaction?.(mockTx, active) + committed = true return { success: true, operation: active } }) await handler()(payload(), context()) + expect(activatedAfterCommit).toBe(true) expect(mockPrepareWebhooks).toHaveBeenCalledTimes(1) expect(mockCreateSchedulesForDeploy).toHaveBeenCalledWith( 'workflow-1', @@ -621,6 +633,21 @@ describe('versioned deployment preparation outbox', () => { ) }) + it('retires obsolete subscriptions even when new activation fails', async () => { + mockIsDeploymentOperationCurrent.mockResolvedValue(true) + mockGetDeploymentOperation.mockResolvedValue(operation({ status: 'active', completedAt: NOW })) + queueTableRows(schemaMock.workflow, [ + { id: 'workflow-1', name: 'Workflow', workspaceId: 'workspace-1' }, + ]) + const external = new Set(['retired-subscription']) + mockActivatePendingWebhookSubscriptions.mockRejectedValue(new Error('activation unavailable')) + mockCleanupRetiredWebhookRegistrations.mockImplementation(async () => { + external.delete('retired-subscription') + }) + await expect(handler()(payload(), context())).rejects.toThrow('activation unavailable') + expect(external.size).toBe(0) + }) + it('continues through the outbox while stale webhooks remain, then checkpoints the cleanup', async () => { mockIsDeploymentOperationCurrent.mockResolvedValue(true) mockGetDeploymentOperation.mockResolvedValue(operation({ status: 'active', completedAt: NOW })) diff --git a/apps/sim/lib/workflows/deployment-outbox.ts b/apps/sim/lib/workflows/deployment-outbox.ts index 2eadd2f9112..26d157e583f 100644 --- a/apps/sim/lib/workflows/deployment-outbox.ts +++ b/apps/sim/lib/workflows/deployment-outbox.ts @@ -33,7 +33,10 @@ import { prepareStableTriggerWebhooksForDeploy, saveTriggerWebhooksForDeploy, } from '@/lib/webhooks/deploy' -import { cleanupRetiredWebhookRegistrationsAfterActivation } from '@/lib/webhooks/registration-service' +import { + activatePendingWebhookSubscriptionsAfterActivation, + cleanupRetiredWebhookRegistrationsAfterActivation, +} from '@/lib/webhooks/registration-service' import { activateWebhookRegistrations } from '@/lib/webhooks/registration-store' import { DEPLOYMENT_ERROR_CODES, @@ -593,6 +596,23 @@ async function runPostActivationWork(params: { context: OutboxEventContext }): Promise { await emitPostActivationSideEffects(params) + let activationFailure: Error | undefined + const activationHasMore = await activatePendingWebhookSubscriptionsAfterActivation({ + request: new NextRequest(new URL('/api/webhooks', getBaseUrl())), + fence: { + workflowId: params.payload.workflowId, + deploymentVersionId: params.payload.deploymentVersionId, + operationId: params.payload.operationId, + generation: params.payload.generation, + }, + workflow: params.workflow, + userId: params.payload.userId, + requestId: params.payload.requestId, + signal: params.context.signal, + }).catch((error: unknown) => { + activationFailure = toError(error) + return false + }) await cleanupRetiredWebhooksForOperation({ payload: params.payload, workflow: params.workflow, @@ -605,7 +625,9 @@ async function runPostActivationWork(params: { checkpoint: params.checkpoint, context: params.context, }) - return cleanupComplete ? undefined : continueOutboxHandler(INACTIVE_CLEANUP_CONTINUATION_REASON) + if (!cleanupComplete) return continueOutboxHandler(INACTIVE_CLEANUP_CONTINUATION_REASON) + if (activationFailure) throw activationFailure + return activationHasMore ? continueOutboxHandler('webhook_activation_pending') : undefined } async function prepareReadinessComponent(params: { diff --git a/apps/sim/scripts/test-plane-e2e.ts b/apps/sim/scripts/test-plane-e2e.ts new file mode 100644 index 00000000000..6af3ce84c2b --- /dev/null +++ b/apps/sim/scripts/test-plane-e2e.ts @@ -0,0 +1,1054 @@ +import assert from 'node:assert/strict' +import { open, readFile, writeFile } from 'node:fs/promises' +import { createServer } from 'node:http' +import { resolve } from 'node:path' +import { createLogger } from '@sim/logger' +import { getErrorMessage } from '@sim/utils/errors' +import { sleep } from '@sim/utils/helpers' +import { generateId } from '@sim/utils/id' +import { isRecordLike, toRecord } from '@sim/utils/object' +import { NextRequest } from 'next/server' +import { secureFetchWithValidation } from '@/lib/core/security/input-validation.server' +import { secureFetchWithRetry } from '@/lib/knowledge/documents/secure-fetch.server' +import { planeHandler } from '@/lib/webhooks/providers/plane' +import { planeConnector } from '@/connectors/plane' +import * as planeTools from '@/tools/plane' +import { planeApiUrl, planeHeaders, planeRedirectPolicy } from '@/tools/plane/utils' +import { prepareToolRequest } from '@/tools/request-transport' +import type { ToolConfig } from '@/tools/types' + +/** Exercises real Plane HTTP APIs and connector reads using disposable projects; optional public ingress verifies signed deliveries. */ +const logger = createLogger('PlaneE2E') +function required(name: string): string { + const value = process.env[name] + assert(value, `${name} must be explicitly provided`) + return value +} +const apiKey = (await readFile(required('PLANE_E2E_API_KEY_FILE'), 'utf8')).trim() +const workspaceSlug = required('PLANE_E2E_WORKSPACE_SLUG') +const reportPath = required('PLANE_E2E_REPORT_PATH') +if (process.env.PLANE_E2E_CONTRACT_PATH) + assert.notEqual( + resolve(reportPath), + resolve(process.env.PLANE_E2E_CONTRACT_PATH), + 'Private contracts must use a different path from the sanitized report' + ) +const baseUrl = process.env.PLANE_E2E_BASE_URL +const publicCallback = process.env.PLANE_E2E_CALLBACK_URL +const tools: ToolConfig[] = Object.values(planeTools) +const checks: { + name: string + status: 'passed' | 'failed' | 'skipped' + durationMs: number + error?: string +}[] = [] +const requests: { operation: string; version: string; status: number }[] = [] +const contracts: { operation: string; version: string; response: unknown }[] = [] +const projects: { id: string; version: 'v1' | 'v2' }[] = [] +let subscription: Record | undefined +const callbackPath = generateId() +const deliveries: Record[] = [] +const deliveryErrors: string[] = [] + +function safeError(error: unknown): string { + return getErrorMessage(error) + .replaceAll(apiKey, '') + .replaceAll(workspaceSlug, '') + .replace(/[0-9a-f]{8}-[0-9a-f-]{27,}/gi, '') + .replace(/[\w.+-]+@[\w.-]+\.[a-z]+/gi, '') +} +async function check(name: string, run: () => Promise): Promise { + const start = performance.now() + try { + await run() + checks.push({ name, status: 'passed', durationMs: Math.round(performance.now() - start) }) + return true + } catch (error) { + checks.push({ + name, + status: 'failed', + durationMs: Math.round(performance.now() - start), + error: safeError(error), + }) + logger.warn('Check failed', { name, error: safeError(error) }) + return false + } +} +function record(value: unknown): Record { + assert(isRecordLike(value), 'Expected a provider object') + return value +} +function id(value: unknown): string { + const key = record(value).id + assert(typeof key === 'string' && key.length > 0, 'Expected a resource ID') + return key +} +function rows(output: Record): Record[] { + const values = output.results ?? toRecord(output.result).data + assert(Array.isArray(values), 'Expected provider records') + return values.map(record) +} +async function call( + operation: string, + version: 'v1' | 'v2', + values: Record = {} +): Promise> { + await sleep(1500) + const tool = tools.find((candidate) => candidate.id === operation) + assert(tool, `Missing operation ${operation}`) + const params = { apiKey, baseUrl, apiVersion: version, workspace_slug: workspaceSlug, ...values } + const request = prepareToolRequest(tool, params) + const options = { + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + body: request.body, + profile: 'configuredEndpoint' as const, + redirectPolicy: request.redirectPolicy, + timeout: 30_000, + maxResponseBytes: 8 * 1024 * 1024, + } + const response = + request.method === 'GET' && tool.request.retry?.enabled + ? await secureFetchWithRetry(request.url, options, { + maxRetries: tool.request.retry.maxRetries, + timeout: options.timeout, + maxResponseBytes: options.maxResponseBytes, + }) + : await secureFetchWithValidation(request.url, options, 'Plane E2E instance') + + requests.push({ operation, version, status: response.status }) + const responseBody = await response.text() + if (operation === 'plane_create_project') { + const created = record(JSON.parse(responseBody)) + if (typeof created.id === 'string') projects.push({ id: created.id, version }) + } + if ( + response.headers.get('content-type')?.includes('application/json') && + !operation.includes('regenerate') + ) { + contracts.push({ operation, version, response: JSON.parse(responseBody) }) + } + if (!response.ok && !response.headers.get('content-type')?.includes('application/json')) + contracts.push({ operation, version, response: { error_text: responseBody } }) + assert(response.ok, `${operation} (${version}) returned HTTP ${response.status}`) + let result = await tool.transformResponse?.( + new Response(response.status === 204 ? null : responseBody, { + status: response.status, + headers: response.headers.toRecord(), + }), + params + ) + assert(result?.success, `${operation} did not return a successful tool response`) + if (tool.postProcess) + result = await tool.postProcess(result, params, async (childOperation, childParams) => ({ + success: true, + output: await call( + childOperation, + childParams.apiVersion === 'v1' ? 'v1' : 'v2', + childParams + ), + })) + assert(result.success, `${operation} did not complete its required follow-up operations`) + return record(result.output) +} + +async function receiveDelivery(request: Request): Promise { + if ( + new URL(request.url).pathname !== `/api/webhooks/trigger/${callbackPath}` || + request.method !== 'POST' + ) + return new Response(null, { status: 404 }) + const rawBody = await request.text() + const providerConfig = subscription ?? {} + const nextRequest = new NextRequest(request.url, { + method: 'POST', + headers: request.headers, + body: rawBody, + }) + const auth = await planeHandler.verifyAuth?.({ + webhook: {}, + workflow: {}, + request: nextRequest, + rawBody, + requestId: 'plane-e2e', + providerConfig, + }) + if (auth) { + deliveryErrors.push('Signature rejected') + return auth + } + try { + const body: unknown = JSON.parse(rawBody) + const match = await planeHandler.matchEvent?.({ + webhook: {}, + workflow: {}, + body, + request: nextRequest, + requestId: 'plane-e2e', + providerConfig, + }) + if (match === true) { + const formatted = await planeHandler.formatInput?.({ + webhook: {}, + workflow: { id: 'synthetic', userId: 'synthetic' }, + body, + headers: {}, + query: {}, + method: 'POST', + requestId: 'plane-e2e', + }) + const input = record(formatted?.input) + deliveries.push({ ...input, dedupKey: planeHandler.extractIdempotencyId?.(body) }) + } + return new Response('{}', { headers: { 'Content-Type': 'application/json' } }) + } catch (error) { + deliveryErrors.push(safeError(error)) + return new Response(null, { status: 500 }) + } +} +const server = publicCallback + ? createServer(async (incoming, outgoing) => { + if (incoming.method !== 'POST') { + outgoing.writeHead(405, { Allow: 'POST' }) + outgoing.end() + return + } + try { + const chunks: Buffer[] = [] + let size = 0 + for await (const chunk of incoming) { + const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk) + size += buffer.length + if (size > 1024 * 1024) { + outgoing.writeHead(413) + outgoing.end() + return + } + chunks.push(buffer) + } + const headers = new Headers() + for (const [name, value] of Object.entries(incoming.headers)) { + if (Array.isArray(value)) headers.set(name, value.join(', ')) + else if (value !== undefined) headers.set(name, value) + } + const response = await receiveDelivery( + new Request(new URL(incoming.url || '/', publicCallback), { + method: incoming.method || 'POST', + headers, + body: Buffer.concat(chunks).toString('utf8'), + }) + ) + outgoing.writeHead(response.status, Object.fromEntries(response.headers.entries())) + outgoing.end(await response.text()) + } catch (error) { + deliveryErrors.push(safeError(error)) + outgoing.writeHead(500) + outgoing.end() + } + }) + : undefined +server?.listen(Number(process.env.PLANE_E2E_LISTENER_PORT || 49187), '127.0.0.1') +if (server) { + await check('webhook ingress rejects method probes safely', async () => { + for (const method of ['GET', 'HEAD']) { + // boundary-raw-fetch: Exercise the local webhook ingress protocol over real HTTP. + const response = await fetch( + `http://127.0.0.1:${process.env.PLANE_E2E_LISTENER_PORT || 49187}/${callbackPath}`, + { method } + ) + assert.equal(response.status, 405) + } + assert.equal(deliveryErrors.length, 0) + }) +} + +try { + for (const version of ['v2', 'v1'] as const) { + let ownerId = '' + await check(`${version}: current user authentication`, async () => { + const user = record((await call('plane_get_current_user', version)).result) + assert.equal(typeof user.email, 'string') + assert.equal(typeof user.id, 'string') + ownerId = id(user) + }) + let projectId = '' + const created = await check(`${version}: create isolated project`, async () => { + const identifier = `S${generateId().replaceAll('-', '').slice(0, 7).toUpperCase()}` + const output = await call('plane_create_project', version, { + name: `Sim API verification ${identifier}`, + identifier, + description: 'Disposable synthetic API verification project', + cycle_view: true, + module_view: true, + page_view: true, + }) + projectId = id(output.result) + }) + if (!created) continue + const scope = { project_id: projectId } + await check(`${version}: project detail and sparse fields`, async () => { + const output = await call('plane_get_project', version, { + pk: projectId, + ...(version === 'v2' ? { fields: 'id,name' } : {}), + }) + assert.equal(id(output.result), projectId) + assert.equal(typeof record(output.result).name, 'string') + }) + await check(`${version}: project listing, update, summary and archival`, async () => { + assert( + rows(await call('plane_list_projects', version, { per_page: 100 })).some( + (row) => id(row) === projectId + ) + ) + await call('plane_update_project', version, { + pk: projectId, + description: 'Updated disposable description', + }) + assert.equal( + record((await call('plane_get_project', version, { pk: projectId })).result).description, + 'Updated disposable description' + ) + assert((await call('plane_get_project_summary', version, { pk: projectId })).result) + await call('plane_archive_project', version, { pk: projectId }) + await call('plane_unarchive_project', version, { pk: projectId }) + }) + await check(`${version}: state create, read, update and delete`, async () => { + const state = id( + ( + await call('plane_create_state', version, { + ...scope, + name: 'Synthetic spare state', + color: '#3F76FF', + group: 'backlog', + }) + ).result + ) + assert.equal( + id((await call('plane_get_state', version, { ...scope, pk: state })).result), + state + ) + await call('plane_update_state', version, { + ...scope, + pk: state, + name: 'Updated spare state', + }) + assert.equal( + record((await call('plane_get_state', version, { ...scope, pk: state })).result).name, + 'Updated spare state' + ) + await call('plane_delete_state', version, { ...scope, pk: state }) + }) + let stateId = '' + await check(`${version}: list workflow states`, async () => { + stateId = id(rows(await call('plane_list_states', version, scope))[0]) + }) + let labelId = '' + await check(`${version}: create label`, async () => { + labelId = id( + ( + await call('plane_create_label', version, { + ...scope, + name: 'Synthetic label', + color: '#3F76FF', + }) + ).result + ) + }) + await check(`${version}: label detail, listing and update`, async () => { + assert.equal( + id((await call('plane_get_label', version, { ...scope, pk: labelId })).result), + labelId + ) + assert( + rows(await call('plane_list_labels', version, scope)).some((row) => id(row) === labelId) + ) + await call('plane_update_label', version, { + ...scope, + pk: labelId, + name: 'Updated synthetic label', + }) + assert.equal( + record((await call('plane_get_label', version, { ...scope, pk: labelId })).result).name, + 'Updated synthetic label' + ) + }) + const itemIds: string[] = [] + await check(`${version}: create work items with canonical IDs`, async () => { + for (let index = 0; index < 2; index++) { + const output = await call('plane_create_work_item', version, { + ...scope, + name: `Synthetic work item ${index + 1}`, + description_html: '

Content for connector verification

', + state_id: stateId, + priority: 'low', + label_ids: labelId ? [labelId] : [], + assignee_ids: [], + }) + const item = record(output.result) + assert.equal(version === 'v1' ? item.state : item.state_id, stateId) + const labelValues = version === 'v1' ? item.labels : item.label_ids + assert( + Array.isArray(labelValues) && labelValues.includes(labelId), + 'Created work item must retain canonical label IDs' + ) + itemIds.push(id(item)) + } + }) + if (itemIds.length < 2) continue + await check(`${version}: paginated work item listing`, async () => { + const first = await call('plane_list_work_items', version, { + ...scope, + per_page: 1, + order_by: 'created_at', + }) + const page = rows(first) + assert.equal(page.length, 1) + const next = + version === 'v1' ? record(first.pagination).next_cursor : record(first.result).next + assert(next !== null && next !== undefined, 'Provider must expose a next page') + const second = await call('plane_list_work_items', version, { + ...scope, + per_page: 1, + order_by: 'created_at', + ...(version === 'v1' ? { cursor: next } : { offset: next }), + }) + assert.equal(rows(second).length, 1) + assert.notEqual(id(page[0]), id(rows(second)[0]), 'Pagination must advance') + }) + if (version === 'v2') + await check('v2: cursor pagination and comma-separated filters', async () => { + const first = await call('plane_list_work_items', version, { + ...scope, + per_page: 1, + order_by: 'created_at', + paginate: 'cursor', + priority__in: 'low,high', + expand: 'state,labels', + }) + const envelope = record(first.result) + assert.equal(record(envelope.pagination).style, 'cursor') + assert.equal(envelope.has_more, true) + assert.equal(typeof record(rows(first)[0]).state, 'object') + const second = await call('plane_list_work_items', version, { + ...scope, + per_page: 1, + order_by: 'created_at', + cursor: envelope.next_cursor, + priority__in: 'low,high', + expand: 'state,labels', + }) + assert.notEqual(id(rows(first)[0]), id(rows(second)[0])) + }) + await check(`${version}: work item lookup by identifier`, async () => { + const detail = record( + (await call('plane_get_work_item', version, { ...scope, pk: itemIds[0] })).result + ) + const project = record((await call('plane_get_project', version, { pk: projectId })).result) + const identifier = detail.identifier ?? `${project.identifier}-${detail.sequence_id}` + if (version === 'v2') + assert.equal( + id((await call('plane_get_work_item_by_identifier', version, { identifier })).result), + itemIds[0] + ) + else + await assert.rejects( + call('plane_get_work_item_by_identifier', version, { identifier }), + /requires API v2/ + ) + if (version === 'v2') + assert( + rows( + await call('plane_list_workspace_work_items', version, { ...scope, per_page: 10 }) + ).some((row) => id(row) === itemIds[0]) + ) + }) + await check(`${version}: comments CRUD`, async () => { + const itemScope = { ...scope, work_item_id: itemIds[0] } + const commentId = id( + ( + await call('plane_create_comment', version, { + ...itemScope, + comment_html: '

Synthetic comment

', + }) + ).result + ) + assert.equal( + id((await call('plane_get_comment', version, { ...itemScope, pk: commentId })).result), + commentId + ) + assert( + rows(await call('plane_list_comments', version, itemScope)).some( + (row) => id(row) === commentId + ) + ) + await call('plane_update_comment', version, { + ...itemScope, + pk: commentId, + comment_html: '

Updated comment

', + }) + assert( + record((await call('plane_get_comment', version, { ...itemScope, pk: commentId })).result) + .comment_html?.toString() + .includes('Updated comment') + ) + await call('plane_delete_comment', version, { ...itemScope, pk: commentId }) + }) + await check(`${version}: links CRUD and metadata`, async () => { + const itemScope = { ...scope, work_item_id: itemIds[0] } + const linkId = id( + ( + await call('plane_create_link', version, { + ...itemScope, + url: 'https://example.com/plane-e2e', + title: 'Synthetic link', + ...(version === 'v2' ? { metadata: { source: 'synthetic' } } : {}), + }) + ).result + ) + assert.equal( + id((await call('plane_get_link', version, { ...itemScope, pk: linkId })).result), + linkId + ) + assert( + rows(await call('plane_list_links', version, itemScope)).some((row) => id(row) === linkId) + ) + await call('plane_update_link', version, { ...itemScope, pk: linkId, title: 'Updated link' }) + assert.equal( + record((await call('plane_get_link', version, { ...itemScope, pk: linkId })).result).title, + 'Updated link' + ) + await call('plane_delete_link', version, { ...itemScope, pk: linkId }) + }) + await check( + `${version}: attachment initialization, upload, confirmation and deletion`, + async () => { + const itemScope = { ...scope, work_item_id: itemIds[0] } + const content = 'Disposable Plane attachment verification' + const created = record( + ( + await call('plane_create_attachment_upload', version, { + ...itemScope, + name: 'verification.txt', + size: content.length + 16 * 1024, + type: 'text/plain', + }) + ).result + ) + const attachmentId = id(created.attachment) + const upload = record(created.upload_data) + assert.equal(typeof upload.url, 'string') + const fields = record(upload.fields) + const form = new FormData() + for (const [name, value] of Object.entries(fields)) { + assert.equal(typeof value, 'string') + form.append(name, String(value)) + } + form.append('file', new Blob([content], { type: 'text/plain' }), 'verification.txt') + const encodedUpload = new Request(String(upload.url), { method: 'POST', body: form }) + const uploadContentType = encodedUpload.headers.get('content-type') + assert(uploadContentType, 'Multipart upload must include its boundary') + const stored = await secureFetchWithValidation( + String(upload.url), + { + method: 'POST', + body: Buffer.from(await encodedUpload.arrayBuffer()), + headers: { + 'Content-Type': uploadContentType, + 'User-Agent': planeHeaders(apiKey)['User-Agent'], + }, + profile: 'contentFetch', + timeout: 30_000, + maxResponseBytes: 1024 * 1024, + }, + 'Plane signed attachment upload' + ) + assert(stored.ok, `Signed storage upload returned HTTP ${stored.status}`) + await call('plane_confirm_attachment_upload', version, { + ...itemScope, + pk: attachmentId, + is_uploaded: true, + }) + if (version === 'v2') { + const detail = record( + (await call('plane_get_attachment', version, { ...itemScope, pk: attachmentId })).result + ) + assert.equal(detail.is_uploaded, true) + } else { + await assert.rejects( + call('plane_get_attachment', version, { ...itemScope, pk: attachmentId }), + /requires API v2/ + ) + } + const listedAttachment = rows( + await call('plane_list_attachments', version, itemScope) + ).find((row) => id(row) === attachmentId) + assert.equal(listedAttachment?.is_uploaded, true) + await call('plane_delete_attachment', version, { ...itemScope, pk: attachmentId }) + } + ) + await check(`${version}: knowledge connector content and cap`, async () => { + const config = { workspaceSlug, projectId, baseUrl } + assert.equal((await planeConnector.validateConfig(apiKey, config)).valid, true) + const listing = await planeConnector.listDocuments(apiKey, config) + assert.equal(listing.documents.length, 2) + assert( + listing.documents.every((doc) => doc.content.includes('Content for connector verification')) + ) + const hydrated = await planeConnector.getDocument(apiKey, config, `work_item:${itemIds[0]}`) + assert(hydrated?.content.includes('Content for connector verification')) + assert.equal( + (await planeConnector.validateConfig(apiKey, { ...config, maxDocuments: true })).valid, + false + ) + const capped = await planeConnector.listDocuments(apiKey, { ...config, maxDocuments: 1 }) + assert.equal(capped.documents.length, 1) + assert.equal(capped.hasMore, false) + assert.equal(capped.reconciliationSafe, false) + }) + await check(`${version}: update with explicit clearing`, async () => { + await call('plane_update_work_item', version, { + ...scope, + pk: itemIds[0], + parent_id: itemIds[1], + assignee_ids: [ownerId], + }) + const before = record( + (await call('plane_get_work_item', version, { ...scope, pk: itemIds[0] })).result + ) + assert.equal(version === 'v1' ? before.parent : before.parent_id, itemIds[1]) + const assigned = version === 'v1' ? before.assignees : before.assignee_ids + assert(Array.isArray(assigned)) + assert.deepEqual( + assigned.map((value) => (typeof value === 'string' ? value : id(value))), + [ownerId] + ) + await call('plane_update_work_item', version, { + ...scope, + pk: itemIds[0], + priority: 'high', + bodyOverrides: { description_html: '', label_ids: [], assignee_ids: [], parent_id: null }, + }) + const document = await planeConnector.getDocument( + apiKey, + { workspaceSlug, projectId, baseUrl }, + `work_item:${itemIds[0]}` + ) + assert(document && !document.content.includes('Content for connector verification')) + assert(document.content.includes('Priority: high')) + const item = record( + (await call('plane_get_work_item', 'v1', { ...scope, pk: itemIds[0] })).result + ) + assert.deepEqual(item.labels, [], 'Label clearing was not persisted') + assert.deepEqual(item.assignees, [], 'Assignee clearing was not persisted') + assert.equal(item.parent, null) + }) + await check(`${version}: cycle and module CRUD`, async () => { + const cycleId = id( + ( + await call('plane_create_cycle', version, { + ...scope, + name: 'Synthetic cycle', + start_date: '2030-01-01', + end_date: '2030-01-14', + }) + ).result + ) + const moduleId = id( + ( + await call('plane_create_module', version, { + ...scope, + name: 'Synthetic module', + status: 'backlog', + }) + ).result + ) + for (const operation of ['plane_manage_cycle_work_items', 'plane_manage_module_work_items']) { + const membershipTool = tools.find((tool) => tool.id === operation) + assert(membershipTool) + assert.throws( + () => + prepareToolRequest(membershipTool, { + apiKey, + baseUrl, + apiVersion: 'v1', + workspace_slug: workspaceSlug, + project_id: projectId, + pk: cycleId, + remove: ['valid-id', '../escape'], + }), + 'Invalid later IDs must fail before the first mutation' + ) + } + await call('plane_manage_cycle_work_items', version, { ...scope, pk: cycleId, add: itemIds }) + await call('plane_manage_module_work_items', version, { + ...scope, + pk: moduleId, + add: itemIds, + }) + assert.equal( + record((await call('plane_get_cycle', 'v1', { ...scope, pk: cycleId })).result) + .total_issues, + itemIds.length + ) + assert.equal( + record((await call('plane_get_module', 'v1', { ...scope, pk: moduleId })).result) + .total_issues, + itemIds.length + ) + await call('plane_manage_cycle_work_items', version, { + ...scope, + pk: cycleId, + remove: itemIds, + }) + await call('plane_manage_module_work_items', version, { + ...scope, + pk: moduleId, + remove: itemIds, + }) + assert.equal( + record((await call('plane_get_cycle', 'v1', { ...scope, pk: cycleId })).result) + .total_issues, + 0 + ) + assert.equal( + record((await call('plane_get_module', 'v1', { ...scope, pk: moduleId })).result) + .total_issues, + 0 + ) + await call('plane_update_cycle', version, { + ...scope, + pk: cycleId, + name: 'Updated synthetic cycle', + }) + await call('plane_update_module', version, { + ...scope, + pk: moduleId, + name: 'Updated synthetic module', + }) + assert.equal( + id((await call('plane_get_cycle', version, { ...scope, pk: cycleId })).result), + cycleId + ) + assert.equal( + id((await call('plane_get_module', version, { ...scope, pk: moduleId })).result), + moduleId + ) + assert( + rows(await call('plane_list_cycles', version, scope)).some((row) => id(row) === cycleId) + ) + assert( + rows(await call('plane_list_modules', version, scope)).some((row) => id(row) === moduleId) + ) + const destination = id( + ( + await call('plane_create_cycle', version, { + ...scope, + name: 'Destination cycle', + start_date: '2030-02-01', + end_date: '2030-02-14', + }) + ).result + ) + await call('plane_manage_cycle_work_items', version, { + ...scope, + pk: cycleId, + add: [itemIds[0]], + }) + await call('plane_update_cycle', version, { + ...scope, + pk: cycleId, + start_date: '2020-01-01', + end_date: '2020-01-14', + }) + await call('plane_transfer_cycle_work_items', version, { + ...scope, + pk: cycleId, + new_cycle_id: destination, + }) + assert.equal( + record((await call('plane_get_cycle', 'v1', { ...scope, pk: destination })).result) + .total_issues, + 1 + ) + await call('plane_delete_cycle', version, { ...scope, pk: destination }) + await call('plane_delete_cycle', version, { ...scope, pk: cycleId }) + await call('plane_delete_module', version, { ...scope, pk: moduleId }) + }) + await check(`${version}: page connector hydration`, async () => { + const pageId = id( + ( + await call('plane_create_project_page', version, { + ...scope, + name: 'Synthetic page', + description_html: '

Page connector content

', + }) + ).result + ) + assert.equal( + id((await call('plane_get_project_page', version, { ...scope, pk: pageId })).result), + pageId + ) + assert( + rows(await call('plane_list_project_pages', version, scope)).some( + (row) => id(row) === pageId + ) + ) + const config = { workspaceSlug, projectId, baseUrl, contentType: 'pages' } + assert.equal((await planeConnector.validateConfig(apiKey, config)).valid, true) + const list = await planeConnector.listDocuments(apiKey, config) + const stub = list.documents.find((doc) => doc.externalId === `page:${pageId}`) + assert(stub?.contentDeferred) + const detail = await planeConnector.getDocument(apiKey, config, `page:${pageId}`) + assert(detail, 'Expected a hydrated page') + assert(detail.content.includes('Page connector content')) + assert.equal(stub.contentHash, detail.contentHash) + await call('plane_update_project_page', version, { + ...scope, + pk: pageId, + description_html: '

Updated page content

', + }) + assert( + (await planeConnector.getDocument(apiKey, config, `page:${pageId}`))?.content.includes( + 'Updated page content' + ) + ) + if (version === 'v1') { + const archived = await secureFetchWithValidation( + planeApiUrl( + baseUrl, + `/api/v1/workspaces/${workspaceSlug}/projects/${projectId}/pages/${pageId}/archive/` + ), + { + method: 'POST', + headers: planeHeaders(apiKey), + profile: 'configuredEndpoint', + redirectPolicy: planeRedirectPolicy(), + timeout: 30_000, + maxResponseBytes: 1024 * 1024, + }, + 'Plane disposable page cleanup' + ) + assert(archived.ok, `Page fixture archive returned HTTP ${archived.status}`) + } else + await call('plane_update_project_page', version, { + ...scope, + pk: pageId, + archived_at: new Date().toISOString(), + }) + await call('plane_delete_project_page', version, { ...scope, pk: pageId }) + assert.equal(await planeConnector.getDocument(apiKey, config, `page:${pageId}`), null) + }) + if (version === 'v2' && publicCallback) + await check('v2: automatic webhook lifecycle and signed delivery', async () => { + const initialConfig = { + autoRegister: true, + triggerId: 'plane_workitem_created', + triggerWorkspaceSlug: workspaceSlug, + triggerApiKey: apiKey, + triggerBaseUrl: baseUrl, + projectId, + } + const webhook = { path: callbackPath, providerConfig: initialConfig } + const created = await planeHandler.createSubscription?.({ + webhook, + workflow: {}, + userId: 'synthetic', + requestId: 'plane-e2e', + request: new NextRequest(`${publicCallback}/api/webhooks/trigger/${callbackPath}`), + }) + subscription = { ...initialConfig, ...created?.providerConfigUpdates } + assert.equal(typeof subscription.webhookSecret, 'string') + const pending = await call('plane_get_webhook', 'v2', { + workspace_slug: workspaceSlug, + pk: subscription.externalId, + }) + assert.equal( + toRecord(pending.result).is_active, + false, + 'Subscription must remain inactive until its credentials are persisted' + ) + await planeHandler.activateSubscription?.({ + webhook: { ...webhook, providerConfig: subscription }, + workflow: {}, + userId: 'synthetic', + requestId: 'plane-e2e', + request: new NextRequest(`${publicCallback}/api/webhooks/trigger/${callbackPath}`), + }) + const active = record( + (await call('plane_get_webhook', 'v2', { pk: subscription.externalId })).result + ) + assert.equal(active.is_active, true) + const recovered = await planeHandler.createSubscription?.({ + webhook: { ...webhook, providerConfig: subscription }, + workflow: {}, + userId: 'synthetic', + requestId: 'plane-e2e', + request: new NextRequest(`${publicCallback}/api/webhooks/trigger/${callbackPath}`), + }) + assert.equal( + recovered?.providerConfigUpdates?.externalId, + subscription.externalId, + 'Retry must reuse the tracked subscription' + ) + await call('plane_create_work_item', version, { + ...scope, + name: 'Synthetic signed webhook event', + }) + const deadline = Date.now() + 45_000 + while (!deliveries.length && !deliveryErrors.length && Date.now() < deadline) + await sleep(500) + assert.equal(deliveryErrors.length, 0, 'Real delivery failed authentication or processing') + assert.equal(deliveries.length, 1, 'Expected a real signed provider delivery') + assert.equal(deliveries[0].eventName, 'workitem.created') + assert.equal(typeof deliveries[0].dedupKey, 'string') + await planeHandler.deleteSubscription?.({ + webhook: { ...webhook, providerConfig: subscription }, + workflow: {}, + requestId: 'plane-e2e', + strict: true, + }) + subscription = undefined + }) + if (version === 'v2') + await check('v2: webhook tools CRUD and secret rotation', async () => { + const webhookId = id( + ( + await call('plane_create_webhook', version, { + url: 'https://example.com/plane-e2e', + name: 'Inactive synthetic webhook', + is_active: false, + version: 'v2', + scopes: ['workitem.created'], + }) + ).result + ) + try { + assert( + rows(await call('plane_list_webhooks', version)).some((row) => id(row) === webhookId) + ) + await call('plane_update_webhook', version, { + pk: webhookId, + name: 'Updated inactive webhook', + }) + assert.equal( + record((await call('plane_get_webhook', version, { pk: webhookId })).result).name, + 'Updated inactive webhook' + ) + const rotated = record( + (await call('plane_regenerate_webhook_secret', version, { pk: webhookId })).result + ) + assert.equal(typeof rotated.secret_key, 'string') + } finally { + await call('plane_delete_webhook', version, { pk: webhookId }) + } + }) + if (version === 'v2') + await check('v2: work item archival preserves identity and relationship fields', async () => { + const archived = record( + ( + await call('plane_archive_work_item', version, { + ...scope, + pk: itemIds[1], + fields: 'id,project_id,cycle_id,module_ids,archived_at', + }) + ).result + ) + assert.equal(id(archived), itemIds[1]) + assert.equal(archived.project_id, projectId) + assert(Object.hasOwn(archived, 'cycle_id') && Object.hasOwn(archived, 'module_ids')) + assert.equal(typeof archived.archived_at, 'string') + await call('plane_unarchive_work_item', version, { ...scope, pk: itemIds[1] }) + }) + await check(`${version}: label deletion`, async () => { + await call('plane_delete_label', version, { ...scope, pk: labelId }) + }) + await check(`${version}: work item deletion and connector missing read`, async () => { + await call('plane_delete_work_item', version, { ...scope, pk: itemIds[1] }) + try { + const missing = await planeConnector.getDocument( + apiKey, + { workspaceSlug, projectId, baseUrl }, + `work_item:${itemIds[1]}` + ) + assert.equal(missing, null) + } catch (error) { + assert.match(getErrorMessage(error), /Plane document read failed \(HTTP 403\)/) + } + }) + } + if (!publicCallback) + checks.push({ + name: 'Signed public webhook delivery', + status: 'skipped', + durationMs: 0, + error: + 'Set PLANE_E2E_CALLBACK_URL and NEXT_PUBLIC_APP_URL to a public URL routed to the listener.', + }) +} finally { + if (subscription) + await check('Cleanup webhook subscription', async () => { + await planeHandler.deleteSubscription?.({ + webhook: { providerConfig: subscription }, + workflow: {}, + requestId: 'plane-e2e', + strict: true, + }) + }) + for (const fixture of projects) + await check(`${fixture.version}: remove disposable project`, async () => { + await call('plane_delete_project', fixture.version, { pk: fixture.id }) + }) + server?.closeAllConnections() + if (server) await new Promise((resolve) => server.close(() => resolve())) + await writeFile( + reportPath, + JSON.stringify( + { + checks, + requests, + verifiedDeliveries: deliveries.length, + operations: { + available: tools.length, + successfulV2: new Set( + requests + .filter( + (request) => + request.version === 'v2' && request.status >= 200 && request.status < 300 + ) + .map((request) => request.operation) + ).size, + unverifiedV2: tools + .filter( + (tool) => + !requests.some( + (request) => + request.operation === tool.id && + request.version === 'v2' && + request.status >= 200 && + request.status < 300 + ) + ) + .map((tool) => tool.id), + }, + }, + null, + 2 + ) + ) + if (process.env.PLANE_E2E_CONTRACT_PATH) { + const contractFile = await open(process.env.PLANE_E2E_CONTRACT_PATH, 'a', 0o600) + try { + await contractFile.chmod(0o600) + await contractFile.truncate(0) + await contractFile.writeFile(JSON.stringify(contracts, null, 2)) + } finally { + await contractFile.close() + } + } +} +logger.info('Plane E2E completed', { + passed: checks.filter((item) => item.status === 'passed').length, + failed: checks.filter((item) => item.status === 'failed').length, + requests: requests.length, +}) +if (checks.some((item) => item.status === 'failed')) process.exitCode = 1 diff --git a/apps/sim/tools/generated/tool-ids.ts b/apps/sim/tools/generated/tool-ids.ts index c9672981478..7fe42aad0b7 100644 --- a/apps/sim/tools/generated/tool-ids.ts +++ b/apps/sim/tools/generated/tool-ids.ts @@ -3,7 +3,7 @@ /** Every registered tool id, including versioned variants. */ const toolIds: string[] = JSON.parse( - '["a2a_cancel_task","a2a_get_agent_card","a2a_get_task","a2a_send_message","affinity_batch_update_entity_fields","affinity_batch_update_list_entry_fields","affinity_create_list","affinity_create_list_field_dropdown_option","affinity_create_merge","affinity_create_note","affinity_create_reminder","affinity_delete_list_field_dropdown_option","affinity_delete_note","affinity_get_company","affinity_get_current_user","affinity_get_entity_field_value","affinity_get_list","affinity_get_list_entry","affinity_get_list_entry_field","affinity_get_list_field_dropdown_option","affinity_get_merge","affinity_get_merge_task","affinity_get_note","affinity_get_opportunity","affinity_get_person","affinity_get_saved_view","affinity_get_transcript","affinity_get_user","affinity_list_calls","affinity_list_chat_messages","affinity_list_companies","affinity_list_coworker_connections","affinity_list_emails","affinity_list_entity_field_values","affinity_list_entity_list_entries","affinity_list_entity_lists","affinity_list_entity_notes","affinity_list_entity_relationships","affinity_list_field_dropdown_options","affinity_list_field_metadata","affinity_list_field_value_changes","affinity_list_investor_executive_connections","affinity_list_list_entries","affinity_list_list_entry_field_value_changes","affinity_list_list_entry_fields","affinity_list_list_field_dropdown_options","affinity_list_list_fields","affinity_list_lists","affinity_list_meetings","affinity_list_merge_tasks","affinity_list_merges","affinity_list_note_attached_companies","affinity_list_note_attached_opportunities","affinity_list_note_attached_persons","affinity_list_note_replies","affinity_list_notes","affinity_list_opportunities","affinity_list_persons","affinity_list_reminders","affinity_list_saved_view_entries","affinity_list_saved_views","affinity_list_transcript_fragments","affinity_list_transcripts","affinity_list_users","affinity_search_companies","affinity_search_files","affinity_search_list_entries","affinity_search_notes","affinity_search_persons","affinity_semantic_search","affinity_update_entity_field_value","affinity_update_list_entry_field","affinity_update_list_field_dropdown_option","affinity_update_note","agentmail_create_draft","agentmail_create_inbox","agentmail_delete_draft","agentmail_delete_inbox","agentmail_delete_thread","agentmail_forward_message","agentmail_get_draft","agentmail_get_inbox","agentmail_get_message","agentmail_get_thread","agentmail_list_drafts","agentmail_list_inboxes","agentmail_list_messages","agentmail_list_threads","agentmail_reply_message","agentmail_send_draft","agentmail_send_message","agentmail_update_draft","agentmail_update_inbox","agentmail_update_message","agentmail_update_thread","agentphone_create_call","agentphone_create_contact","agentphone_create_number","agentphone_delete_contact","agentphone_get_call","agentphone_get_call_transcript","agentphone_get_contact","agentphone_get_conversation","agentphone_get_conversation_messages","agentphone_get_number_messages","agentphone_get_usage","agentphone_get_usage_daily","agentphone_get_usage_monthly","agentphone_list_calls","agentphone_list_contacts","agentphone_list_conversations","agentphone_list_numbers","agentphone_react_to_message","agentphone_release_number","agentphone_send_message","agentphone_update_contact","agentphone_update_conversation","agiloft_async_status","agiloft_attach_file","agiloft_attachment_info","agiloft_create_record","agiloft_delete_record","agiloft_get_choice_line_id","agiloft_list_tables","agiloft_lock_record","agiloft_nlp_search","agiloft_read_record","agiloft_remove_attachment","agiloft_retrieve_attachment","agiloft_run_action_button","agiloft_saved_search","agiloft_search_records","agiloft_select_records","agiloft_update_record","agiloft_upsert_record","ahrefs_anchors","ahrefs_backlinks","ahrefs_backlinks_stats","ahrefs_batch_analysis","ahrefs_broken_backlinks","ahrefs_domain_rating","ahrefs_domain_rating_history","ahrefs_keyword_overview","ahrefs_keywords_history","ahrefs_metrics","ahrefs_metrics_history","ahrefs_organic_competitors","ahrefs_organic_keywords","ahrefs_paid_pages","ahrefs_rank_tracker_competitors_overview","ahrefs_rank_tracker_competitors_stats","ahrefs_rank_tracker_overview","ahrefs_rank_tracker_serp_overview","ahrefs_refdomains_history","ahrefs_referring_domains","ahrefs_related_terms","ahrefs_site_audit_page_explorer","ahrefs_top_pages","airtable_create_records","airtable_delete_records","airtable_get_base_schema","airtable_get_record","airtable_list_bases","airtable_list_records","airtable_list_tables","airtable_update_multiple_records","airtable_update_record","airtable_upsert_records","airweave_search","algolia_add_record","algolia_batch_operations","algolia_browse_records","algolia_clear_records","algolia_copy_move_index","algolia_delete_by_filter","algolia_delete_index","algolia_delete_record","algolia_get_record","algolia_get_records","algolia_get_settings","algolia_get_task_status","algolia_list_indices","algolia_partial_update_record","algolia_search","algolia_update_settings","amplitude_event_segmentation","amplitude_funnels","amplitude_get_active_users","amplitude_get_revenue","amplitude_group_identify","amplitude_identify_user","amplitude_list_events","amplitude_realtime_active_users","amplitude_retention","amplitude_send_event","amplitude_user_activity","amplitude_user_profile","amplitude_user_search","apify_get_dataset_items","apify_get_run","apify_run_actor_async","apify_run_actor_sync","apify_run_task","apollo_account_bulk_create","apollo_account_bulk_update","apollo_account_create","apollo_account_search","apollo_account_update","apollo_contact_bulk_create","apollo_contact_bulk_update","apollo_contact_create","apollo_contact_search","apollo_contact_update","apollo_email_accounts","apollo_opportunity_create","apollo_opportunity_get","apollo_opportunity_search","apollo_opportunity_update","apollo_organization_bulk_enrich","apollo_organization_enrich","apollo_organization_search","apollo_people_bulk_enrich","apollo_people_enrich","apollo_people_search","apollo_sequence_add_contacts","apollo_sequence_search","apollo_task_create","apollo_task_search","appconfig_create_application","appconfig_create_configuration_profile","appconfig_create_environment","appconfig_create_hosted_configuration_version","appconfig_delete_application","appconfig_delete_configuration_profile","appconfig_delete_environment","appconfig_delete_hosted_configuration_version","appconfig_get_application","appconfig_get_configuration","appconfig_get_configuration_profile","appconfig_get_deployment","appconfig_get_environment","appconfig_get_hosted_configuration_version","appconfig_list_applications","appconfig_list_configuration_profiles","appconfig_list_deployment_strategies","appconfig_list_deployments","appconfig_list_environments","appconfig_list_hosted_configuration_versions","appconfig_start_deployment","appconfig_stop_deployment","appconfig_update_application","appconfig_update_configuration_profile","appconfig_update_environment","arxiv_get_author_papers","arxiv_get_paper","arxiv_search","asana_add_comment","asana_add_followers","asana_create_project","asana_create_section","asana_create_subtask","asana_create_task","asana_delete_task","asana_get_project","asana_get_projects","asana_get_task","asana_list_sections","asana_list_workspaces","asana_search_tasks","asana_update_task","ashby_add_candidate_tag","ashby_anonymize_candidate","ashby_change_application_source","ashby_change_application_stage","ashby_create_application","ashby_create_candidate","ashby_create_note","ashby_delete_application","ashby_get_application","ashby_get_candidate","ashby_get_job","ashby_get_job_posting","ashby_get_offer","ashby_get_opening","ashby_list_application_feedback","ashby_list_application_history","ashby_list_applications","ashby_list_archive_reasons","ashby_list_candidate_tags","ashby_list_candidates","ashby_list_custom_fields","ashby_list_departments","ashby_list_interview_plans","ashby_list_interview_stages","ashby_list_interviews","ashby_list_job_postings","ashby_list_jobs","ashby_list_locations","ashby_list_notes","ashby_list_offers","ashby_list_openings","ashby_list_sources","ashby_list_users","ashby_remove_candidate_tag","ashby_search_candidates","ashby_search_jobs","ashby_search_openings","ashby_search_users","ashby_set_custom_field_value","ashby_set_custom_field_values","ashby_transfer_application","ashby_update_candidate","ashby_upload_candidate_file","ashby_upload_resume","athena_batch_get_named_query","athena_batch_get_prepared_statement","athena_batch_get_query_execution","athena_create_named_query","athena_create_prepared_statement","athena_delete_named_query","athena_delete_prepared_statement","athena_get_data_catalog","athena_get_database","athena_get_named_query","athena_get_prepared_statement","athena_get_query_execution","athena_get_query_results","athena_get_query_runtime_statistics","athena_get_table_metadata","athena_get_work_group","athena_list_data_catalogs","athena_list_databases","athena_list_named_queries","athena_list_prepared_statements","athena_list_query_executions","athena_list_table_metadata","athena_list_work_groups","athena_start_query","athena_stop_query","athena_update_named_query","athena_update_prepared_statement","attio_assert_record","attio_create_attribute","attio_create_comment","attio_create_list","attio_create_list_entry","attio_create_note","attio_create_object","attio_create_record","attio_create_task","attio_create_webhook","attio_delete_comment","attio_delete_list_entry","attio_delete_note","attio_delete_record","attio_delete_task","attio_delete_webhook","attio_get_attribute","attio_get_comment","attio_get_list","attio_get_list_entry","attio_get_member","attio_get_note","attio_get_object","attio_get_record","attio_get_task","attio_get_thread","attio_get_webhook","attio_list_attributes","attio_list_lists","attio_list_members","attio_list_notes","attio_list_objects","attio_list_records","attio_list_tasks","attio_list_threads","attio_list_webhooks","attio_query_list_entries","attio_search_records","attio_update_attribute","attio_update_list","attio_update_list_entry","attio_update_object","attio_update_record","attio_update_task","attio_update_webhook","azure_data_explorer_create_table","azure_data_explorer_drop_table","azure_data_explorer_ingest_from_query","azure_data_explorer_ingest_inline","azure_data_explorer_list_databases","azure_data_explorer_list_functions","azure_data_explorer_list_tables","azure_data_explorer_management","azure_data_explorer_query","azure_data_explorer_show_database_schema","azure_data_explorer_show_ingestion_failures","azure_data_explorer_show_operations","azure_data_explorer_show_table_details","azure_data_explorer_show_table_schema","azure_devops_add_comment","azure_devops_create_work_item","azure_devops_get_build_log","azure_devops_get_build_timeline","azure_devops_get_comments","azure_devops_get_pipeline","azure_devops_get_pipeline_run","azure_devops_get_work_item","azure_devops_get_work_items_batch","azure_devops_get_work_items_between_builds","azure_devops_list_build_logs","azure_devops_list_builds","azure_devops_list_pipeline_runs","azure_devops_list_pipelines","azure_devops_query_work_items","azure_devops_update_work_item","bitbucket_approve_pull_request","bitbucket_create_branch","bitbucket_create_pull_request","bitbucket_create_pull_request_comment","bitbucket_decline_pull_request","bitbucket_delete_branch","bitbucket_get_commit","bitbucket_get_file","bitbucket_get_file_metadata","bitbucket_get_pipeline","bitbucket_get_pipeline_step_log","bitbucket_get_pull_request","bitbucket_get_pull_request_diff","bitbucket_get_pull_request_diffstat","bitbucket_get_pull_request_merge_task_status","bitbucket_get_repository","bitbucket_list_branches","bitbucket_list_commits","bitbucket_list_directory","bitbucket_list_pipeline_steps","bitbucket_list_pipelines","bitbucket_list_pull_request_comments","bitbucket_list_pull_request_commit_statuses","bitbucket_list_pull_requests","bitbucket_list_repositories","bitbucket_list_workspaces","bitbucket_merge_pull_request","bitbucket_request_pull_request_changes","bitbucket_stop_pipeline","bitbucket_trigger_pipeline","box_copy_file","box_create_folder","box_delete_file","box_delete_folder","box_download_file","box_download_file_v2","box_get_file_info","box_list_folder_items","box_search","box_sign_cancel_request","box_sign_create_request","box_sign_get_request","box_sign_list_requests","box_sign_resend_request","box_update_file","box_upload_file","brandfetch_get_brand","brandfetch_search","brex_archive_budget","brex_create_budget","brex_create_spend_limit","brex_create_transfer","brex_create_vendor","brex_get_budget","brex_get_cash_account","brex_get_company","brex_get_current_user","brex_get_expense","brex_get_spend_limit","brex_get_transfer","brex_get_user","brex_get_vendor","brex_list_budgets","brex_list_card_accounts","brex_list_card_statements","brex_list_card_transactions","brex_list_cards","brex_list_cash_accounts","brex_list_cash_statements","brex_list_cash_transactions","brex_list_departments","brex_list_expenses","brex_list_locations","brex_list_spend_limits","brex_list_titles","brex_list_transfers","brex_list_users","brex_list_vendors","brex_match_receipt","brex_update_expense","brex_update_vendor","brex_upload_receipt","brightdata_cancel_snapshot","brightdata_discover","brightdata_download_snapshot","brightdata_scrape_dataset","brightdata_scrape_url","brightdata_serp_search","brightdata_snapshot_status","brightdata_sync_scrape","browser_use_run_task","buffer_create_idea","buffer_create_post","buffer_delete_post","buffer_edit_post","buffer_get_account","buffer_get_channels","buffer_get_idea_groups","buffer_get_ideas","buffer_get_post","buffer_get_posts","calcom_cancel_booking","calcom_confirm_booking","calcom_create_booking","calcom_create_event_type","calcom_create_schedule","calcom_decline_booking","calcom_delete_event_type","calcom_delete_schedule","calcom_get_booking","calcom_get_default_schedule","calcom_get_event_type","calcom_get_schedule","calcom_get_slots","calcom_list_bookings","calcom_list_event_types","calcom_list_schedules","calcom_reschedule_booking","calcom_update_event_type","calcom_update_schedule","calendly_cancel_event","calendly_create_event_invitee","calendly_create_invitee_no_show","calendly_create_scheduling_link","calendly_create_webhook","calendly_delete_invitee_no_show","calendly_delete_webhook","calendly_get_current_user","calendly_get_event_invitee","calendly_get_event_type","calendly_get_scheduled_event","calendly_get_user","calendly_list_event_invitees","calendly_list_event_type_available_times","calendly_list_event_types","calendly_list_organization_memberships","calendly_list_routing_form_submissions","calendly_list_routing_forms","calendly_list_scheduled_events","calendly_list_user_availability_schedules","calendly_list_user_busy_times","calendly_list_webhooks","cbinsights_chat","cbinsights_get_commercial_maturity_history","cbinsights_get_exit_probability_history","cbinsights_get_mosaic_history","cbinsights_get_org_business_relationships","cbinsights_get_org_funding_window","cbinsights_get_org_fundings","cbinsights_get_org_investments","cbinsights_get_org_management_and_board","cbinsights_get_org_outlook","cbinsights_get_org_portfolio_exits","cbinsights_get_org_revenue","cbinsights_get_scouting_report","cbinsights_get_strategy_map","cbinsights_list_business_relationships","cbinsights_list_funding_window","cbinsights_list_fundings","cbinsights_list_investments","cbinsights_list_management_and_board","cbinsights_list_outlook","cbinsights_list_portfolio_exits","cbinsights_list_revenue","cbinsights_lookup_organizations","cbinsights_rag","cbinsights_search_firmographics","circleback_add_tag_to_meetings","circleback_create_tag","circleback_delete_action_item","circleback_delete_meeting","circleback_delete_tag","circleback_get_company","circleback_get_meeting","circleback_get_person","circleback_get_transcript","circleback_list_action_items","circleback_list_calendar_events","circleback_list_companies","circleback_list_meetings","circleback_list_people","circleback_list_tags","circleback_remove_tag_from_meetings","circleback_search_meetings","circleback_update_action_item","circleback_update_meeting","circleback_update_tag","clay_populate","clerk_add_organization_member","clerk_ban_user","clerk_create_actor_token","clerk_create_allowlist_identifier","clerk_create_blocklist_identifier","clerk_create_organization","clerk_create_organization_invitation","clerk_create_user","clerk_delete_allowlist_identifier","clerk_delete_blocklist_identifier","clerk_delete_organization","clerk_delete_user","clerk_get_jwt_template","clerk_get_organization","clerk_get_session","clerk_get_user","clerk_get_user_oauth_token","clerk_list_allowlist_identifiers","clerk_list_blocklist_identifiers","clerk_list_jwt_templates","clerk_list_organization_invitations","clerk_list_organization_memberships","clerk_list_organizations","clerk_list_sessions","clerk_list_users","clerk_lock_user","clerk_remove_organization_member","clerk_revoke_actor_token","clerk_revoke_session","clerk_unban_user","clerk_unlock_user","clerk_update_organization","clerk_update_organization_membership","clerk_update_user","clickhouse_count_rows","clickhouse_create_database","clickhouse_create_table","clickhouse_delete","clickhouse_describe_table","clickhouse_drop_database","clickhouse_drop_partition","clickhouse_drop_table","clickhouse_execute","clickhouse_insert","clickhouse_insert_rows","clickhouse_introspect","clickhouse_kill_query","clickhouse_list_clusters","clickhouse_list_databases","clickhouse_list_mutations","clickhouse_list_partitions","clickhouse_list_running_queries","clickhouse_list_tables","clickhouse_optimize_table","clickhouse_query","clickhouse_rename_table","clickhouse_show_create_table","clickhouse_table_stats","clickhouse_truncate_table","clickhouse_update","clickup_add_tag_to_task","clickup_create_checklist","clickup_create_checklist_item","clickup_create_comment","clickup_create_folder","clickup_create_list","clickup_create_task","clickup_create_time_entry","clickup_delete_checklist","clickup_delete_checklist_item","clickup_delete_comment","clickup_delete_task","clickup_delete_time_entry","clickup_get_comments","clickup_get_custom_fields","clickup_get_folders","clickup_get_list_members","clickup_get_lists","clickup_get_running_timer","clickup_get_space_tags","clickup_get_spaces","clickup_get_task","clickup_get_task_members","clickup_get_tasks","clickup_get_time_entries","clickup_get_workspaces","clickup_remove_custom_field_value","clickup_remove_tag_from_task","clickup_search_tasks","clickup_set_custom_field_value","clickup_start_timer","clickup_stop_timer","clickup_update_checklist","clickup_update_checklist_item","clickup_update_comment","clickup_update_task","clickup_update_time_entry","clickup_upload_attachment","cloudflare_create_access_application","cloudflare_create_access_policy","cloudflare_create_access_service_token","cloudflare_create_dns_record","cloudflare_create_r2_bucket","cloudflare_create_rate_limit_rule","cloudflare_create_ruleset","cloudflare_create_ruleset_rule","cloudflare_create_zone","cloudflare_delete_access_application","cloudflare_delete_access_policy","cloudflare_delete_dns_record","cloudflare_delete_r2_bucket","cloudflare_delete_ruleset_rule","cloudflare_delete_zone","cloudflare_dns_analytics","cloudflare_get_access_application","cloudflare_get_r2_bucket","cloudflare_get_ruleset","cloudflare_get_ruleset_entrypoint","cloudflare_get_tunnel","cloudflare_get_tunnel_configuration","cloudflare_get_worker_script_settings","cloudflare_get_zone","cloudflare_get_zone_settings","cloudflare_list_access_applications","cloudflare_list_access_groups","cloudflare_list_access_identity_providers","cloudflare_list_access_policies","cloudflare_list_access_service_tokens","cloudflare_list_certificates","cloudflare_list_dns_records","cloudflare_list_managed_ruleset_overrides","cloudflare_list_r2_buckets","cloudflare_list_rate_limit_rules","cloudflare_list_rulesets","cloudflare_list_tunnels","cloudflare_list_worker_routes","cloudflare_list_worker_scripts","cloudflare_list_zones","cloudflare_purge_cache","cloudflare_revoke_access_service_token","cloudflare_update_access_application","cloudflare_update_access_policy","cloudflare_update_dns_record","cloudflare_update_rate_limit_rule","cloudflare_update_ruleset_rule","cloudflare_update_zone_setting","cloudformation_cancel_update_stack","cloudformation_create_change_set","cloudformation_create_stack","cloudformation_delete_stack","cloudformation_describe_change_set","cloudformation_describe_stack_drift_detection_status","cloudformation_describe_stack_events","cloudformation_describe_stacks","cloudformation_detect_stack_drift","cloudformation_execute_change_set","cloudformation_get_template","cloudformation_get_template_summary","cloudformation_list_stack_resources","cloudformation_update_stack","cloudformation_validate_template","cloudtrail_cancel_query","cloudtrail_describe_query","cloudtrail_describe_trails","cloudtrail_get_event_data_store","cloudtrail_get_event_selectors","cloudtrail_get_insight_selectors","cloudtrail_get_query_results","cloudtrail_get_trail","cloudtrail_get_trail_status","cloudtrail_list_event_data_stores","cloudtrail_list_tags","cloudtrail_list_trails","cloudtrail_lookup_events","cloudtrail_start_query","cloudwatch_describe_alarm_history","cloudwatch_describe_alarms","cloudwatch_describe_log_groups","cloudwatch_describe_log_streams","cloudwatch_filter_log_events","cloudwatch_get_log_events","cloudwatch_get_metric_statistics","cloudwatch_list_metrics","cloudwatch_mute_alarm","cloudwatch_put_log_group_retention","cloudwatch_put_metric_data","cloudwatch_query_logs","cloudwatch_unmute_alarm","coda_add_custom_domain","coda_add_permission","coda_change_user_role","coda_create_doc","coda_create_folder","coda_create_page","coda_delete_custom_domain","coda_delete_doc","coda_delete_folder","coda_delete_page","coda_delete_page_content","coda_delete_permission","coda_delete_row","coda_delete_rows","coda_export_page","coda_get_acl_settings","coda_get_analytics_last_updated","coda_get_column","coda_get_control","coda_get_custom_domain_provider","coda_get_doc","coda_get_doc_analytics_summary","coda_get_folder","coda_get_formula","coda_get_mutation_status","coda_get_page","coda_get_page_content","coda_get_page_export_status","coda_get_row","coda_get_sharing_metadata","coda_get_table","coda_list_categories","coda_list_columns","coda_list_controls","coda_list_custom_domains","coda_list_doc_analytics","coda_list_docs","coda_list_folder_children","coda_list_folders","coda_list_formulas","coda_list_page_analytics","coda_list_pages","coda_list_permissions","coda_list_rows","coda_list_tables","coda_list_workspace_members","coda_list_workspace_roles","coda_publish_doc","coda_push_button","coda_resolve_browser_link","coda_search_principals","coda_trigger_automation","coda_unpublish_doc","coda_update_acl_settings","coda_update_doc","coda_update_folder","coda_update_page","coda_update_row","coda_upsert_rows","coda_whoami","codepipeline_disable_stage_transition","codepipeline_enable_stage_transition","codepipeline_get_pipeline","codepipeline_get_pipeline_execution","codepipeline_get_pipeline_state","codepipeline_list_action_executions","codepipeline_list_pipeline_executions","codepipeline_list_pipelines","codepipeline_put_approval_result","codepipeline_retry_stage_execution","codepipeline_start_execution","codepipeline_stop_execution","confluence_add_label","confluence_create_blogpost","confluence_create_comment","confluence_create_page","confluence_create_page_property","confluence_create_space","confluence_create_space_property","confluence_delete_attachment","confluence_delete_blogpost","confluence_delete_comment","confluence_delete_label","confluence_delete_page","confluence_delete_page_property","confluence_delete_space","confluence_delete_space_property","confluence_get_blogpost","confluence_get_page_ancestors","confluence_get_page_children","confluence_get_page_descendants","confluence_get_page_version","confluence_get_pages_by_label","confluence_get_space","confluence_get_task","confluence_get_user","confluence_list_attachments","confluence_list_blogposts","confluence_list_blogposts_in_space","confluence_list_comments","confluence_list_labels","confluence_list_page_properties","confluence_list_page_versions","confluence_list_pages_in_space","confluence_list_space_labels","confluence_list_space_permissions","confluence_list_space_properties","confluence_list_spaces","confluence_list_tasks","confluence_retrieve","confluence_search","confluence_search_in_space","confluence_update","confluence_update_blogpost","confluence_update_comment","confluence_update_space","confluence_update_task","confluence_upload_attachment","context_dev_classify_naics","context_dev_classify_sic","context_dev_crawl","context_dev_extract","context_dev_extract_product","context_dev_extract_products","context_dev_get_brand","context_dev_get_brand_by_email","context_dev_get_brand_by_name","context_dev_get_brand_by_ticker","context_dev_identify_transaction","context_dev_map","context_dev_scrape_fonts","context_dev_scrape_html","context_dev_scrape_images","context_dev_scrape_markdown","context_dev_scrape_styleguide","context_dev_screenshot","context_dev_search","convex_action","convex_document_deltas","convex_list_documents","convex_list_tables","convex_mutation","convex_query","convex_run_function","crowdstrike_create_indicators","crowdstrike_delete_indicators","crowdstrike_delete_rtr_session","crowdstrike_execute_rtr_command","crowdstrike_get_alert_details","crowdstrike_get_case_details","crowdstrike_get_host_group_details","crowdstrike_get_indicator_details","crowdstrike_get_rtr_command_status","crowdstrike_get_sensor_aggregates","crowdstrike_get_sensor_details","crowdstrike_get_vulnerability_details","crowdstrike_init_rtr_session","crowdstrike_perform_host_action","crowdstrike_perform_host_group_action","crowdstrike_query_alerts","crowdstrike_query_cases","crowdstrike_query_host_groups","crowdstrike_query_indicators","crowdstrike_query_sensors","crowdstrike_query_vulnerabilities","crowdstrike_update_alerts","crowdstrike_update_indicators","crunchbase_autocomplete","crunchbase_get_acquisition","crunchbase_get_entity","crunchbase_get_entity_card","crunchbase_get_fields_metadata","crunchbase_get_funding_round","crunchbase_get_organization","crunchbase_get_person","crunchbase_list_deleted_entities","crunchbase_search_acquisitions","crunchbase_search_entities","crunchbase_search_funding_rounds","crunchbase_search_organizations","crunchbase_search_people","cursor_add_followup","cursor_add_followup_v2","cursor_delete_agent","cursor_delete_agent_v2","cursor_download_artifact","cursor_download_artifact_v2","cursor_get_agent","cursor_get_agent_v2","cursor_get_api_key_info","cursor_get_api_key_info_v2","cursor_get_conversation","cursor_get_conversation_v2","cursor_launch_agent","cursor_launch_agent_v2","cursor_list_agents","cursor_list_agents_v2","cursor_list_artifacts","cursor_list_artifacts_v2","cursor_list_models","cursor_list_models_v2","cursor_list_repositories","cursor_list_repositories_v2","cursor_stop_agent","cursor_stop_agent_v2","dagster_delete_run","dagster_get_asset","dagster_get_run","dagster_get_run_logs","dagster_launch_run","dagster_list_assets","dagster_list_jobs","dagster_list_runs","dagster_list_schedules","dagster_list_sensors","dagster_materialize_assets","dagster_reexecute_run","dagster_report_asset_materialization","dagster_start_schedule","dagster_start_sensor","dagster_stop_schedule","dagster_stop_sensor","dagster_terminate_run","dagster_wipe_asset","databricks_cancel_run","databricks_execute_sql","databricks_genie_agent_ask","databricks_genie_agent_list_items","databricks_genie_ask","databricks_genie_delete_conversation","databricks_genie_delete_message","databricks_genie_download_visualization","databricks_genie_execute_query","databricks_genie_get_message","databricks_genie_get_query_result","databricks_genie_get_space","databricks_genie_list_conversations","databricks_genie_list_messages","databricks_genie_list_spaces","databricks_genie_send_feedback","databricks_get_cluster","databricks_get_job","databricks_get_run","databricks_get_run_output","databricks_get_statement","databricks_list_clusters","databricks_list_jobs","databricks_list_runs","databricks_list_warehouses","databricks_run_job","datadog_add_incident_todo","datadog_cancel_downtime","datadog_create_dashboard","datadog_create_downtime","datadog_create_event","datadog_create_incident","datadog_create_monitor","datadog_create_slo","datadog_delete_dashboard","datadog_delete_slo","datadog_get_browser_synthetics_results","datadog_get_dashboard","datadog_get_incident","datadog_get_monitor","datadog_get_security_signal","datadog_get_slo","datadog_get_slo_history","datadog_get_synthetics_results","datadog_get_synthetics_test","datadog_list_dashboards","datadog_list_downtimes","datadog_list_incidents","datadog_list_monitors","datadog_list_security_rules","datadog_list_security_signals","datadog_list_services","datadog_list_slos","datadog_list_synthetics_tests","datadog_mute_monitor","datadog_query_logs","datadog_query_timeseries","datadog_search_spans","datadog_send_logs","datadog_submit_metrics","datadog_trigger_synthetics_tests","datadog_unmute_monitor","datadog_update_incident","datadog_update_security_signal_assignee","datadog_update_security_signal_state","datadog_update_slo","datadog_update_synthetics_status","datagma_enrich_company","datagma_enrich_person","datagma_find_email","datagma_find_phone","datagma_get_credits","daytona_create_sandbox","daytona_delete_sandbox","daytona_download_file","daytona_execute_command","daytona_get_sandbox","daytona_git_clone","daytona_list_files","daytona_list_sandboxes","daytona_run_code","daytona_start_sandbox","daytona_stop_sandbox","daytona_upload_file","deployed_block_executor","deployments_deploy","deployments_get_version","deployments_list_versions","deployments_promote","deployments_undeploy","devin_append_session_tags","devin_archive_session","devin_create_session","devin_get_session","devin_get_session_tags","devin_list_session_attachments","devin_list_session_messages","devin_list_sessions","devin_replace_session_tags","devin_send_message","devin_terminate_session","discord_add_reaction","discord_archive_thread","discord_assign_role","discord_ban_member","discord_bulk_delete_messages","discord_create_channel","discord_create_invite","discord_create_role","discord_create_thread","discord_create_webhook","discord_delete_channel","discord_delete_invite","discord_delete_message","discord_delete_role","discord_delete_webhook","discord_edit_message","discord_execute_webhook","discord_get_channel","discord_get_invite","discord_get_member","discord_get_messages","discord_get_pinned_messages","discord_get_server","discord_get_user","discord_get_webhook","discord_join_thread","discord_kick_member","discord_leave_thread","discord_list_channels","discord_list_roles","discord_pin_message","discord_remove_reaction","discord_remove_role","discord_send_message","discord_unban_member","discord_unpin_message","discord_update_channel","discord_update_member","discord_update_role","docusign_create_from_template","docusign_download_document","docusign_get_envelope","docusign_list_envelopes","docusign_list_recipients","docusign_list_templates","docusign_send_envelope","docusign_void_envelope","downdetector_get_company","downdetector_get_company_attribution","downdetector_get_company_baseline","downdetector_get_company_events","downdetector_get_company_incidents","downdetector_get_company_indicators","downdetector_get_company_last_15","downdetector_get_company_status","downdetector_get_provider","downdetector_get_reports","downdetector_get_site_companies","downdetector_list_categories","downdetector_list_incidents","downdetector_list_sites","downdetector_search_companies","dropbox_copy","dropbox_create_folder","dropbox_create_shared_link","dropbox_delete","dropbox_download","dropbox_download_v2","dropbox_get_metadata","dropbox_list_folder","dropbox_list_revisions","dropbox_list_shared_links","dropbox_move","dropbox_restore","dropbox_search","dropbox_upload","dropcontact_enrich_contact","dspy_chain_of_thought","dspy_predict","dspy_react","dub_bulk_create_links","dub_bulk_delete_links","dub_bulk_update_links","dub_create_link","dub_create_tag","dub_delete_link","dub_get_analytics","dub_get_events","dub_get_link","dub_get_links_count","dub_get_qr_code","dub_get_qr_code_v2","dub_list_domains","dub_list_folders","dub_list_links","dub_list_tags","dub_update_link","dub_upsert_link","duckduckgo_search","dynamodb_delete","dynamodb_get","dynamodb_introspect","dynamodb_put","dynamodb_query","dynamodb_scan","dynamodb_update","dynatrace_add_problem_comment","dynatrace_add_tags","dynatrace_close_problem","dynatrace_create_settings_object","dynatrace_create_slo","dynatrace_delete_problem_comment","dynatrace_delete_settings_object","dynatrace_delete_slo","dynatrace_delete_tag","dynatrace_execute_synthetic_monitors","dynatrace_get_attack","dynatrace_get_audit_logs","dynatrace_get_entity","dynatrace_get_event","dynatrace_get_metric","dynatrace_get_problem","dynatrace_get_problem_comment","dynatrace_get_security_problem","dynatrace_get_settings_object","dynatrace_get_slo","dynatrace_get_synthetic_batch","dynatrace_ingest_event","dynatrace_ingest_logs","dynatrace_ingest_metrics","dynatrace_list_attacks","dynatrace_list_entities","dynatrace_list_entity_types","dynatrace_list_events","dynatrace_list_metrics","dynatrace_list_problem_comments","dynatrace_list_problems","dynatrace_list_remediation_items","dynatrace_list_security_problems","dynatrace_list_settings_objects","dynatrace_list_settings_schemas","dynatrace_list_slos","dynatrace_list_synthetic_monitors","dynatrace_list_tags","dynatrace_mute_security_problem","dynatrace_mute_security_problems","dynatrace_query_metrics","dynatrace_search_logs","dynatrace_unmute_security_problem","dynatrace_unmute_security_problems","dynatrace_update_problem_comment","dynatrace_update_settings_object","dynatrace_update_slo","elasticsearch_bulk","elasticsearch_cluster_health","elasticsearch_cluster_stats","elasticsearch_count","elasticsearch_create_index","elasticsearch_delete_document","elasticsearch_delete_index","elasticsearch_get_document","elasticsearch_get_index","elasticsearch_index_document","elasticsearch_list_indices","elasticsearch_search","elasticsearch_update_document","elevenlabs_audio_isolation","elevenlabs_edit_voice_settings","elevenlabs_get_user","elevenlabs_get_voice","elevenlabs_get_voice_settings","elevenlabs_list_models","elevenlabs_list_voices","elevenlabs_sound_effects","elevenlabs_speech_to_speech","elevenlabs_tts","emailbison_attach_leads_to_campaign","emailbison_attach_tags_to_leads","emailbison_create_campaign","emailbison_create_lead","emailbison_create_tag","emailbison_get_lead","emailbison_list_campaigns","emailbison_list_leads","emailbison_list_replies","emailbison_list_tags","emailbison_update_campaign","emailbison_update_campaign_status","emailbison_update_lead","embeddings_cohere","embeddings_gemini","embeddings_mistral","embeddings_ollama","embeddings_openai","embeddings_openrouter","enrich_check_credits","enrich_company_funding","enrich_company_lookup","enrich_company_revenue","enrich_disposable_email_check","enrich_email_to_ip","enrich_email_to_person_lite","enrich_email_to_phone","enrich_email_to_profile","enrich_find_email","enrich_get_post_details","enrich_ip_to_company","enrich_linkedin_profile","enrich_linkedin_to_personal_email","enrich_linkedin_to_work_email","enrich_phone_finder","enrich_reverse_hash_lookup","enrich_sales_pointer_people","enrich_search_company","enrich_search_company_activities","enrich_search_company_employees","enrich_search_jobs","enrich_search_logo","enrich_search_people","enrich_search_people_activities","enrich_search_post_comments","enrich_search_post_comments_by_url","enrich_search_post_reactions","enrich_search_post_reactions_by_url","enrich_search_posts","enrich_search_similar_companies","enrich_verify_email","enrichment_run","enrow_find_email","enrow_verify_email","exa_agent","exa_answer","exa_find_similar_links","exa_get_contents","exa_search","extend_parser","extend_parser_v2","fathom_get_summary","fathom_get_transcript","fathom_list_meeting_types","fathom_list_meetings","fathom_list_team_members","fathom_list_teams","file_append","file_compress","file_create_folder","file_decompress","file_delete_folder","file_edit","file_fetch","file_get","file_get_content","file_list","file_manage_sharing","file_move","file_parser","file_parser_v2","file_parser_v3","file_read","file_restore_folder","file_search","file_update_folder","file_write","findymail_find_email_from_linkedin","findymail_find_email_from_name","findymail_find_emails_by_domain","findymail_find_employees","findymail_find_phone","findymail_get_company","findymail_get_credits","findymail_lookup_technologies","findymail_reverse_email_lookup","findymail_search_technologies","findymail_verify_email","firecrawl_agent","firecrawl_batch_scrape","firecrawl_batch_scrape_status","firecrawl_cancel_crawl","firecrawl_crawl","firecrawl_crawl_status","firecrawl_credit_usage","firecrawl_extract","firecrawl_extract_status","firecrawl_map","firecrawl_parse","firecrawl_scrape","firecrawl_search","fireflies_add_to_live_meeting","fireflies_create_bite","fireflies_delete_transcript","fireflies_get_transcript","fireflies_get_user","fireflies_list_bites","fireflies_list_contacts","fireflies_list_transcripts","fireflies_list_users","fireflies_upload_audio","flint_create_task","flint_generate_pages","flint_get_task","function_execute","gamma_check_status","gamma_generate","gamma_generate_from_template","gamma_list_folders","gamma_list_themes","github_add_assignees","github_add_assignees_v2","github_add_labels","github_add_labels_v2","github_cancel_workflow_run","github_cancel_workflow_run_v2","github_check_star","github_check_star_v2","github_close_issue","github_close_issue_v2","github_close_pr","github_close_pr_v2","github_comment","github_comment_v2","github_compare_commits","github_compare_commits_v2","github_create_branch","github_create_branch_v2","github_create_comment_reaction","github_create_comment_reaction_v2","github_create_file","github_create_file_v2","github_create_gist","github_create_gist_v2","github_create_issue","github_create_issue_reaction","github_create_issue_reaction_v2","github_create_issue_v2","github_create_milestone","github_create_milestone_v2","github_create_pr","github_create_pr_review","github_create_pr_review_v2","github_create_pr_v2","github_create_project","github_create_project_v2","github_create_release","github_create_release_v2","github_delete_branch","github_delete_branch_v2","github_delete_comment","github_delete_comment_reaction","github_delete_comment_reaction_v2","github_delete_comment_v2","github_delete_file","github_delete_file_v2","github_delete_gist","github_delete_gist_v2","github_delete_issue_reaction","github_delete_issue_reaction_v2","github_delete_milestone","github_delete_milestone_v2","github_delete_project","github_delete_project_v2","github_delete_release","github_delete_release_v2","github_fork_gist","github_fork_gist_v2","github_fork_repo","github_fork_repo_v2","github_get_branch","github_get_branch_protection","github_get_branch_protection_v2","github_get_branch_v2","github_get_commit","github_get_commit_v2","github_get_file_content","github_get_file_content_v2","github_get_gist","github_get_gist_v2","github_get_issue","github_get_issue_v2","github_get_latest_release","github_get_latest_release_v2","github_get_milestone","github_get_milestone_v2","github_get_pr_files","github_get_pr_files_v2","github_get_project","github_get_project_v2","github_get_readme","github_get_readme_v2","github_get_release","github_get_release_v2","github_get_tree","github_get_tree_v2","github_get_workflow","github_get_workflow_run","github_get_workflow_run_v2","github_get_workflow_v2","github_issue_comment","github_issue_comment_v2","github_job_logs","github_latest_commit","github_latest_commit_v2","github_list_branches","github_list_branches_v2","github_list_commits","github_list_commits_v2","github_list_forks","github_list_forks_v2","github_list_gists","github_list_gists_v2","github_list_issue_comments","github_list_issue_comments_v2","github_list_issues","github_list_issues_v2","github_list_milestones","github_list_milestones_v2","github_list_pr_comments","github_list_pr_comments_v2","github_list_projects","github_list_projects_v2","github_list_prs","github_list_prs_v2","github_list_releases","github_list_releases_v2","github_list_review_threads","github_list_stargazers","github_list_stargazers_v2","github_list_tags","github_list_tags_v2","github_list_workflow_runs","github_list_workflow_runs_v2","github_list_workflows","github_list_workflows_v2","github_merge_pr","github_merge_pr_v2","github_pr","github_pr_v2","github_remove_label","github_remove_label_v2","github_reply_review_thread","github_repo_info","github_repo_info_v2","github_request_reviewers","github_request_reviewers_v2","github_rerun_workflow","github_rerun_workflow_v2","github_resolve_review_thread","github_search_code","github_search_code_v2","github_search_commits","github_search_commits_v2","github_search_issues","github_search_issues_v2","github_search_repos","github_search_repos_v2","github_search_users","github_search_users_v2","github_star_gist","github_star_gist_v2","github_star_repo","github_star_repo_v2","github_status_check_rollup","github_trigger_workflow","github_trigger_workflow_v2","github_unstar_gist","github_unstar_gist_v2","github_unstar_repo","github_unstar_repo_v2","github_update_branch_protection","github_update_branch_protection_v2","github_update_comment","github_update_comment_v2","github_update_file","github_update_file_v2","github_update_gist","github_update_gist_v2","github_update_issue","github_update_issue_v2","github_update_milestone","github_update_milestone_v2","github_update_pr","github_update_pr_v2","github_update_project","github_update_project_v2","github_update_release","github_update_release_v2","gitlab_activate_user","gitlab_add_member","gitlab_add_saml_group_link","gitlab_approve_access_request","gitlab_approve_merge_request","gitlab_approve_user","gitlab_ban_user","gitlab_block_user","gitlab_cancel_pipeline","gitlab_compare_branches","gitlab_create_branch","gitlab_create_file","gitlab_create_issue","gitlab_create_issue_note","gitlab_create_merge_request","gitlab_create_merge_request_note","gitlab_create_pipeline","gitlab_create_release","gitlab_create_user","gitlab_deactivate_user","gitlab_delete_branch","gitlab_delete_issue","gitlab_delete_saml_group_link","gitlab_delete_user","gitlab_delete_user_identity","gitlab_deny_access_request","gitlab_get_file","gitlab_get_group","gitlab_get_issue","gitlab_get_job_log","gitlab_get_merge_request","gitlab_get_merge_request_changes","gitlab_get_pipeline","gitlab_get_project","gitlab_invite_member","gitlab_list_access_requests","gitlab_list_branches","gitlab_list_commits","gitlab_list_groups","gitlab_list_invitations","gitlab_list_issues","gitlab_list_members","gitlab_list_merge_requests","gitlab_list_pipeline_jobs","gitlab_list_pipelines","gitlab_list_projects","gitlab_list_releases","gitlab_list_repository_tree","gitlab_list_saml_group_links","gitlab_list_user_memberships","gitlab_merge_merge_request","gitlab_play_job","gitlab_reject_user","gitlab_remove_member","gitlab_retry_pipeline","gitlab_revoke_invitation","gitlab_search_users","gitlab_unban_user","gitlab_unblock_user","gitlab_update_file","gitlab_update_invitation","gitlab_update_issue","gitlab_update_member","gitlab_update_merge_request","gitlab_update_user","gmail_add_label","gmail_add_label_v2","gmail_archive","gmail_archive_v2","gmail_create_label_v2","gmail_delete","gmail_delete_draft_v2","gmail_delete_label_v2","gmail_delete_v2","gmail_draft","gmail_draft_v2","gmail_edit_draft_v2","gmail_get_draft_v2","gmail_get_thread_v2","gmail_list_drafts_v2","gmail_list_labels_v2","gmail_list_threads_v2","gmail_mark_read","gmail_mark_read_v2","gmail_mark_unread","gmail_mark_unread_v2","gmail_move","gmail_move_v2","gmail_read","gmail_read_v2","gmail_remove_label","gmail_remove_label_v2","gmail_search","gmail_search_v2","gmail_send","gmail_send_v2","gmail_trash_thread_v2","gmail_unarchive","gmail_unarchive_v2","gmail_untrash_thread_v2","gmail_update_label_v2","gong_aggregate_activity","gong_aggregate_by_period","gong_answered_scorecards","gong_ask_anything","gong_assign_flow_prospects","gong_create_call","gong_day_by_day_activity","gong_get_brief","gong_get_call","gong_get_call_transcript","gong_get_coaching","gong_get_extensive_calls","gong_get_folder_content","gong_get_logs","gong_get_prospect_flows","gong_get_user","gong_interaction_stats","gong_list_calls","gong_list_flows","gong_list_library_folders","gong_list_scorecards","gong_list_trackers","gong_list_users","gong_list_workspaces","gong_lookup_email","gong_lookup_phone","gong_purge_email_address","gong_purge_phone_number","gong_unassign_flow_prospects","google_ads_ad_performance","google_ads_campaign_performance","google_ads_list_ad_groups","google_ads_list_campaigns","google_ads_list_customers","google_ads_search","google_appsheet_add_rows","google_appsheet_delete_rows","google_appsheet_edit_rows","google_appsheet_find_rows","google_bigquery_create_dataset","google_bigquery_create_table","google_bigquery_delete_dataset","google_bigquery_delete_table","google_bigquery_get_query_results","google_bigquery_get_table","google_bigquery_insert_rows","google_bigquery_list_datasets","google_bigquery_list_table_data","google_bigquery_list_tables","google_bigquery_query","google_books_volume_details","google_books_volume_search","google_calendar_create","google_calendar_create_calendar","google_calendar_create_calendar_v2","google_calendar_create_v2","google_calendar_delete","google_calendar_delete_calendar","google_calendar_delete_calendar_v2","google_calendar_delete_v2","google_calendar_freebusy","google_calendar_freebusy_v2","google_calendar_get","google_calendar_get_v2","google_calendar_instances","google_calendar_instances_v2","google_calendar_invite","google_calendar_invite_v2","google_calendar_list","google_calendar_list_acl","google_calendar_list_acl_v2","google_calendar_list_calendars","google_calendar_list_calendars_v2","google_calendar_list_v2","google_calendar_move","google_calendar_move_v2","google_calendar_quick_add","google_calendar_quick_add_v2","google_calendar_respond","google_calendar_respond_v2","google_calendar_share_calendar","google_calendar_share_calendar_v2","google_calendar_unshare_calendar","google_calendar_unshare_calendar_v2","google_calendar_update","google_calendar_update_acl","google_calendar_update_acl_v2","google_calendar_update_calendar","google_calendar_update_calendar_v2","google_calendar_update_v2","google_contacts_create","google_contacts_delete","google_contacts_get","google_contacts_list","google_contacts_search","google_contacts_update","google_docs_create","google_docs_create_named_range","google_docs_create_paragraph_bullets","google_docs_delete_content_range","google_docs_delete_named_range","google_docs_delete_paragraph_bullets","google_docs_insert_image","google_docs_insert_page_break","google_docs_insert_table","google_docs_insert_text","google_docs_read","google_docs_replace_text","google_docs_update_paragraph_style","google_docs_update_text_style","google_docs_write","google_drive_copy","google_drive_create_comment","google_drive_create_folder","google_drive_delete","google_drive_delete_comment","google_drive_download","google_drive_export","google_drive_get_about","google_drive_get_content","google_drive_get_file","google_drive_get_revision","google_drive_list","google_drive_list_comments","google_drive_list_permissions","google_drive_list_revisions","google_drive_move","google_drive_search","google_drive_share","google_drive_trash","google_drive_unshare","google_drive_untrash","google_drive_update","google_drive_upload","google_forms_batch_update","google_forms_create_form","google_forms_create_watch","google_forms_delete_watch","google_forms_get_form","google_forms_get_responses","google_forms_list_watches","google_forms_renew_watch","google_forms_set_publish_settings","google_groups_add_alias","google_groups_add_member","google_groups_create_group","google_groups_delete_group","google_groups_get_group","google_groups_get_member","google_groups_get_settings","google_groups_has_member","google_groups_list_aliases","google_groups_list_groups","google_groups_list_members","google_groups_remove_alias","google_groups_remove_member","google_groups_update_group","google_groups_update_member","google_groups_update_settings","google_maps_air_quality","google_maps_directions","google_maps_distance_matrix","google_maps_elevation","google_maps_geocode","google_maps_geolocate","google_maps_place_details","google_maps_places_nearby","google_maps_places_search","google_maps_pollen","google_maps_reverse_geocode","google_maps_snap_to_roads","google_maps_solar","google_maps_speed_limits","google_maps_timezone","google_maps_validate_address","google_meet_create_space","google_meet_end_conference","google_meet_get_conference_record","google_meet_get_space","google_meet_list_conference_records","google_meet_list_participants","google_pagespeed_analyze","google_search","google_sheets_append","google_sheets_append_v2","google_sheets_batch_clear_v2","google_sheets_batch_get_v2","google_sheets_batch_update_v2","google_sheets_clear_v2","google_sheets_copy_sheet_v2","google_sheets_create_spreadsheet_v2","google_sheets_delete_rows_v2","google_sheets_delete_sheet_v2","google_sheets_delete_spreadsheet_v2","google_sheets_get_spreadsheet_v2","google_sheets_read","google_sheets_read_v2","google_sheets_update","google_sheets_update_v2","google_sheets_write","google_sheets_write_v2","google_slides_add_image","google_slides_add_slide","google_slides_batch_update","google_slides_copy_presentation","google_slides_create","google_slides_create_line","google_slides_create_paragraph_bullets","google_slides_create_shape","google_slides_create_sheets_chart","google_slides_create_table","google_slides_create_video","google_slides_delete_object","google_slides_delete_paragraph_bullets","google_slides_delete_table_column","google_slides_delete_table_row","google_slides_delete_text","google_slides_duplicate_object","google_slides_export_presentation","google_slides_get_page","google_slides_get_thumbnail","google_slides_group_objects","google_slides_insert_table_columns","google_slides_insert_table_rows","google_slides_insert_text","google_slides_merge_table_cells","google_slides_read","google_slides_refresh_sheets_chart","google_slides_replace_all_shapes_with_image","google_slides_replace_all_shapes_with_sheets_chart","google_slides_replace_all_text","google_slides_replace_image","google_slides_reroute_line","google_slides_ungroup_objects","google_slides_unmerge_table_cells","google_slides_update_image_properties","google_slides_update_line_category","google_slides_update_line_properties","google_slides_update_page_element_alt_text","google_slides_update_page_element_transform","google_slides_update_page_elements_z_order","google_slides_update_page_properties","google_slides_update_paragraph_style","google_slides_update_shape_properties","google_slides_update_slide_properties","google_slides_update_slides_position","google_slides_update_table_border_properties","google_slides_update_table_cell_properties","google_slides_update_table_column_properties","google_slides_update_table_row_properties","google_slides_update_text_style","google_slides_update_video_properties","google_slides_write","google_tasks_create","google_tasks_delete","google_tasks_get","google_tasks_list","google_tasks_list_task_lists","google_tasks_update","google_translate_detect","google_translate_text","google_vault_add_held_accounts","google_vault_add_matters_permissions","google_vault_close_matters","google_vault_create_matters","google_vault_create_matters_export","google_vault_create_matters_holds","google_vault_create_saved_query","google_vault_delete_matters","google_vault_delete_matters_export","google_vault_delete_matters_holds","google_vault_delete_saved_query","google_vault_download_export_file","google_vault_list_matters","google_vault_list_matters_export","google_vault_list_matters_holds","google_vault_list_saved_queries","google_vault_remove_held_accounts","google_vault_remove_matters_permissions","google_vault_reopen_matters","google_vault_undelete_matters","google_vault_update_matters","google_vault_update_matters_holds","grafana_check_data_source_health","grafana_create_alert_rule","grafana_create_annotation","grafana_create_contact_point","grafana_create_dashboard","grafana_create_folder","grafana_delete_alert_rule","grafana_delete_annotation","grafana_delete_contact_point","grafana_delete_dashboard","grafana_delete_folder","grafana_get_alert_rule","grafana_get_alert_rule_group","grafana_get_dashboard","grafana_get_data_source","grafana_get_folder","grafana_get_health","grafana_list_alert_rules","grafana_list_annotations","grafana_list_contact_points","grafana_list_dashboards","grafana_list_data_sources","grafana_list_folders","grafana_move_folder","grafana_query_data_source","grafana_update_alert_rule","grafana_update_annotation","grafana_update_contact_point","grafana_update_dashboard","grafana_update_folder","grain_create_hook","grain_create_hook_v2","grain_delete_hook","grain_delete_hook_v2","grain_get_recording","grain_get_transcript","grain_list_hooks","grain_list_hooks_v2","grain_list_meeting_types","grain_list_recordings","grain_list_teams","grain_list_views","granola_create_webhook_endpoint","granola_delete_webhook_endpoint","granola_get_note","granola_get_transcript","granola_list_audit_events","granola_list_folders","granola_list_notes","granola_list_webhook_endpoints","granola_update_webhook_endpoint","greenhouse_get_application","greenhouse_get_candidate","greenhouse_get_job","greenhouse_get_user","greenhouse_list_applications","greenhouse_list_candidates","greenhouse_list_departments","greenhouse_list_job_stages","greenhouse_list_jobs","greenhouse_list_offices","greenhouse_list_users","greptile_index_repo","greptile_query","greptile_search","greptile_status","guardrails_validate","harmonic_batch_get_people","harmonic_clear_people_saved_search_net_new_results","harmonic_enrich_person","harmonic_get_company_employees","harmonic_get_email_enrichment_job","harmonic_get_email_enrichment_usage","harmonic_get_enrichment_status","harmonic_get_people_saved_search_net_new_results","harmonic_get_people_saved_search_results","harmonic_get_person","harmonic_list_people_saved_searches","harmonic_search_people_scout","harmonic_submit_email_enrichment_job","hex_cancel_run","hex_create_collection","hex_create_group","hex_deactivate_user","hex_delete_group","hex_get_collection","hex_get_data_connection","hex_get_group","hex_get_project","hex_get_project_runs","hex_get_queried_tables","hex_get_run_status","hex_list_collections","hex_list_data_connections","hex_list_groups","hex_list_projects","hex_list_users","hex_run_project","hex_update_collection","hex_update_group","hex_update_project","http_request","hubspot_add_list_memberships","hubspot_create_appointment","hubspot_create_association","hubspot_create_company","hubspot_create_contact","hubspot_create_deal","hubspot_create_email","hubspot_create_line_item","hubspot_create_list","hubspot_create_note","hubspot_create_ticket","hubspot_delete_association","hubspot_delete_company","hubspot_delete_contact","hubspot_delete_deal","hubspot_delete_line_item","hubspot_delete_ticket","hubspot_get_appointment","hubspot_get_association_labels","hubspot_get_cart","hubspot_get_company","hubspot_get_contact","hubspot_get_deal","hubspot_get_email","hubspot_get_line_item","hubspot_get_list","hubspot_get_list_memberships","hubspot_get_marketing_event","hubspot_get_note","hubspot_get_properties","hubspot_get_quote","hubspot_get_ticket","hubspot_get_users","hubspot_list_appointments","hubspot_list_associations","hubspot_list_carts","hubspot_list_companies","hubspot_list_contacts","hubspot_list_deals","hubspot_list_emails","hubspot_list_line_items","hubspot_list_lists","hubspot_list_marketing_events","hubspot_list_notes","hubspot_list_owners","hubspot_list_quotes","hubspot_list_tickets","hubspot_remove_list_memberships","hubspot_search_companies","hubspot_search_contacts","hubspot_search_deals","hubspot_search_emails","hubspot_search_line_items","hubspot_search_notes","hubspot_search_quotes","hubspot_search_tickets","hubspot_update_appointment","hubspot_update_company","hubspot_update_contact","hubspot_update_deal","hubspot_update_line_item","hubspot_update_ticket","huggingface_chat","hunter_companies_find","hunter_discover","hunter_domain_search","hunter_email_count","hunter_email_finder","hunter_email_verifier","iam_add_user_to_group","iam_attach_role_policy","iam_attach_user_policy","iam_create_access_key","iam_create_role","iam_create_user","iam_delete_access_key","iam_delete_role","iam_delete_user","iam_detach_role_policy","iam_detach_user_policy","iam_get_policy","iam_get_role","iam_get_user","iam_list_access_keys","iam_list_attached_role_policies","iam_list_attached_user_policies","iam_list_groups","iam_list_policies","iam_list_roles","iam_list_users","iam_remove_user_from_group","iam_simulate_principal_policy","iam_update_access_key","icypeas_find_email","icypeas_verify_email","identity_center_check_assignment_deletion_status","identity_center_check_assignment_status","identity_center_create_account_assignment","identity_center_delete_account_assignment","identity_center_describe_account","identity_center_describe_group","identity_center_describe_user","identity_center_get_group","identity_center_get_user","identity_center_list_account_assignments","identity_center_list_accounts","identity_center_list_assignments_for_account","identity_center_list_group_memberships","identity_center_list_groups","identity_center_list_instances","identity_center_list_permission_sets","image_generate","incidentio_actions_create","incidentio_actions_list","incidentio_actions_show","incidentio_actions_update","incidentio_alert_events_create","incidentio_alerts_list","incidentio_alerts_resolve","incidentio_alerts_show","incidentio_catalog_entries_list","incidentio_catalog_types_list","incidentio_custom_fields_create","incidentio_custom_fields_delete","incidentio_custom_fields_list","incidentio_custom_fields_show","incidentio_custom_fields_update","incidentio_escalation_paths_create","incidentio_escalation_paths_delete","incidentio_escalation_paths_list","incidentio_escalation_paths_show","incidentio_escalation_paths_update","incidentio_escalations_cancel","incidentio_escalations_create","incidentio_escalations_list","incidentio_escalations_show","incidentio_follow_ups_create","incidentio_follow_ups_list","incidentio_follow_ups_show","incidentio_follow_ups_update","incidentio_incident_alerts_list","incidentio_incident_memberships_create","incidentio_incident_memberships_revoke","incidentio_incident_participants_list","incidentio_incident_roles_create","incidentio_incident_roles_delete","incidentio_incident_roles_list","incidentio_incident_roles_show","incidentio_incident_roles_update","incidentio_incident_statuses_list","incidentio_incident_timestamps_list","incidentio_incident_timestamps_show","incidentio_incident_types_list","incidentio_incident_updates_list","incidentio_incidents_create","incidentio_incidents_list","incidentio_incidents_show","incidentio_incidents_update","incidentio_on_call_now","incidentio_schedule_entries_list","incidentio_schedule_overrides_create","incidentio_schedule_overrides_list","incidentio_schedules_create","incidentio_schedules_delete","incidentio_schedules_list","incidentio_schedules_show","incidentio_schedules_update","incidentio_severities_list","incidentio_teams_list","incidentio_teams_show","incidentio_users_list","incidentio_users_show","incidentio_workflows_create","incidentio_workflows_delete","incidentio_workflows_list","incidentio_workflows_show","incidentio_workflows_update","infisical_create_secret","infisical_delete_secret","infisical_get_secret","infisical_list_secrets","infisical_update_secret","instagram_delete_comment","instagram_download_media","instagram_get_account_insights","instagram_get_container_status","instagram_get_conversation_messages","instagram_get_media","instagram_get_media_insights","instagram_get_message","instagram_get_profile","instagram_get_publishing_limit","instagram_hide_comment","instagram_list_comments","instagram_list_conversations","instagram_list_media","instagram_list_stories","instagram_private_reply","instagram_publish_carousel","instagram_publish_image","instagram_publish_reel","instagram_publish_story","instagram_publish_video","instagram_reply_to_comment","instagram_send_text_message","instagram_set_comments_enabled","instantly_activate_campaign","instantly_create_campaign","instantly_create_lead","instantly_create_lead_list","instantly_delete_campaign","instantly_delete_leads","instantly_get_lead","instantly_list_campaigns","instantly_list_emails","instantly_list_lead_lists","instantly_list_leads","instantly_patch_campaign","instantly_patch_lead","instantly_pause_campaign","instantly_reply_to_email","instantly_update_lead_interest_status","intercom_assign_conversation_v2","intercom_attach_contact_to_company_v2","intercom_close_conversation_v2","intercom_create_company","intercom_create_company_v2","intercom_create_contact","intercom_create_contact_v2","intercom_create_event_v2","intercom_create_message","intercom_create_message_v2","intercom_create_note_v2","intercom_create_tag_v2","intercom_create_ticket","intercom_create_ticket_v2","intercom_delete_contact","intercom_delete_contact_v2","intercom_detach_contact_from_company_v2","intercom_get_company","intercom_get_company_v2","intercom_get_contact","intercom_get_contact_v2","intercom_get_conversation","intercom_get_conversation_v2","intercom_get_ticket","intercom_get_ticket_v2","intercom_list_admins_v2","intercom_list_companies","intercom_list_companies_v2","intercom_list_contacts","intercom_list_contacts_v2","intercom_list_conversations","intercom_list_conversations_v2","intercom_list_tags_v2","intercom_open_conversation_v2","intercom_reply_conversation","intercom_reply_conversation_v2","intercom_search_contacts","intercom_search_contacts_v2","intercom_search_conversations","intercom_search_conversations_v2","intercom_snooze_conversation_v2","intercom_tag_contact_v2","intercom_tag_conversation_v2","intercom_untag_contact_v2","intercom_update_contact","intercom_update_contact_v2","intercom_update_ticket_v2","jina_read_url","jina_search","jira_add_attachment","jira_add_comment","jira_add_watcher","jira_add_worklog","jira_assign_issue","jira_bulk_read","jira_create_issue_link","jira_delete_attachment","jira_delete_comment","jira_delete_issue","jira_delete_issue_link","jira_delete_worklog","jira_get_attachments","jira_get_comments","jira_get_fields","jira_get_project","jira_get_transitions","jira_get_users","jira_get_worklogs","jira_list_issue_types","jira_list_projects","jira_remove_watcher","jira_retrieve","jira_search_issues","jira_search_users","jira_transition_issue","jira_update","jira_update_comment","jira_update_worklog","jira_write","jotform_add_label_resources","jotform_clone_form","jotform_create_form","jotform_create_label","jotform_create_question","jotform_create_questions","jotform_create_report","jotform_create_submission","jotform_create_submissions","jotform_create_webhook","jotform_delete_form","jotform_delete_label","jotform_delete_question","jotform_delete_report","jotform_delete_submission","jotform_delete_webhook","jotform_get_form","jotform_get_form_properties","jotform_get_history","jotform_get_label","jotform_get_question","jotform_get_report","jotform_get_settings","jotform_get_submission","jotform_get_usage","jotform_get_user","jotform_list_form_files","jotform_list_form_reports","jotform_list_form_submissions","jotform_list_forms","jotform_list_label_resources","jotform_list_labels","jotform_list_questions","jotform_list_reports","jotform_list_submissions","jotform_list_subusers","jotform_list_webhooks","jotform_remove_label_resources","jotform_update_form_properties","jotform_update_label","jotform_update_question","jotform_update_settings","jotform_update_submission","jsm_add_comment","jsm_add_customer","jsm_add_organization","jsm_add_participants","jsm_answer_approval","jsm_attach_form","jsm_copy_forms","jsm_create_object","jsm_create_organization","jsm_create_request","jsm_delete_form","jsm_delete_object","jsm_externalise_form","jsm_get_approvals","jsm_get_comments","jsm_get_customers","jsm_get_form","jsm_get_form_answers","jsm_get_form_structure","jsm_get_form_templates","jsm_get_issue_forms","jsm_get_object","jsm_get_object_schema","jsm_get_object_type_attributes","jsm_get_organizations","jsm_get_participants","jsm_get_queues","jsm_get_request","jsm_get_request_type_fields","jsm_get_request_types","jsm_get_requests","jsm_get_service_desks","jsm_get_sla","jsm_get_transitions","jsm_internalise_form","jsm_list_object_schemas","jsm_list_object_types","jsm_reopen_form","jsm_save_form_answers","jsm_search_objects_aql","jsm_submit_form","jsm_transition_request","jsm_update_object","jupyter_copy_content","jupyter_create_file","jupyter_create_session","jupyter_delete_content","jupyter_delete_session","jupyter_get_content","jupyter_get_content_v2","jupyter_interrupt_kernel","jupyter_list_contents","jupyter_list_kernels","jupyter_list_kernelspecs","jupyter_list_sessions","jupyter_rename_content","jupyter_restart_kernel","jupyter_start_kernel","jupyter_stop_kernel","jupyter_upload_file","kalshi_amend_order","kalshi_amend_order_v2","kalshi_cancel_order","kalshi_cancel_order_v2","kalshi_create_order","kalshi_create_order_v2","kalshi_get_balance","kalshi_get_balance_v2","kalshi_get_candlesticks","kalshi_get_candlesticks_v2","kalshi_get_event","kalshi_get_event_candlesticks","kalshi_get_event_candlesticks_v2","kalshi_get_event_v2","kalshi_get_events","kalshi_get_events_v2","kalshi_get_exchange_announcements","kalshi_get_exchange_announcements_v2","kalshi_get_exchange_schedule","kalshi_get_exchange_schedule_v2","kalshi_get_exchange_status","kalshi_get_exchange_status_v2","kalshi_get_fills","kalshi_get_fills_v2","kalshi_get_market","kalshi_get_market_v2","kalshi_get_markets","kalshi_get_markets_v2","kalshi_get_order","kalshi_get_order_v2","kalshi_get_orderbook","kalshi_get_orderbook_v2","kalshi_get_orders","kalshi_get_orders_v2","kalshi_get_positions","kalshi_get_positions_v2","kalshi_get_series_by_ticker","kalshi_get_series_by_ticker_v2","kalshi_get_series_list","kalshi_get_series_list_v2","kalshi_get_settlements","kalshi_get_settlements_v2","kalshi_get_trades","kalshi_get_trades_v2","ketch_get_consent","ketch_get_subscriptions","ketch_invoke_right","ketch_set_consent","ketch_set_subscriptions","knowledge_create_document","knowledge_delete_chunk","knowledge_delete_document","knowledge_get_connector","knowledge_get_document","knowledge_list_chunks","knowledge_list_connectors","knowledge_list_documents","knowledge_list_tags","knowledge_search","knowledge_trigger_sync","knowledge_update_chunk","knowledge_upload_chunk","knowledge_upsert_document","lambda_add_permission","lambda_create_alias","lambda_create_event_source_mapping","lambda_create_function","lambda_create_function_url_config","lambda_delete_alias","lambda_delete_event_source_mapping","lambda_delete_function","lambda_delete_function_concurrency","lambda_delete_function_event_invoke_config","lambda_delete_function_url_config","lambda_delete_provisioned_concurrency_config","lambda_get_account_settings","lambda_get_alias","lambda_get_event_source_mapping","lambda_get_function","lambda_get_function_concurrency","lambda_get_function_configuration","lambda_get_function_event_invoke_config","lambda_get_function_recursion_config","lambda_get_function_url_config","lambda_get_layer_version","lambda_get_policy","lambda_get_provisioned_concurrency_config","lambda_get_runtime_management_config","lambda_invoke","lambda_list_aliases","lambda_list_event_source_mappings","lambda_list_function_event_invoke_configs","lambda_list_function_url_configs","lambda_list_functions","lambda_list_layer_versions","lambda_list_layers","lambda_list_provisioned_concurrency_configs","lambda_list_tags","lambda_list_versions_by_function","lambda_publish_version","lambda_put_function_concurrency","lambda_put_function_event_invoke_config","lambda_put_function_recursion_config","lambda_put_provisioned_concurrency_config","lambda_put_runtime_management_config","lambda_remove_permission","lambda_tag_resource","lambda_untag_resource","lambda_update_alias","lambda_update_event_source_mapping","lambda_update_function_code","lambda_update_function_configuration","lambda_update_function_url_config","langsmith_create_feedback","langsmith_create_run","langsmith_create_runs_batch","langsmith_get_run","langsmith_update_run","latex_compile","latex_get_package","latex_list_fonts","latex_search_packages","launchdarkly_create_flag","launchdarkly_delete_flag","launchdarkly_get_audit_log","launchdarkly_get_flag","launchdarkly_get_flag_status","launchdarkly_list_environments","launchdarkly_list_flags","launchdarkly_list_members","launchdarkly_list_projects","launchdarkly_list_segments","launchdarkly_toggle_flag","launchdarkly_update_flag","leadmagic_company_search","leadmagic_email_to_profile","leadmagic_find_email","leadmagic_find_mobile","leadmagic_get_credits","leadmagic_profile_search","leadmagic_profile_to_email","leadmagic_role_finder","leadmagic_validate_email","lemlist_get_activities","lemlist_get_lead","lemlist_send_email","linear_add_label_to_issue","linear_add_label_to_project","linear_archive_issue","linear_archive_label","linear_archive_project","linear_create_attachment","linear_create_comment","linear_create_customer","linear_create_customer_request","linear_create_customer_status","linear_create_customer_tier","linear_create_cycle","linear_create_favorite","linear_create_issue","linear_create_issue_relation","linear_create_label","linear_create_project","linear_create_project_label","linear_create_project_milestone","linear_create_project_status","linear_create_project_update","linear_create_workflow_state","linear_delete_attachment","linear_delete_comment","linear_delete_customer","linear_delete_customer_status","linear_delete_customer_tier","linear_delete_issue","linear_delete_issue_relation","linear_delete_project","linear_delete_project_label","linear_delete_project_milestone","linear_delete_project_status","linear_get_active_cycle","linear_get_customer","linear_get_cycle","linear_get_issue","linear_get_project","linear_get_viewer","linear_list_attachments","linear_list_comments","linear_list_customer_requests","linear_list_customer_statuses","linear_list_customer_tiers","linear_list_customers","linear_list_cycles","linear_list_favorites","linear_list_issue_relations","linear_list_labels","linear_list_notifications","linear_list_project_labels","linear_list_project_milestones","linear_list_project_statuses","linear_list_project_updates","linear_list_projects","linear_list_teams","linear_list_users","linear_list_workflow_states","linear_merge_customers","linear_read_issues","linear_remove_label_from_issue","linear_remove_label_from_project","linear_search_issues","linear_unarchive_issue","linear_update_attachment","linear_update_comment","linear_update_customer","linear_update_customer_request","linear_update_customer_status","linear_update_customer_tier","linear_update_issue","linear_update_label","linear_update_notification","linear_update_project","linear_update_project_label","linear_update_project_milestone","linear_update_project_status","linear_update_workflow_state","linkedin_get_profile","linkedin_share_post","linkup_search","linq_add_participant","linq_check_imessage","linq_check_rcs","linq_create_attachment","linq_create_chat","linq_create_contact_card","linq_create_webhook_subscription","linq_delete_attachment","linq_delete_message","linq_delete_webhook_subscription","linq_edit_message","linq_get_attachment","linq_get_chat","linq_get_contact_card","linq_get_message","linq_get_webhook_subscription","linq_leave_chat","linq_list_chats","linq_list_messages","linq_list_phone_numbers","linq_list_thread","linq_list_webhook_events","linq_list_webhook_subscriptions","linq_mark_chat_read","linq_react_to_message","linq_remove_participant","linq_send_message","linq_send_voice_memo","linq_share_contact_card","linq_start_typing","linq_stop_typing","linq_update_chat","linq_update_contact_card","linq_update_webhook_subscription","llm_chat","logfire_get_token_info","logfire_get_trace","logfire_query","logfire_search_records","logrocket_create_release","logrocket_get_audit_logs","logrocket_get_highlights","logrocket_identify_user","logrocket_list_exported_sessions","logrocket_request_highlights","logs_get","logs_get_execution","logs_get_run_details","logs_query","logs_query_runs","loops_check_contact_suppression","loops_create_contact","loops_create_contact_property","loops_delete_contact","loops_find_contact","loops_get_transactional_email","loops_list_contact_properties","loops_list_mailing_lists","loops_list_transactional_emails","loops_remove_contact_suppression","loops_send_event","loops_send_transactional_email","loops_update_contact","luma_add_guests","luma_cancel_event","luma_create_event","luma_get_event","luma_get_guest","luma_get_guests","luma_list_events","luma_lookup_event","luma_send_invites","luma_update_event","luma_update_guest_status","mailchimp_add_member","mailchimp_add_member_tags","mailchimp_add_or_update_member","mailchimp_add_segment_member","mailchimp_add_subscriber_to_automation","mailchimp_archive_member","mailchimp_create_audience","mailchimp_create_batch_operation","mailchimp_create_campaign","mailchimp_create_interest","mailchimp_create_interest_category","mailchimp_create_landing_page","mailchimp_create_merge_field","mailchimp_create_segment","mailchimp_create_template","mailchimp_delete_audience","mailchimp_delete_batch_operation","mailchimp_delete_campaign","mailchimp_delete_interest","mailchimp_delete_interest_category","mailchimp_delete_landing_page","mailchimp_delete_member","mailchimp_delete_merge_field","mailchimp_delete_segment","mailchimp_delete_template","mailchimp_get_audience","mailchimp_get_audiences","mailchimp_get_automation","mailchimp_get_automations","mailchimp_get_batch_operation","mailchimp_get_batch_operations","mailchimp_get_campaign","mailchimp_get_campaign_content","mailchimp_get_campaign_report","mailchimp_get_campaign_reports","mailchimp_get_campaigns","mailchimp_get_interest","mailchimp_get_interest_categories","mailchimp_get_interest_category","mailchimp_get_interests","mailchimp_get_landing_page","mailchimp_get_landing_pages","mailchimp_get_member","mailchimp_get_member_tags","mailchimp_get_members","mailchimp_get_merge_field","mailchimp_get_merge_fields","mailchimp_get_segment","mailchimp_get_segment_members","mailchimp_get_segments","mailchimp_get_template","mailchimp_get_templates","mailchimp_pause_automation","mailchimp_publish_landing_page","mailchimp_remove_member_tags","mailchimp_remove_segment_member","mailchimp_replicate_campaign","mailchimp_schedule_campaign","mailchimp_send_campaign","mailchimp_set_campaign_content","mailchimp_start_automation","mailchimp_unarchive_member","mailchimp_unpublish_landing_page","mailchimp_unschedule_campaign","mailchimp_update_audience","mailchimp_update_campaign","mailchimp_update_interest","mailchimp_update_interest_category","mailchimp_update_landing_page","mailchimp_update_member","mailchimp_update_merge_field","mailchimp_update_segment","mailchimp_update_template","mailgun_add_list_member","mailgun_create_mailing_list","mailgun_get_domain","mailgun_get_mailing_list","mailgun_get_message","mailgun_list_domains","mailgun_list_messages","mailgun_send_message","managed_agent_archive_session","managed_agent_create_session","managed_agent_delete_session","managed_agent_get_session","managed_agent_interrupt_session","managed_agent_list_events","managed_agent_respond_custom_tool","managed_agent_respond_tool_confirmation","managed_agent_run_session","managed_agent_send_message","managed_agent_update_session","manageengine_sdp_add_change_note","manageengine_sdp_add_problem_note","manageengine_sdp_add_request_note","manageengine_sdp_create_asset","manageengine_sdp_create_change","manageengine_sdp_create_problem","manageengine_sdp_create_request","manageengine_sdp_create_solution","manageengine_sdp_delete_asset","manageengine_sdp_delete_change","manageengine_sdp_delete_problem","manageengine_sdp_delete_request","manageengine_sdp_delete_solution","manageengine_sdp_get_asset","manageengine_sdp_get_change","manageengine_sdp_get_problem","manageengine_sdp_get_request","manageengine_sdp_get_solution","manageengine_sdp_list_assets","manageengine_sdp_list_change_notes","manageengine_sdp_list_changes","manageengine_sdp_list_problem_notes","manageengine_sdp_list_problems","manageengine_sdp_list_request_notes","manageengine_sdp_list_requests","manageengine_sdp_list_solutions","manageengine_sdp_update_asset","manageengine_sdp_update_change","manageengine_sdp_update_problem","manageengine_sdp_update_request","manageengine_sdp_update_solution","mcp_list_operations","mcp_run_operation","mem0_add_memories","mem0_get_memories","mem0_search_memories","memory_add","memory_delete","memory_get","memory_get_all","microsoft_ad_add_directory_role_member","microsoft_ad_add_group_member","microsoft_ad_add_user_app_role_assignment","microsoft_ad_assign_license","microsoft_ad_create_group","microsoft_ad_create_user","microsoft_ad_delete_group","microsoft_ad_delete_user","microsoft_ad_get_conditional_access_policy","microsoft_ad_get_device","microsoft_ad_get_group","microsoft_ad_get_user","microsoft_ad_list_authentication_methods","microsoft_ad_list_conditional_access_policies","microsoft_ad_list_devices","microsoft_ad_list_directory_audits","microsoft_ad_list_directory_role_members","microsoft_ad_list_directory_roles","microsoft_ad_list_group_members","microsoft_ad_list_groups","microsoft_ad_list_service_principal_app_role_assignments","microsoft_ad_list_service_principals","microsoft_ad_list_sign_ins","microsoft_ad_list_subscribed_skus","microsoft_ad_list_user_app_role_assignments","microsoft_ad_list_user_devices","microsoft_ad_list_user_licenses","microsoft_ad_list_users","microsoft_ad_remove_directory_role_member","microsoft_ad_remove_group_member","microsoft_ad_remove_user_app_role_assignment","microsoft_ad_reset_password","microsoft_ad_revoke_sign_in_sessions","microsoft_ad_set_password","microsoft_ad_update_group","microsoft_ad_update_user","microsoft_dataverse_associate","microsoft_dataverse_create_multiple","microsoft_dataverse_create_record","microsoft_dataverse_delete_record","microsoft_dataverse_disassociate","microsoft_dataverse_download_file","microsoft_dataverse_download_file_v2","microsoft_dataverse_execute_action","microsoft_dataverse_execute_function","microsoft_dataverse_fetchxml_query","microsoft_dataverse_get_entity_metadata","microsoft_dataverse_get_record","microsoft_dataverse_list_records","microsoft_dataverse_search","microsoft_dataverse_update_multiple","microsoft_dataverse_update_record","microsoft_dataverse_upload_file","microsoft_dataverse_upsert_record","microsoft_dataverse_whoami","microsoft_dynamics_365_close_case","microsoft_dynamics_365_close_opportunity","microsoft_dynamics_365_create_record","microsoft_dynamics_365_get_record","microsoft_dynamics_365_list_records","microsoft_dynamics_365_qualify_lead","microsoft_dynamics_365_search_records","microsoft_dynamics_365_update_record","microsoft_excel_clear_range","microsoft_excel_create_table","microsoft_excel_delete_worksheet","microsoft_excel_format_range","microsoft_excel_read","microsoft_excel_read_v2","microsoft_excel_sort_range","microsoft_excel_table_add","microsoft_excel_worksheet_add","microsoft_excel_write","microsoft_excel_write_v2","microsoft_planner_create_bucket","microsoft_planner_create_plan","microsoft_planner_create_task","microsoft_planner_delete_bucket","microsoft_planner_delete_plan","microsoft_planner_delete_task","microsoft_planner_get_plan_details","microsoft_planner_get_task_details","microsoft_planner_list_buckets","microsoft_planner_list_plans","microsoft_planner_read_bucket","microsoft_planner_read_plan","microsoft_planner_read_task","microsoft_planner_update_bucket","microsoft_planner_update_plan","microsoft_planner_update_plan_details","microsoft_planner_update_task","microsoft_planner_update_task_details","microsoft_teams_delete_channel_message","microsoft_teams_delete_chat_message","microsoft_teams_get_message","microsoft_teams_list_channel_members","microsoft_teams_list_channels","microsoft_teams_list_chat_members","microsoft_teams_list_chats","microsoft_teams_list_team_members","microsoft_teams_list_teams","microsoft_teams_read_channel","microsoft_teams_read_chat","microsoft_teams_reply_to_message","microsoft_teams_set_reaction","microsoft_teams_unset_reaction","microsoft_teams_update_channel_message","microsoft_teams_update_chat_message","microsoft_teams_write_channel","microsoft_teams_write_chat","microsoft_word_append","microsoft_word_create","microsoft_word_create_from_template","microsoft_word_export_pdf","microsoft_word_list","microsoft_word_read","microsoft_word_replace_text","microsoft_word_update","millionverifier_get_credits","millionverifier_verify_email","mintlify_create_agent_job","mintlify_create_assistant_message","mintlify_detect_ai_prose","mintlify_get_agent_job","mintlify_get_assistant_caller_stats","mintlify_get_assistant_conversations","mintlify_get_feedback","mintlify_get_feedback_by_page","mintlify_get_page_content","mintlify_get_searches","mintlify_get_update_status","mintlify_get_views","mintlify_get_visitors","mintlify_search","mintlify_send_agent_message","mintlify_trigger_automation","mintlify_trigger_preview","mintlify_trigger_update","mistral_parser","mistral_parser_v2","mistral_parser_v3","modal_call_function","modal_chat_completion","modal_list_models","monday_archive_item","monday_change_column_value","monday_create_board","monday_create_column","monday_create_group","monday_create_item","monday_create_subitem","monday_create_update","monday_delete_item","monday_duplicate_item","monday_get_board","monday_get_groups","monday_get_item","monday_get_items","monday_list_boards","monday_move_item_to_group","monday_search_items","monday_update_item","mongodb_delete","mongodb_execute","mongodb_insert","mongodb_introspect","mongodb_query","mongodb_update","mssql_delete","mssql_execute","mssql_insert","mssql_introspect","mssql_query","mssql_update","mysql_delete","mysql_execute","mysql_insert","mysql_introspect","mysql_query","mysql_update","neo4j_create","neo4j_delete","neo4j_execute","neo4j_introspect","neo4j_merge","neo4j_query","neo4j_update","netsuite_attach_record","netsuite_batch_create_records","netsuite_batch_delete_records","netsuite_batch_get_records","netsuite_batch_update_records","netsuite_batch_upsert_records","netsuite_create_record","netsuite_delete_record","netsuite_detach_record","netsuite_execute_action","netsuite_execute_dataset","netsuite_execute_suiteql","netsuite_get_async_result","netsuite_get_async_status","netsuite_get_governance_limits","netsuite_get_record","netsuite_get_record_form","netsuite_get_record_metadata","netsuite_get_select_options","netsuite_get_server_time","netsuite_get_subresource","netsuite_list_datasets","netsuite_list_record_types","netsuite_list_records","netsuite_transform_record","netsuite_update_record","netsuite_upsert_record","neverbounce_get_credits","neverbounce_verify_email","new_relic_create_deployment_event","new_relic_get_entity","new_relic_nrql_query","new_relic_search_entities","notion_add_database_row","notion_add_database_row_v2","notion_append_blocks","notion_append_blocks_v2","notion_create_comment","notion_create_comment_v2","notion_create_database","notion_create_database_v2","notion_create_page","notion_create_page_v2","notion_delete_block","notion_delete_block_v2","notion_list_comments","notion_list_comments_v2","notion_list_users","notion_list_users_v2","notion_query_database","notion_query_database_v2","notion_read","notion_read_database","notion_read_database_v2","notion_read_v2","notion_retrieve_block","notion_retrieve_block_children","notion_retrieve_block_children_v2","notion_retrieve_block_v2","notion_retrieve_user","notion_retrieve_user_v2","notion_search","notion_search_v2","notion_update_block","notion_update_block_v2","notion_update_page","notion_update_page_v2","notion_write","notion_write_v2","obsidian_append_active","obsidian_append_note","obsidian_append_periodic_note","obsidian_create_note","obsidian_delete_note","obsidian_execute_command","obsidian_get_active","obsidian_get_note","obsidian_get_periodic_note","obsidian_list_commands","obsidian_list_files","obsidian_open_file","obsidian_patch_active","obsidian_patch_note","obsidian_search","okta_activate_group_rule","okta_activate_user","okta_add_user_to_group","okta_assign_group_to_app","okta_assign_user_role","okta_assign_user_to_app","okta_clear_user_sessions","okta_create_group","okta_create_group_rule","okta_create_user","okta_deactivate_group_rule","okta_deactivate_user","okta_delete_group","okta_delete_group_rule","okta_delete_user","okta_enroll_factor","okta_get_app","okta_get_factor","okta_get_group","okta_get_group_rule","okta_get_logs","okta_get_session","okta_get_user","okta_list_app_groups","okta_list_app_users","okta_list_apps","okta_list_factors","okta_list_group_members","okta_list_group_rules","okta_list_groups","okta_list_user_roles","okta_list_users","okta_remove_group_from_app","okta_remove_user_from_app","okta_remove_user_from_group","okta_remove_user_role","okta_reset_all_factors","okta_reset_factor","okta_reset_password","okta_revoke_session","okta_suspend_user","okta_unsuspend_user","okta_update_group","okta_update_user","onedrive_copy","onedrive_create_folder","onedrive_create_share_link","onedrive_delete","onedrive_download","onedrive_get_drive_info","onedrive_get_item","onedrive_list","onedrive_move","onedrive_search","onedrive_upload","onepassword_create_item","onepassword_delete_item","onepassword_get_item","onepassword_get_item_file","onepassword_get_vault","onepassword_list_items","onepassword_list_vaults","onepassword_replace_item","onepassword_resolve_secret","onepassword_update_item","openai_embeddings","openai_image","otter_create_conversation","otter_get_conversation","otter_get_conversation_audio","otter_get_workspace","otter_list_channel_members","otter_list_channels","otter_list_conversations","otter_list_workspace_conversations","outlook_calendar_create_event","outlook_calendar_delete_event","outlook_calendar_get_event","outlook_calendar_list_events","outlook_calendar_respond","outlook_calendar_update_event","outlook_copy","outlook_create_folder","outlook_delete","outlook_draft","outlook_forward","outlook_get_attachment","outlook_list_attachments","outlook_list_folders","outlook_mark_read","outlook_mark_unread","outlook_move","outlook_read","outlook_reply","outlook_reply_all","outlook_search","outlook_send","outlook_update_message","pagerduty_add_note","pagerduty_create_incident","pagerduty_get_incident","pagerduty_get_service","pagerduty_list_escalation_policies","pagerduty_list_incident_alerts","pagerduty_list_incidents","pagerduty_list_oncalls","pagerduty_list_schedules","pagerduty_list_services","pagerduty_list_users","pagerduty_merge_incidents","pagerduty_send_event","pagerduty_snooze_incident","pagerduty_update_incident","parallel_deep_research","parallel_extract","parallel_search","pdl_autocomplete","pdl_bulk_company_enrich","pdl_bulk_person_enrich","pdl_clean_company","pdl_clean_location","pdl_clean_school","pdl_company_enrich","pdl_company_search","pdl_person_enrich","pdl_person_identify","pdl_person_search","perplexity_chat","perplexity_search","persona_approve_inquiry","persona_create_account","persona_create_inquiry","persona_create_report","persona_decline_inquiry","persona_expire_inquiry","persona_generate_inquiry_link","persona_get_account","persona_get_case","persona_get_document","persona_get_inquiry","persona_get_report","persona_get_verification","persona_import_accounts","persona_list_accounts","persona_list_cases","persona_list_inquiries","persona_list_inquiry_templates","persona_list_reports","persona_mark_inquiry_for_review","persona_print_inquiry_pdf","persona_redact_account","persona_redact_inquiry","persona_resume_inquiry","persona_update_account","persona_update_inquiry","pinecone_delete_vectors","pinecone_describe_index","pinecone_describe_index_stats","pinecone_fetch","pinecone_generate_embeddings","pinecone_list_indexes","pinecone_list_vector_ids","pinecone_search_text","pinecone_search_vector","pinecone_update_vector","pinecone_upsert_text","pipedrive_create_activity","pipedrive_create_deal","pipedrive_create_lead","pipedrive_create_project","pipedrive_delete_lead","pipedrive_get_activities","pipedrive_get_all_deals","pipedrive_get_deal","pipedrive_get_files","pipedrive_get_leads","pipedrive_get_mail_messages","pipedrive_get_mail_thread","pipedrive_get_pipeline_deals","pipedrive_get_pipelines","pipedrive_get_projects","pipedrive_update_activity","pipedrive_update_deal","pipedrive_update_lead","pitchbook_company_active_investors","pitchbook_company_bio","pitchbook_company_deal_service_providers","pitchbook_company_deals","pitchbook_company_financials","pitchbook_company_general_service_providers","pitchbook_company_industries","pitchbook_company_investors","pitchbook_company_most_recent_debt_financing","pitchbook_company_most_recent_financials","pitchbook_company_most_recent_financing","pitchbook_company_search","pitchbook_company_similar_companies","pitchbook_company_social_analytics","pitchbook_company_updates","pitchbook_company_vc_exit_predictions","pitchbook_contracts_history","pitchbook_cost_of_calls","pitchbook_credit_history","pitchbook_credit_news","pitchbook_credit_news_bulk","pitchbook_credit_news_most_recent","pitchbook_credit_news_search","pitchbook_deal_bio","pitchbook_deal_cap_table_history","pitchbook_deal_debt_lenders","pitchbook_deal_detailed","pitchbook_deal_investors","pitchbook_deal_multiples","pitchbook_deal_search","pitchbook_deal_service_providers","pitchbook_deal_stock_info","pitchbook_deal_tranche_info","pitchbook_deal_updates","pitchbook_deal_valuation","pitchbook_entity_affiliates","pitchbook_entity_locations","pitchbook_entity_news","pitchbook_entity_people","pitchbook_entity_updates","pitchbook_fund_active_investments","pitchbook_fund_benchmark","pitchbook_fund_bio","pitchbook_fund_cash_flows","pitchbook_fund_commitments","pitchbook_fund_investment_preferences","pitchbook_fund_investments","pitchbook_fund_performance","pitchbook_fund_search","pitchbook_fund_team","pitchbook_fund_updates","pitchbook_investor_active_investments","pitchbook_investor_bio","pitchbook_investor_board_seats","pitchbook_investor_deal_service_providers","pitchbook_investor_funds","pitchbook_investor_general_service_providers","pitchbook_investor_investments","pitchbook_investor_last_closed_fund","pitchbook_investor_preferences","pitchbook_investor_search","pitchbook_investor_updates","pitchbook_limited_partner_actual_allocations","pitchbook_limited_partner_bio","pitchbook_limited_partner_commitment_aggregates","pitchbook_limited_partner_commitment_preferences","pitchbook_limited_partner_commitments_detailed","pitchbook_limited_partner_search","pitchbook_limited_partner_service_providers","pitchbook_limited_partner_target_allocations","pitchbook_limited_partner_updates","pitchbook_lookup_table_structure","pitchbook_lookup_tables","pitchbook_patent_detailed","pitchbook_patent_search","pitchbook_people_search","pitchbook_person_bio","pitchbook_person_contact","pitchbook_person_education_work","pitchbook_sandbox_entities","pitchbook_search","pitchbook_service_provider_bio","pitchbook_service_provider_search","pitchbook_service_provider_updates","pitchbook_serviced_companies","pitchbook_serviced_deals","pitchbook_serviced_funds","pitchbook_serviced_investors","pitchbook_serviced_limited_partners","pitchbook_shared_search","pitchbook_usage_report","planetscale_close_deploy_request","planetscale_create_backup","planetscale_create_branch","planetscale_create_deploy_request","planetscale_delete_branch","planetscale_get_backup","planetscale_get_branch","planetscale_get_database","planetscale_get_deploy_request","planetscale_list_backups","planetscale_list_branches","planetscale_list_databases","planetscale_list_deploy_requests","planetscale_queue_deploy_request","planetscale_review_deploy_request","polymarket_get_activity","polymarket_get_event","polymarket_get_events","polymarket_get_holders","polymarket_get_last_trade_price","polymarket_get_leaderboard","polymarket_get_market","polymarket_get_markets","polymarket_get_midpoint","polymarket_get_orderbook","polymarket_get_positions","polymarket_get_price","polymarket_get_price_history","polymarket_get_series","polymarket_get_series_by_id","polymarket_get_spread","polymarket_get_tags","polymarket_get_tick_size","polymarket_get_trades","polymarket_search","postgresql_delete","postgresql_execute","postgresql_insert","postgresql_introspect","postgresql_query","postgresql_update","posthog_batch_events","posthog_capture_event","posthog_create_annotation","posthog_create_cohort","posthog_create_dashboard","posthog_create_experiment","posthog_create_feature_flag","posthog_create_insight","posthog_create_survey","posthog_delete_feature_flag","posthog_delete_person","posthog_delete_survey","posthog_evaluate_flags","posthog_get_cohort","posthog_get_dashboard","posthog_get_event_definition","posthog_get_experiment","posthog_get_feature_flag","posthog_get_insight","posthog_get_organization","posthog_get_person","posthog_get_project","posthog_get_property_definition","posthog_get_session_recording","posthog_get_survey","posthog_list_actions","posthog_list_annotations","posthog_list_cohorts","posthog_list_dashboards","posthog_list_event_definitions","posthog_list_experiments","posthog_list_feature_flags","posthog_list_insights","posthog_list_organizations","posthog_list_persons","posthog_list_projects","posthog_list_property_definitions","posthog_list_recording_playlists","posthog_list_session_recordings","posthog_list_surveys","posthog_query","posthog_update_cohort","posthog_update_event_definition","posthog_update_experiment","posthog_update_feature_flag","posthog_update_insight","posthog_update_property_definition","posthog_update_survey","powerbi_execute_query","powerbi_get_dataset","powerbi_get_refresh_history","powerbi_get_report","powerbi_list_datasets","powerbi_list_reports","powerbi_list_workspaces","powerbi_refresh_dataset","profound_bot_logs","profound_bots_report","profound_category_assets","profound_category_personas","profound_category_prompts","profound_category_tags","profound_category_topics","profound_citation_prompts","profound_citations_report","profound_list_assets","profound_list_categories","profound_list_domains","profound_list_models","profound_list_optimizations","profound_list_personas","profound_list_regions","profound_optimization_analysis","profound_prompt_answers","profound_prompt_volume","profound_query_fanouts","profound_raw_logs","profound_referrals_report","profound_sentiment_report","profound_visibility_report","prospeo_account_information","prospeo_bulk_enrich_company","prospeo_bulk_enrich_person","prospeo_enrich_company","prospeo_enrich_person","prospeo_search_company","prospeo_search_person","prospeo_search_suggestions","pulse_parser","pulse_parser_v2","qdrant_fetch_points","qdrant_search_vector","qdrant_upsert_points","quartr_get_audio","quartr_get_company","quartr_get_event","quartr_get_event_summary","quartr_get_report","quartr_get_slide_deck","quartr_get_transcript","quartr_list_audio","quartr_list_companies","quartr_list_document_types","quartr_list_documents","quartr_list_event_types","quartr_list_events","quartr_list_live_events","quartr_list_reports","quartr_list_slide_decks","quartr_list_transcripts","quickbooks_add_attachment","quickbooks_create_bill","quickbooks_create_bill_payment","quickbooks_create_credit_memo","quickbooks_create_customer","quickbooks_create_customer_payment","quickbooks_create_deposit","quickbooks_create_employee","quickbooks_create_estimate","quickbooks_create_invoice","quickbooks_create_item","quickbooks_create_journal_entry","quickbooks_create_purchase","quickbooks_create_purchase_order","quickbooks_create_refund_receipt","quickbooks_create_sales_receipt","quickbooks_create_vendor","quickbooks_create_vendor_credit","quickbooks_download_attachment","quickbooks_download_transaction_pdf","quickbooks_email_transaction","quickbooks_get_company_info","quickbooks_read_accounting_transactions","quickbooks_read_attachments","quickbooks_read_master_data","quickbooks_read_purchasing_transactions","quickbooks_read_sales_transactions","quickbooks_run_financial_report","quickbooks_update_bill","quickbooks_update_bill_payment","quickbooks_update_credit_memo","quickbooks_update_customer","quickbooks_update_customer_payment","quickbooks_update_deposit","quickbooks_update_employee","quickbooks_update_estimate","quickbooks_update_invoice","quickbooks_update_item","quickbooks_update_journal_entry","quickbooks_update_purchase","quickbooks_update_purchase_order","quickbooks_update_refund_receipt","quickbooks_update_sales_receipt","quickbooks_update_vendor","quickbooks_update_vendor_credit","quickbooks_void_bill_payment","quickbooks_void_customer_payment","quickbooks_void_invoice","quickbooks_void_sales_receipt","quiver_image_to_svg","quiver_image_to_svg_v2","quiver_list_models","quiver_text_to_svg","quiver_text_to_svg_v2","rabbitmq_create_binding","rabbitmq_create_exchange","rabbitmq_create_policy","rabbitmq_create_queue","rabbitmq_delete_binding","rabbitmq_delete_exchange","rabbitmq_delete_policy","rabbitmq_delete_queue","rabbitmq_get_exchange","rabbitmq_get_messages","rabbitmq_get_overview","rabbitmq_get_queue","rabbitmq_health_check","rabbitmq_list_bindings","rabbitmq_list_channels","rabbitmq_list_connections","rabbitmq_list_consumers","rabbitmq_list_exchange_bindings","rabbitmq_list_exchanges","rabbitmq_list_nodes","rabbitmq_list_policies","rabbitmq_list_queues","rabbitmq_list_vhosts","rabbitmq_publish_message","rabbitmq_purge_queue","railway_create_environment","railway_create_project","railway_create_service","railway_delete_environment","railway_delete_project","railway_delete_service","railway_delete_variable","railway_deploy_service","railway_get_deployment","railway_get_deployment_logs","railway_get_project","railway_list_deployments","railway_list_project_members","railway_list_projects","railway_list_variables","railway_restart_deployment","railway_rollback_deployment","railway_transfer_project","railway_update_project","railway_upsert_variable","rb2b_credit_check","rb2b_email_to_activity","rb2b_hem_to_best_linkedin","rb2b_hem_to_business_profile","rb2b_hem_to_linkedin","rb2b_hem_to_maid","rb2b_ip_to_company","rb2b_ip_to_hem","rb2b_ip_to_maid","rb2b_linkedin_slug_search","rb2b_linkedin_to_best_personal_email","rb2b_linkedin_to_business_profile","rb2b_linkedin_to_hashed_emails","rb2b_linkedin_to_mobile_phone","rb2b_linkedin_to_personal_email","rds_delete","rds_execute","rds_insert","rds_introspect","rds_query","rds_update","reddit_delete","reddit_edit","reddit_get_comments","reddit_get_controversial","reddit_get_info","reddit_get_me","reddit_get_messages","reddit_get_posts","reddit_get_saved","reddit_get_subreddit_info","reddit_get_subreddit_rules","reddit_get_user","reddit_get_user_comments","reddit_get_user_posts","reddit_hide","reddit_hot_posts","reddit_list_my_subreddits","reddit_lock","reddit_mark_all_read","reddit_mark_read","reddit_marknsfw","reddit_mod_approve","reddit_mod_distinguish","reddit_mod_remove","reddit_mod_sticky","reddit_reply","reddit_report","reddit_save","reddit_search","reddit_search_subreddits","reddit_send_message","reddit_submit_post","reddit_subscribe","reddit_unhide","reddit_unlock","reddit_unmarknsfw","reddit_unsave","reddit_vote","redis_command","redis_delete","redis_exists","redis_expire","redis_get","redis_hdel","redis_hget","redis_hgetall","redis_hset","redis_incr","redis_incrby","redis_keys","redis_llen","redis_lpop","redis_lpush","redis_lrange","redis_persist","redis_rpop","redis_rpush","redis_set","redis_setnx","redis_ttl","reducto_parser","reducto_parser_v2","resend_cancel_email","resend_create_audience","resend_create_broadcast","resend_create_contact","resend_delete_audience","resend_delete_contact","resend_get_audience","resend_get_broadcast","resend_get_contact","resend_get_email","resend_list_audiences","resend_list_contacts","resend_list_domains","resend_send","resend_send_broadcast","resend_update_contact","revenuecat_create_purchase","revenuecat_defer_google_subscription","revenuecat_delete_customer","revenuecat_get_customer","revenuecat_grant_entitlement","revenuecat_list_offerings","revenuecat_refund_google_subscription","revenuecat_revoke_entitlement","revenuecat_revoke_google_subscription","revenuecat_update_subscriber_attributes","rippling_bulk_create_custom_object_records","rippling_bulk_delete_custom_object_records","rippling_bulk_update_custom_object_records","rippling_create_business_partner","rippling_create_business_partner_group","rippling_create_custom_app","rippling_create_custom_object","rippling_create_custom_object_field","rippling_create_custom_object_record","rippling_create_custom_page","rippling_create_custom_setting","rippling_create_department","rippling_create_draft_hires","rippling_create_object_category","rippling_create_title","rippling_create_work_location","rippling_delete_business_partner","rippling_delete_business_partner_group","rippling_delete_custom_app","rippling_delete_custom_object","rippling_delete_custom_object_field","rippling_delete_custom_object_record","rippling_delete_custom_page","rippling_delete_custom_setting","rippling_delete_object_category","rippling_delete_title","rippling_delete_work_location","rippling_get_business_partner","rippling_get_business_partner_group","rippling_get_current_user","rippling_get_custom_app","rippling_get_custom_object","rippling_get_custom_object_field","rippling_get_custom_object_record","rippling_get_custom_object_record_by_external_id","rippling_get_custom_page","rippling_get_custom_setting","rippling_get_department","rippling_get_employment_type","rippling_get_job_function","rippling_get_object_category","rippling_get_report_run","rippling_get_supergroup","rippling_get_team","rippling_get_title","rippling_get_user","rippling_get_work_location","rippling_get_worker","rippling_list_business_partner_groups","rippling_list_business_partners","rippling_list_companies","rippling_list_custom_apps","rippling_list_custom_fields","rippling_list_custom_object_fields","rippling_list_custom_object_records","rippling_list_custom_objects","rippling_list_custom_pages","rippling_list_custom_settings","rippling_list_departments","rippling_list_employment_types","rippling_list_entitlements","rippling_list_job_functions","rippling_list_object_categories","rippling_list_supergroup_exclusion_members","rippling_list_supergroup_inclusion_members","rippling_list_supergroup_members","rippling_list_supergroups","rippling_list_teams","rippling_list_titles","rippling_list_users","rippling_list_work_locations","rippling_list_workers","rippling_query_custom_object_records","rippling_trigger_report_run","rippling_update_custom_app","rippling_update_custom_object","rippling_update_custom_object_field","rippling_update_custom_object_record","rippling_update_custom_page","rippling_update_custom_setting","rippling_update_department","rippling_update_object_category","rippling_update_supergroup_exclusion_members","rippling_update_supergroup_inclusion_members","rippling_update_title","rippling_update_work_location","rocketlane_add_field_option","rocketlane_add_project_members","rocketlane_add_task_assignees","rocketlane_add_task_dependencies","rocketlane_add_task_followers","rocketlane_archive_project","rocketlane_assign_placeholders","rocketlane_create_field","rocketlane_create_phase","rocketlane_create_project","rocketlane_create_space","rocketlane_create_space_document","rocketlane_create_task","rocketlane_create_time_entry","rocketlane_create_time_off","rocketlane_delete_field","rocketlane_delete_phase","rocketlane_delete_project","rocketlane_delete_space","rocketlane_delete_space_document","rocketlane_delete_task","rocketlane_delete_time_entry","rocketlane_delete_time_off","rocketlane_get_field","rocketlane_get_invoice","rocketlane_get_invoice_line_items","rocketlane_get_invoice_payments","rocketlane_get_phase","rocketlane_get_project","rocketlane_get_space","rocketlane_get_space_document","rocketlane_get_task","rocketlane_get_time_entry","rocketlane_get_time_off","rocketlane_get_user","rocketlane_import_template","rocketlane_list_fields","rocketlane_list_invoices","rocketlane_list_phases","rocketlane_list_placeholders","rocketlane_list_projects","rocketlane_list_resource_allocations","rocketlane_list_space_documents","rocketlane_list_spaces","rocketlane_list_tasks","rocketlane_list_time_entries","rocketlane_list_time_entry_categories","rocketlane_list_time_offs","rocketlane_list_users","rocketlane_move_task_to_phase","rocketlane_remove_project_members","rocketlane_remove_task_assignees","rocketlane_remove_task_dependencies","rocketlane_remove_task_followers","rocketlane_search_time_entries","rocketlane_unassign_placeholders","rocketlane_update_field","rocketlane_update_field_option","rocketlane_update_phase","rocketlane_update_project","rocketlane_update_space","rocketlane_update_space_document","rocketlane_update_task","rocketlane_update_time_entry","rootly_acknowledge_alert","rootly_add_incident_event","rootly_add_subscribers","rootly_assign_incident_role","rootly_create_action_item","rootly_create_alert","rootly_create_incident","rootly_create_status_page_event","rootly_delete_action_item","rootly_delete_incident","rootly_escalate_alert","rootly_get_alert","rootly_get_incident","rootly_list_action_items","rootly_list_alerts","rootly_list_causes","rootly_list_environments","rootly_list_escalation_policies","rootly_list_functionalities","rootly_list_incident_events","rootly_list_incident_roles","rootly_list_incident_types","rootly_list_incidents","rootly_list_on_calls","rootly_list_playbooks","rootly_list_retrospectives","rootly_list_schedules","rootly_list_services","rootly_list_severities","rootly_list_teams","rootly_list_users","rootly_mitigate_incident","rootly_remove_subscribers","rootly_resolve_alert","rootly_resolve_incident","rootly_run_workflow","rootly_snooze_alert","rootly_unassign_incident_role","rootly_update_action_item","rootly_update_alert","rootly_update_incident","s3_copy_object","s3_create_bucket","s3_delete_bucket","s3_delete_object","s3_delete_objects","s3_get_object","s3_head_object","s3_list_buckets","s3_list_objects","s3_presigned_url","s3_put_object","sailpoint_approve_access_request","sailpoint_cancel_access_request","sailpoint_decide_certification_review_items","sailpoint_get_access_profile","sailpoint_get_access_profile_entitlements","sailpoint_get_access_request_config","sailpoint_get_access_request_status","sailpoint_get_account","sailpoint_get_account_activity","sailpoint_get_account_entitlements","sailpoint_get_account_selections","sailpoint_get_campaign","sailpoint_get_certification","sailpoint_get_entitlement","sailpoint_get_entitlement_request_config","sailpoint_get_identity","sailpoint_get_role","sailpoint_get_role_entitlements","sailpoint_get_source","sailpoint_get_task_status","sailpoint_list_access_profiles","sailpoint_list_account_activities","sailpoint_list_accounts","sailpoint_list_campaigns","sailpoint_list_certification_review_items","sailpoint_list_certifications","sailpoint_list_entitlements","sailpoint_list_identities","sailpoint_list_identity_entitlements","sailpoint_list_pending_access_request_approvals","sailpoint_list_roles","sailpoint_list_sources","sailpoint_load_accounts","sailpoint_load_entitlements","sailpoint_reject_access_request","sailpoint_request_access","sailpoint_search","sailpoint_search_aggregate","sailpoint_search_count","sailpoint_sign_off_certification","salesforce_create_account","salesforce_create_case","salesforce_create_contact","salesforce_create_custom_field","salesforce_create_custom_object","salesforce_create_lead","salesforce_create_opportunity","salesforce_create_task","salesforce_delete_account","salesforce_delete_case","salesforce_delete_contact","salesforce_delete_custom_field","salesforce_delete_lead","salesforce_delete_opportunity","salesforce_delete_task","salesforce_describe_object","salesforce_get_accounts","salesforce_get_cases","salesforce_get_contacts","salesforce_get_dashboard","salesforce_get_leads","salesforce_get_opportunities","salesforce_get_report","salesforce_get_tasks","salesforce_list_dashboards","salesforce_list_objects","salesforce_list_report_types","salesforce_list_reports","salesforce_query","salesforce_query_more","salesforce_refresh_dashboard","salesforce_run_report","salesforce_tooling_query","salesforce_update_account","salesforce_update_case","salesforce_update_contact","salesforce_update_custom_field","salesforce_update_lead","salesforce_update_opportunity","salesforce_update_task","sap_concur_approve_expense_report","sap_concur_associate_attendees","sap_concur_create_cash_advance","sap_concur_create_expected_expense","sap_concur_create_expense_report","sap_concur_create_list_item","sap_concur_create_purchase_request","sap_concur_create_quick_expense","sap_concur_create_quick_expense_with_image","sap_concur_create_report_comment","sap_concur_create_travel_request","sap_concur_create_user","sap_concur_delete_expected_expense","sap_concur_delete_expense","sap_concur_delete_expense_report","sap_concur_delete_list_item","sap_concur_delete_travel_request","sap_concur_delete_user","sap_concur_get_allocation","sap_concur_get_budget","sap_concur_get_cash_advance","sap_concur_get_expected_expense","sap_concur_get_expense","sap_concur_get_expense_report","sap_concur_get_itemizations","sap_concur_get_itinerary","sap_concur_get_list","sap_concur_get_list_item","sap_concur_get_purchase_request","sap_concur_get_receipt","sap_concur_get_receipt_status","sap_concur_get_request_cash_advance","sap_concur_get_travel_profile","sap_concur_get_travel_request","sap_concur_get_user","sap_concur_issue_cash_advance","sap_concur_list_allocations","sap_concur_list_attendee_associations","sap_concur_list_budget_categories","sap_concur_list_budgets","sap_concur_list_exceptions","sap_concur_list_expected_expenses","sap_concur_list_expense_reports","sap_concur_list_expenses","sap_concur_list_itineraries","sap_concur_list_list_items","sap_concur_list_lists","sap_concur_list_receipts","sap_concur_list_report_comments","sap_concur_list_reports_to_approve","sap_concur_list_travel_profiles_summary","sap_concur_list_travel_request_comments","sap_concur_list_travel_requests","sap_concur_list_users","sap_concur_move_travel_request","sap_concur_recall_expense_report","sap_concur_remove_all_attendees","sap_concur_search_locations","sap_concur_search_users","sap_concur_send_back_expense_report","sap_concur_submit_expense_report","sap_concur_update_allocation","sap_concur_update_expected_expense","sap_concur_update_expense","sap_concur_update_expense_report","sap_concur_update_list_item","sap_concur_update_travel_request","sap_concur_update_user","sap_concur_upload_exchange_rates","sap_concur_upload_receipt_image","sap_s4hana_create_business_partner","sap_s4hana_create_purchase_order","sap_s4hana_create_purchase_requisition","sap_s4hana_create_sales_order","sap_s4hana_delete_sales_order","sap_s4hana_get_billing_document","sap_s4hana_get_business_partner","sap_s4hana_get_customer","sap_s4hana_get_inbound_delivery","sap_s4hana_get_material_document","sap_s4hana_get_outbound_delivery","sap_s4hana_get_product","sap_s4hana_get_purchase_order","sap_s4hana_get_purchase_requisition","sap_s4hana_get_sales_order","sap_s4hana_get_supplier","sap_s4hana_get_supplier_invoice","sap_s4hana_list_billing_documents","sap_s4hana_list_business_partners","sap_s4hana_list_customers","sap_s4hana_list_inbound_deliveries","sap_s4hana_list_material_documents","sap_s4hana_list_material_stock","sap_s4hana_list_outbound_deliveries","sap_s4hana_list_products","sap_s4hana_list_purchase_orders","sap_s4hana_list_purchase_requisitions","sap_s4hana_list_sales_orders","sap_s4hana_list_supplier_invoices","sap_s4hana_list_suppliers","sap_s4hana_odata_query","sap_s4hana_update_business_partner","sap_s4hana_update_customer","sap_s4hana_update_product","sap_s4hana_update_purchase_order","sap_s4hana_update_purchase_requisition","sap_s4hana_update_sales_order","sap_s4hana_update_supplier","search_tool","secrets_manager_create_secret","secrets_manager_delete_secret","secrets_manager_describe_secret","secrets_manager_get_secret","secrets_manager_list_secrets","secrets_manager_restore_secret","secrets_manager_rotate_secret","secrets_manager_tag_resource","secrets_manager_untag_resource","secrets_manager_update_secret","semrush_backlinks","semrush_backlinks_anchors","semrush_backlinks_competitors","semrush_backlinks_geo_distribution","semrush_backlinks_indexed_pages","semrush_backlinks_overview","semrush_backlinks_tld_distribution","semrush_batch_keyword_overview","semrush_broad_match_keywords","semrush_domain_ad_copies","semrush_domain_ad_history","semrush_domain_organic_competitors","semrush_domain_organic_keywords","semrush_domain_overview","semrush_domain_overview_all","semrush_domain_overview_history","semrush_domain_paid_competitors","semrush_domain_paid_keywords","semrush_domain_pla_copies","semrush_domain_pla_keywords","semrush_domain_vs_domain","semrush_keyword_ad_history","semrush_keyword_difficulty","semrush_keyword_overview","semrush_keyword_overview_all","semrush_keyword_questions","semrush_organic_results","semrush_paid_results","semrush_referring_domains","semrush_referring_ips","semrush_related_keywords","semrush_subdomain_ad_copies","semrush_subdomain_organic_keywords","semrush_subdomain_overview","semrush_subdomain_overview_all","semrush_subdomain_overview_history","semrush_subdomain_paid_keywords","semrush_top_domains","semrush_url_organic_keywords","semrush_url_overview","semrush_url_overview_all","semrush_url_overview_history","semrush_url_paid_keywords","semrush_winners_and_losers","sendblue_evaluate_service","sendblue_get_message","sendblue_send_group_message","sendblue_send_message","sendblue_send_typing_indicator","sendgrid_add_contact","sendgrid_add_contacts_to_list","sendgrid_create_list","sendgrid_create_template","sendgrid_create_template_version","sendgrid_delete_contacts","sendgrid_delete_list","sendgrid_delete_template","sendgrid_get_contact","sendgrid_get_list","sendgrid_get_template","sendgrid_list_all_lists","sendgrid_list_templates","sendgrid_remove_contacts_from_list","sendgrid_search_contacts","sendgrid_send_mail","sentry_events_get","sentry_events_list","sentry_issues_get","sentry_issues_list","sentry_issues_update","sentry_projects_create","sentry_projects_get","sentry_projects_list","sentry_projects_update","sentry_releases_create","sentry_releases_deploy","sentry_releases_list","sentry_teams_list","serper_search","servicenow_add_incident_comment","servicenow_aggregate","servicenow_close_incident","servicenow_create_change_request","servicenow_create_incident","servicenow_create_record","servicenow_delete_record","servicenow_download_attachment","servicenow_download_attachment_v2","servicenow_find_user","servicenow_get_change_next_states","servicenow_get_change_request","servicenow_get_ci","servicenow_get_incident","servicenow_get_knowledge_article","servicenow_get_requested_item","servicenow_list_approvals","servicenow_list_attachments","servicenow_list_catalog_items","servicenow_list_change_requests","servicenow_list_change_tasks","servicenow_list_ci_relationships","servicenow_list_group_members","servicenow_list_incidents","servicenow_list_requested_items","servicenow_order_catalog_item","servicenow_read_record","servicenow_resolve_incident","servicenow_search_cis","servicenow_search_knowledge","servicenow_update_approval","servicenow_update_change_request","servicenow_update_change_state","servicenow_update_incident","servicenow_update_record","servicenow_upload_attachment","ses_create_configuration_set","ses_create_email_identity","ses_create_template","ses_delete_email_identity","ses_delete_suppressed_destination","ses_delete_template","ses_get_account","ses_get_email_identity","ses_get_suppressed_destination","ses_get_template","ses_list_identities","ses_list_suppressed_destinations","ses_list_templates","ses_put_suppressed_destination","ses_send_bulk_email","ses_send_custom_verification_email","ses_send_email","ses_send_templated_email","ses_update_template","sftp_delete","sftp_download","sftp_download_v2","sftp_list","sftp_mkdir","sftp_upload","sharepoint_add_list_items","sharepoint_create_list","sharepoint_create_page","sharepoint_delete_file","sharepoint_delete_list_item","sharepoint_delete_page","sharepoint_download_file","sharepoint_get_drive_item","sharepoint_get_list","sharepoint_get_list_item","sharepoint_list_sites","sharepoint_publish_page","sharepoint_read_page","sharepoint_update_list","sharepoint_update_page","sharepoint_upload_file","shopify_adjust_inventory","shopify_cancel_order","shopify_create_customer","shopify_create_fulfillment","shopify_create_product","shopify_delete_customer","shopify_delete_product","shopify_get_collection","shopify_get_customer","shopify_get_inventory_level","shopify_get_order","shopify_get_product","shopify_list_collections","shopify_list_customers","shopify_list_inventory_items","shopify_list_locations","shopify_list_orders","shopify_list_products","shopify_update_customer","shopify_update_order","shopify_update_product","similarweb_bounce_rate","similarweb_page_views","similarweb_pages_per_visit","similarweb_traffic_visits","similarweb_visit_duration","similarweb_website_overview","sixtyfour_enrich_company","sixtyfour_enrich_lead","sixtyfour_find_email","sixtyfour_find_phone","slack_add_bookmark","slack_add_reaction","slack_archive_conversation","slack_canvas","slack_close_conversation","slack_create_channel_canvas","slack_create_conversation","slack_create_user_group","slack_delete_canvas","slack_delete_file","slack_delete_message","slack_delete_scheduled_message","slack_disable_user_group","slack_download","slack_edit_bookmark","slack_edit_canvas","slack_enable_user_group","slack_ephemeral_message","slack_get_canvas","slack_get_channel_history","slack_get_channel_info","slack_get_dnd_info","slack_get_file_info","slack_get_message","slack_get_permalink","slack_get_reactions","slack_get_team_dnd_info","slack_get_team_info","slack_get_team_profile","slack_get_thread","slack_get_thread_replies","slack_get_user","slack_get_user_presence","slack_get_user_profile","slack_invite_to_conversation","slack_join_conversation","slack_kick_conversation","slack_leave_conversation","slack_list_bookmarks","slack_list_canvases","slack_list_channels","slack_list_emoji","slack_list_files","slack_list_members","slack_list_pins","slack_list_reactions","slack_list_scheduled_messages","slack_list_user_conversations","slack_list_user_group_members","slack_list_user_groups","slack_list_users","slack_lists_access_delete","slack_lists_access_set","slack_lists_create","slack_lists_download_get","slack_lists_download_start","slack_lists_items_create","slack_lists_items_delete","slack_lists_items_delete_multiple","slack_lists_items_info","slack_lists_items_list","slack_lists_items_update","slack_lists_update","slack_lookup_canvas_sections","slack_lookup_user_by_email","slack_mark_conversation_read","slack_message","slack_message_reader","slack_open_conversation","slack_open_view","slack_pin_message","slack_publish_view","slack_push_view","slack_remove_bookmark","slack_remove_reaction","slack_rename_agent_session_v2","slack_rename_conversation","slack_revoke_canvas_access","slack_schedule_message","slack_set_agent_session_status_v2","slack_set_conversation_purpose","slack_set_conversation_topic","slack_set_status","slack_set_suggested_prompts","slack_set_suggested_prompts_v2","slack_set_title","slack_set_user_presence","slack_share_canvas","slack_unarchive_conversation","slack_unfurl_links","slack_unpin_message","slack_update_message","slack_update_user_group","slack_update_user_group_members","slack_update_view","smartlead_add_email_accounts_to_campaign","smartlead_add_leads_to_campaign","smartlead_create_campaign","smartlead_create_lead_list","smartlead_delete_campaign","smartlead_delete_campaign_webhook","smartlead_delete_lead_from_campaign","smartlead_delete_lead_list","smartlead_duplicate_campaign","smartlead_export_campaign_leads","smartlead_get_campaign","smartlead_get_campaign_analytics","smartlead_get_campaign_analytics_by_date","smartlead_get_campaign_lead_statistics","smartlead_get_campaign_mailbox_statistics","smartlead_get_campaign_sequences","smartlead_get_campaign_statistics","smartlead_get_campaign_top_level_analytics_by_date","smartlead_get_campaign_webhook_summary","smartlead_get_lead_by_email","smartlead_get_lead_by_id","smartlead_get_lead_list","smartlead_get_lead_message_history","smartlead_list_campaign_email_accounts","smartlead_list_campaign_leads","smartlead_list_campaign_webhooks","smartlead_list_campaigns","smartlead_list_clients","smartlead_list_email_accounts","smartlead_list_inbox_replies","smartlead_list_lead_activities","smartlead_list_lead_categories","smartlead_list_lead_lists","smartlead_mark_lead_complete","smartlead_pause_lead","smartlead_remove_email_accounts_from_campaign","smartlead_resume_lead","smartlead_save_campaign_sequences","smartlead_unsubscribe_lead_from_campaign","smartlead_unsubscribe_lead_globally","smartlead_update_campaign_schedule","smartlead_update_campaign_settings","smartlead_update_campaign_status","smartlead_update_lead","smartlead_update_lead_category","smartlead_update_lead_list","smartlead_upsert_campaign_webhook","sms_send","smtp_send_mail","snowflake_alter_warehouse","snowflake_call_procedure","snowflake_cancel_statement","snowflake_cancel_task_run","snowflake_cortex_analyst_ask","snowflake_cortex_analyst_feedback","snowflake_delete_rows","snowflake_execute_sql","snowflake_get_statement","snowflake_get_task","snowflake_get_task_run","snowflake_get_task_run_output","snowflake_get_warehouse","snowflake_insert_rows","snowflake_introspect_schema","snowflake_list_copy_history","snowflake_list_databases","snowflake_list_query_history","snowflake_list_schemas","snowflake_list_tables","snowflake_list_task_runs","snowflake_list_tasks","snowflake_list_warehouses","snowflake_load_data","snowflake_resume_task","snowflake_resume_warehouse","snowflake_run_task","snowflake_suspend_task","snowflake_suspend_warehouse","snowflake_unload_data","snowflake_update_rows","snowflake_upsert_rows","splunk_cancel_search_job","splunk_create_search_job","splunk_dispatch_saved_search","splunk_get_fired_alerts","splunk_get_saved_search","splunk_get_search_job","splunk_get_search_results","splunk_list_apps","splunk_list_fired_alerts","splunk_list_indexes","splunk_list_saved_searches","splunk_run_search","sportmonks_core_get_cities","sportmonks_core_get_city","sportmonks_core_get_continent","sportmonks_core_get_continents","sportmonks_core_get_countries","sportmonks_core_get_country","sportmonks_core_get_entity_filters","sportmonks_core_get_my_usage","sportmonks_core_get_region","sportmonks_core_get_regions","sportmonks_core_get_timezones","sportmonks_core_get_type","sportmonks_core_get_type_by_entity","sportmonks_core_get_types","sportmonks_core_search_cities","sportmonks_core_search_countries","sportmonks_core_search_regions","sportmonks_football_expected_by_player","sportmonks_football_expected_by_team","sportmonks_football_get_all_commentaries","sportmonks_football_get_all_fixtures","sportmonks_football_get_all_players","sportmonks_football_get_all_rivals","sportmonks_football_get_all_teams","sportmonks_football_get_all_transfer_rumours","sportmonks_football_get_all_transfers","sportmonks_football_get_brackets_by_season","sportmonks_football_get_coach","sportmonks_football_get_coaches","sportmonks_football_get_coaches_by_country","sportmonks_football_get_commentaries_by_fixture","sportmonks_football_get_current_leagues_by_team","sportmonks_football_get_expected_lineups_by_player","sportmonks_football_get_expected_lineups_by_team","sportmonks_football_get_extended_team_squad","sportmonks_football_get_fixture","sportmonks_football_get_fixtures_by_date","sportmonks_football_get_fixtures_by_date_range","sportmonks_football_get_fixtures_by_date_range_for_team","sportmonks_football_get_fixtures_by_ids","sportmonks_football_get_grouped_standings_by_round","sportmonks_football_get_head_to_head","sportmonks_football_get_inplay_livescores","sportmonks_football_get_latest_coaches","sportmonks_football_get_latest_fixtures","sportmonks_football_get_latest_livescores","sportmonks_football_get_latest_players","sportmonks_football_get_latest_totw","sportmonks_football_get_latest_transfers","sportmonks_football_get_league","sportmonks_football_get_leagues","sportmonks_football_get_leagues_by_country","sportmonks_football_get_leagues_by_date","sportmonks_football_get_leagues_by_team","sportmonks_football_get_live_leagues","sportmonks_football_get_live_probabilities","sportmonks_football_get_live_probabilities_by_fixture","sportmonks_football_get_live_standings_by_league","sportmonks_football_get_livescores","sportmonks_football_get_match_facts","sportmonks_football_get_match_facts_by_date_range","sportmonks_football_get_match_facts_by_fixture","sportmonks_football_get_match_facts_by_league","sportmonks_football_get_past_fixtures_by_tv_station","sportmonks_football_get_player","sportmonks_football_get_players_by_country","sportmonks_football_get_postmatch_news","sportmonks_football_get_postmatch_news_by_season","sportmonks_football_get_predictability_by_league","sportmonks_football_get_prematch_news","sportmonks_football_get_prematch_news_by_season","sportmonks_football_get_prematch_news_upcoming","sportmonks_football_get_probabilities","sportmonks_football_get_probabilities_by_fixture","sportmonks_football_get_referee","sportmonks_football_get_referees","sportmonks_football_get_referees_by_country","sportmonks_football_get_referees_by_season","sportmonks_football_get_rivals_by_team","sportmonks_football_get_round","sportmonks_football_get_round_statistics","sportmonks_football_get_rounds","sportmonks_football_get_rounds_by_season","sportmonks_football_get_schedules_by_season","sportmonks_football_get_schedules_by_season_and_team","sportmonks_football_get_schedules_by_team","sportmonks_football_get_season","sportmonks_football_get_seasons","sportmonks_football_get_seasons_by_team","sportmonks_football_get_stage","sportmonks_football_get_stage_statistics","sportmonks_football_get_stages","sportmonks_football_get_stages_by_season","sportmonks_football_get_standing_corrections_by_season","sportmonks_football_get_standings","sportmonks_football_get_standings_by_round","sportmonks_football_get_standings_by_season","sportmonks_football_get_state","sportmonks_football_get_states","sportmonks_football_get_team","sportmonks_football_get_team_rankings","sportmonks_football_get_team_rankings_by_date","sportmonks_football_get_team_rankings_by_team","sportmonks_football_get_team_squad","sportmonks_football_get_team_squad_by_season","sportmonks_football_get_teams_by_country","sportmonks_football_get_teams_by_season","sportmonks_football_get_topscorers_by_season","sportmonks_football_get_topscorers_by_stage","sportmonks_football_get_totw","sportmonks_football_get_totw_by_round","sportmonks_football_get_transfer","sportmonks_football_get_transfer_rumour","sportmonks_football_get_transfer_rumours_between_dates","sportmonks_football_get_transfer_rumours_by_player","sportmonks_football_get_transfer_rumours_by_team","sportmonks_football_get_transfers_between_dates","sportmonks_football_get_transfers_by_player","sportmonks_football_get_transfers_by_team","sportmonks_football_get_tv_station","sportmonks_football_get_tv_stations","sportmonks_football_get_tv_stations_by_fixture","sportmonks_football_get_upcoming_fixtures_by_market","sportmonks_football_get_upcoming_fixtures_by_tv_station","sportmonks_football_get_value_bets","sportmonks_football_get_value_bets_by_fixture","sportmonks_football_get_venue","sportmonks_football_get_venues","sportmonks_football_get_venues_by_season","sportmonks_football_search_coaches","sportmonks_football_search_fixtures","sportmonks_football_search_leagues","sportmonks_football_search_players","sportmonks_football_search_referees","sportmonks_football_search_rounds","sportmonks_football_search_seasons","sportmonks_football_search_stages","sportmonks_football_search_teams","sportmonks_football_search_venues","sportmonks_motorsport_get_all_fixtures","sportmonks_motorsport_get_current_leagues_by_team","sportmonks_motorsport_get_driver","sportmonks_motorsport_get_driver_standings","sportmonks_motorsport_get_driver_standings_by_season","sportmonks_motorsport_get_drivers","sportmonks_motorsport_get_drivers_by_country","sportmonks_motorsport_get_drivers_by_season","sportmonks_motorsport_get_fixture","sportmonks_motorsport_get_fixtures_by_date","sportmonks_motorsport_get_fixtures_by_date_range","sportmonks_motorsport_get_fixtures_by_ids","sportmonks_motorsport_get_laps_by_fixture","sportmonks_motorsport_get_laps_by_fixture_and_driver","sportmonks_motorsport_get_laps_by_fixture_and_lap","sportmonks_motorsport_get_latest_laps_by_fixture","sportmonks_motorsport_get_latest_pitstops_by_fixture","sportmonks_motorsport_get_latest_stints_by_fixture","sportmonks_motorsport_get_latest_updated_drivers","sportmonks_motorsport_get_latest_updated_fixtures","sportmonks_motorsport_get_league","sportmonks_motorsport_get_leagues","sportmonks_motorsport_get_leagues_by_country","sportmonks_motorsport_get_leagues_by_date","sportmonks_motorsport_get_leagues_by_live","sportmonks_motorsport_get_leagues_by_team","sportmonks_motorsport_get_livescores","sportmonks_motorsport_get_pitstops_by_fixture","sportmonks_motorsport_get_pitstops_by_fixture_and_driver","sportmonks_motorsport_get_pitstops_by_fixture_and_lap","sportmonks_motorsport_get_race_results_by_season_and_driver","sportmonks_motorsport_get_race_results_by_season_and_team","sportmonks_motorsport_get_schedules_by_season","sportmonks_motorsport_get_season","sportmonks_motorsport_get_seasons","sportmonks_motorsport_get_stage","sportmonks_motorsport_get_stages","sportmonks_motorsport_get_stages_by_season","sportmonks_motorsport_get_state","sportmonks_motorsport_get_states","sportmonks_motorsport_get_stints_by_fixture","sportmonks_motorsport_get_stints_by_fixture_and_driver","sportmonks_motorsport_get_stints_by_fixture_and_stint","sportmonks_motorsport_get_team","sportmonks_motorsport_get_team_standings","sportmonks_motorsport_get_team_standings_by_season","sportmonks_motorsport_get_teams","sportmonks_motorsport_get_teams_by_country","sportmonks_motorsport_get_teams_by_season","sportmonks_motorsport_get_venue","sportmonks_motorsport_get_venues","sportmonks_motorsport_get_venues_by_season","sportmonks_motorsport_search_drivers","sportmonks_motorsport_search_leagues","sportmonks_motorsport_search_stages","sportmonks_motorsport_search_teams","sportmonks_motorsport_search_venues","sportmonks_odds_get_all_historical_odds","sportmonks_odds_get_all_inplay_odds","sportmonks_odds_get_all_pre_match_odds","sportmonks_odds_get_all_premium_odds","sportmonks_odds_get_bookmaker","sportmonks_odds_get_bookmaker_event_ids_by_fixture","sportmonks_odds_get_bookmakers","sportmonks_odds_get_bookmakers_by_fixture","sportmonks_odds_get_inplay_odds_by_fixture","sportmonks_odds_get_inplay_odds_by_fixture_and_bookmaker","sportmonks_odds_get_inplay_odds_by_fixture_and_market","sportmonks_odds_get_last_updated_inplay_odds","sportmonks_odds_get_last_updated_pre_match_odds","sportmonks_odds_get_market","sportmonks_odds_get_markets","sportmonks_odds_get_pre_match_odds_by_fixture","sportmonks_odds_get_pre_match_odds_by_fixture_and_bookmaker","sportmonks_odds_get_pre_match_odds_by_fixture_and_market","sportmonks_odds_get_premium_odds_by_fixture","sportmonks_odds_get_premium_odds_by_fixture_and_bookmaker","sportmonks_odds_get_premium_odds_by_fixture_and_market","sportmonks_odds_get_updated_historical_odds_between","sportmonks_odds_get_updated_premium_odds_between","sportmonks_odds_search_bookmakers","sportmonks_odds_search_markets","spotify_add_playlist_cover","spotify_add_to_queue","spotify_add_tracks_to_playlist","spotify_check_following","spotify_check_playlist_followers","spotify_check_saved_albums","spotify_check_saved_audiobooks","spotify_check_saved_episodes","spotify_check_saved_shows","spotify_check_saved_tracks","spotify_create_playlist","spotify_follow_artists","spotify_follow_playlist","spotify_get_album","spotify_get_album_tracks","spotify_get_albums","spotify_get_artist","spotify_get_artist_albums","spotify_get_artist_top_tracks","spotify_get_artists","spotify_get_audiobook","spotify_get_audiobook_chapters","spotify_get_audiobooks","spotify_get_categories","spotify_get_current_user","spotify_get_currently_playing","spotify_get_devices","spotify_get_episode","spotify_get_episodes","spotify_get_followed_artists","spotify_get_markets","spotify_get_new_releases","spotify_get_playback_state","spotify_get_playlist","spotify_get_playlist_cover","spotify_get_playlist_tracks","spotify_get_queue","spotify_get_recently_played","spotify_get_saved_albums","spotify_get_saved_audiobooks","spotify_get_saved_episodes","spotify_get_saved_shows","spotify_get_saved_tracks","spotify_get_show","spotify_get_show_episodes","spotify_get_shows","spotify_get_top_artists","spotify_get_top_tracks","spotify_get_track","spotify_get_tracks","spotify_get_user_playlists","spotify_get_user_profile","spotify_pause","spotify_play","spotify_remove_saved_albums","spotify_remove_saved_audiobooks","spotify_remove_saved_episodes","spotify_remove_saved_shows","spotify_remove_saved_tracks","spotify_remove_tracks_from_playlist","spotify_reorder_playlist_items","spotify_replace_playlist_items","spotify_save_albums","spotify_save_audiobooks","spotify_save_episodes","spotify_save_shows","spotify_save_tracks","spotify_search","spotify_seek","spotify_set_repeat","spotify_set_shuffle","spotify_set_volume","spotify_skip_next","spotify_skip_previous","spotify_transfer_playback","spotify_unfollow_artists","spotify_unfollow_playlist","spotify_update_playlist","sqs_cancel_message_move_task","sqs_change_message_visibility","sqs_change_message_visibility_batch","sqs_create_queue","sqs_delete_message","sqs_delete_message_batch","sqs_delete_queue","sqs_get_queue_attributes","sqs_get_queue_url","sqs_list_dead_letter_source_queues","sqs_list_message_move_tasks","sqs_list_queue_tags","sqs_list_queues","sqs_purge_queue","sqs_receive_message","sqs_send","sqs_send_message_batch","sqs_set_queue_attributes","sqs_start_message_move_task","sqs_tag_queue","sqs_untag_queue","square_batch_retrieve_inventory_counts","square_cancel_invoice","square_cancel_payment","square_complete_payment","square_create_catalog_image","square_create_customer","square_create_invoice","square_create_order","square_create_payment","square_delete_catalog_object","square_delete_customer","square_delete_invoice","square_get_catalog_object","square_get_customer","square_get_invoice","square_get_location","square_get_order","square_get_payment","square_get_refund","square_list_catalog","square_list_customers","square_list_invoices","square_list_locations","square_list_payments","square_list_refunds","square_pay_order","square_publish_invoice","square_refund_payment","square_search_catalog_objects","square_search_customers","square_search_invoices","square_search_orders","square_update_customer","square_upsert_catalog_object","ssh_check_command_exists","ssh_check_file_exists","ssh_create_directory","ssh_delete_file","ssh_download_file","ssh_download_file_v2","ssh_execute_command","ssh_execute_script","ssh_get_system_info","ssh_list_directory","ssh_move_rename","ssh_read_file_content","ssh_upload_file","ssh_write_file_content","ssm_cancel_command","ssm_delete_parameter","ssm_describe_automation_executions","ssm_describe_instance_information","ssm_describe_instance_patch_states","ssm_describe_instance_patches","ssm_describe_parameters","ssm_get_automation_execution","ssm_get_command_invocation","ssm_get_document","ssm_get_parameter","ssm_get_parameters","ssm_get_parameters_by_path","ssm_list_command_invocations","ssm_list_commands","ssm_list_compliance_items","ssm_list_compliance_summaries","ssm_list_documents","ssm_put_parameter","ssm_send_command","ssm_start_automation_execution","ssm_stop_automation_execution","stagehand_agent","stagehand_extract","stripe_cancel_payment_intent","stripe_cancel_subscription","stripe_capture_charge","stripe_capture_payment_intent","stripe_confirm_payment_intent","stripe_create_charge","stripe_create_customer","stripe_create_invoice","stripe_create_payment_intent","stripe_create_price","stripe_create_product","stripe_create_subscription","stripe_delete_customer","stripe_delete_invoice","stripe_delete_product","stripe_finalize_invoice","stripe_list_charges","stripe_list_customers","stripe_list_events","stripe_list_invoices","stripe_list_payment_intents","stripe_list_prices","stripe_list_products","stripe_list_subscriptions","stripe_pay_invoice","stripe_resume_subscription","stripe_retrieve_charge","stripe_retrieve_customer","stripe_retrieve_event","stripe_retrieve_invoice","stripe_retrieve_payment_intent","stripe_retrieve_price","stripe_retrieve_product","stripe_retrieve_subscription","stripe_search_charges","stripe_search_customers","stripe_search_invoices","stripe_search_payment_intents","stripe_search_prices","stripe_search_products","stripe_search_subscriptions","stripe_send_invoice","stripe_update_charge","stripe_update_customer","stripe_update_invoice","stripe_update_payment_intent","stripe_update_price","stripe_update_product","stripe_update_subscription","stripe_void_invoice","sts_assume_role","sts_assume_role_with_saml","sts_assume_role_with_web_identity","sts_get_access_key_info","sts_get_caller_identity","sts_get_session_token","stt_assemblyai","stt_assemblyai_v2","stt_deepgram","stt_deepgram_v2","stt_elevenlabs","stt_elevenlabs_v2","stt_gemini","stt_gemini_v2","stt_whisper","stt_whisper_v2","supabase_count","supabase_delete","supabase_get_row","supabase_insert","supabase_introspect","supabase_invoke_function","supabase_query","supabase_rpc","supabase_storage_copy","supabase_storage_create_bucket","supabase_storage_create_signed_upload_url","supabase_storage_create_signed_url","supabase_storage_delete","supabase_storage_delete_bucket","supabase_storage_download","supabase_storage_empty_bucket","supabase_storage_get_public_url","supabase_storage_list","supabase_storage_list_buckets","supabase_storage_move","supabase_storage_update_bucket","supabase_storage_upload","supabase_text_search","supabase_update","supabase_upsert","supabase_vector_search","table_batch_insert_rows","table_create","table_delete_row","table_delete_rows_by_filter","table_get_row","table_get_schema","table_insert_row","table_list","table_query_rows","table_query_rows_v2","table_update_row","table_update_rows_by_filter","table_upsert_row","tailscale_authorize_device","tailscale_create_auth_key","tailscale_delete_auth_key","tailscale_delete_device","tailscale_delete_user","tailscale_expire_device_key","tailscale_get_acl","tailscale_get_auth_key","tailscale_get_device","tailscale_get_device_routes","tailscale_get_dns_preferences","tailscale_get_dns_searchpaths","tailscale_list_auth_keys","tailscale_list_devices","tailscale_list_dns_nameservers","tailscale_list_users","tailscale_set_acl","tailscale_set_device_routes","tailscale_set_device_tags","tailscale_set_dns_nameservers","tailscale_set_dns_preferences","tailscale_set_dns_searchpaths","tailscale_suspend_user","tailscale_update_device_key","tavily_crawl","tavily_extract","tavily_map","tavily_search","telegram_copy_message","telegram_delete_message","telegram_edit_message_text","telegram_forward_message","telegram_get_chat","telegram_get_chat_member","telegram_message","telegram_pin_message","telegram_send_animation","telegram_send_audio","telegram_send_chat_action","telegram_send_contact","telegram_send_document","telegram_send_location","telegram_send_photo","telegram_send_poll","telegram_send_video","telegram_set_message_reaction","telegram_unpin_message","temporal_cancel_workflow","temporal_count_workflows","temporal_create_schedule","temporal_delete_schedule","temporal_describe_schedule","temporal_describe_task_queue","temporal_describe_workflow","temporal_get_workflow_history","temporal_list_schedules","temporal_list_workflows","temporal_pause_schedule","temporal_query_workflow","temporal_reset_workflow","temporal_signal_with_start","temporal_signal_workflow","temporal_start_workflow","temporal_terminate_workflow","temporal_trigger_schedule","temporal_unpause_schedule","temporal_update_workflow","textract_analyze_expense","textract_analyze_id","textract_parser","textract_parser_v2","thinking_tool","thrive_add_audience_managers","thrive_add_audience_members","thrive_add_user_tags","thrive_create_assignment","thrive_create_audience","thrive_create_completion","thrive_create_user","thrive_delete_assignment","thrive_delete_audience","thrive_delete_user","thrive_get_activity","thrive_get_assignment","thrive_get_audience","thrive_get_completion","thrive_get_content","thrive_get_cpd_category","thrive_get_cpd_entry","thrive_get_cpd_requirement","thrive_get_enrolment","thrive_get_skill_levels","thrive_get_tag","thrive_get_user_by_id","thrive_get_user_by_ref","thrive_list_assignments","thrive_list_audience_managers","thrive_list_audience_members","thrive_list_audiences","thrive_list_completions","thrive_list_enrolments","thrive_list_tags","thrive_query_activities","thrive_query_content","thrive_query_cpd_categories","thrive_query_cpd_entries","thrive_query_cpd_requirements","thrive_query_cpd_user_summaries","thrive_remove_audience_manager","thrive_remove_audience_member","thrive_remove_user_tags","thrive_replace_audience_managers","thrive_replace_audience_members","thrive_search_users","thrive_suspend_user","thrive_update_assignment","thrive_update_audience","thrive_update_user","thrive_update_user_skills","tiktok_get_post_status","tiktok_get_user","tiktok_list_videos","tiktok_query_videos","tiktok_upload_video_draft","tinybird_append_datasource","tinybird_delete_datasource_rows","tinybird_events","tinybird_get_job","tinybird_query","tinybird_query_pipe","tinybird_truncate_datasource","tinyfish_cancel_run","tinyfish_fetch","tinyfish_get_run","tinyfish_list_profiles","tinyfish_list_runs","tinyfish_list_vault_items","tinyfish_run","tinyfish_run_async","tinyfish_search","trello_add_checklist","trello_add_checklist_item","trello_add_comment","trello_add_label","trello_add_member","trello_create_board","trello_create_card","trello_create_list","trello_delete_card","trello_get_actions","trello_get_board","trello_get_card","trello_list_cards","trello_list_lists","trello_list_members","trello_remove_label","trello_remove_member","trello_search","trello_update_card","trello_update_checklist_item","trello_update_list","trigger_dev_activate_schedule","trigger_dev_add_run_tags","trigger_dev_batch_trigger_task","trigger_dev_cancel_run","trigger_dev_complete_waitpoint_token","trigger_dev_create_env_var","trigger_dev_create_schedule","trigger_dev_create_waitpoint_token","trigger_dev_deactivate_schedule","trigger_dev_delete_env_var","trigger_dev_delete_schedule","trigger_dev_execute_query","trigger_dev_get_batch","trigger_dev_get_batch_results","trigger_dev_get_deployment","trigger_dev_get_env_var","trigger_dev_get_latest_deployment","trigger_dev_get_query_schema","trigger_dev_get_queue","trigger_dev_get_run","trigger_dev_get_run_events","trigger_dev_get_run_result","trigger_dev_get_run_trace","trigger_dev_get_schedule","trigger_dev_get_waitpoint_token","trigger_dev_import_env_vars","trigger_dev_list_deployments","trigger_dev_list_env_vars","trigger_dev_list_queues","trigger_dev_list_runs","trigger_dev_list_schedules","trigger_dev_list_timezones","trigger_dev_list_waitpoint_tokens","trigger_dev_override_queue_concurrency","trigger_dev_pause_queue","trigger_dev_promote_deployment","trigger_dev_replay_run","trigger_dev_reschedule_run","trigger_dev_reset_queue_concurrency","trigger_dev_resume_queue","trigger_dev_trigger_task","trigger_dev_update_env_var","trigger_dev_update_run_metadata","trigger_dev_update_schedule","tts_azure","tts_cartesia","tts_deepgram","tts_elevenlabs","tts_google","tts_openai","tts_playht","twilio_send_sms","twilio_voice_get_recording","twilio_voice_list_calls","twilio_voice_make_call","typeform_create_form","typeform_delete_form","typeform_files","typeform_get_form","typeform_insights","typeform_list_forms","typeform_responses","typeform_update_form","upstash_redis_command","upstash_redis_delete","upstash_redis_exists","upstash_redis_expire","upstash_redis_get","upstash_redis_hget","upstash_redis_hgetall","upstash_redis_hset","upstash_redis_incr","upstash_redis_incrby","upstash_redis_keys","upstash_redis_lpush","upstash_redis_lrange","upstash_redis_set","upstash_redis_setnx","upstash_redis_ttl","uptimerobot_create_alert_contact","uptimerobot_create_maintenance_window","uptimerobot_create_monitor","uptimerobot_create_psp","uptimerobot_delete_alert_contact","uptimerobot_delete_maintenance_window","uptimerobot_delete_monitor","uptimerobot_delete_psp","uptimerobot_get_account","uptimerobot_get_alert_contact","uptimerobot_get_incident","uptimerobot_get_maintenance_window","uptimerobot_get_monitor","uptimerobot_get_psp","uptimerobot_list_alert_contacts","uptimerobot_list_incidents","uptimerobot_list_maintenance_windows","uptimerobot_list_monitors","uptimerobot_list_psps","uptimerobot_pause_monitor","uptimerobot_start_monitor","uptimerobot_update_maintenance_window","uptimerobot_update_monitor","uptimerobot_update_psp","vanta_download_document_file","vanta_get_control","vanta_get_document","vanta_get_framework","vanta_get_person","vanta_get_policy","vanta_get_risk_scenario","vanta_get_test","vanta_get_vendor","vanta_get_vulnerable_asset","vanta_list_control_documents","vanta_list_control_tests","vanta_list_controls","vanta_list_document_uploads","vanta_list_documents","vanta_list_framework_controls","vanta_list_frameworks","vanta_list_monitored_computers","vanta_list_people","vanta_list_policies","vanta_list_risk_scenarios","vanta_list_test_entities","vanta_list_tests","vanta_list_vendors","vanta_list_vulnerabilities","vanta_list_vulnerability_remediations","vanta_list_vulnerable_assets","vanta_submit_document","vanta_upload_document_file","vercel_add_domain","vercel_add_project_domain","vercel_cancel_deployment","vercel_create_alias","vercel_create_check","vercel_create_deployment","vercel_create_dns_record","vercel_create_edge_config","vercel_create_env_var","vercel_create_project","vercel_create_webhook","vercel_delete_alias","vercel_delete_deployment","vercel_delete_dns_record","vercel_delete_domain","vercel_delete_edge_config","vercel_delete_env_var","vercel_delete_project","vercel_delete_webhook","vercel_get_alias","vercel_get_check","vercel_get_deployment","vercel_get_deployment_events","vercel_get_domain","vercel_get_domain_config","vercel_get_edge_config","vercel_get_edge_config_items","vercel_get_env_vars","vercel_get_project","vercel_get_team","vercel_get_user","vercel_get_webhook","vercel_list_aliases","vercel_list_checks","vercel_list_deployment_files","vercel_list_deployments","vercel_list_dns_records","vercel_list_domains","vercel_list_edge_configs","vercel_list_project_domains","vercel_list_projects","vercel_list_team_members","vercel_list_teams","vercel_list_webhooks","vercel_pause_project","vercel_promote_deployment","vercel_remove_project_domain","vercel_rerequest_check","vercel_unpause_project","vercel_update_check","vercel_update_dns_record","vercel_update_edge_config_items","vercel_update_env_var","vercel_update_project","vercel_update_project_domain","vercel_verify_project_domain","video_falai","video_luma","video_minimax","video_runway","video_veo","vision_tool","vision_tool_v2","wealthbox_read_contact","wealthbox_read_note","wealthbox_read_task","wealthbox_write_contact","wealthbox_write_note","wealthbox_write_task","webflow_create_item","webflow_delete_item","webflow_get_item","webflow_list_items","webflow_update_item","webhook_request","whatsapp_get_media","whatsapp_mark_read","whatsapp_send_interactive","whatsapp_send_media","whatsapp_send_message","whatsapp_send_reaction","whatsapp_send_template","whatsapp_upload_media","wikipedia_content","wikipedia_random","wikipedia_search","wikipedia_summary","windchill_check_in_document","windchill_check_in_documents","windchill_check_out_document","windchill_check_out_documents","windchill_create_document","windchill_create_documents","windchill_delete_document","windchill_delete_documents","windchill_download_attachment","windchill_download_primary_content","windchill_get_document","windchill_get_document_structure","windchill_get_primary_content","windchill_get_valid_state_transitions","windchill_list_attachments","windchill_list_documents","windchill_revise_document","windchill_revise_documents","windchill_set_lifecycle_state","windchill_undo_check_out_document","windchill_undo_check_out_documents","windchill_update_common_properties","windchill_update_document","windchill_update_document_security_labels","windchill_update_documents","windchill_upload_attachments","windchill_upload_primary_content","wiza_company_enrichment","wiza_get_credits","wiza_individual_reveal","wiza_prospect_search","wordpress_create_category","wordpress_create_comment","wordpress_create_page","wordpress_create_post","wordpress_create_tag","wordpress_delete_category","wordpress_delete_comment","wordpress_delete_media","wordpress_delete_page","wordpress_delete_post","wordpress_delete_tag","wordpress_get_category","wordpress_get_current_user","wordpress_get_media","wordpress_get_page","wordpress_get_post","wordpress_get_tag","wordpress_get_user","wordpress_list_categories","wordpress_list_comments","wordpress_list_media","wordpress_list_pages","wordpress_list_posts","wordpress_list_tags","wordpress_list_users","wordpress_search_content","wordpress_update_category","wordpress_update_comment","wordpress_update_page","wordpress_update_post","wordpress_update_tag","wordpress_upload_media","workday_assign_onboarding","workday_change_job","workday_create_prehire","workday_get_compensation","workday_get_organizations","workday_get_worker","workday_hire_employee","workday_list_workers","workday_terminate_worker","workday_update_worker","workflow_executor","x_create_bookmark","x_create_tweet","x_delete_bookmark","x_delete_tweet","x_get_blocking","x_get_bookmarks","x_get_followers","x_get_following","x_get_liked_tweets","x_get_liking_users","x_get_me","x_get_personalized_trends","x_get_quote_tweets","x_get_retweeted_by","x_get_trends_by_woeid","x_get_tweets_by_ids","x_get_usage","x_get_user_mentions","x_get_user_timeline","x_get_user_tweets","x_hide_reply","x_manage_block","x_manage_follow","x_manage_like","x_manage_mute","x_manage_retweet","x_read","x_search","x_search_tweets","x_search_users","x_user","x_write","youcom_answer","youcom_finance_research","youcom_get_account_balance","youcom_get_contents","youcom_get_research_task","youcom_research","youcom_search","youcom_search_images","youtube_channel_info","youtube_channel_playlists","youtube_channel_videos","youtube_comments","youtube_playlist_items","youtube_search","youtube_trending","youtube_video_categories","youtube_video_details","zendesk_autocomplete_organizations","zendesk_create_organization","zendesk_create_organizations_bulk","zendesk_create_ticket","zendesk_create_tickets_bulk","zendesk_create_user","zendesk_create_users_bulk","zendesk_delete_organization","zendesk_delete_ticket","zendesk_delete_user","zendesk_get_current_user","zendesk_get_organization","zendesk_get_organizations","zendesk_get_ticket","zendesk_get_tickets","zendesk_get_user","zendesk_get_users","zendesk_merge_tickets","zendesk_search","zendesk_search_count","zendesk_search_users","zendesk_update_organization","zendesk_update_ticket","zendesk_update_tickets_bulk","zendesk_update_user","zendesk_update_users_bulk","zep_add_messages","zep_add_user","zep_create_thread","zep_delete_thread","zep_get_context","zep_get_messages","zep_get_threads","zep_get_user","zep_get_user_threads","zerobounce_get_credits","zerobounce_verify_email","zoho_desk_add_comment","zoho_desk_get_attachment","zoho_desk_get_contact","zoho_desk_get_thread","zoho_desk_get_ticket","zoho_desk_list_comments","zoho_desk_list_organizations","zoho_desk_list_threads","zoho_desk_list_tickets","zoho_desk_update_ticket","zoom_create_meeting","zoom_delete_meeting","zoom_delete_recording","zoom_get_meeting","zoom_get_meeting_invitation","zoom_get_meeting_recordings","zoom_list_meetings","zoom_list_past_participants","zoom_list_recordings","zoom_update_meeting","zoominfo_enrich_companies","zoominfo_enrich_contacts","zoominfo_search_companies","zoominfo_search_contacts","zoominfo_search_intent","zoominfo_search_news"]' + '["a2a_cancel_task","a2a_get_agent_card","a2a_get_task","a2a_send_message","affinity_batch_update_entity_fields","affinity_batch_update_list_entry_fields","affinity_create_list","affinity_create_list_field_dropdown_option","affinity_create_merge","affinity_create_note","affinity_create_reminder","affinity_delete_list_field_dropdown_option","affinity_delete_note","affinity_get_company","affinity_get_current_user","affinity_get_entity_field_value","affinity_get_list","affinity_get_list_entry","affinity_get_list_entry_field","affinity_get_list_field_dropdown_option","affinity_get_merge","affinity_get_merge_task","affinity_get_note","affinity_get_opportunity","affinity_get_person","affinity_get_saved_view","affinity_get_transcript","affinity_get_user","affinity_list_calls","affinity_list_chat_messages","affinity_list_companies","affinity_list_coworker_connections","affinity_list_emails","affinity_list_entity_field_values","affinity_list_entity_list_entries","affinity_list_entity_lists","affinity_list_entity_notes","affinity_list_entity_relationships","affinity_list_field_dropdown_options","affinity_list_field_metadata","affinity_list_field_value_changes","affinity_list_investor_executive_connections","affinity_list_list_entries","affinity_list_list_entry_field_value_changes","affinity_list_list_entry_fields","affinity_list_list_field_dropdown_options","affinity_list_list_fields","affinity_list_lists","affinity_list_meetings","affinity_list_merge_tasks","affinity_list_merges","affinity_list_note_attached_companies","affinity_list_note_attached_opportunities","affinity_list_note_attached_persons","affinity_list_note_replies","affinity_list_notes","affinity_list_opportunities","affinity_list_persons","affinity_list_reminders","affinity_list_saved_view_entries","affinity_list_saved_views","affinity_list_transcript_fragments","affinity_list_transcripts","affinity_list_users","affinity_search_companies","affinity_search_files","affinity_search_list_entries","affinity_search_notes","affinity_search_persons","affinity_semantic_search","affinity_update_entity_field_value","affinity_update_list_entry_field","affinity_update_list_field_dropdown_option","affinity_update_note","agentmail_create_draft","agentmail_create_inbox","agentmail_delete_draft","agentmail_delete_inbox","agentmail_delete_thread","agentmail_forward_message","agentmail_get_draft","agentmail_get_inbox","agentmail_get_message","agentmail_get_thread","agentmail_list_drafts","agentmail_list_inboxes","agentmail_list_messages","agentmail_list_threads","agentmail_reply_message","agentmail_send_draft","agentmail_send_message","agentmail_update_draft","agentmail_update_inbox","agentmail_update_message","agentmail_update_thread","agentphone_create_call","agentphone_create_contact","agentphone_create_number","agentphone_delete_contact","agentphone_get_call","agentphone_get_call_transcript","agentphone_get_contact","agentphone_get_conversation","agentphone_get_conversation_messages","agentphone_get_number_messages","agentphone_get_usage","agentphone_get_usage_daily","agentphone_get_usage_monthly","agentphone_list_calls","agentphone_list_contacts","agentphone_list_conversations","agentphone_list_numbers","agentphone_react_to_message","agentphone_release_number","agentphone_send_message","agentphone_update_contact","agentphone_update_conversation","agiloft_async_status","agiloft_attach_file","agiloft_attachment_info","agiloft_create_record","agiloft_delete_record","agiloft_get_choice_line_id","agiloft_list_tables","agiloft_lock_record","agiloft_nlp_search","agiloft_read_record","agiloft_remove_attachment","agiloft_retrieve_attachment","agiloft_run_action_button","agiloft_saved_search","agiloft_search_records","agiloft_select_records","agiloft_update_record","agiloft_upsert_record","ahrefs_anchors","ahrefs_backlinks","ahrefs_backlinks_stats","ahrefs_batch_analysis","ahrefs_broken_backlinks","ahrefs_domain_rating","ahrefs_domain_rating_history","ahrefs_keyword_overview","ahrefs_keywords_history","ahrefs_metrics","ahrefs_metrics_history","ahrefs_organic_competitors","ahrefs_organic_keywords","ahrefs_paid_pages","ahrefs_rank_tracker_competitors_overview","ahrefs_rank_tracker_competitors_stats","ahrefs_rank_tracker_overview","ahrefs_rank_tracker_serp_overview","ahrefs_refdomains_history","ahrefs_referring_domains","ahrefs_related_terms","ahrefs_site_audit_page_explorer","ahrefs_top_pages","airtable_create_records","airtable_delete_records","airtable_get_base_schema","airtable_get_record","airtable_list_bases","airtable_list_records","airtable_list_tables","airtable_update_multiple_records","airtable_update_record","airtable_upsert_records","airweave_search","algolia_add_record","algolia_batch_operations","algolia_browse_records","algolia_clear_records","algolia_copy_move_index","algolia_delete_by_filter","algolia_delete_index","algolia_delete_record","algolia_get_record","algolia_get_records","algolia_get_settings","algolia_get_task_status","algolia_list_indices","algolia_partial_update_record","algolia_search","algolia_update_settings","amplitude_event_segmentation","amplitude_funnels","amplitude_get_active_users","amplitude_get_revenue","amplitude_group_identify","amplitude_identify_user","amplitude_list_events","amplitude_realtime_active_users","amplitude_retention","amplitude_send_event","amplitude_user_activity","amplitude_user_profile","amplitude_user_search","apify_get_dataset_items","apify_get_run","apify_run_actor_async","apify_run_actor_sync","apify_run_task","apollo_account_bulk_create","apollo_account_bulk_update","apollo_account_create","apollo_account_search","apollo_account_update","apollo_contact_bulk_create","apollo_contact_bulk_update","apollo_contact_create","apollo_contact_search","apollo_contact_update","apollo_email_accounts","apollo_opportunity_create","apollo_opportunity_get","apollo_opportunity_search","apollo_opportunity_update","apollo_organization_bulk_enrich","apollo_organization_enrich","apollo_organization_search","apollo_people_bulk_enrich","apollo_people_enrich","apollo_people_search","apollo_sequence_add_contacts","apollo_sequence_search","apollo_task_create","apollo_task_search","appconfig_create_application","appconfig_create_configuration_profile","appconfig_create_environment","appconfig_create_hosted_configuration_version","appconfig_delete_application","appconfig_delete_configuration_profile","appconfig_delete_environment","appconfig_delete_hosted_configuration_version","appconfig_get_application","appconfig_get_configuration","appconfig_get_configuration_profile","appconfig_get_deployment","appconfig_get_environment","appconfig_get_hosted_configuration_version","appconfig_list_applications","appconfig_list_configuration_profiles","appconfig_list_deployment_strategies","appconfig_list_deployments","appconfig_list_environments","appconfig_list_hosted_configuration_versions","appconfig_start_deployment","appconfig_stop_deployment","appconfig_update_application","appconfig_update_configuration_profile","appconfig_update_environment","arxiv_get_author_papers","arxiv_get_paper","arxiv_search","asana_add_comment","asana_add_followers","asana_create_project","asana_create_section","asana_create_subtask","asana_create_task","asana_delete_task","asana_get_project","asana_get_projects","asana_get_task","asana_list_sections","asana_list_workspaces","asana_search_tasks","asana_update_task","ashby_add_candidate_tag","ashby_anonymize_candidate","ashby_change_application_source","ashby_change_application_stage","ashby_create_application","ashby_create_candidate","ashby_create_note","ashby_delete_application","ashby_get_application","ashby_get_candidate","ashby_get_job","ashby_get_job_posting","ashby_get_offer","ashby_get_opening","ashby_list_application_feedback","ashby_list_application_history","ashby_list_applications","ashby_list_archive_reasons","ashby_list_candidate_tags","ashby_list_candidates","ashby_list_custom_fields","ashby_list_departments","ashby_list_interview_plans","ashby_list_interview_stages","ashby_list_interviews","ashby_list_job_postings","ashby_list_jobs","ashby_list_locations","ashby_list_notes","ashby_list_offers","ashby_list_openings","ashby_list_sources","ashby_list_users","ashby_remove_candidate_tag","ashby_search_candidates","ashby_search_jobs","ashby_search_openings","ashby_search_users","ashby_set_custom_field_value","ashby_set_custom_field_values","ashby_transfer_application","ashby_update_candidate","ashby_upload_candidate_file","ashby_upload_resume","athena_batch_get_named_query","athena_batch_get_prepared_statement","athena_batch_get_query_execution","athena_create_named_query","athena_create_prepared_statement","athena_delete_named_query","athena_delete_prepared_statement","athena_get_data_catalog","athena_get_database","athena_get_named_query","athena_get_prepared_statement","athena_get_query_execution","athena_get_query_results","athena_get_query_runtime_statistics","athena_get_table_metadata","athena_get_work_group","athena_list_data_catalogs","athena_list_databases","athena_list_named_queries","athena_list_prepared_statements","athena_list_query_executions","athena_list_table_metadata","athena_list_work_groups","athena_start_query","athena_stop_query","athena_update_named_query","athena_update_prepared_statement","attio_assert_record","attio_create_attribute","attio_create_comment","attio_create_list","attio_create_list_entry","attio_create_note","attio_create_object","attio_create_record","attio_create_task","attio_create_webhook","attio_delete_comment","attio_delete_list_entry","attio_delete_note","attio_delete_record","attio_delete_task","attio_delete_webhook","attio_get_attribute","attio_get_comment","attio_get_list","attio_get_list_entry","attio_get_member","attio_get_note","attio_get_object","attio_get_record","attio_get_task","attio_get_thread","attio_get_webhook","attio_list_attributes","attio_list_lists","attio_list_members","attio_list_notes","attio_list_objects","attio_list_records","attio_list_tasks","attio_list_threads","attio_list_webhooks","attio_query_list_entries","attio_search_records","attio_update_attribute","attio_update_list","attio_update_list_entry","attio_update_object","attio_update_record","attio_update_task","attio_update_webhook","azure_data_explorer_create_table","azure_data_explorer_drop_table","azure_data_explorer_ingest_from_query","azure_data_explorer_ingest_inline","azure_data_explorer_list_databases","azure_data_explorer_list_functions","azure_data_explorer_list_tables","azure_data_explorer_management","azure_data_explorer_query","azure_data_explorer_show_database_schema","azure_data_explorer_show_ingestion_failures","azure_data_explorer_show_operations","azure_data_explorer_show_table_details","azure_data_explorer_show_table_schema","azure_devops_add_comment","azure_devops_create_work_item","azure_devops_get_build_log","azure_devops_get_build_timeline","azure_devops_get_comments","azure_devops_get_pipeline","azure_devops_get_pipeline_run","azure_devops_get_work_item","azure_devops_get_work_items_batch","azure_devops_get_work_items_between_builds","azure_devops_list_build_logs","azure_devops_list_builds","azure_devops_list_pipeline_runs","azure_devops_list_pipelines","azure_devops_query_work_items","azure_devops_update_work_item","bitbucket_approve_pull_request","bitbucket_create_branch","bitbucket_create_pull_request","bitbucket_create_pull_request_comment","bitbucket_decline_pull_request","bitbucket_delete_branch","bitbucket_get_commit","bitbucket_get_file","bitbucket_get_file_metadata","bitbucket_get_pipeline","bitbucket_get_pipeline_step_log","bitbucket_get_pull_request","bitbucket_get_pull_request_diff","bitbucket_get_pull_request_diffstat","bitbucket_get_pull_request_merge_task_status","bitbucket_get_repository","bitbucket_list_branches","bitbucket_list_commits","bitbucket_list_directory","bitbucket_list_pipeline_steps","bitbucket_list_pipelines","bitbucket_list_pull_request_comments","bitbucket_list_pull_request_commit_statuses","bitbucket_list_pull_requests","bitbucket_list_repositories","bitbucket_list_workspaces","bitbucket_merge_pull_request","bitbucket_request_pull_request_changes","bitbucket_stop_pipeline","bitbucket_trigger_pipeline","box_copy_file","box_create_folder","box_delete_file","box_delete_folder","box_download_file","box_download_file_v2","box_get_file_info","box_list_folder_items","box_search","box_sign_cancel_request","box_sign_create_request","box_sign_get_request","box_sign_list_requests","box_sign_resend_request","box_update_file","box_upload_file","brandfetch_get_brand","brandfetch_search","brex_archive_budget","brex_create_budget","brex_create_spend_limit","brex_create_transfer","brex_create_vendor","brex_get_budget","brex_get_cash_account","brex_get_company","brex_get_current_user","brex_get_expense","brex_get_spend_limit","brex_get_transfer","brex_get_user","brex_get_vendor","brex_list_budgets","brex_list_card_accounts","brex_list_card_statements","brex_list_card_transactions","brex_list_cards","brex_list_cash_accounts","brex_list_cash_statements","brex_list_cash_transactions","brex_list_departments","brex_list_expenses","brex_list_locations","brex_list_spend_limits","brex_list_titles","brex_list_transfers","brex_list_users","brex_list_vendors","brex_match_receipt","brex_update_expense","brex_update_vendor","brex_upload_receipt","brightdata_cancel_snapshot","brightdata_discover","brightdata_download_snapshot","brightdata_scrape_dataset","brightdata_scrape_url","brightdata_serp_search","brightdata_snapshot_status","brightdata_sync_scrape","browser_use_run_task","buffer_create_idea","buffer_create_post","buffer_delete_post","buffer_edit_post","buffer_get_account","buffer_get_channels","buffer_get_idea_groups","buffer_get_ideas","buffer_get_post","buffer_get_posts","calcom_cancel_booking","calcom_confirm_booking","calcom_create_booking","calcom_create_event_type","calcom_create_schedule","calcom_decline_booking","calcom_delete_event_type","calcom_delete_schedule","calcom_get_booking","calcom_get_default_schedule","calcom_get_event_type","calcom_get_schedule","calcom_get_slots","calcom_list_bookings","calcom_list_event_types","calcom_list_schedules","calcom_reschedule_booking","calcom_update_event_type","calcom_update_schedule","calendly_cancel_event","calendly_create_event_invitee","calendly_create_invitee_no_show","calendly_create_scheduling_link","calendly_create_webhook","calendly_delete_invitee_no_show","calendly_delete_webhook","calendly_get_current_user","calendly_get_event_invitee","calendly_get_event_type","calendly_get_scheduled_event","calendly_get_user","calendly_list_event_invitees","calendly_list_event_type_available_times","calendly_list_event_types","calendly_list_organization_memberships","calendly_list_routing_form_submissions","calendly_list_routing_forms","calendly_list_scheduled_events","calendly_list_user_availability_schedules","calendly_list_user_busy_times","calendly_list_webhooks","cbinsights_chat","cbinsights_get_commercial_maturity_history","cbinsights_get_exit_probability_history","cbinsights_get_mosaic_history","cbinsights_get_org_business_relationships","cbinsights_get_org_funding_window","cbinsights_get_org_fundings","cbinsights_get_org_investments","cbinsights_get_org_management_and_board","cbinsights_get_org_outlook","cbinsights_get_org_portfolio_exits","cbinsights_get_org_revenue","cbinsights_get_scouting_report","cbinsights_get_strategy_map","cbinsights_list_business_relationships","cbinsights_list_funding_window","cbinsights_list_fundings","cbinsights_list_investments","cbinsights_list_management_and_board","cbinsights_list_outlook","cbinsights_list_portfolio_exits","cbinsights_list_revenue","cbinsights_lookup_organizations","cbinsights_rag","cbinsights_search_firmographics","circleback_add_tag_to_meetings","circleback_create_tag","circleback_delete_action_item","circleback_delete_meeting","circleback_delete_tag","circleback_get_company","circleback_get_meeting","circleback_get_person","circleback_get_transcript","circleback_list_action_items","circleback_list_calendar_events","circleback_list_companies","circleback_list_meetings","circleback_list_people","circleback_list_tags","circleback_remove_tag_from_meetings","circleback_search_meetings","circleback_update_action_item","circleback_update_meeting","circleback_update_tag","clay_populate","clerk_add_organization_member","clerk_ban_user","clerk_create_actor_token","clerk_create_allowlist_identifier","clerk_create_blocklist_identifier","clerk_create_organization","clerk_create_organization_invitation","clerk_create_user","clerk_delete_allowlist_identifier","clerk_delete_blocklist_identifier","clerk_delete_organization","clerk_delete_user","clerk_get_jwt_template","clerk_get_organization","clerk_get_session","clerk_get_user","clerk_get_user_oauth_token","clerk_list_allowlist_identifiers","clerk_list_blocklist_identifiers","clerk_list_jwt_templates","clerk_list_organization_invitations","clerk_list_organization_memberships","clerk_list_organizations","clerk_list_sessions","clerk_list_users","clerk_lock_user","clerk_remove_organization_member","clerk_revoke_actor_token","clerk_revoke_session","clerk_unban_user","clerk_unlock_user","clerk_update_organization","clerk_update_organization_membership","clerk_update_user","clickhouse_count_rows","clickhouse_create_database","clickhouse_create_table","clickhouse_delete","clickhouse_describe_table","clickhouse_drop_database","clickhouse_drop_partition","clickhouse_drop_table","clickhouse_execute","clickhouse_insert","clickhouse_insert_rows","clickhouse_introspect","clickhouse_kill_query","clickhouse_list_clusters","clickhouse_list_databases","clickhouse_list_mutations","clickhouse_list_partitions","clickhouse_list_running_queries","clickhouse_list_tables","clickhouse_optimize_table","clickhouse_query","clickhouse_rename_table","clickhouse_show_create_table","clickhouse_table_stats","clickhouse_truncate_table","clickhouse_update","clickup_add_tag_to_task","clickup_create_checklist","clickup_create_checklist_item","clickup_create_comment","clickup_create_folder","clickup_create_list","clickup_create_task","clickup_create_time_entry","clickup_delete_checklist","clickup_delete_checklist_item","clickup_delete_comment","clickup_delete_task","clickup_delete_time_entry","clickup_get_comments","clickup_get_custom_fields","clickup_get_folders","clickup_get_list_members","clickup_get_lists","clickup_get_running_timer","clickup_get_space_tags","clickup_get_spaces","clickup_get_task","clickup_get_task_members","clickup_get_tasks","clickup_get_time_entries","clickup_get_workspaces","clickup_remove_custom_field_value","clickup_remove_tag_from_task","clickup_search_tasks","clickup_set_custom_field_value","clickup_start_timer","clickup_stop_timer","clickup_update_checklist","clickup_update_checklist_item","clickup_update_comment","clickup_update_task","clickup_update_time_entry","clickup_upload_attachment","cloudflare_create_access_application","cloudflare_create_access_policy","cloudflare_create_access_service_token","cloudflare_create_dns_record","cloudflare_create_r2_bucket","cloudflare_create_rate_limit_rule","cloudflare_create_ruleset","cloudflare_create_ruleset_rule","cloudflare_create_zone","cloudflare_delete_access_application","cloudflare_delete_access_policy","cloudflare_delete_dns_record","cloudflare_delete_r2_bucket","cloudflare_delete_ruleset_rule","cloudflare_delete_zone","cloudflare_dns_analytics","cloudflare_get_access_application","cloudflare_get_r2_bucket","cloudflare_get_ruleset","cloudflare_get_ruleset_entrypoint","cloudflare_get_tunnel","cloudflare_get_tunnel_configuration","cloudflare_get_worker_script_settings","cloudflare_get_zone","cloudflare_get_zone_settings","cloudflare_list_access_applications","cloudflare_list_access_groups","cloudflare_list_access_identity_providers","cloudflare_list_access_policies","cloudflare_list_access_service_tokens","cloudflare_list_certificates","cloudflare_list_dns_records","cloudflare_list_managed_ruleset_overrides","cloudflare_list_r2_buckets","cloudflare_list_rate_limit_rules","cloudflare_list_rulesets","cloudflare_list_tunnels","cloudflare_list_worker_routes","cloudflare_list_worker_scripts","cloudflare_list_zones","cloudflare_purge_cache","cloudflare_revoke_access_service_token","cloudflare_update_access_application","cloudflare_update_access_policy","cloudflare_update_dns_record","cloudflare_update_rate_limit_rule","cloudflare_update_ruleset_rule","cloudflare_update_zone_setting","cloudformation_cancel_update_stack","cloudformation_create_change_set","cloudformation_create_stack","cloudformation_delete_stack","cloudformation_describe_change_set","cloudformation_describe_stack_drift_detection_status","cloudformation_describe_stack_events","cloudformation_describe_stacks","cloudformation_detect_stack_drift","cloudformation_execute_change_set","cloudformation_get_template","cloudformation_get_template_summary","cloudformation_list_stack_resources","cloudformation_update_stack","cloudformation_validate_template","cloudtrail_cancel_query","cloudtrail_describe_query","cloudtrail_describe_trails","cloudtrail_get_event_data_store","cloudtrail_get_event_selectors","cloudtrail_get_insight_selectors","cloudtrail_get_query_results","cloudtrail_get_trail","cloudtrail_get_trail_status","cloudtrail_list_event_data_stores","cloudtrail_list_tags","cloudtrail_list_trails","cloudtrail_lookup_events","cloudtrail_start_query","cloudwatch_describe_alarm_history","cloudwatch_describe_alarms","cloudwatch_describe_log_groups","cloudwatch_describe_log_streams","cloudwatch_filter_log_events","cloudwatch_get_log_events","cloudwatch_get_metric_statistics","cloudwatch_list_metrics","cloudwatch_mute_alarm","cloudwatch_put_log_group_retention","cloudwatch_put_metric_data","cloudwatch_query_logs","cloudwatch_unmute_alarm","coda_add_custom_domain","coda_add_permission","coda_change_user_role","coda_create_doc","coda_create_folder","coda_create_page","coda_delete_custom_domain","coda_delete_doc","coda_delete_folder","coda_delete_page","coda_delete_page_content","coda_delete_permission","coda_delete_row","coda_delete_rows","coda_export_page","coda_get_acl_settings","coda_get_analytics_last_updated","coda_get_column","coda_get_control","coda_get_custom_domain_provider","coda_get_doc","coda_get_doc_analytics_summary","coda_get_folder","coda_get_formula","coda_get_mutation_status","coda_get_page","coda_get_page_content","coda_get_page_export_status","coda_get_row","coda_get_sharing_metadata","coda_get_table","coda_list_categories","coda_list_columns","coda_list_controls","coda_list_custom_domains","coda_list_doc_analytics","coda_list_docs","coda_list_folder_children","coda_list_folders","coda_list_formulas","coda_list_page_analytics","coda_list_pages","coda_list_permissions","coda_list_rows","coda_list_tables","coda_list_workspace_members","coda_list_workspace_roles","coda_publish_doc","coda_push_button","coda_resolve_browser_link","coda_search_principals","coda_trigger_automation","coda_unpublish_doc","coda_update_acl_settings","coda_update_doc","coda_update_folder","coda_update_page","coda_update_row","coda_upsert_rows","coda_whoami","codepipeline_disable_stage_transition","codepipeline_enable_stage_transition","codepipeline_get_pipeline","codepipeline_get_pipeline_execution","codepipeline_get_pipeline_state","codepipeline_list_action_executions","codepipeline_list_pipeline_executions","codepipeline_list_pipelines","codepipeline_put_approval_result","codepipeline_retry_stage_execution","codepipeline_start_execution","codepipeline_stop_execution","confluence_add_label","confluence_create_blogpost","confluence_create_comment","confluence_create_page","confluence_create_page_property","confluence_create_space","confluence_create_space_property","confluence_delete_attachment","confluence_delete_blogpost","confluence_delete_comment","confluence_delete_label","confluence_delete_page","confluence_delete_page_property","confluence_delete_space","confluence_delete_space_property","confluence_get_blogpost","confluence_get_page_ancestors","confluence_get_page_children","confluence_get_page_descendants","confluence_get_page_version","confluence_get_pages_by_label","confluence_get_space","confluence_get_task","confluence_get_user","confluence_list_attachments","confluence_list_blogposts","confluence_list_blogposts_in_space","confluence_list_comments","confluence_list_labels","confluence_list_page_properties","confluence_list_page_versions","confluence_list_pages_in_space","confluence_list_space_labels","confluence_list_space_permissions","confluence_list_space_properties","confluence_list_spaces","confluence_list_tasks","confluence_retrieve","confluence_search","confluence_search_in_space","confluence_update","confluence_update_blogpost","confluence_update_comment","confluence_update_space","confluence_update_task","confluence_upload_attachment","context_dev_classify_naics","context_dev_classify_sic","context_dev_crawl","context_dev_extract","context_dev_extract_product","context_dev_extract_products","context_dev_get_brand","context_dev_get_brand_by_email","context_dev_get_brand_by_name","context_dev_get_brand_by_ticker","context_dev_identify_transaction","context_dev_map","context_dev_scrape_fonts","context_dev_scrape_html","context_dev_scrape_images","context_dev_scrape_markdown","context_dev_scrape_styleguide","context_dev_screenshot","context_dev_search","convex_action","convex_document_deltas","convex_list_documents","convex_list_tables","convex_mutation","convex_query","convex_run_function","crowdstrike_create_indicators","crowdstrike_delete_indicators","crowdstrike_delete_rtr_session","crowdstrike_execute_rtr_command","crowdstrike_get_alert_details","crowdstrike_get_case_details","crowdstrike_get_host_group_details","crowdstrike_get_indicator_details","crowdstrike_get_rtr_command_status","crowdstrike_get_sensor_aggregates","crowdstrike_get_sensor_details","crowdstrike_get_vulnerability_details","crowdstrike_init_rtr_session","crowdstrike_perform_host_action","crowdstrike_perform_host_group_action","crowdstrike_query_alerts","crowdstrike_query_cases","crowdstrike_query_host_groups","crowdstrike_query_indicators","crowdstrike_query_sensors","crowdstrike_query_vulnerabilities","crowdstrike_update_alerts","crowdstrike_update_indicators","crunchbase_autocomplete","crunchbase_get_acquisition","crunchbase_get_entity","crunchbase_get_entity_card","crunchbase_get_fields_metadata","crunchbase_get_funding_round","crunchbase_get_organization","crunchbase_get_person","crunchbase_list_deleted_entities","crunchbase_search_acquisitions","crunchbase_search_entities","crunchbase_search_funding_rounds","crunchbase_search_organizations","crunchbase_search_people","cursor_add_followup","cursor_add_followup_v2","cursor_delete_agent","cursor_delete_agent_v2","cursor_download_artifact","cursor_download_artifact_v2","cursor_get_agent","cursor_get_agent_v2","cursor_get_api_key_info","cursor_get_api_key_info_v2","cursor_get_conversation","cursor_get_conversation_v2","cursor_launch_agent","cursor_launch_agent_v2","cursor_list_agents","cursor_list_agents_v2","cursor_list_artifacts","cursor_list_artifacts_v2","cursor_list_models","cursor_list_models_v2","cursor_list_repositories","cursor_list_repositories_v2","cursor_stop_agent","cursor_stop_agent_v2","dagster_delete_run","dagster_get_asset","dagster_get_run","dagster_get_run_logs","dagster_launch_run","dagster_list_assets","dagster_list_jobs","dagster_list_runs","dagster_list_schedules","dagster_list_sensors","dagster_materialize_assets","dagster_reexecute_run","dagster_report_asset_materialization","dagster_start_schedule","dagster_start_sensor","dagster_stop_schedule","dagster_stop_sensor","dagster_terminate_run","dagster_wipe_asset","databricks_cancel_run","databricks_execute_sql","databricks_genie_agent_ask","databricks_genie_agent_list_items","databricks_genie_ask","databricks_genie_delete_conversation","databricks_genie_delete_message","databricks_genie_download_visualization","databricks_genie_execute_query","databricks_genie_get_message","databricks_genie_get_query_result","databricks_genie_get_space","databricks_genie_list_conversations","databricks_genie_list_messages","databricks_genie_list_spaces","databricks_genie_send_feedback","databricks_get_cluster","databricks_get_job","databricks_get_run","databricks_get_run_output","databricks_get_statement","databricks_list_clusters","databricks_list_jobs","databricks_list_runs","databricks_list_warehouses","databricks_run_job","datadog_add_incident_todo","datadog_cancel_downtime","datadog_create_dashboard","datadog_create_downtime","datadog_create_event","datadog_create_incident","datadog_create_monitor","datadog_create_slo","datadog_delete_dashboard","datadog_delete_slo","datadog_get_browser_synthetics_results","datadog_get_dashboard","datadog_get_incident","datadog_get_monitor","datadog_get_security_signal","datadog_get_slo","datadog_get_slo_history","datadog_get_synthetics_results","datadog_get_synthetics_test","datadog_list_dashboards","datadog_list_downtimes","datadog_list_incidents","datadog_list_monitors","datadog_list_security_rules","datadog_list_security_signals","datadog_list_services","datadog_list_slos","datadog_list_synthetics_tests","datadog_mute_monitor","datadog_query_logs","datadog_query_timeseries","datadog_search_spans","datadog_send_logs","datadog_submit_metrics","datadog_trigger_synthetics_tests","datadog_unmute_monitor","datadog_update_incident","datadog_update_security_signal_assignee","datadog_update_security_signal_state","datadog_update_slo","datadog_update_synthetics_status","datagma_enrich_company","datagma_enrich_person","datagma_find_email","datagma_find_phone","datagma_get_credits","daytona_create_sandbox","daytona_delete_sandbox","daytona_download_file","daytona_execute_command","daytona_get_sandbox","daytona_git_clone","daytona_list_files","daytona_list_sandboxes","daytona_run_code","daytona_start_sandbox","daytona_stop_sandbox","daytona_upload_file","deployed_block_executor","deployments_deploy","deployments_get_version","deployments_list_versions","deployments_promote","deployments_undeploy","devin_append_session_tags","devin_archive_session","devin_create_session","devin_get_session","devin_get_session_tags","devin_list_session_attachments","devin_list_session_messages","devin_list_sessions","devin_replace_session_tags","devin_send_message","devin_terminate_session","discord_add_reaction","discord_archive_thread","discord_assign_role","discord_ban_member","discord_bulk_delete_messages","discord_create_channel","discord_create_invite","discord_create_role","discord_create_thread","discord_create_webhook","discord_delete_channel","discord_delete_invite","discord_delete_message","discord_delete_role","discord_delete_webhook","discord_edit_message","discord_execute_webhook","discord_get_channel","discord_get_invite","discord_get_member","discord_get_messages","discord_get_pinned_messages","discord_get_server","discord_get_user","discord_get_webhook","discord_join_thread","discord_kick_member","discord_leave_thread","discord_list_channels","discord_list_roles","discord_pin_message","discord_remove_reaction","discord_remove_role","discord_send_message","discord_unban_member","discord_unpin_message","discord_update_channel","discord_update_member","discord_update_role","docusign_create_from_template","docusign_download_document","docusign_get_envelope","docusign_list_envelopes","docusign_list_recipients","docusign_list_templates","docusign_send_envelope","docusign_void_envelope","downdetector_get_company","downdetector_get_company_attribution","downdetector_get_company_baseline","downdetector_get_company_events","downdetector_get_company_incidents","downdetector_get_company_indicators","downdetector_get_company_last_15","downdetector_get_company_status","downdetector_get_provider","downdetector_get_reports","downdetector_get_site_companies","downdetector_list_categories","downdetector_list_incidents","downdetector_list_sites","downdetector_search_companies","dropbox_copy","dropbox_create_folder","dropbox_create_shared_link","dropbox_delete","dropbox_download","dropbox_download_v2","dropbox_get_metadata","dropbox_list_folder","dropbox_list_revisions","dropbox_list_shared_links","dropbox_move","dropbox_restore","dropbox_search","dropbox_upload","dropcontact_enrich_contact","dspy_chain_of_thought","dspy_predict","dspy_react","dub_bulk_create_links","dub_bulk_delete_links","dub_bulk_update_links","dub_create_link","dub_create_tag","dub_delete_link","dub_get_analytics","dub_get_events","dub_get_link","dub_get_links_count","dub_get_qr_code","dub_get_qr_code_v2","dub_list_domains","dub_list_folders","dub_list_links","dub_list_tags","dub_update_link","dub_upsert_link","duckduckgo_search","dynamodb_delete","dynamodb_get","dynamodb_introspect","dynamodb_put","dynamodb_query","dynamodb_scan","dynamodb_update","dynatrace_add_problem_comment","dynatrace_add_tags","dynatrace_close_problem","dynatrace_create_settings_object","dynatrace_create_slo","dynatrace_delete_problem_comment","dynatrace_delete_settings_object","dynatrace_delete_slo","dynatrace_delete_tag","dynatrace_execute_synthetic_monitors","dynatrace_get_attack","dynatrace_get_audit_logs","dynatrace_get_entity","dynatrace_get_event","dynatrace_get_metric","dynatrace_get_problem","dynatrace_get_problem_comment","dynatrace_get_security_problem","dynatrace_get_settings_object","dynatrace_get_slo","dynatrace_get_synthetic_batch","dynatrace_ingest_event","dynatrace_ingest_logs","dynatrace_ingest_metrics","dynatrace_list_attacks","dynatrace_list_entities","dynatrace_list_entity_types","dynatrace_list_events","dynatrace_list_metrics","dynatrace_list_problem_comments","dynatrace_list_problems","dynatrace_list_remediation_items","dynatrace_list_security_problems","dynatrace_list_settings_objects","dynatrace_list_settings_schemas","dynatrace_list_slos","dynatrace_list_synthetic_monitors","dynatrace_list_tags","dynatrace_mute_security_problem","dynatrace_mute_security_problems","dynatrace_query_metrics","dynatrace_search_logs","dynatrace_unmute_security_problem","dynatrace_unmute_security_problems","dynatrace_update_problem_comment","dynatrace_update_settings_object","dynatrace_update_slo","elasticsearch_bulk","elasticsearch_cluster_health","elasticsearch_cluster_stats","elasticsearch_count","elasticsearch_create_index","elasticsearch_delete_document","elasticsearch_delete_index","elasticsearch_get_document","elasticsearch_get_index","elasticsearch_index_document","elasticsearch_list_indices","elasticsearch_search","elasticsearch_update_document","elevenlabs_audio_isolation","elevenlabs_edit_voice_settings","elevenlabs_get_user","elevenlabs_get_voice","elevenlabs_get_voice_settings","elevenlabs_list_models","elevenlabs_list_voices","elevenlabs_sound_effects","elevenlabs_speech_to_speech","elevenlabs_tts","emailbison_attach_leads_to_campaign","emailbison_attach_tags_to_leads","emailbison_create_campaign","emailbison_create_lead","emailbison_create_tag","emailbison_get_lead","emailbison_list_campaigns","emailbison_list_leads","emailbison_list_replies","emailbison_list_tags","emailbison_update_campaign","emailbison_update_campaign_status","emailbison_update_lead","embeddings_cohere","embeddings_gemini","embeddings_mistral","embeddings_ollama","embeddings_openai","embeddings_openrouter","enrich_check_credits","enrich_company_funding","enrich_company_lookup","enrich_company_revenue","enrich_disposable_email_check","enrich_email_to_ip","enrich_email_to_person_lite","enrich_email_to_phone","enrich_email_to_profile","enrich_find_email","enrich_get_post_details","enrich_ip_to_company","enrich_linkedin_profile","enrich_linkedin_to_personal_email","enrich_linkedin_to_work_email","enrich_phone_finder","enrich_reverse_hash_lookup","enrich_sales_pointer_people","enrich_search_company","enrich_search_company_activities","enrich_search_company_employees","enrich_search_jobs","enrich_search_logo","enrich_search_people","enrich_search_people_activities","enrich_search_post_comments","enrich_search_post_comments_by_url","enrich_search_post_reactions","enrich_search_post_reactions_by_url","enrich_search_posts","enrich_search_similar_companies","enrich_verify_email","enrichment_run","enrow_find_email","enrow_verify_email","exa_agent","exa_answer","exa_find_similar_links","exa_get_contents","exa_search","extend_parser","extend_parser_v2","fathom_get_summary","fathom_get_transcript","fathom_list_meeting_types","fathom_list_meetings","fathom_list_team_members","fathom_list_teams","file_append","file_compress","file_create_folder","file_decompress","file_delete_folder","file_edit","file_fetch","file_get","file_get_content","file_list","file_manage_sharing","file_move","file_parser","file_parser_v2","file_parser_v3","file_read","file_restore_folder","file_search","file_update_folder","file_write","findymail_find_email_from_linkedin","findymail_find_email_from_name","findymail_find_emails_by_domain","findymail_find_employees","findymail_find_phone","findymail_get_company","findymail_get_credits","findymail_lookup_technologies","findymail_reverse_email_lookup","findymail_search_technologies","findymail_verify_email","firecrawl_agent","firecrawl_batch_scrape","firecrawl_batch_scrape_status","firecrawl_cancel_crawl","firecrawl_crawl","firecrawl_crawl_status","firecrawl_credit_usage","firecrawl_extract","firecrawl_extract_status","firecrawl_map","firecrawl_parse","firecrawl_scrape","firecrawl_search","fireflies_add_to_live_meeting","fireflies_create_bite","fireflies_delete_transcript","fireflies_get_transcript","fireflies_get_user","fireflies_list_bites","fireflies_list_contacts","fireflies_list_transcripts","fireflies_list_users","fireflies_upload_audio","flint_create_task","flint_generate_pages","flint_get_task","function_execute","gamma_check_status","gamma_generate","gamma_generate_from_template","gamma_list_folders","gamma_list_themes","github_add_assignees","github_add_assignees_v2","github_add_labels","github_add_labels_v2","github_cancel_workflow_run","github_cancel_workflow_run_v2","github_check_star","github_check_star_v2","github_close_issue","github_close_issue_v2","github_close_pr","github_close_pr_v2","github_comment","github_comment_v2","github_compare_commits","github_compare_commits_v2","github_create_branch","github_create_branch_v2","github_create_comment_reaction","github_create_comment_reaction_v2","github_create_file","github_create_file_v2","github_create_gist","github_create_gist_v2","github_create_issue","github_create_issue_reaction","github_create_issue_reaction_v2","github_create_issue_v2","github_create_milestone","github_create_milestone_v2","github_create_pr","github_create_pr_review","github_create_pr_review_v2","github_create_pr_v2","github_create_project","github_create_project_v2","github_create_release","github_create_release_v2","github_delete_branch","github_delete_branch_v2","github_delete_comment","github_delete_comment_reaction","github_delete_comment_reaction_v2","github_delete_comment_v2","github_delete_file","github_delete_file_v2","github_delete_gist","github_delete_gist_v2","github_delete_issue_reaction","github_delete_issue_reaction_v2","github_delete_milestone","github_delete_milestone_v2","github_delete_project","github_delete_project_v2","github_delete_release","github_delete_release_v2","github_fork_gist","github_fork_gist_v2","github_fork_repo","github_fork_repo_v2","github_get_branch","github_get_branch_protection","github_get_branch_protection_v2","github_get_branch_v2","github_get_commit","github_get_commit_v2","github_get_file_content","github_get_file_content_v2","github_get_gist","github_get_gist_v2","github_get_issue","github_get_issue_v2","github_get_latest_release","github_get_latest_release_v2","github_get_milestone","github_get_milestone_v2","github_get_pr_files","github_get_pr_files_v2","github_get_project","github_get_project_v2","github_get_readme","github_get_readme_v2","github_get_release","github_get_release_v2","github_get_tree","github_get_tree_v2","github_get_workflow","github_get_workflow_run","github_get_workflow_run_v2","github_get_workflow_v2","github_issue_comment","github_issue_comment_v2","github_job_logs","github_latest_commit","github_latest_commit_v2","github_list_branches","github_list_branches_v2","github_list_commits","github_list_commits_v2","github_list_forks","github_list_forks_v2","github_list_gists","github_list_gists_v2","github_list_issue_comments","github_list_issue_comments_v2","github_list_issues","github_list_issues_v2","github_list_milestones","github_list_milestones_v2","github_list_pr_comments","github_list_pr_comments_v2","github_list_projects","github_list_projects_v2","github_list_prs","github_list_prs_v2","github_list_releases","github_list_releases_v2","github_list_review_threads","github_list_stargazers","github_list_stargazers_v2","github_list_tags","github_list_tags_v2","github_list_workflow_runs","github_list_workflow_runs_v2","github_list_workflows","github_list_workflows_v2","github_merge_pr","github_merge_pr_v2","github_pr","github_pr_v2","github_remove_label","github_remove_label_v2","github_reply_review_thread","github_repo_info","github_repo_info_v2","github_request_reviewers","github_request_reviewers_v2","github_rerun_workflow","github_rerun_workflow_v2","github_resolve_review_thread","github_search_code","github_search_code_v2","github_search_commits","github_search_commits_v2","github_search_issues","github_search_issues_v2","github_search_repos","github_search_repos_v2","github_search_users","github_search_users_v2","github_star_gist","github_star_gist_v2","github_star_repo","github_star_repo_v2","github_status_check_rollup","github_trigger_workflow","github_trigger_workflow_v2","github_unstar_gist","github_unstar_gist_v2","github_unstar_repo","github_unstar_repo_v2","github_update_branch_protection","github_update_branch_protection_v2","github_update_comment","github_update_comment_v2","github_update_file","github_update_file_v2","github_update_gist","github_update_gist_v2","github_update_issue","github_update_issue_v2","github_update_milestone","github_update_milestone_v2","github_update_pr","github_update_pr_v2","github_update_project","github_update_project_v2","github_update_release","github_update_release_v2","gitlab_activate_user","gitlab_add_member","gitlab_add_saml_group_link","gitlab_approve_access_request","gitlab_approve_merge_request","gitlab_approve_user","gitlab_ban_user","gitlab_block_user","gitlab_cancel_pipeline","gitlab_compare_branches","gitlab_create_branch","gitlab_create_file","gitlab_create_issue","gitlab_create_issue_note","gitlab_create_merge_request","gitlab_create_merge_request_note","gitlab_create_pipeline","gitlab_create_release","gitlab_create_user","gitlab_deactivate_user","gitlab_delete_branch","gitlab_delete_issue","gitlab_delete_saml_group_link","gitlab_delete_user","gitlab_delete_user_identity","gitlab_deny_access_request","gitlab_get_file","gitlab_get_group","gitlab_get_issue","gitlab_get_job_log","gitlab_get_merge_request","gitlab_get_merge_request_changes","gitlab_get_pipeline","gitlab_get_project","gitlab_invite_member","gitlab_list_access_requests","gitlab_list_branches","gitlab_list_commits","gitlab_list_groups","gitlab_list_invitations","gitlab_list_issues","gitlab_list_members","gitlab_list_merge_requests","gitlab_list_pipeline_jobs","gitlab_list_pipelines","gitlab_list_projects","gitlab_list_releases","gitlab_list_repository_tree","gitlab_list_saml_group_links","gitlab_list_user_memberships","gitlab_merge_merge_request","gitlab_play_job","gitlab_reject_user","gitlab_remove_member","gitlab_retry_pipeline","gitlab_revoke_invitation","gitlab_search_users","gitlab_unban_user","gitlab_unblock_user","gitlab_update_file","gitlab_update_invitation","gitlab_update_issue","gitlab_update_member","gitlab_update_merge_request","gitlab_update_user","gmail_add_label","gmail_add_label_v2","gmail_archive","gmail_archive_v2","gmail_create_label_v2","gmail_delete","gmail_delete_draft_v2","gmail_delete_label_v2","gmail_delete_v2","gmail_draft","gmail_draft_v2","gmail_edit_draft_v2","gmail_get_draft_v2","gmail_get_thread_v2","gmail_list_drafts_v2","gmail_list_labels_v2","gmail_list_threads_v2","gmail_mark_read","gmail_mark_read_v2","gmail_mark_unread","gmail_mark_unread_v2","gmail_move","gmail_move_v2","gmail_read","gmail_read_v2","gmail_remove_label","gmail_remove_label_v2","gmail_search","gmail_search_v2","gmail_send","gmail_send_v2","gmail_trash_thread_v2","gmail_unarchive","gmail_unarchive_v2","gmail_untrash_thread_v2","gmail_update_label_v2","gong_aggregate_activity","gong_aggregate_by_period","gong_answered_scorecards","gong_ask_anything","gong_assign_flow_prospects","gong_create_call","gong_day_by_day_activity","gong_get_brief","gong_get_call","gong_get_call_transcript","gong_get_coaching","gong_get_extensive_calls","gong_get_folder_content","gong_get_logs","gong_get_prospect_flows","gong_get_user","gong_interaction_stats","gong_list_calls","gong_list_flows","gong_list_library_folders","gong_list_scorecards","gong_list_trackers","gong_list_users","gong_list_workspaces","gong_lookup_email","gong_lookup_phone","gong_purge_email_address","gong_purge_phone_number","gong_unassign_flow_prospects","google_ads_ad_performance","google_ads_campaign_performance","google_ads_list_ad_groups","google_ads_list_campaigns","google_ads_list_customers","google_ads_search","google_appsheet_add_rows","google_appsheet_delete_rows","google_appsheet_edit_rows","google_appsheet_find_rows","google_bigquery_create_dataset","google_bigquery_create_table","google_bigquery_delete_dataset","google_bigquery_delete_table","google_bigquery_get_query_results","google_bigquery_get_table","google_bigquery_insert_rows","google_bigquery_list_datasets","google_bigquery_list_table_data","google_bigquery_list_tables","google_bigquery_query","google_books_volume_details","google_books_volume_search","google_calendar_create","google_calendar_create_calendar","google_calendar_create_calendar_v2","google_calendar_create_v2","google_calendar_delete","google_calendar_delete_calendar","google_calendar_delete_calendar_v2","google_calendar_delete_v2","google_calendar_freebusy","google_calendar_freebusy_v2","google_calendar_get","google_calendar_get_v2","google_calendar_instances","google_calendar_instances_v2","google_calendar_invite","google_calendar_invite_v2","google_calendar_list","google_calendar_list_acl","google_calendar_list_acl_v2","google_calendar_list_calendars","google_calendar_list_calendars_v2","google_calendar_list_v2","google_calendar_move","google_calendar_move_v2","google_calendar_quick_add","google_calendar_quick_add_v2","google_calendar_respond","google_calendar_respond_v2","google_calendar_share_calendar","google_calendar_share_calendar_v2","google_calendar_unshare_calendar","google_calendar_unshare_calendar_v2","google_calendar_update","google_calendar_update_acl","google_calendar_update_acl_v2","google_calendar_update_calendar","google_calendar_update_calendar_v2","google_calendar_update_v2","google_contacts_create","google_contacts_delete","google_contacts_get","google_contacts_list","google_contacts_search","google_contacts_update","google_docs_create","google_docs_create_named_range","google_docs_create_paragraph_bullets","google_docs_delete_content_range","google_docs_delete_named_range","google_docs_delete_paragraph_bullets","google_docs_insert_image","google_docs_insert_page_break","google_docs_insert_table","google_docs_insert_text","google_docs_read","google_docs_replace_text","google_docs_update_paragraph_style","google_docs_update_text_style","google_docs_write","google_drive_copy","google_drive_create_comment","google_drive_create_folder","google_drive_delete","google_drive_delete_comment","google_drive_download","google_drive_export","google_drive_get_about","google_drive_get_content","google_drive_get_file","google_drive_get_revision","google_drive_list","google_drive_list_comments","google_drive_list_permissions","google_drive_list_revisions","google_drive_move","google_drive_search","google_drive_share","google_drive_trash","google_drive_unshare","google_drive_untrash","google_drive_update","google_drive_upload","google_forms_batch_update","google_forms_create_form","google_forms_create_watch","google_forms_delete_watch","google_forms_get_form","google_forms_get_responses","google_forms_list_watches","google_forms_renew_watch","google_forms_set_publish_settings","google_groups_add_alias","google_groups_add_member","google_groups_create_group","google_groups_delete_group","google_groups_get_group","google_groups_get_member","google_groups_get_settings","google_groups_has_member","google_groups_list_aliases","google_groups_list_groups","google_groups_list_members","google_groups_remove_alias","google_groups_remove_member","google_groups_update_group","google_groups_update_member","google_groups_update_settings","google_maps_air_quality","google_maps_directions","google_maps_distance_matrix","google_maps_elevation","google_maps_geocode","google_maps_geolocate","google_maps_place_details","google_maps_places_nearby","google_maps_places_search","google_maps_pollen","google_maps_reverse_geocode","google_maps_snap_to_roads","google_maps_solar","google_maps_speed_limits","google_maps_timezone","google_maps_validate_address","google_meet_create_space","google_meet_end_conference","google_meet_get_conference_record","google_meet_get_space","google_meet_list_conference_records","google_meet_list_participants","google_pagespeed_analyze","google_search","google_sheets_append","google_sheets_append_v2","google_sheets_batch_clear_v2","google_sheets_batch_get_v2","google_sheets_batch_update_v2","google_sheets_clear_v2","google_sheets_copy_sheet_v2","google_sheets_create_spreadsheet_v2","google_sheets_delete_rows_v2","google_sheets_delete_sheet_v2","google_sheets_delete_spreadsheet_v2","google_sheets_get_spreadsheet_v2","google_sheets_read","google_sheets_read_v2","google_sheets_update","google_sheets_update_v2","google_sheets_write","google_sheets_write_v2","google_slides_add_image","google_slides_add_slide","google_slides_batch_update","google_slides_copy_presentation","google_slides_create","google_slides_create_line","google_slides_create_paragraph_bullets","google_slides_create_shape","google_slides_create_sheets_chart","google_slides_create_table","google_slides_create_video","google_slides_delete_object","google_slides_delete_paragraph_bullets","google_slides_delete_table_column","google_slides_delete_table_row","google_slides_delete_text","google_slides_duplicate_object","google_slides_export_presentation","google_slides_get_page","google_slides_get_thumbnail","google_slides_group_objects","google_slides_insert_table_columns","google_slides_insert_table_rows","google_slides_insert_text","google_slides_merge_table_cells","google_slides_read","google_slides_refresh_sheets_chart","google_slides_replace_all_shapes_with_image","google_slides_replace_all_shapes_with_sheets_chart","google_slides_replace_all_text","google_slides_replace_image","google_slides_reroute_line","google_slides_ungroup_objects","google_slides_unmerge_table_cells","google_slides_update_image_properties","google_slides_update_line_category","google_slides_update_line_properties","google_slides_update_page_element_alt_text","google_slides_update_page_element_transform","google_slides_update_page_elements_z_order","google_slides_update_page_properties","google_slides_update_paragraph_style","google_slides_update_shape_properties","google_slides_update_slide_properties","google_slides_update_slides_position","google_slides_update_table_border_properties","google_slides_update_table_cell_properties","google_slides_update_table_column_properties","google_slides_update_table_row_properties","google_slides_update_text_style","google_slides_update_video_properties","google_slides_write","google_tasks_create","google_tasks_delete","google_tasks_get","google_tasks_list","google_tasks_list_task_lists","google_tasks_update","google_translate_detect","google_translate_text","google_vault_add_held_accounts","google_vault_add_matters_permissions","google_vault_close_matters","google_vault_create_matters","google_vault_create_matters_export","google_vault_create_matters_holds","google_vault_create_saved_query","google_vault_delete_matters","google_vault_delete_matters_export","google_vault_delete_matters_holds","google_vault_delete_saved_query","google_vault_download_export_file","google_vault_list_matters","google_vault_list_matters_export","google_vault_list_matters_holds","google_vault_list_saved_queries","google_vault_remove_held_accounts","google_vault_remove_matters_permissions","google_vault_reopen_matters","google_vault_undelete_matters","google_vault_update_matters","google_vault_update_matters_holds","grafana_check_data_source_health","grafana_create_alert_rule","grafana_create_annotation","grafana_create_contact_point","grafana_create_dashboard","grafana_create_folder","grafana_delete_alert_rule","grafana_delete_annotation","grafana_delete_contact_point","grafana_delete_dashboard","grafana_delete_folder","grafana_get_alert_rule","grafana_get_alert_rule_group","grafana_get_dashboard","grafana_get_data_source","grafana_get_folder","grafana_get_health","grafana_list_alert_rules","grafana_list_annotations","grafana_list_contact_points","grafana_list_dashboards","grafana_list_data_sources","grafana_list_folders","grafana_move_folder","grafana_query_data_source","grafana_update_alert_rule","grafana_update_annotation","grafana_update_contact_point","grafana_update_dashboard","grafana_update_folder","grain_create_hook","grain_create_hook_v2","grain_delete_hook","grain_delete_hook_v2","grain_get_recording","grain_get_transcript","grain_list_hooks","grain_list_hooks_v2","grain_list_meeting_types","grain_list_recordings","grain_list_teams","grain_list_views","granola_create_webhook_endpoint","granola_delete_webhook_endpoint","granola_get_note","granola_get_transcript","granola_list_audit_events","granola_list_folders","granola_list_notes","granola_list_webhook_endpoints","granola_update_webhook_endpoint","greenhouse_get_application","greenhouse_get_candidate","greenhouse_get_job","greenhouse_get_user","greenhouse_list_applications","greenhouse_list_candidates","greenhouse_list_departments","greenhouse_list_job_stages","greenhouse_list_jobs","greenhouse_list_offices","greenhouse_list_users","greptile_index_repo","greptile_query","greptile_search","greptile_status","guardrails_validate","harmonic_batch_get_people","harmonic_clear_people_saved_search_net_new_results","harmonic_enrich_person","harmonic_get_company_employees","harmonic_get_email_enrichment_job","harmonic_get_email_enrichment_usage","harmonic_get_enrichment_status","harmonic_get_people_saved_search_net_new_results","harmonic_get_people_saved_search_results","harmonic_get_person","harmonic_list_people_saved_searches","harmonic_search_people_scout","harmonic_submit_email_enrichment_job","hex_cancel_run","hex_create_collection","hex_create_group","hex_deactivate_user","hex_delete_group","hex_get_collection","hex_get_data_connection","hex_get_group","hex_get_project","hex_get_project_runs","hex_get_queried_tables","hex_get_run_status","hex_list_collections","hex_list_data_connections","hex_list_groups","hex_list_projects","hex_list_users","hex_run_project","hex_update_collection","hex_update_group","hex_update_project","http_request","hubspot_add_list_memberships","hubspot_create_appointment","hubspot_create_association","hubspot_create_company","hubspot_create_contact","hubspot_create_deal","hubspot_create_email","hubspot_create_line_item","hubspot_create_list","hubspot_create_note","hubspot_create_ticket","hubspot_delete_association","hubspot_delete_company","hubspot_delete_contact","hubspot_delete_deal","hubspot_delete_line_item","hubspot_delete_ticket","hubspot_get_appointment","hubspot_get_association_labels","hubspot_get_cart","hubspot_get_company","hubspot_get_contact","hubspot_get_deal","hubspot_get_email","hubspot_get_line_item","hubspot_get_list","hubspot_get_list_memberships","hubspot_get_marketing_event","hubspot_get_note","hubspot_get_properties","hubspot_get_quote","hubspot_get_ticket","hubspot_get_users","hubspot_list_appointments","hubspot_list_associations","hubspot_list_carts","hubspot_list_companies","hubspot_list_contacts","hubspot_list_deals","hubspot_list_emails","hubspot_list_line_items","hubspot_list_lists","hubspot_list_marketing_events","hubspot_list_notes","hubspot_list_owners","hubspot_list_quotes","hubspot_list_tickets","hubspot_remove_list_memberships","hubspot_search_companies","hubspot_search_contacts","hubspot_search_deals","hubspot_search_emails","hubspot_search_line_items","hubspot_search_notes","hubspot_search_quotes","hubspot_search_tickets","hubspot_update_appointment","hubspot_update_company","hubspot_update_contact","hubspot_update_deal","hubspot_update_line_item","hubspot_update_ticket","huggingface_chat","hunter_companies_find","hunter_discover","hunter_domain_search","hunter_email_count","hunter_email_finder","hunter_email_verifier","iam_add_user_to_group","iam_attach_role_policy","iam_attach_user_policy","iam_create_access_key","iam_create_role","iam_create_user","iam_delete_access_key","iam_delete_role","iam_delete_user","iam_detach_role_policy","iam_detach_user_policy","iam_get_policy","iam_get_role","iam_get_user","iam_list_access_keys","iam_list_attached_role_policies","iam_list_attached_user_policies","iam_list_groups","iam_list_policies","iam_list_roles","iam_list_users","iam_remove_user_from_group","iam_simulate_principal_policy","iam_update_access_key","icypeas_find_email","icypeas_verify_email","identity_center_check_assignment_deletion_status","identity_center_check_assignment_status","identity_center_create_account_assignment","identity_center_delete_account_assignment","identity_center_describe_account","identity_center_describe_group","identity_center_describe_user","identity_center_get_group","identity_center_get_user","identity_center_list_account_assignments","identity_center_list_accounts","identity_center_list_assignments_for_account","identity_center_list_group_memberships","identity_center_list_groups","identity_center_list_instances","identity_center_list_permission_sets","image_generate","incidentio_actions_create","incidentio_actions_list","incidentio_actions_show","incidentio_actions_update","incidentio_alert_events_create","incidentio_alerts_list","incidentio_alerts_resolve","incidentio_alerts_show","incidentio_catalog_entries_list","incidentio_catalog_types_list","incidentio_custom_fields_create","incidentio_custom_fields_delete","incidentio_custom_fields_list","incidentio_custom_fields_show","incidentio_custom_fields_update","incidentio_escalation_paths_create","incidentio_escalation_paths_delete","incidentio_escalation_paths_list","incidentio_escalation_paths_show","incidentio_escalation_paths_update","incidentio_escalations_cancel","incidentio_escalations_create","incidentio_escalations_list","incidentio_escalations_show","incidentio_follow_ups_create","incidentio_follow_ups_list","incidentio_follow_ups_show","incidentio_follow_ups_update","incidentio_incident_alerts_list","incidentio_incident_memberships_create","incidentio_incident_memberships_revoke","incidentio_incident_participants_list","incidentio_incident_roles_create","incidentio_incident_roles_delete","incidentio_incident_roles_list","incidentio_incident_roles_show","incidentio_incident_roles_update","incidentio_incident_statuses_list","incidentio_incident_timestamps_list","incidentio_incident_timestamps_show","incidentio_incident_types_list","incidentio_incident_updates_list","incidentio_incidents_create","incidentio_incidents_list","incidentio_incidents_show","incidentio_incidents_update","incidentio_on_call_now","incidentio_schedule_entries_list","incidentio_schedule_overrides_create","incidentio_schedule_overrides_list","incidentio_schedules_create","incidentio_schedules_delete","incidentio_schedules_list","incidentio_schedules_show","incidentio_schedules_update","incidentio_severities_list","incidentio_teams_list","incidentio_teams_show","incidentio_users_list","incidentio_users_show","incidentio_workflows_create","incidentio_workflows_delete","incidentio_workflows_list","incidentio_workflows_show","incidentio_workflows_update","infisical_create_secret","infisical_delete_secret","infisical_get_secret","infisical_list_secrets","infisical_update_secret","instagram_delete_comment","instagram_download_media","instagram_get_account_insights","instagram_get_container_status","instagram_get_conversation_messages","instagram_get_media","instagram_get_media_insights","instagram_get_message","instagram_get_profile","instagram_get_publishing_limit","instagram_hide_comment","instagram_list_comments","instagram_list_conversations","instagram_list_media","instagram_list_stories","instagram_private_reply","instagram_publish_carousel","instagram_publish_image","instagram_publish_reel","instagram_publish_story","instagram_publish_video","instagram_reply_to_comment","instagram_send_text_message","instagram_set_comments_enabled","instantly_activate_campaign","instantly_create_campaign","instantly_create_lead","instantly_create_lead_list","instantly_delete_campaign","instantly_delete_leads","instantly_get_lead","instantly_list_campaigns","instantly_list_emails","instantly_list_lead_lists","instantly_list_leads","instantly_patch_campaign","instantly_patch_lead","instantly_pause_campaign","instantly_reply_to_email","instantly_update_lead_interest_status","intercom_assign_conversation_v2","intercom_attach_contact_to_company_v2","intercom_close_conversation_v2","intercom_create_company","intercom_create_company_v2","intercom_create_contact","intercom_create_contact_v2","intercom_create_event_v2","intercom_create_message","intercom_create_message_v2","intercom_create_note_v2","intercom_create_tag_v2","intercom_create_ticket","intercom_create_ticket_v2","intercom_delete_contact","intercom_delete_contact_v2","intercom_detach_contact_from_company_v2","intercom_get_company","intercom_get_company_v2","intercom_get_contact","intercom_get_contact_v2","intercom_get_conversation","intercom_get_conversation_v2","intercom_get_ticket","intercom_get_ticket_v2","intercom_list_admins_v2","intercom_list_companies","intercom_list_companies_v2","intercom_list_contacts","intercom_list_contacts_v2","intercom_list_conversations","intercom_list_conversations_v2","intercom_list_tags_v2","intercom_open_conversation_v2","intercom_reply_conversation","intercom_reply_conversation_v2","intercom_search_contacts","intercom_search_contacts_v2","intercom_search_conversations","intercom_search_conversations_v2","intercom_snooze_conversation_v2","intercom_tag_contact_v2","intercom_tag_conversation_v2","intercom_untag_contact_v2","intercom_update_contact","intercom_update_contact_v2","intercom_update_ticket_v2","jina_read_url","jina_search","jira_add_attachment","jira_add_comment","jira_add_watcher","jira_add_worklog","jira_assign_issue","jira_bulk_read","jira_create_issue_link","jira_delete_attachment","jira_delete_comment","jira_delete_issue","jira_delete_issue_link","jira_delete_worklog","jira_get_attachments","jira_get_comments","jira_get_fields","jira_get_project","jira_get_transitions","jira_get_users","jira_get_worklogs","jira_list_issue_types","jira_list_projects","jira_remove_watcher","jira_retrieve","jira_search_issues","jira_search_users","jira_transition_issue","jira_update","jira_update_comment","jira_update_worklog","jira_write","jotform_add_label_resources","jotform_clone_form","jotform_create_form","jotform_create_label","jotform_create_question","jotform_create_questions","jotform_create_report","jotform_create_submission","jotform_create_submissions","jotform_create_webhook","jotform_delete_form","jotform_delete_label","jotform_delete_question","jotform_delete_report","jotform_delete_submission","jotform_delete_webhook","jotform_get_form","jotform_get_form_properties","jotform_get_history","jotform_get_label","jotform_get_question","jotform_get_report","jotform_get_settings","jotform_get_submission","jotform_get_usage","jotform_get_user","jotform_list_form_files","jotform_list_form_reports","jotform_list_form_submissions","jotform_list_forms","jotform_list_label_resources","jotform_list_labels","jotform_list_questions","jotform_list_reports","jotform_list_submissions","jotform_list_subusers","jotform_list_webhooks","jotform_remove_label_resources","jotform_update_form_properties","jotform_update_label","jotform_update_question","jotform_update_settings","jotform_update_submission","jsm_add_comment","jsm_add_customer","jsm_add_organization","jsm_add_participants","jsm_answer_approval","jsm_attach_form","jsm_copy_forms","jsm_create_object","jsm_create_organization","jsm_create_request","jsm_delete_form","jsm_delete_object","jsm_externalise_form","jsm_get_approvals","jsm_get_comments","jsm_get_customers","jsm_get_form","jsm_get_form_answers","jsm_get_form_structure","jsm_get_form_templates","jsm_get_issue_forms","jsm_get_object","jsm_get_object_schema","jsm_get_object_type_attributes","jsm_get_organizations","jsm_get_participants","jsm_get_queues","jsm_get_request","jsm_get_request_type_fields","jsm_get_request_types","jsm_get_requests","jsm_get_service_desks","jsm_get_sla","jsm_get_transitions","jsm_internalise_form","jsm_list_object_schemas","jsm_list_object_types","jsm_reopen_form","jsm_save_form_answers","jsm_search_objects_aql","jsm_submit_form","jsm_transition_request","jsm_update_object","jupyter_copy_content","jupyter_create_file","jupyter_create_session","jupyter_delete_content","jupyter_delete_session","jupyter_get_content","jupyter_get_content_v2","jupyter_interrupt_kernel","jupyter_list_contents","jupyter_list_kernels","jupyter_list_kernelspecs","jupyter_list_sessions","jupyter_rename_content","jupyter_restart_kernel","jupyter_start_kernel","jupyter_stop_kernel","jupyter_upload_file","kalshi_amend_order","kalshi_amend_order_v2","kalshi_cancel_order","kalshi_cancel_order_v2","kalshi_create_order","kalshi_create_order_v2","kalshi_get_balance","kalshi_get_balance_v2","kalshi_get_candlesticks","kalshi_get_candlesticks_v2","kalshi_get_event","kalshi_get_event_candlesticks","kalshi_get_event_candlesticks_v2","kalshi_get_event_v2","kalshi_get_events","kalshi_get_events_v2","kalshi_get_exchange_announcements","kalshi_get_exchange_announcements_v2","kalshi_get_exchange_schedule","kalshi_get_exchange_schedule_v2","kalshi_get_exchange_status","kalshi_get_exchange_status_v2","kalshi_get_fills","kalshi_get_fills_v2","kalshi_get_market","kalshi_get_market_v2","kalshi_get_markets","kalshi_get_markets_v2","kalshi_get_order","kalshi_get_order_v2","kalshi_get_orderbook","kalshi_get_orderbook_v2","kalshi_get_orders","kalshi_get_orders_v2","kalshi_get_positions","kalshi_get_positions_v2","kalshi_get_series_by_ticker","kalshi_get_series_by_ticker_v2","kalshi_get_series_list","kalshi_get_series_list_v2","kalshi_get_settlements","kalshi_get_settlements_v2","kalshi_get_trades","kalshi_get_trades_v2","ketch_get_consent","ketch_get_subscriptions","ketch_invoke_right","ketch_set_consent","ketch_set_subscriptions","knowledge_create_document","knowledge_delete_chunk","knowledge_delete_document","knowledge_get_connector","knowledge_get_document","knowledge_list_chunks","knowledge_list_connectors","knowledge_list_documents","knowledge_list_tags","knowledge_search","knowledge_trigger_sync","knowledge_update_chunk","knowledge_upload_chunk","knowledge_upsert_document","lambda_add_permission","lambda_create_alias","lambda_create_event_source_mapping","lambda_create_function","lambda_create_function_url_config","lambda_delete_alias","lambda_delete_event_source_mapping","lambda_delete_function","lambda_delete_function_concurrency","lambda_delete_function_event_invoke_config","lambda_delete_function_url_config","lambda_delete_provisioned_concurrency_config","lambda_get_account_settings","lambda_get_alias","lambda_get_event_source_mapping","lambda_get_function","lambda_get_function_concurrency","lambda_get_function_configuration","lambda_get_function_event_invoke_config","lambda_get_function_recursion_config","lambda_get_function_url_config","lambda_get_layer_version","lambda_get_policy","lambda_get_provisioned_concurrency_config","lambda_get_runtime_management_config","lambda_invoke","lambda_list_aliases","lambda_list_event_source_mappings","lambda_list_function_event_invoke_configs","lambda_list_function_url_configs","lambda_list_functions","lambda_list_layer_versions","lambda_list_layers","lambda_list_provisioned_concurrency_configs","lambda_list_tags","lambda_list_versions_by_function","lambda_publish_version","lambda_put_function_concurrency","lambda_put_function_event_invoke_config","lambda_put_function_recursion_config","lambda_put_provisioned_concurrency_config","lambda_put_runtime_management_config","lambda_remove_permission","lambda_tag_resource","lambda_untag_resource","lambda_update_alias","lambda_update_event_source_mapping","lambda_update_function_code","lambda_update_function_configuration","lambda_update_function_url_config","langsmith_create_feedback","langsmith_create_run","langsmith_create_runs_batch","langsmith_get_run","langsmith_update_run","latex_compile","latex_get_package","latex_list_fonts","latex_search_packages","launchdarkly_create_flag","launchdarkly_delete_flag","launchdarkly_get_audit_log","launchdarkly_get_flag","launchdarkly_get_flag_status","launchdarkly_list_environments","launchdarkly_list_flags","launchdarkly_list_members","launchdarkly_list_projects","launchdarkly_list_segments","launchdarkly_toggle_flag","launchdarkly_update_flag","leadmagic_company_search","leadmagic_email_to_profile","leadmagic_find_email","leadmagic_find_mobile","leadmagic_get_credits","leadmagic_profile_search","leadmagic_profile_to_email","leadmagic_role_finder","leadmagic_validate_email","lemlist_get_activities","lemlist_get_lead","lemlist_send_email","linear_add_label_to_issue","linear_add_label_to_project","linear_archive_issue","linear_archive_label","linear_archive_project","linear_create_attachment","linear_create_comment","linear_create_customer","linear_create_customer_request","linear_create_customer_status","linear_create_customer_tier","linear_create_cycle","linear_create_favorite","linear_create_issue","linear_create_issue_relation","linear_create_label","linear_create_project","linear_create_project_label","linear_create_project_milestone","linear_create_project_status","linear_create_project_update","linear_create_workflow_state","linear_delete_attachment","linear_delete_comment","linear_delete_customer","linear_delete_customer_status","linear_delete_customer_tier","linear_delete_issue","linear_delete_issue_relation","linear_delete_project","linear_delete_project_label","linear_delete_project_milestone","linear_delete_project_status","linear_get_active_cycle","linear_get_customer","linear_get_cycle","linear_get_issue","linear_get_project","linear_get_viewer","linear_list_attachments","linear_list_comments","linear_list_customer_requests","linear_list_customer_statuses","linear_list_customer_tiers","linear_list_customers","linear_list_cycles","linear_list_favorites","linear_list_issue_relations","linear_list_labels","linear_list_notifications","linear_list_project_labels","linear_list_project_milestones","linear_list_project_statuses","linear_list_project_updates","linear_list_projects","linear_list_teams","linear_list_users","linear_list_workflow_states","linear_merge_customers","linear_read_issues","linear_remove_label_from_issue","linear_remove_label_from_project","linear_search_issues","linear_unarchive_issue","linear_update_attachment","linear_update_comment","linear_update_customer","linear_update_customer_request","linear_update_customer_status","linear_update_customer_tier","linear_update_issue","linear_update_label","linear_update_notification","linear_update_project","linear_update_project_label","linear_update_project_milestone","linear_update_project_status","linear_update_workflow_state","linkedin_get_profile","linkedin_share_post","linkup_search","linq_add_participant","linq_check_imessage","linq_check_rcs","linq_create_attachment","linq_create_chat","linq_create_contact_card","linq_create_webhook_subscription","linq_delete_attachment","linq_delete_message","linq_delete_webhook_subscription","linq_edit_message","linq_get_attachment","linq_get_chat","linq_get_contact_card","linq_get_message","linq_get_webhook_subscription","linq_leave_chat","linq_list_chats","linq_list_messages","linq_list_phone_numbers","linq_list_thread","linq_list_webhook_events","linq_list_webhook_subscriptions","linq_mark_chat_read","linq_react_to_message","linq_remove_participant","linq_send_message","linq_send_voice_memo","linq_share_contact_card","linq_start_typing","linq_stop_typing","linq_update_chat","linq_update_contact_card","linq_update_webhook_subscription","llm_chat","logfire_get_token_info","logfire_get_trace","logfire_query","logfire_search_records","logrocket_create_release","logrocket_get_audit_logs","logrocket_get_highlights","logrocket_identify_user","logrocket_list_exported_sessions","logrocket_request_highlights","logs_get","logs_get_execution","logs_get_run_details","logs_query","logs_query_runs","loops_check_contact_suppression","loops_create_contact","loops_create_contact_property","loops_delete_contact","loops_find_contact","loops_get_transactional_email","loops_list_contact_properties","loops_list_mailing_lists","loops_list_transactional_emails","loops_remove_contact_suppression","loops_send_event","loops_send_transactional_email","loops_update_contact","luma_add_guests","luma_cancel_event","luma_create_event","luma_get_event","luma_get_guest","luma_get_guests","luma_list_events","luma_lookup_event","luma_send_invites","luma_update_event","luma_update_guest_status","mailchimp_add_member","mailchimp_add_member_tags","mailchimp_add_or_update_member","mailchimp_add_segment_member","mailchimp_add_subscriber_to_automation","mailchimp_archive_member","mailchimp_create_audience","mailchimp_create_batch_operation","mailchimp_create_campaign","mailchimp_create_interest","mailchimp_create_interest_category","mailchimp_create_landing_page","mailchimp_create_merge_field","mailchimp_create_segment","mailchimp_create_template","mailchimp_delete_audience","mailchimp_delete_batch_operation","mailchimp_delete_campaign","mailchimp_delete_interest","mailchimp_delete_interest_category","mailchimp_delete_landing_page","mailchimp_delete_member","mailchimp_delete_merge_field","mailchimp_delete_segment","mailchimp_delete_template","mailchimp_get_audience","mailchimp_get_audiences","mailchimp_get_automation","mailchimp_get_automations","mailchimp_get_batch_operation","mailchimp_get_batch_operations","mailchimp_get_campaign","mailchimp_get_campaign_content","mailchimp_get_campaign_report","mailchimp_get_campaign_reports","mailchimp_get_campaigns","mailchimp_get_interest","mailchimp_get_interest_categories","mailchimp_get_interest_category","mailchimp_get_interests","mailchimp_get_landing_page","mailchimp_get_landing_pages","mailchimp_get_member","mailchimp_get_member_tags","mailchimp_get_members","mailchimp_get_merge_field","mailchimp_get_merge_fields","mailchimp_get_segment","mailchimp_get_segment_members","mailchimp_get_segments","mailchimp_get_template","mailchimp_get_templates","mailchimp_pause_automation","mailchimp_publish_landing_page","mailchimp_remove_member_tags","mailchimp_remove_segment_member","mailchimp_replicate_campaign","mailchimp_schedule_campaign","mailchimp_send_campaign","mailchimp_set_campaign_content","mailchimp_start_automation","mailchimp_unarchive_member","mailchimp_unpublish_landing_page","mailchimp_unschedule_campaign","mailchimp_update_audience","mailchimp_update_campaign","mailchimp_update_interest","mailchimp_update_interest_category","mailchimp_update_landing_page","mailchimp_update_member","mailchimp_update_merge_field","mailchimp_update_segment","mailchimp_update_template","mailgun_add_list_member","mailgun_create_mailing_list","mailgun_get_domain","mailgun_get_mailing_list","mailgun_get_message","mailgun_list_domains","mailgun_list_messages","mailgun_send_message","managed_agent_archive_session","managed_agent_create_session","managed_agent_delete_session","managed_agent_get_session","managed_agent_interrupt_session","managed_agent_list_events","managed_agent_respond_custom_tool","managed_agent_respond_tool_confirmation","managed_agent_run_session","managed_agent_send_message","managed_agent_update_session","manageengine_sdp_add_change_note","manageengine_sdp_add_problem_note","manageengine_sdp_add_request_note","manageengine_sdp_create_asset","manageengine_sdp_create_change","manageengine_sdp_create_problem","manageengine_sdp_create_request","manageengine_sdp_create_solution","manageengine_sdp_delete_asset","manageengine_sdp_delete_change","manageengine_sdp_delete_problem","manageengine_sdp_delete_request","manageengine_sdp_delete_solution","manageengine_sdp_get_asset","manageengine_sdp_get_change","manageengine_sdp_get_problem","manageengine_sdp_get_request","manageengine_sdp_get_solution","manageengine_sdp_list_assets","manageengine_sdp_list_change_notes","manageengine_sdp_list_changes","manageengine_sdp_list_problem_notes","manageengine_sdp_list_problems","manageengine_sdp_list_request_notes","manageengine_sdp_list_requests","manageengine_sdp_list_solutions","manageengine_sdp_update_asset","manageengine_sdp_update_change","manageengine_sdp_update_problem","manageengine_sdp_update_request","manageengine_sdp_update_solution","mcp_list_operations","mcp_run_operation","mem0_add_memories","mem0_get_memories","mem0_search_memories","memory_add","memory_delete","memory_get","memory_get_all","microsoft_ad_add_directory_role_member","microsoft_ad_add_group_member","microsoft_ad_add_user_app_role_assignment","microsoft_ad_assign_license","microsoft_ad_create_group","microsoft_ad_create_user","microsoft_ad_delete_group","microsoft_ad_delete_user","microsoft_ad_get_conditional_access_policy","microsoft_ad_get_device","microsoft_ad_get_group","microsoft_ad_get_user","microsoft_ad_list_authentication_methods","microsoft_ad_list_conditional_access_policies","microsoft_ad_list_devices","microsoft_ad_list_directory_audits","microsoft_ad_list_directory_role_members","microsoft_ad_list_directory_roles","microsoft_ad_list_group_members","microsoft_ad_list_groups","microsoft_ad_list_service_principal_app_role_assignments","microsoft_ad_list_service_principals","microsoft_ad_list_sign_ins","microsoft_ad_list_subscribed_skus","microsoft_ad_list_user_app_role_assignments","microsoft_ad_list_user_devices","microsoft_ad_list_user_licenses","microsoft_ad_list_users","microsoft_ad_remove_directory_role_member","microsoft_ad_remove_group_member","microsoft_ad_remove_user_app_role_assignment","microsoft_ad_reset_password","microsoft_ad_revoke_sign_in_sessions","microsoft_ad_set_password","microsoft_ad_update_group","microsoft_ad_update_user","microsoft_dataverse_associate","microsoft_dataverse_create_multiple","microsoft_dataverse_create_record","microsoft_dataverse_delete_record","microsoft_dataverse_disassociate","microsoft_dataverse_download_file","microsoft_dataverse_download_file_v2","microsoft_dataverse_execute_action","microsoft_dataverse_execute_function","microsoft_dataverse_fetchxml_query","microsoft_dataverse_get_entity_metadata","microsoft_dataverse_get_record","microsoft_dataverse_list_records","microsoft_dataverse_search","microsoft_dataverse_update_multiple","microsoft_dataverse_update_record","microsoft_dataverse_upload_file","microsoft_dataverse_upsert_record","microsoft_dataverse_whoami","microsoft_dynamics_365_close_case","microsoft_dynamics_365_close_opportunity","microsoft_dynamics_365_create_record","microsoft_dynamics_365_get_record","microsoft_dynamics_365_list_records","microsoft_dynamics_365_qualify_lead","microsoft_dynamics_365_search_records","microsoft_dynamics_365_update_record","microsoft_excel_clear_range","microsoft_excel_create_table","microsoft_excel_delete_worksheet","microsoft_excel_format_range","microsoft_excel_read","microsoft_excel_read_v2","microsoft_excel_sort_range","microsoft_excel_table_add","microsoft_excel_worksheet_add","microsoft_excel_write","microsoft_excel_write_v2","microsoft_planner_create_bucket","microsoft_planner_create_plan","microsoft_planner_create_task","microsoft_planner_delete_bucket","microsoft_planner_delete_plan","microsoft_planner_delete_task","microsoft_planner_get_plan_details","microsoft_planner_get_task_details","microsoft_planner_list_buckets","microsoft_planner_list_plans","microsoft_planner_read_bucket","microsoft_planner_read_plan","microsoft_planner_read_task","microsoft_planner_update_bucket","microsoft_planner_update_plan","microsoft_planner_update_plan_details","microsoft_planner_update_task","microsoft_planner_update_task_details","microsoft_teams_delete_channel_message","microsoft_teams_delete_chat_message","microsoft_teams_get_message","microsoft_teams_list_channel_members","microsoft_teams_list_channels","microsoft_teams_list_chat_members","microsoft_teams_list_chats","microsoft_teams_list_team_members","microsoft_teams_list_teams","microsoft_teams_read_channel","microsoft_teams_read_chat","microsoft_teams_reply_to_message","microsoft_teams_set_reaction","microsoft_teams_unset_reaction","microsoft_teams_update_channel_message","microsoft_teams_update_chat_message","microsoft_teams_write_channel","microsoft_teams_write_chat","microsoft_word_append","microsoft_word_create","microsoft_word_create_from_template","microsoft_word_export_pdf","microsoft_word_list","microsoft_word_read","microsoft_word_replace_text","microsoft_word_update","millionverifier_get_credits","millionverifier_verify_email","mintlify_create_agent_job","mintlify_create_assistant_message","mintlify_detect_ai_prose","mintlify_get_agent_job","mintlify_get_assistant_caller_stats","mintlify_get_assistant_conversations","mintlify_get_feedback","mintlify_get_feedback_by_page","mintlify_get_page_content","mintlify_get_searches","mintlify_get_update_status","mintlify_get_views","mintlify_get_visitors","mintlify_search","mintlify_send_agent_message","mintlify_trigger_automation","mintlify_trigger_preview","mintlify_trigger_update","mistral_parser","mistral_parser_v2","mistral_parser_v3","modal_call_function","modal_chat_completion","modal_list_models","monday_archive_item","monday_change_column_value","monday_create_board","monday_create_column","monday_create_group","monday_create_item","monday_create_subitem","monday_create_update","monday_delete_item","monday_duplicate_item","monday_get_board","monday_get_groups","monday_get_item","monday_get_items","monday_list_boards","monday_move_item_to_group","monday_search_items","monday_update_item","mongodb_delete","mongodb_execute","mongodb_insert","mongodb_introspect","mongodb_query","mongodb_update","mssql_delete","mssql_execute","mssql_insert","mssql_introspect","mssql_query","mssql_update","mysql_delete","mysql_execute","mysql_insert","mysql_introspect","mysql_query","mysql_update","neo4j_create","neo4j_delete","neo4j_execute","neo4j_introspect","neo4j_merge","neo4j_query","neo4j_update","netsuite_attach_record","netsuite_batch_create_records","netsuite_batch_delete_records","netsuite_batch_get_records","netsuite_batch_update_records","netsuite_batch_upsert_records","netsuite_create_record","netsuite_delete_record","netsuite_detach_record","netsuite_execute_action","netsuite_execute_dataset","netsuite_execute_suiteql","netsuite_get_async_result","netsuite_get_async_status","netsuite_get_governance_limits","netsuite_get_record","netsuite_get_record_form","netsuite_get_record_metadata","netsuite_get_select_options","netsuite_get_server_time","netsuite_get_subresource","netsuite_list_datasets","netsuite_list_record_types","netsuite_list_records","netsuite_transform_record","netsuite_update_record","netsuite_upsert_record","neverbounce_get_credits","neverbounce_verify_email","new_relic_create_deployment_event","new_relic_get_entity","new_relic_nrql_query","new_relic_search_entities","notion_add_database_row","notion_add_database_row_v2","notion_append_blocks","notion_append_blocks_v2","notion_create_comment","notion_create_comment_v2","notion_create_database","notion_create_database_v2","notion_create_page","notion_create_page_v2","notion_delete_block","notion_delete_block_v2","notion_list_comments","notion_list_comments_v2","notion_list_users","notion_list_users_v2","notion_query_database","notion_query_database_v2","notion_read","notion_read_database","notion_read_database_v2","notion_read_v2","notion_retrieve_block","notion_retrieve_block_children","notion_retrieve_block_children_v2","notion_retrieve_block_v2","notion_retrieve_user","notion_retrieve_user_v2","notion_search","notion_search_v2","notion_update_block","notion_update_block_v2","notion_update_page","notion_update_page_v2","notion_write","notion_write_v2","obsidian_append_active","obsidian_append_note","obsidian_append_periodic_note","obsidian_create_note","obsidian_delete_note","obsidian_execute_command","obsidian_get_active","obsidian_get_note","obsidian_get_periodic_note","obsidian_list_commands","obsidian_list_files","obsidian_open_file","obsidian_patch_active","obsidian_patch_note","obsidian_search","okta_activate_group_rule","okta_activate_user","okta_add_user_to_group","okta_assign_group_to_app","okta_assign_user_role","okta_assign_user_to_app","okta_clear_user_sessions","okta_create_group","okta_create_group_rule","okta_create_user","okta_deactivate_group_rule","okta_deactivate_user","okta_delete_group","okta_delete_group_rule","okta_delete_user","okta_enroll_factor","okta_get_app","okta_get_factor","okta_get_group","okta_get_group_rule","okta_get_logs","okta_get_session","okta_get_user","okta_list_app_groups","okta_list_app_users","okta_list_apps","okta_list_factors","okta_list_group_members","okta_list_group_rules","okta_list_groups","okta_list_user_roles","okta_list_users","okta_remove_group_from_app","okta_remove_user_from_app","okta_remove_user_from_group","okta_remove_user_role","okta_reset_all_factors","okta_reset_factor","okta_reset_password","okta_revoke_session","okta_suspend_user","okta_unsuspend_user","okta_update_group","okta_update_user","onedrive_copy","onedrive_create_folder","onedrive_create_share_link","onedrive_delete","onedrive_download","onedrive_get_drive_info","onedrive_get_item","onedrive_list","onedrive_move","onedrive_search","onedrive_upload","onepassword_create_item","onepassword_delete_item","onepassword_get_item","onepassword_get_item_file","onepassword_get_vault","onepassword_list_items","onepassword_list_vaults","onepassword_replace_item","onepassword_resolve_secret","onepassword_update_item","openai_embeddings","openai_image","otter_create_conversation","otter_get_conversation","otter_get_conversation_audio","otter_get_workspace","otter_list_channel_members","otter_list_channels","otter_list_conversations","otter_list_workspace_conversations","outlook_calendar_create_event","outlook_calendar_delete_event","outlook_calendar_get_event","outlook_calendar_list_events","outlook_calendar_respond","outlook_calendar_update_event","outlook_copy","outlook_create_folder","outlook_delete","outlook_draft","outlook_forward","outlook_get_attachment","outlook_list_attachments","outlook_list_folders","outlook_mark_read","outlook_mark_unread","outlook_move","outlook_read","outlook_reply","outlook_reply_all","outlook_search","outlook_send","outlook_update_message","pagerduty_add_note","pagerduty_create_incident","pagerduty_get_incident","pagerduty_get_service","pagerduty_list_escalation_policies","pagerduty_list_incident_alerts","pagerduty_list_incidents","pagerduty_list_oncalls","pagerduty_list_schedules","pagerduty_list_services","pagerduty_list_users","pagerduty_merge_incidents","pagerduty_send_event","pagerduty_snooze_incident","pagerduty_update_incident","parallel_deep_research","parallel_extract","parallel_search","pdl_autocomplete","pdl_bulk_company_enrich","pdl_bulk_person_enrich","pdl_clean_company","pdl_clean_location","pdl_clean_school","pdl_company_enrich","pdl_company_search","pdl_person_enrich","pdl_person_identify","pdl_person_search","perplexity_chat","perplexity_search","persona_approve_inquiry","persona_create_account","persona_create_inquiry","persona_create_report","persona_decline_inquiry","persona_expire_inquiry","persona_generate_inquiry_link","persona_get_account","persona_get_case","persona_get_document","persona_get_inquiry","persona_get_report","persona_get_verification","persona_import_accounts","persona_list_accounts","persona_list_cases","persona_list_inquiries","persona_list_inquiry_templates","persona_list_reports","persona_mark_inquiry_for_review","persona_print_inquiry_pdf","persona_redact_account","persona_redact_inquiry","persona_resume_inquiry","persona_update_account","persona_update_inquiry","pinecone_delete_vectors","pinecone_describe_index","pinecone_describe_index_stats","pinecone_fetch","pinecone_generate_embeddings","pinecone_list_indexes","pinecone_list_vector_ids","pinecone_search_text","pinecone_search_vector","pinecone_update_vector","pinecone_upsert_text","pipedrive_create_activity","pipedrive_create_deal","pipedrive_create_lead","pipedrive_create_project","pipedrive_delete_lead","pipedrive_get_activities","pipedrive_get_all_deals","pipedrive_get_deal","pipedrive_get_files","pipedrive_get_leads","pipedrive_get_mail_messages","pipedrive_get_mail_thread","pipedrive_get_pipeline_deals","pipedrive_get_pipelines","pipedrive_get_projects","pipedrive_update_activity","pipedrive_update_deal","pipedrive_update_lead","pitchbook_company_active_investors","pitchbook_company_bio","pitchbook_company_deal_service_providers","pitchbook_company_deals","pitchbook_company_financials","pitchbook_company_general_service_providers","pitchbook_company_industries","pitchbook_company_investors","pitchbook_company_most_recent_debt_financing","pitchbook_company_most_recent_financials","pitchbook_company_most_recent_financing","pitchbook_company_search","pitchbook_company_similar_companies","pitchbook_company_social_analytics","pitchbook_company_updates","pitchbook_company_vc_exit_predictions","pitchbook_contracts_history","pitchbook_cost_of_calls","pitchbook_credit_history","pitchbook_credit_news","pitchbook_credit_news_bulk","pitchbook_credit_news_most_recent","pitchbook_credit_news_search","pitchbook_deal_bio","pitchbook_deal_cap_table_history","pitchbook_deal_debt_lenders","pitchbook_deal_detailed","pitchbook_deal_investors","pitchbook_deal_multiples","pitchbook_deal_search","pitchbook_deal_service_providers","pitchbook_deal_stock_info","pitchbook_deal_tranche_info","pitchbook_deal_updates","pitchbook_deal_valuation","pitchbook_entity_affiliates","pitchbook_entity_locations","pitchbook_entity_news","pitchbook_entity_people","pitchbook_entity_updates","pitchbook_fund_active_investments","pitchbook_fund_benchmark","pitchbook_fund_bio","pitchbook_fund_cash_flows","pitchbook_fund_commitments","pitchbook_fund_investment_preferences","pitchbook_fund_investments","pitchbook_fund_performance","pitchbook_fund_search","pitchbook_fund_team","pitchbook_fund_updates","pitchbook_investor_active_investments","pitchbook_investor_bio","pitchbook_investor_board_seats","pitchbook_investor_deal_service_providers","pitchbook_investor_funds","pitchbook_investor_general_service_providers","pitchbook_investor_investments","pitchbook_investor_last_closed_fund","pitchbook_investor_preferences","pitchbook_investor_search","pitchbook_investor_updates","pitchbook_limited_partner_actual_allocations","pitchbook_limited_partner_bio","pitchbook_limited_partner_commitment_aggregates","pitchbook_limited_partner_commitment_preferences","pitchbook_limited_partner_commitments_detailed","pitchbook_limited_partner_search","pitchbook_limited_partner_service_providers","pitchbook_limited_partner_target_allocations","pitchbook_limited_partner_updates","pitchbook_lookup_table_structure","pitchbook_lookup_tables","pitchbook_patent_detailed","pitchbook_patent_search","pitchbook_people_search","pitchbook_person_bio","pitchbook_person_contact","pitchbook_person_education_work","pitchbook_sandbox_entities","pitchbook_search","pitchbook_service_provider_bio","pitchbook_service_provider_search","pitchbook_service_provider_updates","pitchbook_serviced_companies","pitchbook_serviced_deals","pitchbook_serviced_funds","pitchbook_serviced_investors","pitchbook_serviced_limited_partners","pitchbook_shared_search","pitchbook_usage_report","plane_archive_project","plane_archive_work_item","plane_confirm_attachment_upload","plane_create_attachment_upload","plane_create_comment","plane_create_cycle","plane_create_label","plane_create_link","plane_create_module","plane_create_project","plane_create_project_page","plane_create_state","plane_create_webhook","plane_create_work_item","plane_delete_attachment","plane_delete_comment","plane_delete_cycle","plane_delete_label","plane_delete_link","plane_delete_module","plane_delete_project","plane_delete_project_page","plane_delete_state","plane_delete_webhook","plane_delete_work_item","plane_get_attachment","plane_get_comment","plane_get_current_user","plane_get_cycle","plane_get_label","plane_get_link","plane_get_module","plane_get_project","plane_get_project_page","plane_get_project_summary","plane_get_state","plane_get_webhook","plane_get_work_item","plane_get_work_item_by_identifier","plane_list_attachments","plane_list_comments","plane_list_cycles","plane_list_labels","plane_list_links","plane_list_modules","plane_list_project_pages","plane_list_projects","plane_list_states","plane_list_webhooks","plane_list_work_items","plane_list_workspace_work_items","plane_manage_cycle_work_items","plane_manage_module_work_items","plane_regenerate_webhook_secret","plane_transfer_cycle_work_items","plane_unarchive_project","plane_unarchive_work_item","plane_update_comment","plane_update_cycle","plane_update_label","plane_update_link","plane_update_module","plane_update_project","plane_update_project_page","plane_update_state","plane_update_webhook","plane_update_work_item","planetscale_close_deploy_request","planetscale_create_backup","planetscale_create_branch","planetscale_create_deploy_request","planetscale_delete_branch","planetscale_get_backup","planetscale_get_branch","planetscale_get_database","planetscale_get_deploy_request","planetscale_list_backups","planetscale_list_branches","planetscale_list_databases","planetscale_list_deploy_requests","planetscale_queue_deploy_request","planetscale_review_deploy_request","polymarket_get_activity","polymarket_get_event","polymarket_get_events","polymarket_get_holders","polymarket_get_last_trade_price","polymarket_get_leaderboard","polymarket_get_market","polymarket_get_markets","polymarket_get_midpoint","polymarket_get_orderbook","polymarket_get_positions","polymarket_get_price","polymarket_get_price_history","polymarket_get_series","polymarket_get_series_by_id","polymarket_get_spread","polymarket_get_tags","polymarket_get_tick_size","polymarket_get_trades","polymarket_search","postgresql_delete","postgresql_execute","postgresql_insert","postgresql_introspect","postgresql_query","postgresql_update","posthog_batch_events","posthog_capture_event","posthog_create_annotation","posthog_create_cohort","posthog_create_dashboard","posthog_create_experiment","posthog_create_feature_flag","posthog_create_insight","posthog_create_survey","posthog_delete_feature_flag","posthog_delete_person","posthog_delete_survey","posthog_evaluate_flags","posthog_get_cohort","posthog_get_dashboard","posthog_get_event_definition","posthog_get_experiment","posthog_get_feature_flag","posthog_get_insight","posthog_get_organization","posthog_get_person","posthog_get_project","posthog_get_property_definition","posthog_get_session_recording","posthog_get_survey","posthog_list_actions","posthog_list_annotations","posthog_list_cohorts","posthog_list_dashboards","posthog_list_event_definitions","posthog_list_experiments","posthog_list_feature_flags","posthog_list_insights","posthog_list_organizations","posthog_list_persons","posthog_list_projects","posthog_list_property_definitions","posthog_list_recording_playlists","posthog_list_session_recordings","posthog_list_surveys","posthog_query","posthog_update_cohort","posthog_update_event_definition","posthog_update_experiment","posthog_update_feature_flag","posthog_update_insight","posthog_update_property_definition","posthog_update_survey","powerbi_execute_query","powerbi_get_dataset","powerbi_get_refresh_history","powerbi_get_report","powerbi_list_datasets","powerbi_list_reports","powerbi_list_workspaces","powerbi_refresh_dataset","profound_bot_logs","profound_bots_report","profound_category_assets","profound_category_personas","profound_category_prompts","profound_category_tags","profound_category_topics","profound_citation_prompts","profound_citations_report","profound_list_assets","profound_list_categories","profound_list_domains","profound_list_models","profound_list_optimizations","profound_list_personas","profound_list_regions","profound_optimization_analysis","profound_prompt_answers","profound_prompt_volume","profound_query_fanouts","profound_raw_logs","profound_referrals_report","profound_sentiment_report","profound_visibility_report","prospeo_account_information","prospeo_bulk_enrich_company","prospeo_bulk_enrich_person","prospeo_enrich_company","prospeo_enrich_person","prospeo_search_company","prospeo_search_person","prospeo_search_suggestions","pulse_parser","pulse_parser_v2","qdrant_fetch_points","qdrant_search_vector","qdrant_upsert_points","quartr_get_audio","quartr_get_company","quartr_get_event","quartr_get_event_summary","quartr_get_report","quartr_get_slide_deck","quartr_get_transcript","quartr_list_audio","quartr_list_companies","quartr_list_document_types","quartr_list_documents","quartr_list_event_types","quartr_list_events","quartr_list_live_events","quartr_list_reports","quartr_list_slide_decks","quartr_list_transcripts","quickbooks_add_attachment","quickbooks_create_bill","quickbooks_create_bill_payment","quickbooks_create_credit_memo","quickbooks_create_customer","quickbooks_create_customer_payment","quickbooks_create_deposit","quickbooks_create_employee","quickbooks_create_estimate","quickbooks_create_invoice","quickbooks_create_item","quickbooks_create_journal_entry","quickbooks_create_purchase","quickbooks_create_purchase_order","quickbooks_create_refund_receipt","quickbooks_create_sales_receipt","quickbooks_create_vendor","quickbooks_create_vendor_credit","quickbooks_download_attachment","quickbooks_download_transaction_pdf","quickbooks_email_transaction","quickbooks_get_company_info","quickbooks_read_accounting_transactions","quickbooks_read_attachments","quickbooks_read_master_data","quickbooks_read_purchasing_transactions","quickbooks_read_sales_transactions","quickbooks_run_financial_report","quickbooks_update_bill","quickbooks_update_bill_payment","quickbooks_update_credit_memo","quickbooks_update_customer","quickbooks_update_customer_payment","quickbooks_update_deposit","quickbooks_update_employee","quickbooks_update_estimate","quickbooks_update_invoice","quickbooks_update_item","quickbooks_update_journal_entry","quickbooks_update_purchase","quickbooks_update_purchase_order","quickbooks_update_refund_receipt","quickbooks_update_sales_receipt","quickbooks_update_vendor","quickbooks_update_vendor_credit","quickbooks_void_bill_payment","quickbooks_void_customer_payment","quickbooks_void_invoice","quickbooks_void_sales_receipt","quiver_image_to_svg","quiver_image_to_svg_v2","quiver_list_models","quiver_text_to_svg","quiver_text_to_svg_v2","rabbitmq_create_binding","rabbitmq_create_exchange","rabbitmq_create_policy","rabbitmq_create_queue","rabbitmq_delete_binding","rabbitmq_delete_exchange","rabbitmq_delete_policy","rabbitmq_delete_queue","rabbitmq_get_exchange","rabbitmq_get_messages","rabbitmq_get_overview","rabbitmq_get_queue","rabbitmq_health_check","rabbitmq_list_bindings","rabbitmq_list_channels","rabbitmq_list_connections","rabbitmq_list_consumers","rabbitmq_list_exchange_bindings","rabbitmq_list_exchanges","rabbitmq_list_nodes","rabbitmq_list_policies","rabbitmq_list_queues","rabbitmq_list_vhosts","rabbitmq_publish_message","rabbitmq_purge_queue","railway_create_environment","railway_create_project","railway_create_service","railway_delete_environment","railway_delete_project","railway_delete_service","railway_delete_variable","railway_deploy_service","railway_get_deployment","railway_get_deployment_logs","railway_get_project","railway_list_deployments","railway_list_project_members","railway_list_projects","railway_list_variables","railway_restart_deployment","railway_rollback_deployment","railway_transfer_project","railway_update_project","railway_upsert_variable","rb2b_credit_check","rb2b_email_to_activity","rb2b_hem_to_best_linkedin","rb2b_hem_to_business_profile","rb2b_hem_to_linkedin","rb2b_hem_to_maid","rb2b_ip_to_company","rb2b_ip_to_hem","rb2b_ip_to_maid","rb2b_linkedin_slug_search","rb2b_linkedin_to_best_personal_email","rb2b_linkedin_to_business_profile","rb2b_linkedin_to_hashed_emails","rb2b_linkedin_to_mobile_phone","rb2b_linkedin_to_personal_email","rds_delete","rds_execute","rds_insert","rds_introspect","rds_query","rds_update","reddit_delete","reddit_edit","reddit_get_comments","reddit_get_controversial","reddit_get_info","reddit_get_me","reddit_get_messages","reddit_get_posts","reddit_get_saved","reddit_get_subreddit_info","reddit_get_subreddit_rules","reddit_get_user","reddit_get_user_comments","reddit_get_user_posts","reddit_hide","reddit_hot_posts","reddit_list_my_subreddits","reddit_lock","reddit_mark_all_read","reddit_mark_read","reddit_marknsfw","reddit_mod_approve","reddit_mod_distinguish","reddit_mod_remove","reddit_mod_sticky","reddit_reply","reddit_report","reddit_save","reddit_search","reddit_search_subreddits","reddit_send_message","reddit_submit_post","reddit_subscribe","reddit_unhide","reddit_unlock","reddit_unmarknsfw","reddit_unsave","reddit_vote","redis_command","redis_delete","redis_exists","redis_expire","redis_get","redis_hdel","redis_hget","redis_hgetall","redis_hset","redis_incr","redis_incrby","redis_keys","redis_llen","redis_lpop","redis_lpush","redis_lrange","redis_persist","redis_rpop","redis_rpush","redis_set","redis_setnx","redis_ttl","reducto_parser","reducto_parser_v2","resend_cancel_email","resend_create_audience","resend_create_broadcast","resend_create_contact","resend_delete_audience","resend_delete_contact","resend_get_audience","resend_get_broadcast","resend_get_contact","resend_get_email","resend_list_audiences","resend_list_contacts","resend_list_domains","resend_send","resend_send_broadcast","resend_update_contact","revenuecat_create_purchase","revenuecat_defer_google_subscription","revenuecat_delete_customer","revenuecat_get_customer","revenuecat_grant_entitlement","revenuecat_list_offerings","revenuecat_refund_google_subscription","revenuecat_revoke_entitlement","revenuecat_revoke_google_subscription","revenuecat_update_subscriber_attributes","rippling_bulk_create_custom_object_records","rippling_bulk_delete_custom_object_records","rippling_bulk_update_custom_object_records","rippling_create_business_partner","rippling_create_business_partner_group","rippling_create_custom_app","rippling_create_custom_object","rippling_create_custom_object_field","rippling_create_custom_object_record","rippling_create_custom_page","rippling_create_custom_setting","rippling_create_department","rippling_create_draft_hires","rippling_create_object_category","rippling_create_title","rippling_create_work_location","rippling_delete_business_partner","rippling_delete_business_partner_group","rippling_delete_custom_app","rippling_delete_custom_object","rippling_delete_custom_object_field","rippling_delete_custom_object_record","rippling_delete_custom_page","rippling_delete_custom_setting","rippling_delete_object_category","rippling_delete_title","rippling_delete_work_location","rippling_get_business_partner","rippling_get_business_partner_group","rippling_get_current_user","rippling_get_custom_app","rippling_get_custom_object","rippling_get_custom_object_field","rippling_get_custom_object_record","rippling_get_custom_object_record_by_external_id","rippling_get_custom_page","rippling_get_custom_setting","rippling_get_department","rippling_get_employment_type","rippling_get_job_function","rippling_get_object_category","rippling_get_report_run","rippling_get_supergroup","rippling_get_team","rippling_get_title","rippling_get_user","rippling_get_work_location","rippling_get_worker","rippling_list_business_partner_groups","rippling_list_business_partners","rippling_list_companies","rippling_list_custom_apps","rippling_list_custom_fields","rippling_list_custom_object_fields","rippling_list_custom_object_records","rippling_list_custom_objects","rippling_list_custom_pages","rippling_list_custom_settings","rippling_list_departments","rippling_list_employment_types","rippling_list_entitlements","rippling_list_job_functions","rippling_list_object_categories","rippling_list_supergroup_exclusion_members","rippling_list_supergroup_inclusion_members","rippling_list_supergroup_members","rippling_list_supergroups","rippling_list_teams","rippling_list_titles","rippling_list_users","rippling_list_work_locations","rippling_list_workers","rippling_query_custom_object_records","rippling_trigger_report_run","rippling_update_custom_app","rippling_update_custom_object","rippling_update_custom_object_field","rippling_update_custom_object_record","rippling_update_custom_page","rippling_update_custom_setting","rippling_update_department","rippling_update_object_category","rippling_update_supergroup_exclusion_members","rippling_update_supergroup_inclusion_members","rippling_update_title","rippling_update_work_location","rocketlane_add_field_option","rocketlane_add_project_members","rocketlane_add_task_assignees","rocketlane_add_task_dependencies","rocketlane_add_task_followers","rocketlane_archive_project","rocketlane_assign_placeholders","rocketlane_create_field","rocketlane_create_phase","rocketlane_create_project","rocketlane_create_space","rocketlane_create_space_document","rocketlane_create_task","rocketlane_create_time_entry","rocketlane_create_time_off","rocketlane_delete_field","rocketlane_delete_phase","rocketlane_delete_project","rocketlane_delete_space","rocketlane_delete_space_document","rocketlane_delete_task","rocketlane_delete_time_entry","rocketlane_delete_time_off","rocketlane_get_field","rocketlane_get_invoice","rocketlane_get_invoice_line_items","rocketlane_get_invoice_payments","rocketlane_get_phase","rocketlane_get_project","rocketlane_get_space","rocketlane_get_space_document","rocketlane_get_task","rocketlane_get_time_entry","rocketlane_get_time_off","rocketlane_get_user","rocketlane_import_template","rocketlane_list_fields","rocketlane_list_invoices","rocketlane_list_phases","rocketlane_list_placeholders","rocketlane_list_projects","rocketlane_list_resource_allocations","rocketlane_list_space_documents","rocketlane_list_spaces","rocketlane_list_tasks","rocketlane_list_time_entries","rocketlane_list_time_entry_categories","rocketlane_list_time_offs","rocketlane_list_users","rocketlane_move_task_to_phase","rocketlane_remove_project_members","rocketlane_remove_task_assignees","rocketlane_remove_task_dependencies","rocketlane_remove_task_followers","rocketlane_search_time_entries","rocketlane_unassign_placeholders","rocketlane_update_field","rocketlane_update_field_option","rocketlane_update_phase","rocketlane_update_project","rocketlane_update_space","rocketlane_update_space_document","rocketlane_update_task","rocketlane_update_time_entry","rootly_acknowledge_alert","rootly_add_incident_event","rootly_add_subscribers","rootly_assign_incident_role","rootly_create_action_item","rootly_create_alert","rootly_create_incident","rootly_create_status_page_event","rootly_delete_action_item","rootly_delete_incident","rootly_escalate_alert","rootly_get_alert","rootly_get_incident","rootly_list_action_items","rootly_list_alerts","rootly_list_causes","rootly_list_environments","rootly_list_escalation_policies","rootly_list_functionalities","rootly_list_incident_events","rootly_list_incident_roles","rootly_list_incident_types","rootly_list_incidents","rootly_list_on_calls","rootly_list_playbooks","rootly_list_retrospectives","rootly_list_schedules","rootly_list_services","rootly_list_severities","rootly_list_teams","rootly_list_users","rootly_mitigate_incident","rootly_remove_subscribers","rootly_resolve_alert","rootly_resolve_incident","rootly_run_workflow","rootly_snooze_alert","rootly_unassign_incident_role","rootly_update_action_item","rootly_update_alert","rootly_update_incident","s3_copy_object","s3_create_bucket","s3_delete_bucket","s3_delete_object","s3_delete_objects","s3_get_object","s3_head_object","s3_list_buckets","s3_list_objects","s3_presigned_url","s3_put_object","sailpoint_approve_access_request","sailpoint_cancel_access_request","sailpoint_decide_certification_review_items","sailpoint_get_access_profile","sailpoint_get_access_profile_entitlements","sailpoint_get_access_request_config","sailpoint_get_access_request_status","sailpoint_get_account","sailpoint_get_account_activity","sailpoint_get_account_entitlements","sailpoint_get_account_selections","sailpoint_get_campaign","sailpoint_get_certification","sailpoint_get_entitlement","sailpoint_get_entitlement_request_config","sailpoint_get_identity","sailpoint_get_role","sailpoint_get_role_entitlements","sailpoint_get_source","sailpoint_get_task_status","sailpoint_list_access_profiles","sailpoint_list_account_activities","sailpoint_list_accounts","sailpoint_list_campaigns","sailpoint_list_certification_review_items","sailpoint_list_certifications","sailpoint_list_entitlements","sailpoint_list_identities","sailpoint_list_identity_entitlements","sailpoint_list_pending_access_request_approvals","sailpoint_list_roles","sailpoint_list_sources","sailpoint_load_accounts","sailpoint_load_entitlements","sailpoint_reject_access_request","sailpoint_request_access","sailpoint_search","sailpoint_search_aggregate","sailpoint_search_count","sailpoint_sign_off_certification","salesforce_create_account","salesforce_create_case","salesforce_create_contact","salesforce_create_custom_field","salesforce_create_custom_object","salesforce_create_lead","salesforce_create_opportunity","salesforce_create_task","salesforce_delete_account","salesforce_delete_case","salesforce_delete_contact","salesforce_delete_custom_field","salesforce_delete_lead","salesforce_delete_opportunity","salesforce_delete_task","salesforce_describe_object","salesforce_get_accounts","salesforce_get_cases","salesforce_get_contacts","salesforce_get_dashboard","salesforce_get_leads","salesforce_get_opportunities","salesforce_get_report","salesforce_get_tasks","salesforce_list_dashboards","salesforce_list_objects","salesforce_list_report_types","salesforce_list_reports","salesforce_query","salesforce_query_more","salesforce_refresh_dashboard","salesforce_run_report","salesforce_tooling_query","salesforce_update_account","salesforce_update_case","salesforce_update_contact","salesforce_update_custom_field","salesforce_update_lead","salesforce_update_opportunity","salesforce_update_task","sap_concur_approve_expense_report","sap_concur_associate_attendees","sap_concur_create_cash_advance","sap_concur_create_expected_expense","sap_concur_create_expense_report","sap_concur_create_list_item","sap_concur_create_purchase_request","sap_concur_create_quick_expense","sap_concur_create_quick_expense_with_image","sap_concur_create_report_comment","sap_concur_create_travel_request","sap_concur_create_user","sap_concur_delete_expected_expense","sap_concur_delete_expense","sap_concur_delete_expense_report","sap_concur_delete_list_item","sap_concur_delete_travel_request","sap_concur_delete_user","sap_concur_get_allocation","sap_concur_get_budget","sap_concur_get_cash_advance","sap_concur_get_expected_expense","sap_concur_get_expense","sap_concur_get_expense_report","sap_concur_get_itemizations","sap_concur_get_itinerary","sap_concur_get_list","sap_concur_get_list_item","sap_concur_get_purchase_request","sap_concur_get_receipt","sap_concur_get_receipt_status","sap_concur_get_request_cash_advance","sap_concur_get_travel_profile","sap_concur_get_travel_request","sap_concur_get_user","sap_concur_issue_cash_advance","sap_concur_list_allocations","sap_concur_list_attendee_associations","sap_concur_list_budget_categories","sap_concur_list_budgets","sap_concur_list_exceptions","sap_concur_list_expected_expenses","sap_concur_list_expense_reports","sap_concur_list_expenses","sap_concur_list_itineraries","sap_concur_list_list_items","sap_concur_list_lists","sap_concur_list_receipts","sap_concur_list_report_comments","sap_concur_list_reports_to_approve","sap_concur_list_travel_profiles_summary","sap_concur_list_travel_request_comments","sap_concur_list_travel_requests","sap_concur_list_users","sap_concur_move_travel_request","sap_concur_recall_expense_report","sap_concur_remove_all_attendees","sap_concur_search_locations","sap_concur_search_users","sap_concur_send_back_expense_report","sap_concur_submit_expense_report","sap_concur_update_allocation","sap_concur_update_expected_expense","sap_concur_update_expense","sap_concur_update_expense_report","sap_concur_update_list_item","sap_concur_update_travel_request","sap_concur_update_user","sap_concur_upload_exchange_rates","sap_concur_upload_receipt_image","sap_s4hana_create_business_partner","sap_s4hana_create_purchase_order","sap_s4hana_create_purchase_requisition","sap_s4hana_create_sales_order","sap_s4hana_delete_sales_order","sap_s4hana_get_billing_document","sap_s4hana_get_business_partner","sap_s4hana_get_customer","sap_s4hana_get_inbound_delivery","sap_s4hana_get_material_document","sap_s4hana_get_outbound_delivery","sap_s4hana_get_product","sap_s4hana_get_purchase_order","sap_s4hana_get_purchase_requisition","sap_s4hana_get_sales_order","sap_s4hana_get_supplier","sap_s4hana_get_supplier_invoice","sap_s4hana_list_billing_documents","sap_s4hana_list_business_partners","sap_s4hana_list_customers","sap_s4hana_list_inbound_deliveries","sap_s4hana_list_material_documents","sap_s4hana_list_material_stock","sap_s4hana_list_outbound_deliveries","sap_s4hana_list_products","sap_s4hana_list_purchase_orders","sap_s4hana_list_purchase_requisitions","sap_s4hana_list_sales_orders","sap_s4hana_list_supplier_invoices","sap_s4hana_list_suppliers","sap_s4hana_odata_query","sap_s4hana_update_business_partner","sap_s4hana_update_customer","sap_s4hana_update_product","sap_s4hana_update_purchase_order","sap_s4hana_update_purchase_requisition","sap_s4hana_update_sales_order","sap_s4hana_update_supplier","search_tool","secrets_manager_create_secret","secrets_manager_delete_secret","secrets_manager_describe_secret","secrets_manager_get_secret","secrets_manager_list_secrets","secrets_manager_restore_secret","secrets_manager_rotate_secret","secrets_manager_tag_resource","secrets_manager_untag_resource","secrets_manager_update_secret","semrush_backlinks","semrush_backlinks_anchors","semrush_backlinks_competitors","semrush_backlinks_geo_distribution","semrush_backlinks_indexed_pages","semrush_backlinks_overview","semrush_backlinks_tld_distribution","semrush_batch_keyword_overview","semrush_broad_match_keywords","semrush_domain_ad_copies","semrush_domain_ad_history","semrush_domain_organic_competitors","semrush_domain_organic_keywords","semrush_domain_overview","semrush_domain_overview_all","semrush_domain_overview_history","semrush_domain_paid_competitors","semrush_domain_paid_keywords","semrush_domain_pla_copies","semrush_domain_pla_keywords","semrush_domain_vs_domain","semrush_keyword_ad_history","semrush_keyword_difficulty","semrush_keyword_overview","semrush_keyword_overview_all","semrush_keyword_questions","semrush_organic_results","semrush_paid_results","semrush_referring_domains","semrush_referring_ips","semrush_related_keywords","semrush_subdomain_ad_copies","semrush_subdomain_organic_keywords","semrush_subdomain_overview","semrush_subdomain_overview_all","semrush_subdomain_overview_history","semrush_subdomain_paid_keywords","semrush_top_domains","semrush_url_organic_keywords","semrush_url_overview","semrush_url_overview_all","semrush_url_overview_history","semrush_url_paid_keywords","semrush_winners_and_losers","sendblue_evaluate_service","sendblue_get_message","sendblue_send_group_message","sendblue_send_message","sendblue_send_typing_indicator","sendgrid_add_contact","sendgrid_add_contacts_to_list","sendgrid_create_list","sendgrid_create_template","sendgrid_create_template_version","sendgrid_delete_contacts","sendgrid_delete_list","sendgrid_delete_template","sendgrid_get_contact","sendgrid_get_list","sendgrid_get_template","sendgrid_list_all_lists","sendgrid_list_templates","sendgrid_remove_contacts_from_list","sendgrid_search_contacts","sendgrid_send_mail","sentry_events_get","sentry_events_list","sentry_issues_get","sentry_issues_list","sentry_issues_update","sentry_projects_create","sentry_projects_get","sentry_projects_list","sentry_projects_update","sentry_releases_create","sentry_releases_deploy","sentry_releases_list","sentry_teams_list","serper_search","servicenow_add_incident_comment","servicenow_aggregate","servicenow_close_incident","servicenow_create_change_request","servicenow_create_incident","servicenow_create_record","servicenow_delete_record","servicenow_download_attachment","servicenow_download_attachment_v2","servicenow_find_user","servicenow_get_change_next_states","servicenow_get_change_request","servicenow_get_ci","servicenow_get_incident","servicenow_get_knowledge_article","servicenow_get_requested_item","servicenow_list_approvals","servicenow_list_attachments","servicenow_list_catalog_items","servicenow_list_change_requests","servicenow_list_change_tasks","servicenow_list_ci_relationships","servicenow_list_group_members","servicenow_list_incidents","servicenow_list_requested_items","servicenow_order_catalog_item","servicenow_read_record","servicenow_resolve_incident","servicenow_search_cis","servicenow_search_knowledge","servicenow_update_approval","servicenow_update_change_request","servicenow_update_change_state","servicenow_update_incident","servicenow_update_record","servicenow_upload_attachment","ses_create_configuration_set","ses_create_email_identity","ses_create_template","ses_delete_email_identity","ses_delete_suppressed_destination","ses_delete_template","ses_get_account","ses_get_email_identity","ses_get_suppressed_destination","ses_get_template","ses_list_identities","ses_list_suppressed_destinations","ses_list_templates","ses_put_suppressed_destination","ses_send_bulk_email","ses_send_custom_verification_email","ses_send_email","ses_send_templated_email","ses_update_template","sftp_delete","sftp_download","sftp_download_v2","sftp_list","sftp_mkdir","sftp_upload","sharepoint_add_list_items","sharepoint_create_list","sharepoint_create_page","sharepoint_delete_file","sharepoint_delete_list_item","sharepoint_delete_page","sharepoint_download_file","sharepoint_get_drive_item","sharepoint_get_list","sharepoint_get_list_item","sharepoint_list_sites","sharepoint_publish_page","sharepoint_read_page","sharepoint_update_list","sharepoint_update_page","sharepoint_upload_file","shopify_adjust_inventory","shopify_cancel_order","shopify_create_customer","shopify_create_fulfillment","shopify_create_product","shopify_delete_customer","shopify_delete_product","shopify_get_collection","shopify_get_customer","shopify_get_inventory_level","shopify_get_order","shopify_get_product","shopify_list_collections","shopify_list_customers","shopify_list_inventory_items","shopify_list_locations","shopify_list_orders","shopify_list_products","shopify_update_customer","shopify_update_order","shopify_update_product","similarweb_bounce_rate","similarweb_page_views","similarweb_pages_per_visit","similarweb_traffic_visits","similarweb_visit_duration","similarweb_website_overview","sixtyfour_enrich_company","sixtyfour_enrich_lead","sixtyfour_find_email","sixtyfour_find_phone","slack_add_bookmark","slack_add_reaction","slack_archive_conversation","slack_canvas","slack_close_conversation","slack_create_channel_canvas","slack_create_conversation","slack_create_user_group","slack_delete_canvas","slack_delete_file","slack_delete_message","slack_delete_scheduled_message","slack_disable_user_group","slack_download","slack_edit_bookmark","slack_edit_canvas","slack_enable_user_group","slack_ephemeral_message","slack_get_canvas","slack_get_channel_history","slack_get_channel_info","slack_get_dnd_info","slack_get_file_info","slack_get_message","slack_get_permalink","slack_get_reactions","slack_get_team_dnd_info","slack_get_team_info","slack_get_team_profile","slack_get_thread","slack_get_thread_replies","slack_get_user","slack_get_user_presence","slack_get_user_profile","slack_invite_to_conversation","slack_join_conversation","slack_kick_conversation","slack_leave_conversation","slack_list_bookmarks","slack_list_canvases","slack_list_channels","slack_list_emoji","slack_list_files","slack_list_members","slack_list_pins","slack_list_reactions","slack_list_scheduled_messages","slack_list_user_conversations","slack_list_user_group_members","slack_list_user_groups","slack_list_users","slack_lists_access_delete","slack_lists_access_set","slack_lists_create","slack_lists_download_get","slack_lists_download_start","slack_lists_items_create","slack_lists_items_delete","slack_lists_items_delete_multiple","slack_lists_items_info","slack_lists_items_list","slack_lists_items_update","slack_lists_update","slack_lookup_canvas_sections","slack_lookup_user_by_email","slack_mark_conversation_read","slack_message","slack_message_reader","slack_open_conversation","slack_open_view","slack_pin_message","slack_publish_view","slack_push_view","slack_remove_bookmark","slack_remove_reaction","slack_rename_agent_session_v2","slack_rename_conversation","slack_revoke_canvas_access","slack_schedule_message","slack_set_agent_session_status_v2","slack_set_conversation_purpose","slack_set_conversation_topic","slack_set_status","slack_set_suggested_prompts","slack_set_suggested_prompts_v2","slack_set_title","slack_set_user_presence","slack_share_canvas","slack_unarchive_conversation","slack_unfurl_links","slack_unpin_message","slack_update_message","slack_update_user_group","slack_update_user_group_members","slack_update_view","smartlead_add_email_accounts_to_campaign","smartlead_add_leads_to_campaign","smartlead_create_campaign","smartlead_create_lead_list","smartlead_delete_campaign","smartlead_delete_campaign_webhook","smartlead_delete_lead_from_campaign","smartlead_delete_lead_list","smartlead_duplicate_campaign","smartlead_export_campaign_leads","smartlead_get_campaign","smartlead_get_campaign_analytics","smartlead_get_campaign_analytics_by_date","smartlead_get_campaign_lead_statistics","smartlead_get_campaign_mailbox_statistics","smartlead_get_campaign_sequences","smartlead_get_campaign_statistics","smartlead_get_campaign_top_level_analytics_by_date","smartlead_get_campaign_webhook_summary","smartlead_get_lead_by_email","smartlead_get_lead_by_id","smartlead_get_lead_list","smartlead_get_lead_message_history","smartlead_list_campaign_email_accounts","smartlead_list_campaign_leads","smartlead_list_campaign_webhooks","smartlead_list_campaigns","smartlead_list_clients","smartlead_list_email_accounts","smartlead_list_inbox_replies","smartlead_list_lead_activities","smartlead_list_lead_categories","smartlead_list_lead_lists","smartlead_mark_lead_complete","smartlead_pause_lead","smartlead_remove_email_accounts_from_campaign","smartlead_resume_lead","smartlead_save_campaign_sequences","smartlead_unsubscribe_lead_from_campaign","smartlead_unsubscribe_lead_globally","smartlead_update_campaign_schedule","smartlead_update_campaign_settings","smartlead_update_campaign_status","smartlead_update_lead","smartlead_update_lead_category","smartlead_update_lead_list","smartlead_upsert_campaign_webhook","sms_send","smtp_send_mail","snowflake_alter_warehouse","snowflake_call_procedure","snowflake_cancel_statement","snowflake_cancel_task_run","snowflake_cortex_analyst_ask","snowflake_cortex_analyst_feedback","snowflake_delete_rows","snowflake_execute_sql","snowflake_get_statement","snowflake_get_task","snowflake_get_task_run","snowflake_get_task_run_output","snowflake_get_warehouse","snowflake_insert_rows","snowflake_introspect_schema","snowflake_list_copy_history","snowflake_list_databases","snowflake_list_query_history","snowflake_list_schemas","snowflake_list_tables","snowflake_list_task_runs","snowflake_list_tasks","snowflake_list_warehouses","snowflake_load_data","snowflake_resume_task","snowflake_resume_warehouse","snowflake_run_task","snowflake_suspend_task","snowflake_suspend_warehouse","snowflake_unload_data","snowflake_update_rows","snowflake_upsert_rows","splunk_cancel_search_job","splunk_create_search_job","splunk_dispatch_saved_search","splunk_get_fired_alerts","splunk_get_saved_search","splunk_get_search_job","splunk_get_search_results","splunk_list_apps","splunk_list_fired_alerts","splunk_list_indexes","splunk_list_saved_searches","splunk_run_search","sportmonks_core_get_cities","sportmonks_core_get_city","sportmonks_core_get_continent","sportmonks_core_get_continents","sportmonks_core_get_countries","sportmonks_core_get_country","sportmonks_core_get_entity_filters","sportmonks_core_get_my_usage","sportmonks_core_get_region","sportmonks_core_get_regions","sportmonks_core_get_timezones","sportmonks_core_get_type","sportmonks_core_get_type_by_entity","sportmonks_core_get_types","sportmonks_core_search_cities","sportmonks_core_search_countries","sportmonks_core_search_regions","sportmonks_football_expected_by_player","sportmonks_football_expected_by_team","sportmonks_football_get_all_commentaries","sportmonks_football_get_all_fixtures","sportmonks_football_get_all_players","sportmonks_football_get_all_rivals","sportmonks_football_get_all_teams","sportmonks_football_get_all_transfer_rumours","sportmonks_football_get_all_transfers","sportmonks_football_get_brackets_by_season","sportmonks_football_get_coach","sportmonks_football_get_coaches","sportmonks_football_get_coaches_by_country","sportmonks_football_get_commentaries_by_fixture","sportmonks_football_get_current_leagues_by_team","sportmonks_football_get_expected_lineups_by_player","sportmonks_football_get_expected_lineups_by_team","sportmonks_football_get_extended_team_squad","sportmonks_football_get_fixture","sportmonks_football_get_fixtures_by_date","sportmonks_football_get_fixtures_by_date_range","sportmonks_football_get_fixtures_by_date_range_for_team","sportmonks_football_get_fixtures_by_ids","sportmonks_football_get_grouped_standings_by_round","sportmonks_football_get_head_to_head","sportmonks_football_get_inplay_livescores","sportmonks_football_get_latest_coaches","sportmonks_football_get_latest_fixtures","sportmonks_football_get_latest_livescores","sportmonks_football_get_latest_players","sportmonks_football_get_latest_totw","sportmonks_football_get_latest_transfers","sportmonks_football_get_league","sportmonks_football_get_leagues","sportmonks_football_get_leagues_by_country","sportmonks_football_get_leagues_by_date","sportmonks_football_get_leagues_by_team","sportmonks_football_get_live_leagues","sportmonks_football_get_live_probabilities","sportmonks_football_get_live_probabilities_by_fixture","sportmonks_football_get_live_standings_by_league","sportmonks_football_get_livescores","sportmonks_football_get_match_facts","sportmonks_football_get_match_facts_by_date_range","sportmonks_football_get_match_facts_by_fixture","sportmonks_football_get_match_facts_by_league","sportmonks_football_get_past_fixtures_by_tv_station","sportmonks_football_get_player","sportmonks_football_get_players_by_country","sportmonks_football_get_postmatch_news","sportmonks_football_get_postmatch_news_by_season","sportmonks_football_get_predictability_by_league","sportmonks_football_get_prematch_news","sportmonks_football_get_prematch_news_by_season","sportmonks_football_get_prematch_news_upcoming","sportmonks_football_get_probabilities","sportmonks_football_get_probabilities_by_fixture","sportmonks_football_get_referee","sportmonks_football_get_referees","sportmonks_football_get_referees_by_country","sportmonks_football_get_referees_by_season","sportmonks_football_get_rivals_by_team","sportmonks_football_get_round","sportmonks_football_get_round_statistics","sportmonks_football_get_rounds","sportmonks_football_get_rounds_by_season","sportmonks_football_get_schedules_by_season","sportmonks_football_get_schedules_by_season_and_team","sportmonks_football_get_schedules_by_team","sportmonks_football_get_season","sportmonks_football_get_seasons","sportmonks_football_get_seasons_by_team","sportmonks_football_get_stage","sportmonks_football_get_stage_statistics","sportmonks_football_get_stages","sportmonks_football_get_stages_by_season","sportmonks_football_get_standing_corrections_by_season","sportmonks_football_get_standings","sportmonks_football_get_standings_by_round","sportmonks_football_get_standings_by_season","sportmonks_football_get_state","sportmonks_football_get_states","sportmonks_football_get_team","sportmonks_football_get_team_rankings","sportmonks_football_get_team_rankings_by_date","sportmonks_football_get_team_rankings_by_team","sportmonks_football_get_team_squad","sportmonks_football_get_team_squad_by_season","sportmonks_football_get_teams_by_country","sportmonks_football_get_teams_by_season","sportmonks_football_get_topscorers_by_season","sportmonks_football_get_topscorers_by_stage","sportmonks_football_get_totw","sportmonks_football_get_totw_by_round","sportmonks_football_get_transfer","sportmonks_football_get_transfer_rumour","sportmonks_football_get_transfer_rumours_between_dates","sportmonks_football_get_transfer_rumours_by_player","sportmonks_football_get_transfer_rumours_by_team","sportmonks_football_get_transfers_between_dates","sportmonks_football_get_transfers_by_player","sportmonks_football_get_transfers_by_team","sportmonks_football_get_tv_station","sportmonks_football_get_tv_stations","sportmonks_football_get_tv_stations_by_fixture","sportmonks_football_get_upcoming_fixtures_by_market","sportmonks_football_get_upcoming_fixtures_by_tv_station","sportmonks_football_get_value_bets","sportmonks_football_get_value_bets_by_fixture","sportmonks_football_get_venue","sportmonks_football_get_venues","sportmonks_football_get_venues_by_season","sportmonks_football_search_coaches","sportmonks_football_search_fixtures","sportmonks_football_search_leagues","sportmonks_football_search_players","sportmonks_football_search_referees","sportmonks_football_search_rounds","sportmonks_football_search_seasons","sportmonks_football_search_stages","sportmonks_football_search_teams","sportmonks_football_search_venues","sportmonks_motorsport_get_all_fixtures","sportmonks_motorsport_get_current_leagues_by_team","sportmonks_motorsport_get_driver","sportmonks_motorsport_get_driver_standings","sportmonks_motorsport_get_driver_standings_by_season","sportmonks_motorsport_get_drivers","sportmonks_motorsport_get_drivers_by_country","sportmonks_motorsport_get_drivers_by_season","sportmonks_motorsport_get_fixture","sportmonks_motorsport_get_fixtures_by_date","sportmonks_motorsport_get_fixtures_by_date_range","sportmonks_motorsport_get_fixtures_by_ids","sportmonks_motorsport_get_laps_by_fixture","sportmonks_motorsport_get_laps_by_fixture_and_driver","sportmonks_motorsport_get_laps_by_fixture_and_lap","sportmonks_motorsport_get_latest_laps_by_fixture","sportmonks_motorsport_get_latest_pitstops_by_fixture","sportmonks_motorsport_get_latest_stints_by_fixture","sportmonks_motorsport_get_latest_updated_drivers","sportmonks_motorsport_get_latest_updated_fixtures","sportmonks_motorsport_get_league","sportmonks_motorsport_get_leagues","sportmonks_motorsport_get_leagues_by_country","sportmonks_motorsport_get_leagues_by_date","sportmonks_motorsport_get_leagues_by_live","sportmonks_motorsport_get_leagues_by_team","sportmonks_motorsport_get_livescores","sportmonks_motorsport_get_pitstops_by_fixture","sportmonks_motorsport_get_pitstops_by_fixture_and_driver","sportmonks_motorsport_get_pitstops_by_fixture_and_lap","sportmonks_motorsport_get_race_results_by_season_and_driver","sportmonks_motorsport_get_race_results_by_season_and_team","sportmonks_motorsport_get_schedules_by_season","sportmonks_motorsport_get_season","sportmonks_motorsport_get_seasons","sportmonks_motorsport_get_stage","sportmonks_motorsport_get_stages","sportmonks_motorsport_get_stages_by_season","sportmonks_motorsport_get_state","sportmonks_motorsport_get_states","sportmonks_motorsport_get_stints_by_fixture","sportmonks_motorsport_get_stints_by_fixture_and_driver","sportmonks_motorsport_get_stints_by_fixture_and_stint","sportmonks_motorsport_get_team","sportmonks_motorsport_get_team_standings","sportmonks_motorsport_get_team_standings_by_season","sportmonks_motorsport_get_teams","sportmonks_motorsport_get_teams_by_country","sportmonks_motorsport_get_teams_by_season","sportmonks_motorsport_get_venue","sportmonks_motorsport_get_venues","sportmonks_motorsport_get_venues_by_season","sportmonks_motorsport_search_drivers","sportmonks_motorsport_search_leagues","sportmonks_motorsport_search_stages","sportmonks_motorsport_search_teams","sportmonks_motorsport_search_venues","sportmonks_odds_get_all_historical_odds","sportmonks_odds_get_all_inplay_odds","sportmonks_odds_get_all_pre_match_odds","sportmonks_odds_get_all_premium_odds","sportmonks_odds_get_bookmaker","sportmonks_odds_get_bookmaker_event_ids_by_fixture","sportmonks_odds_get_bookmakers","sportmonks_odds_get_bookmakers_by_fixture","sportmonks_odds_get_inplay_odds_by_fixture","sportmonks_odds_get_inplay_odds_by_fixture_and_bookmaker","sportmonks_odds_get_inplay_odds_by_fixture_and_market","sportmonks_odds_get_last_updated_inplay_odds","sportmonks_odds_get_last_updated_pre_match_odds","sportmonks_odds_get_market","sportmonks_odds_get_markets","sportmonks_odds_get_pre_match_odds_by_fixture","sportmonks_odds_get_pre_match_odds_by_fixture_and_bookmaker","sportmonks_odds_get_pre_match_odds_by_fixture_and_market","sportmonks_odds_get_premium_odds_by_fixture","sportmonks_odds_get_premium_odds_by_fixture_and_bookmaker","sportmonks_odds_get_premium_odds_by_fixture_and_market","sportmonks_odds_get_updated_historical_odds_between","sportmonks_odds_get_updated_premium_odds_between","sportmonks_odds_search_bookmakers","sportmonks_odds_search_markets","spotify_add_playlist_cover","spotify_add_to_queue","spotify_add_tracks_to_playlist","spotify_check_following","spotify_check_playlist_followers","spotify_check_saved_albums","spotify_check_saved_audiobooks","spotify_check_saved_episodes","spotify_check_saved_shows","spotify_check_saved_tracks","spotify_create_playlist","spotify_follow_artists","spotify_follow_playlist","spotify_get_album","spotify_get_album_tracks","spotify_get_albums","spotify_get_artist","spotify_get_artist_albums","spotify_get_artist_top_tracks","spotify_get_artists","spotify_get_audiobook","spotify_get_audiobook_chapters","spotify_get_audiobooks","spotify_get_categories","spotify_get_current_user","spotify_get_currently_playing","spotify_get_devices","spotify_get_episode","spotify_get_episodes","spotify_get_followed_artists","spotify_get_markets","spotify_get_new_releases","spotify_get_playback_state","spotify_get_playlist","spotify_get_playlist_cover","spotify_get_playlist_tracks","spotify_get_queue","spotify_get_recently_played","spotify_get_saved_albums","spotify_get_saved_audiobooks","spotify_get_saved_episodes","spotify_get_saved_shows","spotify_get_saved_tracks","spotify_get_show","spotify_get_show_episodes","spotify_get_shows","spotify_get_top_artists","spotify_get_top_tracks","spotify_get_track","spotify_get_tracks","spotify_get_user_playlists","spotify_get_user_profile","spotify_pause","spotify_play","spotify_remove_saved_albums","spotify_remove_saved_audiobooks","spotify_remove_saved_episodes","spotify_remove_saved_shows","spotify_remove_saved_tracks","spotify_remove_tracks_from_playlist","spotify_reorder_playlist_items","spotify_replace_playlist_items","spotify_save_albums","spotify_save_audiobooks","spotify_save_episodes","spotify_save_shows","spotify_save_tracks","spotify_search","spotify_seek","spotify_set_repeat","spotify_set_shuffle","spotify_set_volume","spotify_skip_next","spotify_skip_previous","spotify_transfer_playback","spotify_unfollow_artists","spotify_unfollow_playlist","spotify_update_playlist","sqs_cancel_message_move_task","sqs_change_message_visibility","sqs_change_message_visibility_batch","sqs_create_queue","sqs_delete_message","sqs_delete_message_batch","sqs_delete_queue","sqs_get_queue_attributes","sqs_get_queue_url","sqs_list_dead_letter_source_queues","sqs_list_message_move_tasks","sqs_list_queue_tags","sqs_list_queues","sqs_purge_queue","sqs_receive_message","sqs_send","sqs_send_message_batch","sqs_set_queue_attributes","sqs_start_message_move_task","sqs_tag_queue","sqs_untag_queue","square_batch_retrieve_inventory_counts","square_cancel_invoice","square_cancel_payment","square_complete_payment","square_create_catalog_image","square_create_customer","square_create_invoice","square_create_order","square_create_payment","square_delete_catalog_object","square_delete_customer","square_delete_invoice","square_get_catalog_object","square_get_customer","square_get_invoice","square_get_location","square_get_order","square_get_payment","square_get_refund","square_list_catalog","square_list_customers","square_list_invoices","square_list_locations","square_list_payments","square_list_refunds","square_pay_order","square_publish_invoice","square_refund_payment","square_search_catalog_objects","square_search_customers","square_search_invoices","square_search_orders","square_update_customer","square_upsert_catalog_object","ssh_check_command_exists","ssh_check_file_exists","ssh_create_directory","ssh_delete_file","ssh_download_file","ssh_download_file_v2","ssh_execute_command","ssh_execute_script","ssh_get_system_info","ssh_list_directory","ssh_move_rename","ssh_read_file_content","ssh_upload_file","ssh_write_file_content","ssm_cancel_command","ssm_delete_parameter","ssm_describe_automation_executions","ssm_describe_instance_information","ssm_describe_instance_patch_states","ssm_describe_instance_patches","ssm_describe_parameters","ssm_get_automation_execution","ssm_get_command_invocation","ssm_get_document","ssm_get_parameter","ssm_get_parameters","ssm_get_parameters_by_path","ssm_list_command_invocations","ssm_list_commands","ssm_list_compliance_items","ssm_list_compliance_summaries","ssm_list_documents","ssm_put_parameter","ssm_send_command","ssm_start_automation_execution","ssm_stop_automation_execution","stagehand_agent","stagehand_extract","stripe_cancel_payment_intent","stripe_cancel_subscription","stripe_capture_charge","stripe_capture_payment_intent","stripe_confirm_payment_intent","stripe_create_charge","stripe_create_customer","stripe_create_invoice","stripe_create_payment_intent","stripe_create_price","stripe_create_product","stripe_create_subscription","stripe_delete_customer","stripe_delete_invoice","stripe_delete_product","stripe_finalize_invoice","stripe_list_charges","stripe_list_customers","stripe_list_events","stripe_list_invoices","stripe_list_payment_intents","stripe_list_prices","stripe_list_products","stripe_list_subscriptions","stripe_pay_invoice","stripe_resume_subscription","stripe_retrieve_charge","stripe_retrieve_customer","stripe_retrieve_event","stripe_retrieve_invoice","stripe_retrieve_payment_intent","stripe_retrieve_price","stripe_retrieve_product","stripe_retrieve_subscription","stripe_search_charges","stripe_search_customers","stripe_search_invoices","stripe_search_payment_intents","stripe_search_prices","stripe_search_products","stripe_search_subscriptions","stripe_send_invoice","stripe_update_charge","stripe_update_customer","stripe_update_invoice","stripe_update_payment_intent","stripe_update_price","stripe_update_product","stripe_update_subscription","stripe_void_invoice","sts_assume_role","sts_assume_role_with_saml","sts_assume_role_with_web_identity","sts_get_access_key_info","sts_get_caller_identity","sts_get_session_token","stt_assemblyai","stt_assemblyai_v2","stt_deepgram","stt_deepgram_v2","stt_elevenlabs","stt_elevenlabs_v2","stt_gemini","stt_gemini_v2","stt_whisper","stt_whisper_v2","supabase_count","supabase_delete","supabase_get_row","supabase_insert","supabase_introspect","supabase_invoke_function","supabase_query","supabase_rpc","supabase_storage_copy","supabase_storage_create_bucket","supabase_storage_create_signed_upload_url","supabase_storage_create_signed_url","supabase_storage_delete","supabase_storage_delete_bucket","supabase_storage_download","supabase_storage_empty_bucket","supabase_storage_get_public_url","supabase_storage_list","supabase_storage_list_buckets","supabase_storage_move","supabase_storage_update_bucket","supabase_storage_upload","supabase_text_search","supabase_update","supabase_upsert","supabase_vector_search","table_batch_insert_rows","table_create","table_delete_row","table_delete_rows_by_filter","table_get_row","table_get_schema","table_insert_row","table_list","table_query_rows","table_query_rows_v2","table_update_row","table_update_rows_by_filter","table_upsert_row","tailscale_authorize_device","tailscale_create_auth_key","tailscale_delete_auth_key","tailscale_delete_device","tailscale_delete_user","tailscale_expire_device_key","tailscale_get_acl","tailscale_get_auth_key","tailscale_get_device","tailscale_get_device_routes","tailscale_get_dns_preferences","tailscale_get_dns_searchpaths","tailscale_list_auth_keys","tailscale_list_devices","tailscale_list_dns_nameservers","tailscale_list_users","tailscale_set_acl","tailscale_set_device_routes","tailscale_set_device_tags","tailscale_set_dns_nameservers","tailscale_set_dns_preferences","tailscale_set_dns_searchpaths","tailscale_suspend_user","tailscale_update_device_key","tavily_crawl","tavily_extract","tavily_map","tavily_search","telegram_copy_message","telegram_delete_message","telegram_edit_message_text","telegram_forward_message","telegram_get_chat","telegram_get_chat_member","telegram_message","telegram_pin_message","telegram_send_animation","telegram_send_audio","telegram_send_chat_action","telegram_send_contact","telegram_send_document","telegram_send_location","telegram_send_photo","telegram_send_poll","telegram_send_video","telegram_set_message_reaction","telegram_unpin_message","temporal_cancel_workflow","temporal_count_workflows","temporal_create_schedule","temporal_delete_schedule","temporal_describe_schedule","temporal_describe_task_queue","temporal_describe_workflow","temporal_get_workflow_history","temporal_list_schedules","temporal_list_workflows","temporal_pause_schedule","temporal_query_workflow","temporal_reset_workflow","temporal_signal_with_start","temporal_signal_workflow","temporal_start_workflow","temporal_terminate_workflow","temporal_trigger_schedule","temporal_unpause_schedule","temporal_update_workflow","textract_analyze_expense","textract_analyze_id","textract_parser","textract_parser_v2","thinking_tool","thrive_add_audience_managers","thrive_add_audience_members","thrive_add_user_tags","thrive_create_assignment","thrive_create_audience","thrive_create_completion","thrive_create_user","thrive_delete_assignment","thrive_delete_audience","thrive_delete_user","thrive_get_activity","thrive_get_assignment","thrive_get_audience","thrive_get_completion","thrive_get_content","thrive_get_cpd_category","thrive_get_cpd_entry","thrive_get_cpd_requirement","thrive_get_enrolment","thrive_get_skill_levels","thrive_get_tag","thrive_get_user_by_id","thrive_get_user_by_ref","thrive_list_assignments","thrive_list_audience_managers","thrive_list_audience_members","thrive_list_audiences","thrive_list_completions","thrive_list_enrolments","thrive_list_tags","thrive_query_activities","thrive_query_content","thrive_query_cpd_categories","thrive_query_cpd_entries","thrive_query_cpd_requirements","thrive_query_cpd_user_summaries","thrive_remove_audience_manager","thrive_remove_audience_member","thrive_remove_user_tags","thrive_replace_audience_managers","thrive_replace_audience_members","thrive_search_users","thrive_suspend_user","thrive_update_assignment","thrive_update_audience","thrive_update_user","thrive_update_user_skills","tiktok_get_post_status","tiktok_get_user","tiktok_list_videos","tiktok_query_videos","tiktok_upload_video_draft","tinybird_append_datasource","tinybird_delete_datasource_rows","tinybird_events","tinybird_get_job","tinybird_query","tinybird_query_pipe","tinybird_truncate_datasource","tinyfish_cancel_run","tinyfish_fetch","tinyfish_get_run","tinyfish_list_profiles","tinyfish_list_runs","tinyfish_list_vault_items","tinyfish_run","tinyfish_run_async","tinyfish_search","trello_add_checklist","trello_add_checklist_item","trello_add_comment","trello_add_label","trello_add_member","trello_create_board","trello_create_card","trello_create_list","trello_delete_card","trello_get_actions","trello_get_board","trello_get_card","trello_list_cards","trello_list_lists","trello_list_members","trello_remove_label","trello_remove_member","trello_search","trello_update_card","trello_update_checklist_item","trello_update_list","trigger_dev_activate_schedule","trigger_dev_add_run_tags","trigger_dev_batch_trigger_task","trigger_dev_cancel_run","trigger_dev_complete_waitpoint_token","trigger_dev_create_env_var","trigger_dev_create_schedule","trigger_dev_create_waitpoint_token","trigger_dev_deactivate_schedule","trigger_dev_delete_env_var","trigger_dev_delete_schedule","trigger_dev_execute_query","trigger_dev_get_batch","trigger_dev_get_batch_results","trigger_dev_get_deployment","trigger_dev_get_env_var","trigger_dev_get_latest_deployment","trigger_dev_get_query_schema","trigger_dev_get_queue","trigger_dev_get_run","trigger_dev_get_run_events","trigger_dev_get_run_result","trigger_dev_get_run_trace","trigger_dev_get_schedule","trigger_dev_get_waitpoint_token","trigger_dev_import_env_vars","trigger_dev_list_deployments","trigger_dev_list_env_vars","trigger_dev_list_queues","trigger_dev_list_runs","trigger_dev_list_schedules","trigger_dev_list_timezones","trigger_dev_list_waitpoint_tokens","trigger_dev_override_queue_concurrency","trigger_dev_pause_queue","trigger_dev_promote_deployment","trigger_dev_replay_run","trigger_dev_reschedule_run","trigger_dev_reset_queue_concurrency","trigger_dev_resume_queue","trigger_dev_trigger_task","trigger_dev_update_env_var","trigger_dev_update_run_metadata","trigger_dev_update_schedule","tts_azure","tts_cartesia","tts_deepgram","tts_elevenlabs","tts_google","tts_openai","tts_playht","twilio_send_sms","twilio_voice_get_recording","twilio_voice_list_calls","twilio_voice_make_call","typeform_create_form","typeform_delete_form","typeform_files","typeform_get_form","typeform_insights","typeform_list_forms","typeform_responses","typeform_update_form","upstash_redis_command","upstash_redis_delete","upstash_redis_exists","upstash_redis_expire","upstash_redis_get","upstash_redis_hget","upstash_redis_hgetall","upstash_redis_hset","upstash_redis_incr","upstash_redis_incrby","upstash_redis_keys","upstash_redis_lpush","upstash_redis_lrange","upstash_redis_set","upstash_redis_setnx","upstash_redis_ttl","uptimerobot_create_alert_contact","uptimerobot_create_maintenance_window","uptimerobot_create_monitor","uptimerobot_create_psp","uptimerobot_delete_alert_contact","uptimerobot_delete_maintenance_window","uptimerobot_delete_monitor","uptimerobot_delete_psp","uptimerobot_get_account","uptimerobot_get_alert_contact","uptimerobot_get_incident","uptimerobot_get_maintenance_window","uptimerobot_get_monitor","uptimerobot_get_psp","uptimerobot_list_alert_contacts","uptimerobot_list_incidents","uptimerobot_list_maintenance_windows","uptimerobot_list_monitors","uptimerobot_list_psps","uptimerobot_pause_monitor","uptimerobot_start_monitor","uptimerobot_update_maintenance_window","uptimerobot_update_monitor","uptimerobot_update_psp","vanta_download_document_file","vanta_get_control","vanta_get_document","vanta_get_framework","vanta_get_person","vanta_get_policy","vanta_get_risk_scenario","vanta_get_test","vanta_get_vendor","vanta_get_vulnerable_asset","vanta_list_control_documents","vanta_list_control_tests","vanta_list_controls","vanta_list_document_uploads","vanta_list_documents","vanta_list_framework_controls","vanta_list_frameworks","vanta_list_monitored_computers","vanta_list_people","vanta_list_policies","vanta_list_risk_scenarios","vanta_list_test_entities","vanta_list_tests","vanta_list_vendors","vanta_list_vulnerabilities","vanta_list_vulnerability_remediations","vanta_list_vulnerable_assets","vanta_submit_document","vanta_upload_document_file","vercel_add_domain","vercel_add_project_domain","vercel_cancel_deployment","vercel_create_alias","vercel_create_check","vercel_create_deployment","vercel_create_dns_record","vercel_create_edge_config","vercel_create_env_var","vercel_create_project","vercel_create_webhook","vercel_delete_alias","vercel_delete_deployment","vercel_delete_dns_record","vercel_delete_domain","vercel_delete_edge_config","vercel_delete_env_var","vercel_delete_project","vercel_delete_webhook","vercel_get_alias","vercel_get_check","vercel_get_deployment","vercel_get_deployment_events","vercel_get_domain","vercel_get_domain_config","vercel_get_edge_config","vercel_get_edge_config_items","vercel_get_env_vars","vercel_get_project","vercel_get_team","vercel_get_user","vercel_get_webhook","vercel_list_aliases","vercel_list_checks","vercel_list_deployment_files","vercel_list_deployments","vercel_list_dns_records","vercel_list_domains","vercel_list_edge_configs","vercel_list_project_domains","vercel_list_projects","vercel_list_team_members","vercel_list_teams","vercel_list_webhooks","vercel_pause_project","vercel_promote_deployment","vercel_remove_project_domain","vercel_rerequest_check","vercel_unpause_project","vercel_update_check","vercel_update_dns_record","vercel_update_edge_config_items","vercel_update_env_var","vercel_update_project","vercel_update_project_domain","vercel_verify_project_domain","video_falai","video_luma","video_minimax","video_runway","video_veo","vision_tool","vision_tool_v2","wealthbox_read_contact","wealthbox_read_note","wealthbox_read_task","wealthbox_write_contact","wealthbox_write_note","wealthbox_write_task","webflow_create_item","webflow_delete_item","webflow_get_item","webflow_list_items","webflow_update_item","webhook_request","whatsapp_get_media","whatsapp_mark_read","whatsapp_send_interactive","whatsapp_send_media","whatsapp_send_message","whatsapp_send_reaction","whatsapp_send_template","whatsapp_upload_media","wikipedia_content","wikipedia_random","wikipedia_search","wikipedia_summary","windchill_check_in_document","windchill_check_in_documents","windchill_check_out_document","windchill_check_out_documents","windchill_create_document","windchill_create_documents","windchill_delete_document","windchill_delete_documents","windchill_download_attachment","windchill_download_primary_content","windchill_get_document","windchill_get_document_structure","windchill_get_primary_content","windchill_get_valid_state_transitions","windchill_list_attachments","windchill_list_documents","windchill_revise_document","windchill_revise_documents","windchill_set_lifecycle_state","windchill_undo_check_out_document","windchill_undo_check_out_documents","windchill_update_common_properties","windchill_update_document","windchill_update_document_security_labels","windchill_update_documents","windchill_upload_attachments","windchill_upload_primary_content","wiza_company_enrichment","wiza_get_credits","wiza_individual_reveal","wiza_prospect_search","wordpress_create_category","wordpress_create_comment","wordpress_create_page","wordpress_create_post","wordpress_create_tag","wordpress_delete_category","wordpress_delete_comment","wordpress_delete_media","wordpress_delete_page","wordpress_delete_post","wordpress_delete_tag","wordpress_get_category","wordpress_get_current_user","wordpress_get_media","wordpress_get_page","wordpress_get_post","wordpress_get_tag","wordpress_get_user","wordpress_list_categories","wordpress_list_comments","wordpress_list_media","wordpress_list_pages","wordpress_list_posts","wordpress_list_tags","wordpress_list_users","wordpress_search_content","wordpress_update_category","wordpress_update_comment","wordpress_update_page","wordpress_update_post","wordpress_update_tag","wordpress_upload_media","workday_assign_onboarding","workday_change_job","workday_create_prehire","workday_get_compensation","workday_get_organizations","workday_get_worker","workday_hire_employee","workday_list_workers","workday_terminate_worker","workday_update_worker","workflow_executor","x_create_bookmark","x_create_tweet","x_delete_bookmark","x_delete_tweet","x_get_blocking","x_get_bookmarks","x_get_followers","x_get_following","x_get_liked_tweets","x_get_liking_users","x_get_me","x_get_personalized_trends","x_get_quote_tweets","x_get_retweeted_by","x_get_trends_by_woeid","x_get_tweets_by_ids","x_get_usage","x_get_user_mentions","x_get_user_timeline","x_get_user_tweets","x_hide_reply","x_manage_block","x_manage_follow","x_manage_like","x_manage_mute","x_manage_retweet","x_read","x_search","x_search_tweets","x_search_users","x_user","x_write","youcom_answer","youcom_finance_research","youcom_get_account_balance","youcom_get_contents","youcom_get_research_task","youcom_research","youcom_search","youcom_search_images","youtube_channel_info","youtube_channel_playlists","youtube_channel_videos","youtube_comments","youtube_playlist_items","youtube_search","youtube_trending","youtube_video_categories","youtube_video_details","zendesk_autocomplete_organizations","zendesk_create_organization","zendesk_create_organizations_bulk","zendesk_create_ticket","zendesk_create_tickets_bulk","zendesk_create_user","zendesk_create_users_bulk","zendesk_delete_organization","zendesk_delete_ticket","zendesk_delete_user","zendesk_get_current_user","zendesk_get_organization","zendesk_get_organizations","zendesk_get_ticket","zendesk_get_tickets","zendesk_get_user","zendesk_get_users","zendesk_merge_tickets","zendesk_search","zendesk_search_count","zendesk_search_users","zendesk_update_organization","zendesk_update_ticket","zendesk_update_tickets_bulk","zendesk_update_user","zendesk_update_users_bulk","zep_add_messages","zep_add_user","zep_create_thread","zep_delete_thread","zep_get_context","zep_get_messages","zep_get_threads","zep_get_user","zep_get_user_threads","zerobounce_get_credits","zerobounce_verify_email","zoho_desk_add_comment","zoho_desk_get_attachment","zoho_desk_get_contact","zoho_desk_get_thread","zoho_desk_get_ticket","zoho_desk_list_comments","zoho_desk_list_organizations","zoho_desk_list_threads","zoho_desk_list_tickets","zoho_desk_update_ticket","zoom_create_meeting","zoom_delete_meeting","zoom_delete_recording","zoom_get_meeting","zoom_get_meeting_invitation","zoom_get_meeting_recordings","zoom_list_meetings","zoom_list_past_participants","zoom_list_recordings","zoom_update_meeting","zoominfo_enrich_companies","zoominfo_enrich_contacts","zoominfo_search_companies","zoominfo_search_contacts","zoominfo_search_intent","zoominfo_search_news"]' ) export default toolIds diff --git a/apps/sim/tools/generated/tool-metadata.ts b/apps/sim/tools/generated/tool-metadata.ts index 242c1f2b60a..820fc7249c5 100644 --- a/apps/sim/tools/generated/tool-metadata.ts +++ b/apps/sim/tools/generated/tool-metadata.ts @@ -3,7 +3,7 @@ /** Serializable metadata for every built-in tool, keyed by tool id. */ const toolMetadata: Record = JSON.parse( - '{"a2a_cancel_task":{"id":"a2a_cancel_task","name":"A2A Cancel Task","description":"Request cancellation of an in-progress A2A task.","version":"1.0.0","params":{"agentUrl":{"type":"string","required":true,"visibility":"user-only","description":"The A2A agent endpoint URL"},"taskId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The task ID to cancel"},"apiKey":{"type":"string","required":false,"visibility":"user-only","description":"API key for authentication (if required)"}},"hostedApiKey":"none"},"a2a_get_agent_card":{"id":"a2a_get_agent_card","name":"A2A Get Agent Card","description":"Fetch the Agent Card (discovery document) for an external A2A agent.","version":"1.0.0","params":{"agentUrl":{"type":"string","required":true,"visibility":"user-only","description":"The A2A agent endpoint URL"},"apiKey":{"type":"string","required":false,"visibility":"user-only","description":"API key for authentication (if required)"}},"hostedApiKey":"none"},"a2a_get_task":{"id":"a2a_get_task","name":"A2A Get Task","description":"Retrieve the current state and result of an A2A task.","version":"1.0.0","params":{"agentUrl":{"type":"string","required":true,"visibility":"user-only","description":"The A2A agent endpoint URL"},"taskId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The task ID to retrieve"},"historyLength":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of history messages to include"},"apiKey":{"type":"string","required":false,"visibility":"user-only","description":"API key for authentication (if required)"}},"hostedApiKey":"none"},"a2a_send_message":{"id":"a2a_send_message","name":"A2A Send Message","description":"Send a message to an external A2A agent and return its response.","version":"1.0.0","params":{"agentUrl":{"type":"string","required":true,"visibility":"user-only","description":"The A2A agent endpoint URL"},"message":{"type":"string","required":true,"visibility":"user-or-llm","description":"The message text to send"},"data":{"type":"json","required":false,"visibility":"user-or-llm","description":"Optional structured JSON data to attach"},"files":{"type":"json","required":false,"visibility":"user-or-llm","description":"Optional files to attach"},"taskId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Existing task ID to continue"},"contextId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Conversation context ID to continue"},"apiKey":{"type":"string","required":false,"visibility":"user-only","description":"API key for authentication (if required)"}},"hostedApiKey":"none"},"affinity_batch_update_entity_fields":{"id":"affinity_batch_update_entity_fields","name":"Affinity Batch Update Entity Fields","description":"Write up to 100 non-list field values on one company or person in a single request.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to write the fields on: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"updates":{"type":"json","required":true,"visibility":"user-or-llm","description":"Up to 100 field updates as [{\\"id\\":\\"\\",\\"value\\":{\\"type\\":\\"…\\",\\"data\\":…}}], using the same value shapes as a single field update"}},"hostedApiKey":"none"},"affinity_batch_update_list_entry_fields":{"id":"affinity_batch_update_list_entry_fields","name":"Affinity Batch Update List Entry Fields","description":"Write up to 100 field values on one list row in a single request. Requires the \\"Export data from Lists\\" permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"listEntryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list entry ID"},"updates":{"type":"json","required":true,"visibility":"user-or-llm","description":"Up to 100 field updates as [{\\"id\\":\\"\\",\\"value\\":{\\"type\\":\\"…\\",\\"data\\":…}}], using the same value shapes as a single field update"}},"hostedApiKey":"none"},"affinity_create_list":{"id":"affinity_create_list","name":"Affinity Create List","description":"Create a list. Its type fixes which entities it can hold, and the API key holder becomes its creator and owner.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the new list"},"type":{"type":"string","required":true,"visibility":"user-or-llm","description":"Entity kind the list holds: company, opportunity, or person"},"isPublic":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Whether everyone in the organization can see the list"}},"hostedApiKey":"none"},"affinity_create_list_field_dropdown_option":{"id":"affinity_create_list_field_dropdown_option","name":"Affinity Create List Field Dropdown Option","description":"Add a selectable option to a dropdown field on a list. A ranked or status option also needs a rank and a color.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown field ID on that list"},"type":{"type":"string","required":true,"visibility":"user-or-llm","description":"Kind of option to create, matching the field. dropdown takes only a label; ranked-dropdown also requires rank and color; status-dropdown additionally requires a status category. Sending a field the kind does not accept is rejected"},"text":{"type":"string","required":true,"visibility":"user-or-llm","description":"The option label"},"rank":{"type":"number","required":false,"visibility":"user-or-llm","description":"Sort order. Required on a ranked-dropdown or status-dropdown option"},"color":{"type":"string","required":false,"visibility":"user-or-llm","description":"Option color: white, gray, blue, green, purple, orange, or red. Required on a ranked-dropdown or status-dropdown option"},"statusCategory":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pipeline meaning of the option: open, won, lost, or on-hold. Status-dropdown options only"},"winRate":{"type":"number","required":false,"visibility":"user-or-llm","description":"Expected win rate of the status. Status-dropdown options only"}},"hostedApiKey":"none"},"affinity_create_merge":{"id":"affinity_create_merge","name":"Affinity Create Merge","description":"Fold a duplicate company or person into the record you are keeping. The merge runs asynchronously — poll the returned task to see it finish. Requires the \\"Manage duplicates\\" permission and an admin role.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"What to merge: companies or persons"},"primaryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to keep"},"duplicateId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the duplicate record to fold in"}},"hostedApiKey":"none"},"affinity_create_note":{"id":"affinity_create_note","name":"Affinity Create Note","description":"Write a note — attached to companies, persons, and opportunities, anchored to a meeting, call, or chat message, or posted as a reply to an existing note.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"type":{"type":"string","required":true,"visibility":"user-or-llm","description":"Note shape: entities to attach it to records, interaction to anchor it to a meeting, call, or chat message, or user-reply to reply to a note"},"html":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note body as HTML"},"companyIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Companies to attach the note to, e.g. [1, 2]. Not used on a reply"},"personIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Persons to attach the note to, e.g. [1, 2]. Not used on a reply"},"opportunityIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Opportunities to attach the note to, e.g. [1, 2]. Not used on a reply"},"interactionId":{"type":"string","required":false,"visibility":"user-or-llm","description":"The interaction to anchor the note to. Required for an interaction note"},"interactionType":{"type":"string","required":false,"visibility":"user-or-llm","description":"Kind of the anchoring interaction: meeting, call, or chat-message. Required for an interaction note"},"parentId":{"type":"string","required":false,"visibility":"user-or-llm","description":"The note being replied to. Required for a user-reply note"},"creatorId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Attribute the note to another internal person. Defaults to the API key holder"},"createdAt":{"type":"string","required":false,"visibility":"user-or-llm","description":"Backdate the note to this ISO 8601 timestamp"}},"hostedApiKey":"none"},"affinity_create_reminder":{"id":"affinity_create_reminder","name":"Affinity Create Reminder","description":"Create a reminder on one company, person, or opportunity. A recurring reminder resets whenever the chosen signal happens instead of firing once.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"type":{"type":"string","required":true,"visibility":"user-or-llm","description":"one-time to fire once, or recurring to reset on a signal"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"What the reminder is about: company, person, or opportunity"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company, person, or opportunity"},"dueDate":{"type":"string","required":false,"visibility":"user-or-llm","description":"When the reminder is due, as an ISO 8601 timestamp. Required for a one-time reminder; on a recurring one Affinity computes it from the period when omitted"},"content":{"type":"string","required":false,"visibility":"user-or-llm","description":"What the reminder says"},"ownerId":{"type":"string","required":true,"visibility":"user-or-llm","description":"User the reminder is assigned to. Must be an internal user. The API key holder is recorded as the creator, which is a separate field"},"resetTrigger":{"type":"string","required":false,"visibility":"user-or-llm","description":"What restarts a recurring reminder: interaction, email, or event. Required when the type is recurring"},"periodDays":{"type":"number","required":false,"visibility":"user-or-llm","description":"Days between firings of a recurring reminder. Required when the type is recurring"}},"hostedApiKey":"none"},"affinity_delete_list_field_dropdown_option":{"id":"affinity_delete_list_field_dropdown_option","name":"Affinity Delete List Field Dropdown Option","description":"Permanently delete a dropdown option on a list field. Every list entry currently set to it is cleared, and those values cannot be recovered.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown field ID on that list"},"dropdownOptionId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown option ID to delete"}},"hostedApiKey":"none"},"affinity_delete_note":{"id":"affinity_delete_note","name":"Affinity Delete Note","description":"Delete a note you created. Deleting a root note also deletes its replies; deleting a reply removes only that reply.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID to delete"}},"hostedApiKey":"none"},"affinity_get_company":{"id":"affinity_get_company","name":"Affinity Get Company","description":"Look up one company by ID. Field data is returned only for the Field IDs or Field Types asked for.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"companyId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The company ID"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, or relationship-intelligence. Mutually exclusive with Field IDs"}},"hostedApiKey":"none"},"affinity_get_current_user":{"id":"affinity_get_current_user","name":"Affinity Get Current User","description":"Verify an Affinity API key and return the tenant, the user behind the key, and the scopes the grant carries.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"}},"hostedApiKey":"none"},"affinity_get_entity_field_value":{"id":"affinity_get_entity_field_value","name":"Affinity Get Entity Field Value","description":"Read one non-list field value from a company or person.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to read the field from: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The field ID to read"}},"hostedApiKey":"none"},"affinity_get_list":{"id":"affinity_get_list","name":"Affinity Get List","description":"Read one list — its name, type, owner, and privacy setting.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"}},"hostedApiKey":"none"},"affinity_get_list_entry":{"id":"affinity_get_list_entry","name":"Affinity Get List Entry","description":"Read one row of a list with its entity. Field data is returned only for the Field IDs or Field Types asked for.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"listEntryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list entry ID"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, list, or relationship-intelligence. Mutually exclusive with Field IDs"}},"hostedApiKey":"none"},"affinity_get_list_entry_field":{"id":"affinity_get_list_entry_field","name":"Affinity Get List Entry Field","description":"Read one field value on a list row.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"listEntryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list entry ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The field ID to read"}},"hostedApiKey":"none"},"affinity_get_list_field_dropdown_option":{"id":"affinity_get_list_field_dropdown_option","name":"Affinity Get List Field Dropdown Option","description":"Read one dropdown option on a list field.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown field ID on that list"},"dropdownOptionId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown option ID"}},"hostedApiKey":"none"},"affinity_get_merge":{"id":"affinity_get_merge","name":"Affinity Get Merge","description":"Read the status of one company or person merge, including why it failed if it did.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which merge to read: companies or persons"},"mergeId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The merge ID"}},"hostedApiKey":"none"},"affinity_get_merge_task":{"id":"affinity_get_merge_task","name":"Affinity Get Merge Task","description":"Read one merge task and how its merges are progressing. Poll this after starting a merge.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which merge task to read: companies or persons"},"taskId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The merge task ID"}},"hostedApiKey":"none"},"affinity_get_note":{"id":"affinity_get_note","name":"Affinity Get Note","description":"Read one note with its body, author, mentions, and attached records.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID"},"includes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Extra properties to return, e.g. [\\"repliesCount\\",\\"personsPreview\\",\\"companiesPreview\\",\\"opportunitiesPreview\\"]. Those four fields are omitted unless requested here"}},"hostedApiKey":"none"},"affinity_get_opportunity":{"id":"affinity_get_opportunity","name":"Affinity Get Opportunity","description":"Read one opportunity and the list it belongs to. Its field data lives on the list entry.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"opportunityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The opportunity ID"}},"hostedApiKey":"none"},"affinity_get_person":{"id":"affinity_get_person","name":"Affinity Get Person","description":"Look up one person by ID. Field data is returned only for the Field IDs or Field Types asked for.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"personId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The person ID"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, or relationship-intelligence. Mutually exclusive with Field IDs"}},"hostedApiKey":"none"},"affinity_get_saved_view":{"id":"affinity_get_saved_view","name":"Affinity Get Saved View","description":"Read one saved view — its name, kind, and creation date.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"viewId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The saved view ID"}},"hostedApiKey":"none"},"affinity_get_transcript":{"id":"affinity_get_transcript","name":"Affinity Get Transcript","description":"Read one transcript with its first 100 fragments. Page the fragments endpoint for a longer meeting.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"transcriptId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The transcript ID"}},"hostedApiKey":"none"},"affinity_get_user":{"id":"affinity_get_user","name":"Affinity Get User","description":"Read one internal user. A user and their person record share the same numeric ID, so a person ID works here.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"userId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The user ID, which is also their person ID"}},"hostedApiKey":"none"},"affinity_list_calls":{"id":"affinity_list_calls","name":"Affinity List Calls","description":"Page through logged calls and their participants. Only calls the API key holder can see are returned.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_chat_messages":{"id":"affinity_list_chat_messages","name":"Affinity List Chat Messages","description":"Page through logged chat messages and their participants. Only messages the API key holder can see are returned.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_companies":{"id":"affinity_list_companies","name":"Affinity List Companies","description":"Page through companies. Companies come back without field data unless Field IDs or Field Types asks for it.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict the page to these company IDs, e.g. [1, 2, 3]"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, or relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_coworker_connections":{"id":"affinity_list_coworker_connections","name":"Affinity List Coworker Connections","description":"Find warm paths into a company through shared work history: who in your Affinity data once worked alongside the people you want to reach. Grouped by target, strongest first.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":true,"visibility":"user-or-llm","description":"Required scope. The only supported filter is target.currentCompany.id, e.g. \\"target.currentCompany.id=123\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of targets to return per page, 1-50. Defaults to 20"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_emails":{"id":"affinity_list_emails","name":"Affinity List Emails","description":"Page through email metadata — subject, participants, and timestamps. Affinity never exposes email bodies through the API.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_entity_field_values":{"id":"affinity_list_entity_field_values","name":"Affinity List Entity Field Values","description":"Page through a company\'s or person\'s non-list field values. List fields are not returned here — read those through the list entry.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to read field values from: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict to these field IDs. Mutually exclusive with Field Types"},"types":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict to these field categories: enriched, global, relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 20"}},"hostedApiKey":"none"},"affinity_list_entity_list_entries":{"id":"affinity_list_entity_list_entries","name":"Affinity List Entity List Entries","description":"Page through a company\'s or person\'s rows across every list, each carrying that list\'s field values and when the entity was added.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to look up the rows of: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_entity_lists":{"id":"affinity_list_entity_lists","name":"Affinity List Entity Lists","description":"List every list a company or person appears on that the caller can view.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to look up the lists of: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_entity_notes":{"id":"affinity_list_entity_notes","name":"Affinity List Entity Notes","description":"List the notes relevant to one company, person, or opportunity — directly attached notes plus notes reaching it through its people and meetings.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity the notes hang off: companies, persons, or opportunities"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company, person, or opportunity"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_entity_relationships":{"id":"affinity_list_entity_relationships","name":"Affinity List Entity Relationships","description":"List who knows a company or person, scored 0.0 to 1.0 by how much the two actually interact. Strongest first by default.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to look up relationships for: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression. This endpoint filters on interactionScore only, e.g. \\"interactionScore>=0.5\\""},"orderBy":{"type":"json","required":false,"visibility":"user-or-llm","description":"Sort order: [\\"interactionScore\\"] for weakest first, [\\"-interactionScore\\"] for strongest first (the default)"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_field_dropdown_options":{"id":"affinity_list_field_dropdown_options","name":"Affinity List Field Dropdown Options","description":"List the selectable options on a dropdown or ranked-dropdown company or person field. Writing such a field needs the option ID, not its text.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which field family the field belongs to: companies or persons"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown or ranked-dropdown field ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_field_metadata":{"id":"affinity_list_field_metadata","name":"Affinity List Field Metadata","description":"List the non-list company or person fields, with the value type, filter operators, and sort support of each. Start here to find the Field IDs the read and write tools take.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which fields to describe: companies or persons"},"includes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Extra properties to return: [\\"filterability\\",\\"sortability\\"]. Both are omitted unless requested here"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression. This endpoint filters on name only, e.g. \\"name=~Status\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_field_value_changes":{"id":"affinity_list_field_value_changes","name":"Affinity List Field Value Changes","description":"Page through field value changes across the whole workspace. Built for delta sync: follow nextCursor to the end of a run, then resume from the last cursor next time.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression over field.id, listEntry.id, changer.id, changedAt, or actionType. Resume a sync with e.g. \\"changedAt>2026-06-01T12:00:00Z\\""},"orderBy":{"type":"json","required":false,"visibility":"user-or-llm","description":"Sort order: [\\"changedAt\\"] for oldest first (the default), [\\"-changedAt\\"] for newest first"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_investor_executive_connections":{"id":"affinity_list_investor_executive_connections","name":"Affinity List Investor Executive Connections","description":"Find warm paths into a company through investment history: which investors in your Affinity data backed a company the people you want to reach once led. Grouped by target, strongest first.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":true,"visibility":"user-or-llm","description":"Required scope. The only supported filter is target.currentCompany.id, e.g. \\"target.currentCompany.id=123\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of targets to return per page, 1-50. Defaults to 20"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_list_entries":{"id":"affinity_list_list_entries","name":"Affinity List List Entries","description":"Page through the rows of a list. Rows come back without field data unless Field IDs or Field Types asks for it.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, list, or relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_list_entry_field_value_changes":{"id":"affinity_list_list_entry_field_value_changes","name":"Affinity List List Entry Field Value Changes","description":"Page through the history of one list row — who changed which field, when, and to what.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"listEntryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list entry ID"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression over field.id, changer.id, changedAt, or actionType, e.g. \\"field.id=field-1234\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_list_entry_fields":{"id":"affinity_list_list_entry_fields","name":"Affinity List List Entry Fields","description":"Page through every field value on one list row, including the list-specific columns. All fields are returned unless narrowed.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"listEntryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list entry ID"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict to these field IDs. Mutually exclusive with Field Types"},"types":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict to these field categories: enriched, global, list, relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 20"}},"hostedApiKey":"none"},"affinity_list_list_field_dropdown_options":{"id":"affinity_list_list_field_dropdown_options","name":"Affinity List List Field Dropdown Options","description":"List the selectable options on a dropdown, ranked-dropdown, or status-dropdown field of a list.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown field ID on that list"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_list_fields":{"id":"affinity_list_list_fields","name":"Affinity List List Fields","description":"List the fields available on one list, including its list-specific columns. Use these Field IDs when reading or writing list entries.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"includes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Extra properties to return: [\\"filterability\\",\\"sortability\\"]. Both are omitted unless requested here"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression. This endpoint filters on name only, e.g. \\"name=~Stage\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_lists":{"id":"affinity_list_lists","name":"Affinity List Lists","description":"Page through the lists in the organization that the caller can view.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"term":{"type":"string","required":false,"visibility":"user-or-llm","description":"Case-insensitive substring match on the list name"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_meetings":{"id":"affinity_list_meetings","name":"Affinity List Meetings","description":"Page through past and upcoming meetings with their organizer and attendees.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_merge_tasks":{"id":"affinity_list_merge_tasks","name":"Affinity List Merge Tasks","description":"Page through merge tasks, each summarizing how many of its merges are in progress, succeeded, or failed.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which merge tasks to list: companies or persons"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression. This endpoint filters on status only, e.g. \\"status=in-progress\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_merges":{"id":"affinity_list_merges","name":"Affinity List Merges","description":"Page through the company or person merges the organization has run, with the status and the records involved in each.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which merges to list: companies or persons"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression over status or taskId, e.g. \\"status=failed\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_note_attached_companies":{"id":"affinity_list_note_attached_companies","name":"Affinity List Note Attached Companies","description":"List the companies directly attached to one note.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_note_attached_opportunities":{"id":"affinity_list_note_attached_opportunities","name":"Affinity List Note Attached Opportunities","description":"List the opportunities directly attached to one note.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_note_attached_persons":{"id":"affinity_list_note_attached_persons","name":"Affinity List Note Attached Persons","description":"List the persons directly attached to one note.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_note_replies":{"id":"affinity_list_note_replies","name":"Affinity List Note Replies","description":"Page through the replies on one note, including AI Notetaker replies.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID whose replies to read"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_notes":{"id":"affinity_list_notes","name":"Affinity List Notes","description":"Page through every note the caller can see. Replies are excluded.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"includes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Extra properties to return, e.g. [\\"repliesCount\\",\\"personsPreview\\",\\"companiesPreview\\",\\"opportunitiesPreview\\"]. Those four fields are omitted unless requested here"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_opportunities":{"id":"affinity_list_opportunities","name":"Affinity List Opportunities","description":"Page through opportunities. Field data lives on the list entry, not here — read it through the list or saved view the opportunity belongs to.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict the page to these opportunity IDs, e.g. [1, 2, 3]"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_persons":{"id":"affinity_list_persons","name":"Affinity List Persons","description":"Page through persons. Persons come back without field data unless Field IDs or Field Types asks for it.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict the page to these person IDs, e.g. [1, 2, 3]"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, or relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_reminders":{"id":"affinity_list_reminders","name":"Affinity List Reminders","description":"Page through the reminders the caller can see. Filter by status to surface what is overdue.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_saved_view_entries":{"id":"affinity_list_saved_view_entries","name":"Affinity List Saved View Entries","description":"Page through the rows of a saved view. The view\'s own filters and columns decide which rows and which field data come back.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"viewId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The saved view ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_saved_views":{"id":"affinity_list_saved_views","name":"Affinity List Saved Views","description":"List the saved views on a list that the caller can view.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_list_transcript_fragments":{"id":"affinity_list_transcript_fragments","name":"Affinity List Transcript Fragments","description":"Page through everything said in a meeting, segment by segment with the speaker.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"transcriptId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The transcript ID"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_transcripts":{"id":"affinity_list_transcripts","name":"Affinity List Transcripts","description":"Page through meeting transcript metadata. Read one transcript to get what was actually said.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression, e.g. \\"createdAt>=2026-01-01\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_list_users":{"id":"affinity_list_users","name":"Affinity List Users","description":"Page through the internal users in the organization. Email addresses and roles are returned only to callers with the \\"Manage Users\\" permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"term":{"type":"string","required":false,"visibility":"user-or-llm","description":"Case-insensitive match across first name, last name, and primary email"},"filter":{"type":"string","required":false,"visibility":"user-or-llm","description":"Affinity Filtering Language expression over id or status, e.g. \\"status=active\\""},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_search_companies":{"id":"affinity_search_companies","name":"Affinity Search Companies","description":"Search companies by filters, sorts, and a free-text term. Requires the \\"Export All Organizations directory\\" permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filters":{"type":"json","required":false,"visibility":"user-or-llm","description":"Filter group as {operator: \\"and\\"|\\"or\\", filters: [...]}, at most 50 leaves. Each leaf is {valueType, fieldId, operator, value}, and a leaf may itself be a nested group"},"searchTerm":{"type":"string","required":false,"visibility":"user-or-llm","description":"Free-text term matched against the searchable fields. At least 3 characters"},"searchFieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs the search term is matched against. Defaults to the searchable fields"},"sorts":{"type":"json","required":false,"visibility":"user-or-llm","description":"Sort order as [{fieldId, direction: \\"asc\\"|\\"desc\\", attributeId?}], up to 5, applied in order"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, or relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_search_files":{"id":"affinity_search_files","name":"Affinity Search Files","description":"Search files by keyword, ordered by relevance. Narrow to specific files or to one company, or leave both unset to search the whole account.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"prompt":{"type":"string","required":true,"visibility":"user-or-llm","description":"What to search for. Between 3 and 500 characters"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict the search to these file IDs. Cannot be combined with Company ID"},"companyId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Restrict the search to one company\'s files. Cannot be combined with file IDs"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of files to return, 1-100. Defaults to 20"}},"hostedApiKey":"none"},"affinity_search_list_entries":{"id":"affinity_search_list_entries","name":"Affinity Search List Entries","description":"Search the rows of one list by filters, sorts, and a free-text term. Requires the \\"Export data from Lists\\" permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID to search"},"filters":{"type":"json","required":false,"visibility":"user-or-llm","description":"Filter group as {operator: \\"and\\"|\\"or\\", filters: [...]}, at most 50 leaves. Each leaf is {valueType, fieldId, operator, value}, and a leaf may itself be a nested group"},"searchTerm":{"type":"string","required":false,"visibility":"user-or-llm","description":"Free-text term matched against the searchable fields. At least 3 characters"},"searchFieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs the search term is matched against. Defaults to the searchable fields"},"sorts":{"type":"json","required":false,"visibility":"user-or-llm","description":"Sort order as [{fieldId, direction: \\"asc\\"|\\"desc\\", attributeId?}], up to 5, applied in order"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, list, or relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_search_notes":{"id":"affinity_search_notes","name":"Affinity Search Notes","description":"Search notes by keyword, ordered by relevance. Narrow to specific notes or to one company, or leave both unset to search the whole account.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"prompt":{"type":"string","required":true,"visibility":"user-or-llm","description":"What to search for. Between 3 and 500 characters"},"ids":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict the search to these note IDs. Cannot be combined with Company ID"},"companyId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Restrict the search to one company\'s notes. Cannot be combined with note IDs"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of notes to return, 1-100. Defaults to 20"}},"hostedApiKey":"none"},"affinity_search_persons":{"id":"affinity_search_persons","name":"Affinity Search Persons","description":"Search persons by filters, sorts, and a free-text term. Requires the \\"Export All People directory\\" permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"filters":{"type":"json","required":false,"visibility":"user-or-llm","description":"Filter group as {operator: \\"and\\"|\\"or\\", filters: [...]}, at most 50 leaves. Each leaf is {valueType, fieldId, operator, value}, and a leaf may itself be a nested group"},"searchTerm":{"type":"string","required":false,"visibility":"user-or-llm","description":"Free-text term matched against the searchable fields. At least 3 characters"},"searchFieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs the search term is matched against. Defaults to the searchable fields"},"sorts":{"type":"json","required":false,"visibility":"user-or-llm","description":"Sort order as [{fieldId, direction: \\"asc\\"|\\"desc\\", attributeId?}], up to 5, applied in order"},"fieldIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field IDs to return values for, e.g. [\\"affinity-data-location\\"]. Mutually exclusive with Field Types"},"fieldTypes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Field categories to return values for: enriched, global, or relationship-intelligence. Mutually exclusive with Field IDs"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous page, returned as nextCursor or prevCursor"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to return per page, 1-100. Defaults to 100"},"totalCount":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the total size of the collection. Costs an extra query"}},"hostedApiKey":"none"},"affinity_semantic_search":{"id":"affinity_semantic_search","name":"Affinity Semantic Search","description":"Find companies from a description in plain language — industry, technology, stage, or business model. Currently searches companies only.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"prompt":{"type":"string","required":true,"visibility":"user-or-llm","description":"What to look for, in plain language, e.g. \\"climate tech companies in our pipeline\\". Up to 500 characters"},"listIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Restrict the search to companies on these lists, e.g. [1, 2]"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of companies to return, 1-100. Defaults to 100"}},"hostedApiKey":"none"},"affinity_update_entity_field_value":{"id":"affinity_update_entity_field_value","name":"Affinity Update Entity Field Value","description":"Write one non-list field value on a company or person. The value type must match how the field is defined.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"entityType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Which entity to write the field on: companies or persons"},"entityId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of that company or person"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The field ID to write"},"value":{"type":"json","required":true,"visibility":"user-or-llm","description":"The new value as {type, data}, where type matches the field\'s value type. Examples: {\\"type\\":\\"text\\",\\"data\\":\\"Series B\\"}, {\\"type\\":\\"number\\",\\"data\\":42}, {\\"type\\":\\"dropdown\\",\\"data\\":{\\"dropdownOptionId\\":7}}, {\\"type\\":\\"person\\",\\"data\\":{\\"id\\":123}}, {\\"type\\":\\"person-multi\\",\\"data\\":[{\\"id\\":123}]}. Pass data as null to clear the field"}},"hostedApiKey":"none"},"affinity_update_list_entry_field":{"id":"affinity_update_list_entry_field","name":"Affinity Update List Entry Field","description":"Write one field value on a list row. Requires the \\"Export data from Lists\\" permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"listEntryId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list entry ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The field ID to write"},"value":{"type":"json","required":true,"visibility":"user-or-llm","description":"The new value as {type, data}, where type matches the field\'s value type. Examples: {\\"type\\":\\"text\\",\\"data\\":\\"Series B\\"}, {\\"type\\":\\"number\\",\\"data\\":42}, {\\"type\\":\\"dropdown\\",\\"data\\":{\\"dropdownOptionId\\":7}}, {\\"type\\":\\"person\\",\\"data\\":{\\"id\\":123}}, {\\"type\\":\\"person-multi\\",\\"data\\":[{\\"id\\":123}]}. Pass data as null to clear the field"}},"hostedApiKey":"none"},"affinity_update_list_field_dropdown_option":{"id":"affinity_update_list_field_dropdown_option","name":"Affinity Update List Field Dropdown Option","description":"Change a dropdown option on a list field. Every field is optional — supply only what should change, and only fields the option\'s kind actually has.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"listId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The list ID"},"fieldId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown field ID on that list"},"dropdownOptionId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The dropdown option ID to update"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Replacement option label. Supply at least one field to change"},"rank":{"type":"number","required":false,"visibility":"user-or-llm","description":"Sort order. Required on a ranked-dropdown or status-dropdown option"},"color":{"type":"string","required":false,"visibility":"user-or-llm","description":"Option color: white, gray, blue, green, purple, orange, or red. Required on a ranked-dropdown or status-dropdown option"},"statusCategory":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pipeline meaning of the option: open, won, lost, or on-hold. Status-dropdown options only"},"winRate":{"type":"number","required":false,"visibility":"user-or-llm","description":"Expected win rate of the status. Status-dropdown options only"}},"hostedApiKey":"none"},"affinity_update_note":{"id":"affinity_update_note","name":"Affinity Update Note","description":"Rewrite a note\'s body or replace which records it is attached to. Each list of IDs replaces that association wholesale, an empty list clears it, and omitting one leaves it untouched. A note\'s type cannot be changed.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Affinity API key, sent as a bearer token"},"noteId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note ID to update"},"html":{"type":"string","required":false,"visibility":"user-or-llm","description":"Replacement note body as HTML"},"companyIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Replacement set of attached companies, e.g. [1, 2]. Send [] to detach every company; omit to leave them unchanged"},"personIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Replacement set of attached persons, e.g. [1, 2]. Send [] to detach every person; omit to leave them unchanged"},"opportunityIds":{"type":"json","required":false,"visibility":"user-or-llm","description":"Replacement set of attached opportunities, e.g. [1, 2]. Send [] to detach every opportunity; omit to leave them unchanged"}},"hostedApiKey":"none"},"agentmail_create_draft":{"id":"agentmail_create_draft","name":"Create Draft","description":"Create a new email draft in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to create the draft in"},"to":{"type":"string","required":false,"visibility":"user-or-llm","description":"Recipient email addresses (comma-separated)"},"subject":{"type":"string","required":false,"visibility":"user-or-llm","description":"Draft subject line"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Plain text draft body"},"html":{"type":"string","required":false,"visibility":"user-or-llm","description":"HTML draft body"},"cc":{"type":"string","required":false,"visibility":"user-or-llm","description":"CC recipient email addresses (comma-separated)"},"bcc":{"type":"string","required":false,"visibility":"user-or-llm","description":"BCC recipient email addresses (comma-separated)"},"inReplyTo":{"type":"string","required":false,"visibility":"user-or-llm","description":"ID of message being replied to"},"sendAt":{"type":"string","required":false,"visibility":"user-or-llm","description":"ISO 8601 timestamp to schedule sending"}},"hostedApiKey":"none"},"agentmail_create_inbox":{"id":"agentmail_create_inbox","name":"Create Inbox","description":"Create a new email inbox with AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"username":{"type":"string","required":false,"visibility":"user-or-llm","description":"Username for the inbox email address"},"domain":{"type":"string","required":false,"visibility":"user-or-llm","description":"Domain for the inbox email address"},"displayName":{"type":"string","required":false,"visibility":"user-or-llm","description":"Display name for the inbox"}},"hostedApiKey":"none"},"agentmail_delete_draft":{"id":"agentmail_delete_draft","name":"Delete Draft","description":"Delete an email draft in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the draft"},"draftId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the draft to delete"}},"hostedApiKey":"none"},"agentmail_delete_inbox":{"id":"agentmail_delete_inbox","name":"Delete Inbox","description":"Delete an email inbox in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to delete"}},"hostedApiKey":"none"},"agentmail_delete_thread":{"id":"agentmail_delete_thread","name":"Delete Thread","description":"Delete an email thread in AgentMail (moves to trash, or permanently deletes if already in trash)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the thread"},"threadId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the thread to delete"},"permanent":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Force permanent deletion instead of moving to trash"}},"hostedApiKey":"none"},"agentmail_forward_message":{"id":"agentmail_forward_message","name":"Forward Message","description":"Forward an email message to new recipients in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the message"},"messageId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the message to forward"},"to":{"type":"string","required":true,"visibility":"user-or-llm","description":"Recipient email addresses (comma-separated)"},"subject":{"type":"string","required":false,"visibility":"user-or-llm","description":"Override subject line"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Additional plain text to prepend"},"html":{"type":"string","required":false,"visibility":"user-or-llm","description":"Additional HTML to prepend"},"cc":{"type":"string","required":false,"visibility":"user-or-llm","description":"CC recipient email addresses (comma-separated)"},"bcc":{"type":"string","required":false,"visibility":"user-or-llm","description":"BCC recipient email addresses (comma-separated)"}},"hostedApiKey":"none"},"agentmail_get_draft":{"id":"agentmail_get_draft","name":"Get Draft","description":"Get details of a specific email draft in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox the draft belongs to"},"draftId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the draft to retrieve"}},"hostedApiKey":"none"},"agentmail_get_inbox":{"id":"agentmail_get_inbox","name":"Get Inbox","description":"Get details of a specific email inbox in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to retrieve"}},"hostedApiKey":"none"},"agentmail_get_message":{"id":"agentmail_get_message","name":"Get Message","description":"Get details of a specific email message in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the message"},"messageId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the message to retrieve"}},"hostedApiKey":"none"},"agentmail_get_thread":{"id":"agentmail_get_thread","name":"Get Thread","description":"Get details of a specific email thread including messages in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the thread"},"threadId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the thread to retrieve"}},"hostedApiKey":"none"},"agentmail_list_drafts":{"id":"agentmail_list_drafts","name":"List Drafts","description":"List email drafts in an inbox in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to list drafts from"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of drafts to return"},"pageToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token for next page of results"}},"hostedApiKey":"none"},"agentmail_list_inboxes":{"id":"agentmail_list_inboxes","name":"List Inboxes","description":"List all email inboxes in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of inboxes to return"},"pageToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token for next page of results"}},"hostedApiKey":"none"},"agentmail_list_messages":{"id":"agentmail_list_messages","name":"List Messages","description":"List messages in an inbox in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to list messages from"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of messages to return"},"pageToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token for next page of results"}},"hostedApiKey":"none"},"agentmail_list_threads":{"id":"agentmail_list_threads","name":"List Threads","description":"List email threads in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to list threads from"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of threads to return"},"pageToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token for next page of results"},"labels":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated labels to filter threads by"},"before":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter threads before this ISO 8601 timestamp"},"after":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter threads after this ISO 8601 timestamp"}},"hostedApiKey":"none"},"agentmail_reply_message":{"id":"agentmail_reply_message","name":"Reply to Message","description":"Reply to an existing email message in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to reply from"},"messageId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the message to reply to"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Plain text reply body"},"html":{"type":"string","required":false,"visibility":"user-or-llm","description":"HTML reply body"},"to":{"type":"string","required":false,"visibility":"user-or-llm","description":"Override recipient email addresses (comma-separated)"},"cc":{"type":"string","required":false,"visibility":"user-or-llm","description":"CC email addresses (comma-separated)"},"bcc":{"type":"string","required":false,"visibility":"user-or-llm","description":"BCC email addresses (comma-separated)"},"replyAll":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Reply to all recipients of the original message"}},"hostedApiKey":"none"},"agentmail_send_draft":{"id":"agentmail_send_draft","name":"Send Draft","description":"Send an existing email draft in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the draft"},"draftId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the draft to send"}},"hostedApiKey":"none"},"agentmail_send_message":{"id":"agentmail_send_message","name":"Send Message","description":"Send an email message from an AgentMail inbox","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to send from"},"to":{"type":"string","required":true,"visibility":"user-or-llm","description":"Recipient email address (comma-separated for multiple)"},"subject":{"type":"string","required":true,"visibility":"user-or-llm","description":"Email subject line"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Plain text email body"},"html":{"type":"string","required":false,"visibility":"user-or-llm","description":"HTML email body"},"cc":{"type":"string","required":false,"visibility":"user-or-llm","description":"CC recipient email addresses (comma-separated)"},"bcc":{"type":"string","required":false,"visibility":"user-or-llm","description":"BCC recipient email addresses (comma-separated)"}},"hostedApiKey":"none"},"agentmail_update_draft":{"id":"agentmail_update_draft","name":"Update Draft","description":"Update an existing email draft in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the draft"},"draftId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the draft to update"},"to":{"type":"string","required":false,"visibility":"user-or-llm","description":"Recipient email addresses (comma-separated)"},"subject":{"type":"string","required":false,"visibility":"user-or-llm","description":"Draft subject line"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Plain text draft body"},"html":{"type":"string","required":false,"visibility":"user-or-llm","description":"HTML draft body"},"cc":{"type":"string","required":false,"visibility":"user-or-llm","description":"CC recipient email addresses (comma-separated)"},"bcc":{"type":"string","required":false,"visibility":"user-or-llm","description":"BCC recipient email addresses (comma-separated)"},"sendAt":{"type":"string","required":false,"visibility":"user-or-llm","description":"ISO 8601 timestamp to schedule sending"}},"hostedApiKey":"none"},"agentmail_update_inbox":{"id":"agentmail_update_inbox","name":"Update Inbox","description":"Update the display name of an email inbox in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox to update"},"displayName":{"type":"string","required":true,"visibility":"user-or-llm","description":"New display name for the inbox"}},"hostedApiKey":"none"},"agentmail_update_message":{"id":"agentmail_update_message","name":"Update Message","description":"Add or remove labels on an email message in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the message"},"messageId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the message to update"},"addLabels":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated labels to add to the message"},"removeLabels":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated labels to remove from the message"}},"hostedApiKey":"none"},"agentmail_update_thread":{"id":"agentmail_update_thread","name":"Update Thread Labels","description":"Add or remove labels on an email thread in AgentMail","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentMail API key"},"inboxId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the inbox containing the thread"},"threadId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the thread to update"},"addLabels":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated labels to add to the thread"},"removeLabels":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated labels to remove from the thread"}},"hostedApiKey":"none"},"agentphone_create_call":{"id":"agentphone_create_call","name":"Create Outbound Call","description":"Initiate an outbound voice call from an AgentPhone agent","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"agentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Agent that will handle the call"},"toNumber":{"type":"string","required":true,"visibility":"user-or-llm","description":"Phone number to call in E.164 format (e.g. +14155551234)"},"fromNumberId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Phone number ID to use as caller ID. Must belong to the agent. If omitted, the agent\'s first assigned number is used."},"initialGreeting":{"type":"string","required":false,"visibility":"user-or-llm","description":"Optional greeting spoken when the recipient answers"},"voice":{"type":"string","required":false,"visibility":"user-or-llm","description":"Voice ID override for this call (defaults to the agent\'s configured voice)"},"systemPrompt":{"type":"string","required":false,"visibility":"user-or-llm","description":"When provided, uses a built-in LLM for the conversation instead of forwarding to your webhook"}},"hostedApiKey":"none"},"agentphone_create_contact":{"id":"agentphone_create_contact","name":"Create Contact","description":"Create a new contact in AgentPhone","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"phoneNumber":{"type":"string","required":true,"visibility":"user-or-llm","description":"Phone number in E.164 format (e.g. +14155551234)"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Contact\'s full name"},"email":{"type":"string","required":false,"visibility":"user-or-llm","description":"Contact\'s email address"},"notes":{"type":"string","required":false,"visibility":"user-or-llm","description":"Freeform notes stored on the contact"}},"hostedApiKey":"none"},"agentphone_create_number":{"id":"agentphone_create_number","name":"Create Phone Number","description":"Provision a new SMS- and voice-enabled phone number","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Two-letter country code (e.g. US, CA). Defaults to US."},"areaCode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Preferred area code (US/CA only, e.g. \\"415\\"). Best-effort — may be ignored if unavailable."},"agentId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Optionally attach the number to an agent immediately"}},"hostedApiKey":"none"},"agentphone_delete_contact":{"id":"agentphone_delete_contact","name":"Delete Contact","description":"Delete a contact by ID","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"contactId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Contact ID"}},"hostedApiKey":"none"},"agentphone_get_call":{"id":"agentphone_get_call","name":"Get Call","description":"Fetch a call and its full transcript","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"callId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the call to retrieve"}},"hostedApiKey":"none"},"agentphone_get_call_transcript":{"id":"agentphone_get_call_transcript","name":"Get Call Transcript","description":"Get the full ordered transcript for a call","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"callId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the call to retrieve the transcript for"}},"hostedApiKey":"none"},"agentphone_get_contact":{"id":"agentphone_get_contact","name":"Get Contact","description":"Fetch a single contact by ID","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"contactId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Contact ID"}},"hostedApiKey":"none"},"agentphone_get_conversation":{"id":"agentphone_get_conversation","name":"Get Conversation","description":"Get a conversation along with its recent messages","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"conversationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Conversation ID"},"messageLimit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of recent messages to include (default 50, max 100)"}},"hostedApiKey":"none"},"agentphone_get_conversation_messages":{"id":"agentphone_get_conversation_messages","name":"Get Conversation Messages","description":"Get paginated messages for a conversation","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"conversationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Conversation ID"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of messages to return (default 50, max 200)"},"before":{"type":"string","required":false,"visibility":"user-or-llm","description":"Return messages received before this ISO 8601 timestamp"},"after":{"type":"string","required":false,"visibility":"user-or-llm","description":"Return messages received after this ISO 8601 timestamp"}},"hostedApiKey":"none"},"agentphone_get_number_messages":{"id":"agentphone_get_number_messages","name":"Get Phone Number Messages","description":"Fetch messages received on a specific phone number","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"numberId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the phone number"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of messages to return (default 50, max 200)"},"before":{"type":"string","required":false,"visibility":"user-or-llm","description":"Return messages received before this ISO 8601 timestamp"},"after":{"type":"string","required":false,"visibility":"user-or-llm","description":"Return messages received after this ISO 8601 timestamp"}},"hostedApiKey":"none"},"agentphone_get_usage":{"id":"agentphone_get_usage","name":"Get Usage","description":"Retrieve current usage statistics for the AgentPhone account","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"}},"hostedApiKey":"none"},"agentphone_get_usage_daily":{"id":"agentphone_get_usage_daily","name":"Get Daily Usage","description":"Get a daily breakdown of usage (messages, calls, webhooks) for the last N days","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"days":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of days to return (1-365, default 30)"}},"hostedApiKey":"none"},"agentphone_get_usage_monthly":{"id":"agentphone_get_usage_monthly","name":"Get Monthly Usage","description":"Get monthly usage aggregation (messages, calls, webhooks) for the last N months","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"months":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of months to return (1-24, default 6)"}},"hostedApiKey":"none"},"agentphone_list_calls":{"id":"agentphone_list_calls","name":"List Calls","description":"List voice calls for this AgentPhone account","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to return (default 20, max 100)"},"offset":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to skip (min 0)"},"status":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter by status (completed, in-progress, failed)"},"direction":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter by direction (inbound, outbound)"},"type":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter by call type (pstn, web)"},"search":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search by phone number (matches fromNumber or toNumber)"}},"hostedApiKey":"none"},"agentphone_list_contacts":{"id":"agentphone_list_contacts","name":"List Contacts","description":"List contacts for this AgentPhone account","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"search":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter by name or phone number (case-insensitive contains)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to return (default 50, max 200)"},"offset":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to skip (min 0)"}},"hostedApiKey":"none"},"agentphone_list_conversations":{"id":"agentphone_list_conversations","name":"List Conversations","description":"List conversations (message threads) for this AgentPhone account","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to return (default 20, max 100)"},"offset":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to skip (min 0)"}},"hostedApiKey":"none"},"agentphone_list_numbers":{"id":"agentphone_list_numbers","name":"List Phone Numbers","description":"List all phone numbers provisioned for this AgentPhone account","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to return (default 20, max 100)"},"offset":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to skip (min 0)"}},"hostedApiKey":"none"},"agentphone_react_to_message":{"id":"agentphone_react_to_message","name":"React to Message","description":"Send an iMessage tapback reaction to a message (iMessage only)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"messageId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the message to react to"},"reaction":{"type":"string","required":true,"visibility":"user-or-llm","description":"Reaction type: love, like, dislike, laugh, emphasize, or question"}},"hostedApiKey":"none"},"agentphone_release_number":{"id":"agentphone_release_number","name":"Release Phone Number","description":"Release (delete) a phone number. This action is irreversible.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"numberId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the phone number to release"}},"hostedApiKey":"none"},"agentphone_send_message":{"id":"agentphone_send_message","name":"Send Message","description":"Send an outbound SMS or iMessage from an AgentPhone agent","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"agentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Agent sending the message"},"toNumber":{"type":"string","required":true,"visibility":"user-or-llm","description":"Recipient phone number in E.164 format (e.g. +14155551234)"},"body":{"type":"string","required":true,"visibility":"user-or-llm","description":"Message text to send"},"mediaUrl":{"type":"string","required":false,"visibility":"user-or-llm","description":"Optional URL of an image, video, or file to attach"},"numberId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Phone number ID to send from. If omitted, the agent\'s first assigned number is used."}},"hostedApiKey":"none"},"agentphone_update_contact":{"id":"agentphone_update_contact","name":"Update Contact","description":"Update a contact\'s fields","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"contactId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Contact ID"},"phoneNumber":{"type":"string","required":false,"visibility":"user-or-llm","description":"New phone number in E.164 format"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"New contact name"},"email":{"type":"string","required":false,"visibility":"user-or-llm","description":"New email address"},"notes":{"type":"string","required":false,"visibility":"user-or-llm","description":"New freeform notes"}},"hostedApiKey":"none"},"agentphone_update_conversation":{"id":"agentphone_update_conversation","name":"Update Conversation","description":"Update conversation metadata (stored state). Pass null to clear existing metadata.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"AgentPhone API key"},"conversationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Conversation ID"},"metadata":{"type":"json","required":false,"visibility":"user-or-llm","description":"Custom key-value metadata to store on the conversation. Pass null to clear existing metadata."}},"hostedApiKey":"none"},"agiloft_async_status":{"id":"agiloft_async_status","name":"Agiloft Async Status","description":"Check whether an asynchronous Agiloft call, such as a run action button, has completed.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table the asynchronous call was made against"},"callbackId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Callback ID returned by the asynchronous call, e.g. from Run Action Button"}},"hostedApiKey":"none"},"agiloft_attach_file":{"id":"agiloft_attach_file","name":"Agiloft Attach File","description":"Attach a file to a field in an Agiloft record.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to attach the file to"},"fieldName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the attachment field"},"file":{"type":"file","required":true,"visibility":"user-or-llm","description":"File to attach"},"fileName":{"type":"string","required":false,"visibility":"user-or-llm","description":"Name to assign to the file (defaults to original file name)"},"overwrite":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Replace the contents of the field instead of adding another file to it"}},"hostedApiKey":"none"},"agiloft_attachment_info":{"id":"agiloft_attachment_info","name":"Agiloft Attachment Info","description":"Get information about file attachments on a record field.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to check attachments on"},"fieldName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the attachment field to inspect"}},"hostedApiKey":"none"},"agiloft_create_record":{"id":"agiloft_create_record","name":"Agiloft Create Record","description":"Create a new record in an Agiloft table.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"contacts.employees\\")"},"data":{"type":"string","required":true,"visibility":"user-or-llm","description":"Record field values as a JSON object (e.g., {\\"first_name\\": \\"John\\", \\"status\\": \\"Active\\"})"}},"hostedApiKey":"none"},"agiloft_delete_record":{"id":"agiloft_delete_record","name":"Agiloft Delete Record","description":"Delete a record from an Agiloft table.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"contacts.employees\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to delete"},"substituteIds":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated IDs of records that adopt the dependants of the deleted record. Read only when the delete rule is REPLACE_WITH_ANOTHER."},"deleteRule":{"type":"string","required":false,"visibility":"user-or-llm","description":"How to treat records that depend on this one: ERROR_IF_DEPENDANTS (default — fails rather than cascading), APPLY_DELETE_WHERE_POSSIBLE, DELETE_WHERE_POSSIBLE_OTHERWISE_UNLINK, APPLY_UNLINK, UNLINK_WHERE_POSSIBLE_OTHERWISE_DELETE, or REPLACE_WITH_ANOTHER"}},"hostedApiKey":"none"},"agiloft_get_choice_line_id":{"id":"agiloft_get_choice_line_id","name":"Agiloft Get Choice Line ID","description":"Resolve the internal numeric ID of a choice-list value, for use in EWSelect WHERE clauses against choice fields.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"case\\", \\"contracts\\")"},"fieldName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Choice field name (e.g., \\"priority\\", \\"status\\")"},"value":{"type":"string","required":true,"visibility":"user-or-llm","description":"Choice display value to resolve (e.g., \\"High\\", \\"Active\\")"}},"hostedApiKey":"none"},"agiloft_list_tables":{"id":"agiloft_list_tables","name":"Agiloft List Tables","description":"List the tables and fields in an Agiloft knowledge base, to discover the logical names other operations need.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":false,"visibility":"user-or-llm","description":"Logical name of a single table to describe (e.g., \\"contacts\\"). Leave empty to list every table in the knowledge base."},"includeLinkedInfo":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Include the source table and column behind each linked field"},"skipColumnsInfo":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Return table names only, omitting field details, for a much smaller response"}},"hostedApiKey":"none"},"agiloft_lock_record":{"id":"agiloft_lock_record","name":"Agiloft Lock Record","description":"Lock, unlock, or check the lock status of an Agiloft record.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to lock, unlock, or check"},"lockAction":{"type":"string","required":true,"visibility":"user-or-llm","description":"Action to perform: \\"lock\\", \\"unlock\\", or \\"check\\""},"force":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Unlock only: release a lock held by another user."}},"hostedApiKey":"none"},"agiloft_nlp_search":{"id":"agiloft_nlp_search","name":"Agiloft Natural Language Search","description":"Search Agiloft records by describing what you want in plain language, such as \\"active NDAs submitted last month\\".","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"nlpQuery":{"type":"string","required":true,"visibility":"user-or-llm","description":"The request in plain language, e.g. \\"Show me open, high-priority contracts\\". Structured field filters are not accepted — use Search Records for those."},"fields":{"type":"string","required":true,"visibility":"user-or-llm","description":"Comma-separated field names to return, e.g. \\"id, contract_title1, company_name\\""},"page":{"type":"string","required":false,"visibility":"user-or-llm","description":"Page number, starting from 0"},"limit":{"type":"string","required":false,"visibility":"user-or-llm","description":"Records per page"}},"hostedApiKey":"none"},"agiloft_read_record":{"id":"agiloft_read_record","name":"Agiloft Read Record","description":"Read a record by ID from an Agiloft table.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"contacts.employees\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to read"},"fields":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of field names to include in the response"}},"hostedApiKey":"none"},"agiloft_remove_attachment":{"id":"agiloft_remove_attachment","name":"Agiloft Remove Attachment","description":"Remove an attached file from a field in an Agiloft record.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record containing the attachment"},"fieldName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the attachment field"},"position":{"type":"string","required":true,"visibility":"user-or-llm","description":"Position index of the file to remove (starting from 0)"}},"hostedApiKey":"none"},"agiloft_retrieve_attachment":{"id":"agiloft_retrieve_attachment","name":"Agiloft Retrieve Attachment","description":"Download an attached file from an Agiloft record field.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record containing the attachment"},"fieldName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the attachment field"},"position":{"type":"string","required":true,"visibility":"user-or-llm","description":"Position index of the file in the field (starting from 0)"}},"hostedApiKey":"none"},"agiloft_run_action_button":{"id":"agiloft_run_action_button","name":"Agiloft Run Action Button","description":"Run an action button on an Agiloft record, such as an approval or send-for-signature step.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"case\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to run the action button on"},"actionButtonField":{"type":"string","required":true,"visibility":"user-or-llm","description":"Logical name of the field holding the action button (e.g., \\"ab_field\\")"}},"hostedApiKey":"none"},"agiloft_saved_search":{"id":"agiloft_saved_search","name":"Agiloft Saved Search","description":"List the saved searches defined for an Agiloft table.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Logical table name to list saved searches for (e.g., \\"contract\\")"}},"hostedApiKey":"none"},"agiloft_search_records":{"id":"agiloft_search_records","name":"Agiloft Search Records","description":"Search for records in an Agiloft table using a query.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name to search in (e.g., \\"contracts\\", \\"contacts.employees\\")"},"query":{"type":"string","required":false,"visibility":"user-or-llm","description":"Ad hoc EWSearch query. Combine conditions with && (and) or || (or) and quote every value — e.g. \\"summary~=\'test\'&&priority=\'High\'\\". Required unless a saved search is given."},"search":{"type":"string","required":false,"visibility":"user-or-llm","description":"Label of a saved search defined on the table (e.g., \\"C: Status is Closed\\"). Can be combined with a query to narrow it further."},"fields":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of field names to include in the results"},"page":{"type":"string","required":false,"visibility":"user-or-llm","description":"Page number for paginated results (starting from 0)"},"limit":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum number of records to return per page. Agiloft treats 0 as \\"all records\\", so leave it unset or use a positive value to keep result sizes bounded."}},"hostedApiKey":"none"},"agiloft_select_records":{"id":"agiloft_select_records","name":"Agiloft Select Records","description":"Select record IDs matching a SQL WHERE clause from an Agiloft table.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"contacts.employees\\")"},"where":{"type":"string","required":true,"visibility":"user-or-llm","description":"SQL WHERE clause using database column names (e.g., \\"summary like \'%new%\'\\" or \\"assigned_person=\'John Doe\'\\"). EWSelect has no page size and returns every matching ID, so append a database limit such as \\"limit 0,200\\" to bound the result."}},"hostedApiKey":"none"},"agiloft_update_record":{"id":"agiloft_update_record","name":"Agiloft Update Record","description":"Update an existing record in an Agiloft table.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"contacts.employees\\")"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the record to update"},"data":{"type":"string","required":true,"visibility":"user-or-llm","description":"Updated field values as a JSON object (e.g., {\\"status\\": \\"Active\\", \\"priority\\": \\"High\\"})"}},"hostedApiKey":"none"},"agiloft_upsert_record":{"id":"agiloft_upsert_record","name":"Agiloft Upsert Record","description":"Create an Agiloft record, or update it when a record already matches the given fields.","version":"1.0.0","params":{"instanceUrl":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft instance URL (e.g., https://mycompany.agiloft.com)"},"knowledgeBase":{"type":"string","required":true,"visibility":"user-only","description":"Knowledge base name"},"login":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft username"},"password":{"type":"string","required":true,"visibility":"user-only","description":"Agiloft password"},"table":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table name (e.g., \\"contracts\\", \\"contacts.employees\\")"},"match":{"type":"string","required":true,"visibility":"user-or-llm","description":"Field used to find an existing record (e.g., \\"ext_id\\"). Pick something that identifies a record uniquely — if more than one record matches, Agiloft writes nothing and returns a conflict."},"async":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Queue the write instead of waiting for it. Returns a callback ID instead of a record ID; pass that to Async Status to poll the result."},"data":{"type":"string","required":true,"visibility":"user-or-llm","description":"Field values as a JSON object. On create these populate the new record; on update only the supplied fields change."}},"hostedApiKey":"none"},"ahrefs_anchors":{"id":"ahrefs_anchors","name":"Ahrefs Anchors","description":"Get the anchor text distribution for a target domain or URL\'s backlinks, showing how many links and referring domains use each anchor text.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\" or \\"https://example.com/page\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match)"},"history":{"type":"string","required":false,"visibility":"user-or-llm","description":"Historical scope: \\"live\\" (currently live), \\"all_time\\" (default, includes lost backlinks), or \\"since:YYYY-MM-DD\\" (backlinks found since a date)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_backlinks":{"id":"ahrefs_backlinks","name":"Ahrefs Backlinks","description":"Get a list of backlinks pointing to a target domain or URL. Returns details about each backlink including source URL, anchor text, and domain rating.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\" or \\"https://example.com/page\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"history":{"type":"string","required":false,"visibility":"user-or-llm","description":"Historical scope: \\"live\\" (currently live backlinks), \\"all_time\\" (default, includes lost backlinks), or \\"since:YYYY-MM-DD\\" (backlinks found since a date)."},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_backlinks_stats":{"id":"ahrefs_backlinks_stats","name":"Ahrefs Backlinks Stats","description":"Get backlink and referring domain totals for a target domain or URL, both currently live and across all time.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\" or \\"https://example.com/page\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date to report metrics on, in YYYY-MM-DD format (defaults to today)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_batch_analysis":{"id":"ahrefs_batch_analysis","name":"Ahrefs Batch Analysis","description":"Get bulk SEO metrics (Domain Rating, backlinks, referring domains, organic traffic, and more) for multiple domains or URLs in a single request. Useful for comparing many competitors at once.","version":"1.0.0","params":{"targets":{"type":"string","required":true,"visibility":"user-or-llm","description":"Comma-separated list of domains or URLs to analyze. Example: \\"example.com,competitor.com\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode applied to every target: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match)"},"protocol":{"type":"string","required":false,"visibility":"user-or-llm","description":"Protocol applied to every target: \\"both\\" (default), \\"http\\", or \\"https\\""},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for traffic data. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"volumeMode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search volume calculation: \\"monthly\\" or \\"average\\" (default: \\"monthly\\")"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_broken_backlinks":{"id":"ahrefs_broken_backlinks","name":"Ahrefs Broken Backlinks","description":"Get a list of broken backlinks pointing to a target domain or URL. Useful for identifying link reclamation opportunities.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\" or \\"https://example.com/page\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_domain_rating":{"id":"ahrefs_domain_rating","name":"Ahrefs Domain Rating","description":"Get the Domain Rating (DR) and Ahrefs Rank for a target domain. Domain Rating shows the strength of a website\'s backlink profile on a scale from 0 to 100.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain to analyze (e.g., example.com)"},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date for historical data in YYYY-MM-DD format (defaults to today)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_domain_rating_history":{"id":"ahrefs_domain_rating_history","name":"Ahrefs Domain Rating History","description":"Get the historical Domain Rating (DR) trend for a target domain or URL over a date range, grouped daily, weekly, or monthly.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"dateFrom":{"type":"string","required":true,"visibility":"user-only","description":"Start date of the historical period, in YYYY-MM-DD format"},"dateTo":{"type":"string","required":false,"visibility":"user-only","description":"End date of the historical period, in YYYY-MM-DD format (defaults to today)"},"historyGrouping":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval for grouping data points: \\"daily\\", \\"weekly\\", or \\"monthly\\" (default: \\"monthly\\")"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_keyword_overview":{"id":"ahrefs_keyword_overview","name":"Ahrefs Keyword Overview","description":"Get detailed metrics for a keyword including search volume, keyword difficulty, CPC, clicks, and traffic potential.","version":"1.0.0","params":{"keyword":{"type":"string","required":true,"visibility":"user-or-llm","description":"The keyword to analyze"},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for keyword data. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_keywords_history":{"id":"ahrefs_keywords_history","name":"Ahrefs Keywords History","description":"Get the historical organic keyword ranking distribution for a target domain or URL over a date range: how many keywords rank in each position bucket at each point in time.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"dateFrom":{"type":"string","required":true,"visibility":"user-only","description":"Start date of the historical period, in YYYY-MM-DD format"},"dateTo":{"type":"string","required":false,"visibility":"user-only","description":"End date of the historical period, in YYYY-MM-DD format (defaults to today)"},"historyGrouping":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval for grouping data points: \\"daily\\", \\"weekly\\", or \\"monthly\\" (default: \\"monthly\\")"},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for search results. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_metrics":{"id":"ahrefs_metrics","name":"Ahrefs Metrics","description":"Get a one-call organic and paid search overview for a target domain or URL: organic traffic, organic keywords, paid traffic, paid keywords, and estimated traffic cost.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for traffic data. Example: \\"us\\", \\"gb\\", \\"de\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date to report metrics on, in YYYY-MM-DD format (defaults to today)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_metrics_history":{"id":"ahrefs_metrics_history","name":"Ahrefs Metrics History","description":"Get the historical organic and paid traffic trend for a target domain or URL over a date range: organic traffic/cost and paid traffic/cost at each point in time.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"dateFrom":{"type":"string","required":true,"visibility":"user-only","description":"Start date of the historical period, in YYYY-MM-DD format"},"dateTo":{"type":"string","required":false,"visibility":"user-only","description":"End date of the historical period, in YYYY-MM-DD format (defaults to today)"},"volumeMode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search volume calculation: \\"monthly\\" or \\"average\\" (default: \\"monthly\\")"},"historyGrouping":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval for grouping data points: \\"daily\\", \\"weekly\\", or \\"monthly\\" (default: \\"monthly\\")"},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for traffic data. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_organic_competitors":{"id":"ahrefs_organic_competitors","name":"Ahrefs Organic Competitors","description":"Get domains that compete with a target domain or URL for the same organic keywords, ranked by keyword overlap.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for search results. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date to report metrics on, in YYYY-MM-DD format (defaults to today)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_organic_keywords":{"id":"ahrefs_organic_keywords","name":"Ahrefs Organic Keywords","description":"Get organic keywords that a target domain or URL ranks for in Google search results. Returns keyword details including search volume, ranking position, and estimated traffic.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\" or \\"https://example.com/page\\""},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for search results. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date to report metrics on, in YYYY-MM-DD format (defaults to today)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_paid_pages":{"id":"ahrefs_paid_pages","name":"Ahrefs Paid Pages","description":"Get a target domain\'s pages that receive paid search traffic, sorted by estimated paid traffic. Returns page URLs with their paid traffic, keyword counts, and estimated spend.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for traffic data. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match)"},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date to report metrics on, in YYYY-MM-DD format (defaults to today)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_rank_tracker_competitors_overview":{"id":"ahrefs_rank_tracker_competitors_overview","name":"Ahrefs Rank Tracker Competitors Overview","description":"Get competitor rankings for the keywords tracked in an Ahrefs Rank Tracker project: each tracked keyword\'s volume and difficulty alongside every competitor\'s position, traffic, and traffic value. This endpoint is free and does not consume API units.","version":"1.0.0","params":{"projectId":{"type":"number","required":true,"visibility":"user-or-llm","description":"The Rank Tracker project ID (found in the project URL in Ahrefs)"},"date":{"type":"string","required":true,"visibility":"user-only","description":"Date to report rankings for, in YYYY-MM-DD format"},"device":{"type":"string","required":true,"visibility":"user-or-llm","description":"Rankings device type: \\"desktop\\" or \\"mobile\\""},"dateCompared":{"type":"string","required":false,"visibility":"user-only","description":"Comparison date in YYYY-MM-DD format, to compute position/traffic deltas"},"volumeMode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search volume calculation: \\"monthly\\" or \\"average\\" (default: \\"monthly\\")"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_rank_tracker_competitors_stats":{"id":"ahrefs_rank_tracker_competitors_stats","name":"Ahrefs Rank Tracker Competitors Stats","description":"Get aggregate competitor stats for an Ahrefs Rank Tracker project: each competitor\'s traffic, traffic value, average position, and share of voice across all tracked keywords. This endpoint is free and does not consume API units.","version":"1.0.0","params":{"projectId":{"type":"number","required":true,"visibility":"user-or-llm","description":"The Rank Tracker project ID (found in the project URL in Ahrefs)"},"date":{"type":"string","required":true,"visibility":"user-only","description":"Date to report metrics for, in YYYY-MM-DD format"},"device":{"type":"string","required":true,"visibility":"user-or-llm","description":"Rankings device type: \\"desktop\\" or \\"mobile\\""},"volumeMode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search volume calculation: \\"monthly\\" or \\"average\\" (default: \\"monthly\\")"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_rank_tracker_overview":{"id":"ahrefs_rank_tracker_overview","name":"Ahrefs Rank Tracker Overview","description":"Get ranking overview metrics for the keywords tracked in an Ahrefs Rank Tracker project: position, search volume, keyword difficulty, and estimated traffic. This endpoint is free and does not consume API units.","version":"1.0.0","params":{"projectId":{"type":"number","required":true,"visibility":"user-or-llm","description":"The Rank Tracker project ID (found in the project URL in Ahrefs)"},"date":{"type":"string","required":true,"visibility":"user-only","description":"Date to report rankings for, in YYYY-MM-DD format"},"device":{"type":"string","required":true,"visibility":"user-or-llm","description":"Rankings device type: \\"desktop\\" or \\"mobile\\""},"dateCompared":{"type":"string","required":false,"visibility":"user-only","description":"Comparison date in YYYY-MM-DD format, to compute position/traffic deltas"},"volumeMode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search volume calculation: \\"monthly\\" or \\"average\\" (default: \\"monthly\\")"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_rank_tracker_serp_overview":{"id":"ahrefs_rank_tracker_serp_overview","name":"Ahrefs Rank Tracker SERP Overview","description":"Get the full SERP (search engine results page) for a keyword tracked in an Ahrefs Rank Tracker project, including every ranking URL with its position, title, and authority metrics. This endpoint is free and does not consume API units.","version":"1.0.0","params":{"projectId":{"type":"number","required":true,"visibility":"user-or-llm","description":"The Rank Tracker project ID (found in the project URL in Ahrefs)"},"keyword":{"type":"string","required":true,"visibility":"user-or-llm","description":"The tracked keyword to retrieve SERP data for"},"country":{"type":"string","required":true,"visibility":"user-or-llm","description":"Country code for the tracked keyword. Example: \\"us\\", \\"gb\\", \\"de\\""},"device":{"type":"string","required":true,"visibility":"user-or-llm","description":"Rankings device type: \\"desktop\\" or \\"mobile\\""},"topPositions":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of top organic positions to return (defaults to all available)"},"date":{"type":"string","required":false,"visibility":"user-only","description":"Timestamp to return the last available SERP Overview at, in YYYY-MM-DDThh:mm:ss format"},"locationId":{"type":"number","required":false,"visibility":"user-or-llm","description":"Location ID of the tracked keyword, if tracked at a specific location"},"languageCode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Language code of the tracked keyword"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_refdomains_history":{"id":"ahrefs_refdomains_history","name":"Ahrefs Referring Domains History","description":"Get the historical referring domains trend for a target domain or URL over a date range, grouped daily, weekly, or monthly.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\""},"dateFrom":{"type":"string","required":true,"visibility":"user-only","description":"Start date of the historical period, in YYYY-MM-DD format"},"dateTo":{"type":"string","required":false,"visibility":"user-only","description":"End date of the historical period, in YYYY-MM-DD format (defaults to today)"},"historyGrouping":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval for grouping data points: \\"daily\\", \\"weekly\\", or \\"monthly\\" (default: \\"monthly\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_referring_domains":{"id":"ahrefs_referring_domains","name":"Ahrefs Referring Domains","description":"Get a list of domains that link to a target domain or URL. Returns unique referring domains with their domain rating, backlink counts, and discovery dates.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain or URL to analyze. Example: \\"example.com\\" or \\"https://example.com/page\\""},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"history":{"type":"string","required":false,"visibility":"user-or-llm","description":"Historical scope: \\"live\\" (currently live), \\"all_time\\" (default, includes lost domains), or \\"since:YYYY-MM-DD\\" (domains found since a date)."},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_related_terms":{"id":"ahrefs_related_terms","name":"Ahrefs Related Terms","description":"Get keyword ideas related to a seed keyword: terms the same top-ranking pages also rank for (\\"also rank for\\") or also discuss (\\"also talk about\\"), with volume, difficulty, and CPC.","version":"1.0.0","params":{"keyword":{"type":"string","required":true,"visibility":"user-or-llm","description":"The seed keyword to find related terms for"},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for keyword data. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"terms":{"type":"string","required":false,"visibility":"user-or-llm","description":"Type of related keywords to return: \\"also_rank_for\\", \\"also_talk_about\\", or \\"all\\" (default: \\"all\\")"},"viewFor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Whether to derive related terms from the top 10 or top 100 ranking pages (default: \\"top_10\\")"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_site_audit_page_explorer":{"id":"ahrefs_site_audit_page_explorer","name":"Ahrefs Site Audit Page Explorer","description":"Get crawled pages from an Ahrefs Site Audit project with health and SEO metrics: HTTP status, title, link counts, backlinks, indexability, and traffic. Optionally filter to pages affected by a specific issue.","version":"1.0.0","params":{"projectId":{"type":"number","required":true,"visibility":"user-or-llm","description":"The Site Audit project ID (found in the project URL in Ahrefs)"},"date":{"type":"string","required":false,"visibility":"user-only","description":"Crawl date in YYYY-MM-DDThh:mm:ss format (defaults to the most recent crawl)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"offset":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of results to skip, for pagination"},"issueId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Only return pages affected by this issue ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"ahrefs_top_pages":{"id":"ahrefs_top_pages","name":"Ahrefs Top Pages","description":"Get the top pages of a target domain sorted by organic traffic. Returns page URLs with their traffic, keyword counts, and estimated traffic value.","version":"1.0.0","params":{"target":{"type":"string","required":true,"visibility":"user-or-llm","description":"The target domain to analyze. Example: \\"example.com\\""},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Country code for traffic data. Example: \\"us\\", \\"gb\\", \\"de\\" (default: \\"us\\")"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Analysis mode: domain (entire domain), prefix (URL prefix), subdomains (include all subdomains, default), exact (exact URL match). Example: \\"domain\\""},"date":{"type":"string","required":false,"visibility":"user-only","description":"Date to report metrics on, in YYYY-MM-DD format (defaults to today)"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of results to return. Example: 50 (default: 1000)"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ahrefs API Key"}},"hostedApiKey":"none"},"airtable_create_records":{"id":"airtable_create_records","name":"Airtable Create Records","description":"Write new records to an Airtable table","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"records":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of records to create, each with a `fields` object"},"typecast":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"When true, Airtable automatically converts string values to the field type"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_delete_records":{"id":"airtable_delete_records","name":"Airtable Delete Records","description":"Delete one or more records from an Airtable table by ID","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"recordIds":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of record IDs to delete (each starts with \\"rec\\", e.g., [\\"recXXXXXXXXXXXXXX\\"]). Pass a single-element array to delete one record."}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_get_base_schema":{"id":"airtable_get_base_schema","name":"Airtable Get Base Schema","description":"Get the schema of all tables, fields, and views in an Airtable base","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_get_record":{"id":"airtable_get_record","name":"Airtable Get Record","description":"Retrieve a single record from an Airtable table by its ID","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Record ID to retrieve (starts with \\"rec\\", e.g., \\"recXXXXXXXXXXXXXX\\")"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_list_bases":{"id":"airtable_list_bases","name":"Airtable List Bases","description":"List all bases the authenticated user has access to","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"offset":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination offset for retrieving additional bases"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_list_records":{"id":"airtable_list_records","name":"Airtable List Records","description":"Read records from an Airtable table","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"maxRecords":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of records to return (default: all records)"},"filterFormula":{"type":"string","required":false,"visibility":"user-or-llm","description":"Formula to filter records (e.g., \\"({Field Name} = \'Value\')\\")"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_list_tables":{"id":"airtable_list_tables","name":"Airtable List Tables","description":"List all tables and their schema in an Airtable base","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_update_multiple_records":{"id":"airtable_update_multiple_records","name":"Airtable Update Multiple Records","description":"Update multiple existing records in an Airtable table","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"records":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of records to update, each with an `id` and a `fields` object"},"typecast":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"When true, Airtable automatically converts string values to the field type"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_update_record":{"id":"airtable_update_record","name":"Airtable Update Record","description":"Update an existing record in an Airtable table by ID","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"recordId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Record ID to update (starts with \\"rec\\", e.g., \\"recXXXXXXXXXXXXXX\\")"},"fields":{"type":"json","required":true,"visibility":"user-or-llm","description":"An object containing the field names and their new values"},"typecast":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"When true, Airtable automatically converts string values to the field type"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airtable_upsert_records":{"id":"airtable_upsert_records","name":"Airtable Upsert Records","description":"Update existing records or create new ones in an Airtable table, matching on the specified merge fields","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token"},"baseId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Airtable base ID (starts with \\"app\\", e.g., \\"appXXXXXXXXXXXXXX\\")"},"tableId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Table ID (starts with \\"tbl\\") or table name"},"records":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of records to upsert, each with a `fields` object"},"fieldsToMergeOn":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of field names used to match existing records (max 3). A record is updated when all merge fields match, otherwise it is created. Example: [\\"Name\\"]"},"typecast":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"When true, Airtable automatically converts string values to the field type"}},"oauth":{"required":true,"provider":"airtable"},"hostedApiKey":"none"},"airweave_search":{"id":"airweave_search","name":"Airweave Search","description":"Search your synced data collections using Airweave. Supports semantic search with hybrid, neural, or keyword retrieval strategies. Optionally generate AI-powered answers from search results.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Airweave API Key for authentication"},"collectionId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The readable ID of the collection to search"},"query":{"type":"string","required":true,"visibility":"user-or-llm","description":"The search query text"},"limit":{"type":"number","required":false,"visibility":"user-only","description":"Maximum number of results to return (default: 100)"},"retrievalStrategy":{"type":"string","required":false,"visibility":"user-or-llm","description":"Retrieval strategy: hybrid (default), neural, or keyword"},"expandQuery":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Generate query variations to improve recall"},"rerank":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Reorder results for improved relevance using LLM"},"generateAnswer":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Generate a natural-language answer to the query"}},"hostedApiKey":"none"},"algolia_add_record":{"id":"algolia_add_record","name":"Algolia Add Record","description":"Add or replace a record in an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"objectID":{"type":"string","required":false,"visibility":"user-or-llm","description":"Object ID for the record (auto-generated if not provided)"},"record":{"type":"json","required":true,"visibility":"user-or-llm","description":"JSON object representing the record to add"}},"hostedApiKey":"none"},"algolia_batch_operations":{"id":"algolia_batch_operations","name":"Algolia Batch Operations","description":"Perform batch add, update, partial update, or delete operations on records in an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"requests":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of batch operations. Each item has \\"action\\" (addObject, updateObject, partialUpdateObject, partialUpdateObjectNoCreate, deleteObject, delete, clear) and \\"body\\" (the record data; must include objectID for update/delete; use an empty object {} for the index-level delete/clear actions)"}},"hostedApiKey":"none"},"algolia_browse_records":{"id":"algolia_browse_records","name":"Algolia Browse Records","description":"Browse and iterate over all records in an Algolia index using cursor pagination","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key (must have browse ACL)"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index to browse"},"query":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search query to filter browsed records"},"filters":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter string to narrow down results"},"attributesToRetrieve":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of attributes to retrieve"},"hitsPerPage":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of hits per page (default: 1000, max: 1000)"},"cursor":{"type":"string","required":false,"visibility":"user-or-llm","description":"Cursor from a previous browse response for pagination"},"aroundLatLng":{"type":"string","required":false,"visibility":"user-or-llm","description":"Coordinates for geo-search (e.g., \\"40.71,-74.01\\")"},"aroundRadius":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum radius in meters for geo-search, or \\"all\\" for unlimited"},"insideBoundingBox":{"type":"json","required":false,"visibility":"user-or-llm","description":"Bounding box coordinates as [[lat1, lng1, lat2, lng2]] for geo-search"},"insidePolygon":{"type":"json","required":false,"visibility":"user-or-llm","description":"Polygon coordinates as [[lat1, lng1, lat2, lng2, lat3, lng3, ...]] for geo-search"}},"hostedApiKey":"none"},"algolia_clear_records":{"id":"algolia_clear_records","name":"Algolia Clear Records","description":"Clear all records from an Algolia index while keeping settings, synonyms, and rules","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key (must have deleteIndex ACL)"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index to clear"}},"hostedApiKey":"none"},"algolia_copy_move_index":{"id":"algolia_copy_move_index","name":"Algolia Copy/Move Index","description":"Copy or move an Algolia index to a new destination","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the source index"},"operation":{"type":"string","required":true,"visibility":"user-or-llm","description":"Operation to perform: \\"copy\\" or \\"move\\""},"destination":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the destination index"},"scope":{"type":"json","required":false,"visibility":"user-or-llm","description":"Array of scopes to copy (only for \\"copy\\" operation): [\\"settings\\", \\"synonyms\\", \\"rules\\"]. Omit to copy everything including records."}},"hostedApiKey":"none"},"algolia_delete_by_filter":{"id":"algolia_delete_by_filter","name":"Algolia Delete By Filter","description":"Delete all records matching a filter from an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key (must have deleteIndex ACL)"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"filters":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter expression to match records for deletion (e.g., \\"category:outdated\\")"},"facetFilters":{"type":"json","required":false,"visibility":"user-or-llm","description":"Array of facet filters (e.g., [\\"brand:Acme\\"])"},"numericFilters":{"type":"json","required":false,"visibility":"user-or-llm","description":"Array of numeric filters (e.g., [\\"price > 100\\"])"},"tagFilters":{"type":"json","required":false,"visibility":"user-or-llm","description":"Array of tag filters using the _tags attribute (e.g., [\\"published\\"])"},"aroundLatLng":{"type":"string","required":false,"visibility":"user-or-llm","description":"Coordinates for geo-search filter (e.g., \\"40.71,-74.01\\")"},"aroundRadius":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum radius in meters for geo-search, or \\"all\\" for unlimited"},"insideBoundingBox":{"type":"json","required":false,"visibility":"user-or-llm","description":"Bounding box coordinates as [[lat1, lng1, lat2, lng2]] for geo-search filter"},"insidePolygon":{"type":"json","required":false,"visibility":"user-or-llm","description":"Polygon coordinates as [[lat1, lng1, lat2, lng2, lat3, lng3, ...]] for geo-search filter"}},"hostedApiKey":"none"},"algolia_delete_index":{"id":"algolia_delete_index","name":"Algolia Delete Index","description":"Delete an entire Algolia index and all its records","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key (must have deleteIndex ACL)"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index to delete"}},"hostedApiKey":"none"},"algolia_delete_record":{"id":"algolia_delete_record","name":"Algolia Delete Record","description":"Delete a record by objectID from an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"objectID":{"type":"string","required":true,"visibility":"user-or-llm","description":"The objectID of the record to delete"}},"hostedApiKey":"none"},"algolia_get_record":{"id":"algolia_get_record","name":"Algolia Get Record","description":"Get a record by objectID from an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"objectID":{"type":"string","required":true,"visibility":"user-or-llm","description":"The objectID of the record to retrieve"},"attributesToRetrieve":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of attributes to retrieve"}},"hostedApiKey":"none"},"algolia_get_records":{"id":"algolia_get_records","name":"Algolia Get Records","description":"Retrieve multiple records by objectID from one or more Algolia indices","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Default index name for all requests"},"requests":{"type":"json","required":true,"visibility":"user-or-llm","description":"Array of objects specifying records to retrieve. Each must have \\"objectID\\" and optionally \\"indexName\\" and \\"attributesToRetrieve\\"."}},"hostedApiKey":"none"},"algolia_get_settings":{"id":"algolia_get_settings","name":"Algolia Get Settings","description":"Retrieve the settings of an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"}},"hostedApiKey":"none"},"algolia_get_task_status":{"id":"algolia_get_task_status","name":"Algolia Get Task Status","description":"Check whether an Algolia indexing task has finished publishing","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index the task ran against"},"taskID":{"type":"number","required":true,"visibility":"user-or-llm","description":"The taskID returned by a previous write operation"}},"hostedApiKey":"none"},"algolia_list_indices":{"id":"algolia_list_indices","name":"Algolia List Indices","description":"List all indices in an Algolia application","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key"},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for paginating indices (default: not paginated)"},"hitsPerPage":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of indices per page (default: 100)"}},"hostedApiKey":"none"},"algolia_partial_update_record":{"id":"algolia_partial_update_record","name":"Algolia Partial Update Record","description":"Partially update a record in an Algolia index without replacing it entirely","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"objectID":{"type":"string","required":true,"visibility":"user-or-llm","description":"The objectID of the record to update"},"attributes":{"type":"json","required":true,"visibility":"user-or-llm","description":"JSON object with attributes to update. Supports built-in operations like {\\"stock\\": {\\"_operation\\": \\"Decrement\\", \\"value\\": 1}}"},"createIfNotExists":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Whether to create the record if it does not exist (default: true)"}},"hostedApiKey":"none"},"algolia_search":{"id":"algolia_search","name":"Algolia Search","description":"Search an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia API Key"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index to search"},"query":{"type":"string","required":true,"visibility":"user-or-llm","description":"Search query text"},"hitsPerPage":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of hits per page (default: 20)"},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number to retrieve (default: 0)"},"filters":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter string (e.g., \\"category:electronics AND price < 100\\")"},"attributesToRetrieve":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of attributes to retrieve"},"facets":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of facet attribute names to retrieve counts for (use \\"*\\" for all)"},"getRankingInfo":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Whether to include detailed ranking information in each hit"},"aroundLatLng":{"type":"string","required":false,"visibility":"user-or-llm","description":"Coordinates for geo-search (e.g., \\"40.71,-74.01\\")"},"aroundRadius":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum radius in meters for geo-search, or \\"all\\" for unlimited"},"insideBoundingBox":{"type":"json","required":false,"visibility":"user-or-llm","description":"Bounding box coordinates as [[lat1, lng1, lat2, lng2]] for geo-search"},"insidePolygon":{"type":"json","required":false,"visibility":"user-or-llm","description":"Polygon coordinates as [[lat1, lng1, lat2, lng2, lat3, lng3, ...]] for geo-search"}},"hostedApiKey":"none"},"algolia_update_settings":{"id":"algolia_update_settings","name":"Algolia Update Settings","description":"Update the settings of an Algolia index","version":"1.0","params":{"applicationId":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Application ID"},"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Algolia Admin API Key (must have editSettings ACL)"},"indexName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the Algolia index"},"settings":{"type":"json","required":true,"visibility":"user-or-llm","description":"JSON object with settings to update (e.g., {\\"searchableAttributes\\": [\\"name\\", \\"description\\"], \\"customRanking\\": [\\"desc(popularity)\\"]})"},"forwardToReplicas":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Whether to apply changes to replica indices (default: false)"}},"hostedApiKey":"none"},"amplitude_event_segmentation":{"id":"amplitude_event_segmentation","name":"Amplitude Event Segmentation","description":"Query event analytics data with segmentation. Get event counts, uniques, averages, and more.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"eventType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Event type name to analyze"},"start":{"type":"string","required":true,"visibility":"user-or-llm","description":"Start date in YYYYMMDD format"},"end":{"type":"string","required":true,"visibility":"user-or-llm","description":"End date in YYYYMMDD format"},"metric":{"type":"string","required":false,"visibility":"user-or-llm","description":"Metric type: uniques, totals, pct_dau, average, histogram, sums, value_avg, or formula (default: uniques)"},"interval":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval: 1 (daily), 7 (weekly), or 30 (monthly)"},"groupBy":{"type":"string","required":false,"visibility":"user-or-llm","description":"Property name to group by (prefix custom user properties with \\"gp:\\")"},"groupBy2":{"type":"string","required":false,"visibility":"user-or-llm","description":"Second property name to group by (prefix custom user properties with \\"gp:\\")"},"limit":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum number of group-by values (max 1000)"},"filters":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON array of filter objects applied to the event, e.g. [{\\"subprop_type\\":\\"event\\",\\"subprop_key\\":\\"city\\",\\"subprop_op\\":\\"is\\",\\"subprop_value\\":[\\"San Francisco\\"]}]"},"formula":{"type":"string","required":false,"visibility":"user-or-llm","description":"Required when metric is \\"formula\\", e.g. \\"UNIQUES(A)/UNIQUES(B)\\""},"segment":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON segment definition(s) applied to the query"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_funnels":{"id":"amplitude_funnels","name":"Amplitude Funnels","description":"Analyze conversion rates and drop-off between a sequence of events.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"events":{"type":"string","required":true,"visibility":"user-or-llm","description":"JSON array of event objects, one per funnel step in order, e.g. [{\\"event_type\\":\\"signup\\"},{\\"event_type\\":\\"purchase\\"}]"},"start":{"type":"string","required":true,"visibility":"user-or-llm","description":"Start date in YYYYMMDD format"},"end":{"type":"string","required":true,"visibility":"user-or-llm","description":"End date in YYYYMMDD format"},"mode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Funnel ordering: \\"ordered\\", \\"unordered\\", or \\"sequential\\" (default: ordered)"},"userType":{"type":"string","required":false,"visibility":"user-or-llm","description":"User type: \\"new\\" or \\"active\\" (default: active)"},"interval":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval: -300000 (real-time), -3600000 (hourly), 1 (daily), 7 (weekly), or 30 (monthly)"},"conversionWindowSeconds":{"type":"string","required":false,"visibility":"user-or-llm","description":"Conversion window in seconds (default: 2592000, i.e. 30 days)"},"groupBy":{"type":"string","required":false,"visibility":"user-or-llm","description":"Property to group by (limit: one; prefix custom properties with \\"gp:\\")"},"limit":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum number of group-by values (default: 100, max: 1000)"},"segment":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON segment definition(s) applied to the query"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_get_active_users":{"id":"amplitude_get_active_users","name":"Amplitude Get Active Users","description":"Get active or new user counts over a date range from the Dashboard REST API.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"start":{"type":"string","required":true,"visibility":"user-or-llm","description":"Start date in YYYYMMDD format"},"end":{"type":"string","required":true,"visibility":"user-or-llm","description":"End date in YYYYMMDD format"},"metric":{"type":"string","required":false,"visibility":"user-or-llm","description":"Metric type: \\"active\\" or \\"new\\" (default: active)"},"interval":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval: 1 (daily), 7 (weekly), or 30 (monthly)"},"groupBy":{"type":"string","required":false,"visibility":"user-or-llm","description":"Property name to group by"},"segment":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON segment definition(s) applied to the query"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_get_revenue":{"id":"amplitude_get_revenue","name":"Amplitude Get Revenue","description":"Get revenue LTV data including ARPU, ARPPU, total revenue, and paying user counts.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"start":{"type":"string","required":true,"visibility":"user-or-llm","description":"Start date in YYYYMMDD format"},"end":{"type":"string","required":true,"visibility":"user-or-llm","description":"End date in YYYYMMDD format"},"metric":{"type":"string","required":false,"visibility":"user-or-llm","description":"Metric: 0 (ARPU), 1 (ARPPU), 2 (Total Revenue), 3 (Paying Users)"},"interval":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval: 1 (daily), 7 (weekly), or 30 (monthly)"},"groupBy":{"type":"string","required":false,"visibility":"user-or-llm","description":"Property name to group by (limit: one)"},"segment":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON segment definition(s) applied to the query"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_group_identify":{"id":"amplitude_group_identify","name":"Amplitude Group Identify","description":"Set group-level properties in Amplitude. Supports $set, $setOnce, $add, $append, $unset operations.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"groupType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Group classification (e.g., \\"company\\", \\"org_id\\")"},"groupValue":{"type":"string","required":true,"visibility":"user-or-llm","description":"Specific group identifier (e.g., \\"Acme Corp\\")"},"groupProperties":{"type":"string","required":true,"visibility":"user-or-llm","description":"JSON object of group properties. Use operations like $set, $setOnce, $add, $append, $unset."},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_identify_user":{"id":"amplitude_identify_user","name":"Amplitude Identify User","description":"Set user properties in Amplitude using the Identify API. Supports $set, $setOnce, $add, $append, $unset operations.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"userId":{"type":"string","required":false,"visibility":"user-or-llm","description":"User ID (required if no device_id)"},"deviceId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Device ID (required if no user_id)"},"userProperties":{"type":"string","required":true,"visibility":"user-or-llm","description":"JSON object of user properties. Use operations like $set, $setOnce, $add, $append, $unset."},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_list_events":{"id":"amplitude_list_events","name":"Amplitude List Events","description":"List all event types in the Amplitude project with their weekly totals and unique counts.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_realtime_active_users":{"id":"amplitude_realtime_active_users","name":"Amplitude Real-time Active Users","description":"Get real-time active user counts at 5-minute granularity for the last 2 days.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_retention":{"id":"amplitude_retention","name":"Amplitude Retention","description":"Measure how many users return to perform an action after a starting action.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"startEvent":{"type":"string","required":true,"visibility":"user-or-llm","description":"JSON starting event object, e.g. {\\"event_type\\":\\"_new\\"} or {\\"event_type\\":\\"_active\\"}"},"returnEvent":{"type":"string","required":true,"visibility":"user-or-llm","description":"JSON returning event object, e.g. {\\"event_type\\":\\"_all\\"} or {\\"event_type\\":\\"_active\\"}"},"start":{"type":"string","required":true,"visibility":"user-or-llm","description":"Start date in YYYYMMDD format"},"end":{"type":"string","required":true,"visibility":"user-or-llm","description":"End date in YYYYMMDD format"},"retentionMode":{"type":"string","required":false,"visibility":"user-or-llm","description":"Retention type: \\"bracket\\", \\"rolling\\", or \\"n-day\\" (default: n-day)"},"retentionBrackets":{"type":"string","required":false,"visibility":"user-or-llm","description":"Required when Retention Mode is \\"bracket\\". Day ranges, e.g. [[0,4]]"},"interval":{"type":"string","required":false,"visibility":"user-or-llm","description":"Time interval: 1 (daily), 7 (weekly), or 30 (monthly)"},"groupBy":{"type":"string","required":false,"visibility":"user-or-llm","description":"Property to group by (limit: one; prefix custom properties with \\"gp:\\")"},"segment":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON segment definition(s) applied to the query"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_send_event":{"id":"amplitude_send_event","name":"Amplitude Send Event","description":"Track an event in Amplitude using the HTTP V2 API.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"userId":{"type":"string","required":false,"visibility":"user-or-llm","description":"User ID (required if no device_id)"},"deviceId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Device ID (required if no user_id)"},"eventType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the event (e.g., \\"page_view\\", \\"purchase\\")"},"eventProperties":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON object of custom event properties"},"userProperties":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON object of user properties to set (supports $set, $setOnce, $add, $append, $unset)"},"time":{"type":"string","required":false,"visibility":"user-or-llm","description":"Event timestamp in milliseconds since epoch"},"sessionId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Session start time in milliseconds since epoch"},"insertId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Unique ID for deduplication (within 7-day window)"},"appVersion":{"type":"string","required":false,"visibility":"user-or-llm","description":"Application version string"},"platform":{"type":"string","required":false,"visibility":"user-or-llm","description":"Platform (e.g., \\"Web\\", \\"iOS\\", \\"Android\\")"},"country":{"type":"string","required":false,"visibility":"user-or-llm","description":"Two-letter country code"},"language":{"type":"string","required":false,"visibility":"user-or-llm","description":"Language code (e.g., \\"en\\")"},"ip":{"type":"string","required":false,"visibility":"user-or-llm","description":"IP address for geo-location"},"price":{"type":"string","required":false,"visibility":"user-or-llm","description":"Price of the item purchased"},"quantity":{"type":"string","required":false,"visibility":"user-or-llm","description":"Quantity of items purchased"},"revenue":{"type":"string","required":false,"visibility":"user-or-llm","description":"Revenue amount"},"productId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Product identifier"},"revenueType":{"type":"string","required":false,"visibility":"user-or-llm","description":"Revenue type (e.g., \\"purchase\\", \\"refund\\")"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_user_activity":{"id":"amplitude_user_activity","name":"Amplitude User Activity","description":"Get the event stream for a specific user by their Amplitude ID.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"amplitudeId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Amplitude internal user ID"},"offset":{"type":"string","required":false,"visibility":"user-or-llm","description":"Offset for pagination (default 0)"},"limit":{"type":"string","required":false,"visibility":"user-or-llm","description":"Maximum number of events to return (default 1000, max 1000)"},"direction":{"type":"string","required":false,"visibility":"user-or-llm","description":"Sort direction: \\"latest\\" or \\"earliest\\" (default: latest)"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"amplitude_user_profile":{"id":"amplitude_user_profile","name":"Amplitude User Profile","description":"Get a user profile including properties, cohort memberships, and computed properties. Not available for EU data-residency projects.","version":"1.0.0","params":{"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"userId":{"type":"string","required":false,"visibility":"user-or-llm","description":"External user ID (required if no device_id)"},"deviceId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Device ID (required if no user_id)"},"getAmpProps":{"type":"string","required":false,"visibility":"user-or-llm","description":"Include Amplitude user properties (true/false, default: false)"},"getCohortIds":{"type":"string","required":false,"visibility":"user-or-llm","description":"Include cohort IDs the user belongs to (true/false, default: false)"},"getComputations":{"type":"string","required":false,"visibility":"user-or-llm","description":"Include computed user properties (true/false, default: false)"}},"hostedApiKey":"none"},"amplitude_user_search":{"id":"amplitude_user_search","name":"Amplitude User Search","description":"Search for a user by User ID, Device ID, or Amplitude ID using the Dashboard REST API.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude API Key"},"secretKey":{"type":"string","required":true,"visibility":"user-only","description":"Amplitude Secret Key"},"user":{"type":"string","required":true,"visibility":"user-or-llm","description":"User ID, Device ID, or Amplitude ID to search for"},"dataResidency":{"type":"string","required":false,"visibility":"user-or-llm","description":"Data residency region: \\"us\\" (default) or \\"eu\\""}},"hostedApiKey":"none"},"apify_get_dataset_items":{"id":"apify_get_dataset_items","name":"APIFY Get Dataset Items","description":"Retrieve items stored in an APIFY dataset","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"APIFY API token from console.apify.com/account#/integrations"},"datasetId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Dataset ID to read items from. Example: \\"9RnD3Pql2vGZkc5H5\\""},"itemLimit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Max items to return (1-250000). Default: all items. Example: 500"},"offset":{"type":"number","required":false,"visibility":"user-or-llm","description":"Number of items to skip at the start. Default: 0"},"fields":{"type":"string","required":false,"visibility":"user-or-llm","description":"Comma-separated list of fields to include. Example: \\"title,url,price\\""}},"hostedApiKey":"none"},"apify_get_run":{"id":"apify_get_run","name":"APIFY Get Run","description":"Get the status and details of an APIFY actor run","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"APIFY API token from console.apify.com/account#/integrations"},"runId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Actor run ID to fetch. Example: \\"HG7ML7M8z78YcAPEB\\""}},"hostedApiKey":"none"},"apify_run_actor_async":{"id":"apify_run_actor_async","name":"APIFY Run Actor (Async)","description":"Run an APIFY actor asynchronously with polling for long-running tasks","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"APIFY API token from console.apify.com/account#/integrations"},"actorId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Actor ID or username/actor-name. Examples: \\"apify/web-scraper\\", \\"janedoe/my-actor\\", \\"moJRLRc85AitArpNN\\""},"input":{"type":"string","required":false,"visibility":"user-or-llm","description":"Actor input as JSON string. Example: { \\"startUrls\\": [ { \\"url\\": \\"https://example.com\\" } ], \\"maxPages\\": 10 }"},"waitForFinish":{"type":"number","required":false,"visibility":"user-or-llm","description":"Initial wait time in seconds (0-60) before polling starts. Example: 30"},"itemLimit":{"type":"number","required":false,"default":100,"visibility":"user-or-llm","description":"Max dataset items to fetch (1-250000). Default: 100. Example: 500"},"memory":{"type":"number","required":false,"visibility":"user-or-llm","description":"Memory in megabytes allocated for the actor run (128-32768). Example: 1024 for 1GB, 2048 for 2GB"},"timeout":{"type":"number","required":false,"visibility":"user-or-llm","description":"Timeout in seconds for the actor run. Example: 300 for 5 minutes, 3600 for 1 hour"},"build":{"type":"string","required":false,"visibility":"user-or-llm","description":"Actor build to run. Examples: \\"latest\\", \\"beta\\", \\"1.2.3\\", \\"build-tag-name\\""}},"hostedApiKey":"none"},"apify_run_actor_sync":{"id":"apify_run_actor_sync","name":"APIFY Run Actor (Sync)","description":"Run an APIFY actor synchronously and get results (max 5 minutes)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"APIFY API token from console.apify.com/account#/integrations"},"actorId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Actor ID or username/actor-name. Examples: \\"apify/web-scraper\\", \\"janedoe/my-actor\\", \\"moJRLRc85AitArpNN\\""},"input":{"type":"string","required":false,"visibility":"user-or-llm","description":"Actor input as JSON string. Example: { \\"startUrls\\": [ { \\"url\\": \\"https://example.com\\" } ], \\"maxPages\\": 10 }"},"memory":{"type":"number","required":false,"visibility":"user-or-llm","description":"Memory in megabytes allocated for the actor run (128-32768). Example: 1024 for 1GB, 2048 for 2GB"},"timeout":{"type":"number","required":false,"visibility":"user-or-llm","description":"Timeout in seconds for the actor run. Example: 300 for 5 minutes, 3600 for 1 hour"},"build":{"type":"string","required":false,"visibility":"user-or-llm","description":"Actor build to run. Examples: \\"latest\\", \\"beta\\", \\"1.2.3\\", \\"build-tag-name\\""}},"hostedApiKey":"none"},"apify_run_task":{"id":"apify_run_task","name":"APIFY Run Task","description":"Run a saved APIFY actor task synchronously and get dataset items (max 5 minutes)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"APIFY API token from console.apify.com/account#/integrations"},"taskId":{"type":"string","required":true,"visibility":"user-or-llm","description":"Task ID or username/task-name. Examples: \\"janedoe/my-task\\", \\"moJRLRc85AitArpNN\\""},"input":{"type":"string","required":false,"visibility":"user-or-llm","description":"JSON string that overrides the task\'s saved input. Example: { \\"startUrls\\": [ { \\"url\\": \\"https://example.com\\" } ] }"},"itemLimit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Max dataset items to return (1-250000). Example: 500"},"memory":{"type":"number","required":false,"visibility":"user-or-llm","description":"Memory in megabytes allocated for the run (128-32768). Example: 1024 for 1GB"},"timeout":{"type":"number","required":false,"visibility":"user-or-llm","description":"Timeout in seconds for the run. Example: 300 for 5 minutes"},"build":{"type":"string","required":false,"visibility":"user-or-llm","description":"Actor build to run. Examples: \\"latest\\", \\"beta\\", \\"1.2.3\\""}},"hostedApiKey":"none"},"apollo_account_bulk_create":{"id":"apollo_account_bulk_create","name":"Apollo Bulk Create Accounts","description":"Create up to 100 accounts at once in your Apollo database. Set run_dedupe=true to deduplicate by domain, organization_id, and name. Master key required.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"accounts":{"type":"array","required":true,"visibility":"user-or-llm","description":"Array of accounts to create (max 100). Each account should include a name, and may optionally include domain, phone, phone_status_cd, raw_address, owner_id, linkedin_url, facebook_url, twitter_url, salesforce_id, and hubspot_id."},"append_label_names":{"type":"array","required":false,"visibility":"user-only","description":"Array of label names to add to ALL accounts in this request"},"run_dedupe":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"When true, performs aggressive deduplication by domain, organization_id, and name (defaults to false)"}},"hostedApiKey":"none"},"apollo_account_bulk_update":{"id":"apollo_account_bulk_update","name":"Apollo Bulk Update Accounts","description":"Update up to 1000 existing accounts at once in your Apollo database (higher limit than contacts!). Each account must include an id field. Master key required.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"account_ids":{"type":"array","required":false,"visibility":"user-or-llm","description":"Array of account IDs to update with the same values (max 1000). Use with name/owner_id for uniform updates. Use either this OR account_attributes."},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"When using account_ids, apply this name to all accounts"},"owner_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"When using account_ids, apply this owner to all accounts"},"account_stage_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"When using account_ids, apply this account stage to all accounts"},"account_attributes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Array of account objects with individual updates (each must include id). Example: [{\\"id\\": \\"acc1\\", \\"name\\": \\"Acme\\", \\"owner_id\\": \\"u1\\", \\"account_stage_id\\": \\"s1\\", \\"typed_custom_fields\\": {\\"field_id\\": \\"value\\"}}]"},"async":{"type":"boolean","required":false,"visibility":"user-only","description":"When true, processes the update asynchronously. Only supported when using account_ids; returns 422 if used with account_attributes."}},"hostedApiKey":"none"},"apollo_account_create":{"id":"apollo_account_create","name":"Apollo Create Account","description":"Create a new account (company) in your Apollo database","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Company name (e.g., \\"Acme Corporation\\")"},"domain":{"type":"string","required":false,"visibility":"user-or-llm","description":"Company domain without www. prefix (e.g., \\"acme.com\\")"},"phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Primary phone number for the account"},"owner_id":{"type":"string","required":false,"visibility":"user-only","description":"Apollo user ID of the account owner"},"account_stage_id":{"type":"string","required":false,"visibility":"user-only","description":"Apollo ID for the account stage to assign this account to"},"raw_address":{"type":"string","required":false,"visibility":"user-or-llm","description":"Corporate location (e.g., \\"San Francisco, CA, USA\\")"},"typed_custom_fields":{"type":"json","required":false,"visibility":"user-only","description":"Custom field values as { custom_field_id: value } map"}},"hostedApiKey":"none"},"apollo_account_search":{"id":"apollo_account_search","name":"Apollo Search Accounts","description":"Search your team\'s accounts in Apollo. Display limit: 50,000 records (100 records per page, 500 pages max). Use filters to narrow results. Master key required.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"q_organization_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter accounts by organization name (partial-match search)"},"account_stage_ids":{"type":"array","required":false,"visibility":"user-only","description":"Filter by account stage IDs"},"account_label_ids":{"type":"array","required":false,"visibility":"user-only","description":"Filter by account label IDs"},"sort_by_field":{"type":"string","required":false,"visibility":"user-or-llm","description":"Sort field: \\"account_last_activity_date\\", \\"account_created_at\\", or \\"account_updated_at\\""},"sort_ascending":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Sort ascending when true. Defaults to descending."},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"apollo_account_update":{"id":"apollo_account_update","name":"Apollo Update Account","description":"Update an existing account in your Apollo database","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"account_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the account to update (e.g., \\"acc_abc123\\")"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Company name (e.g., \\"Acme Corporation\\")"},"domain":{"type":"string","required":false,"visibility":"user-or-llm","description":"Company domain (e.g., \\"acme.com\\")"},"phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Company phone number"},"owner_id":{"type":"string","required":false,"visibility":"user-only","description":"Apollo user ID of the account owner"},"account_stage_id":{"type":"string","required":false,"visibility":"user-only","description":"Apollo ID for the account stage to assign this account to"},"raw_address":{"type":"string","required":false,"visibility":"user-or-llm","description":"Corporate location (e.g., \\"San Francisco, CA, USA\\")"},"typed_custom_fields":{"type":"json","required":false,"visibility":"user-only","description":"Custom field values as { custom_field_id: value } map"}},"hostedApiKey":"none"},"apollo_contact_bulk_create":{"id":"apollo_contact_bulk_create","name":"Apollo Bulk Create Contacts","description":"Create up to 100 contacts at once in your Apollo database. Supports deduplication to prevent creating duplicate contacts. Master key required.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"contacts":{"type":"array","required":true,"visibility":"user-or-llm","description":"Array of contacts to create (max 100). Each contact may include first_name, last_name, email, title, organization_name, account_id, owner_id, contact_stage_id, linkedin_url, phone (single string) or phone_numbers (array of {raw_number, position}), contact_emails, typed_custom_fields, and CRM IDs (salesforce_contact_id, hubspot_id, team_id) for cross-system matching"},"append_label_names":{"type":"array","required":false,"visibility":"user-or-llm","description":"Label names to add to all contacts in this request (e.g., [\\"Hot Lead\\"])"},"run_dedupe":{"type":"boolean","required":false,"visibility":"user-only","description":"Enable deduplication to prevent creating duplicate contacts. When true, existing contacts are returned without modification"}},"hostedApiKey":"none"},"apollo_contact_bulk_update":{"id":"apollo_contact_bulk_update","name":"Apollo Bulk Update Contacts","description":"Update up to 100 existing contacts at once in your Apollo database. Each contact must include an id field. Master key required.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"contact_ids":{"type":"array","required":false,"visibility":"user-or-llm","description":"Array of contact IDs to update. Must be paired with an object-form contact_attributes specifying the fields to apply uniformly to all listed contacts."},"contact_attributes":{"type":"json","required":false,"visibility":"user-or-llm","description":"Required. Either an array of per-contact updates (each with id) — used standalone — or a single object of attributes to apply to all contact_ids. Supported fields: owner_id, email, organization_name, title, first_name, last_name, account_id, present_raw_address, linkedin_url, typed_custom_fields"},"async":{"type":"boolean","required":false,"visibility":"user-only","description":"Force asynchronous processing. Automatically enabled for >100 contacts"}},"hostedApiKey":"none"},"apollo_contact_create":{"id":"apollo_contact_create","name":"Apollo Create Contact","description":"Create a new contact in your Apollo database","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"first_name":{"type":"string","required":true,"visibility":"user-or-llm","description":"First name of the contact"},"last_name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Last name of the contact"},"email":{"type":"string","required":false,"visibility":"user-or-llm","description":"Email address of the contact"},"title":{"type":"string","required":false,"visibility":"user-or-llm","description":"Job title (e.g., \\"VP of Sales\\", \\"Software Engineer\\")"},"account_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"Apollo account ID to associate with (e.g., \\"acc_abc123\\")"},"owner_id":{"type":"string","required":false,"visibility":"user-only","description":"User ID of the contact owner (accepted by Apollo but not officially documented for POST /contacts)"},"organization_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Name of the contact\'s employer (e.g., \\"Apollo\\")"},"website_url":{"type":"string","required":false,"visibility":"user-or-llm","description":"Corporate website URL (e.g., \\"https://www.apollo.io/\\")"},"label_names":{"type":"array","required":false,"visibility":"user-or-llm","description":"Lists/labels to add the contact to (e.g., [\\"Prospects\\"])"},"contact_stage_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"Apollo ID for the contact stage"},"present_raw_address":{"type":"string","required":false,"visibility":"user-or-llm","description":"Personal location for the contact (e.g., \\"Atlanta, United States\\")"},"direct_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Primary phone number"},"corporate_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Work/office phone number"},"mobile_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Mobile phone number"},"home_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Home phone number"},"other_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Alternative phone number"},"typed_custom_fields":{"type":"json","required":false,"visibility":"user-or-llm","description":"Custom field values keyed by custom field ID"},"run_dedupe":{"type":"boolean","required":false,"visibility":"user-only","description":"When true, Apollo deduplicates against existing contacts"}},"hostedApiKey":"none"},"apollo_contact_search":{"id":"apollo_contact_search","name":"Apollo Search Contacts","description":"Search your team\'s contacts in Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"q_keywords":{"type":"string","required":false,"visibility":"user-or-llm","description":"Keywords to search for"},"contact_stage_ids":{"type":"array","required":false,"visibility":"user-only","description":"Filter by contact stage IDs"},"contact_label_ids":{"type":"array","required":false,"visibility":"user-only","description":"Filter by Apollo label IDs (lists)"},"sort_by_field":{"type":"string","required":false,"visibility":"user-only","description":"Sort field: contact_last_activity_date, contact_email_last_opened_at, contact_email_last_clicked_at, contact_created_at, or contact_updated_at"},"sort_ascending":{"type":"boolean","required":false,"visibility":"user-only","description":"When true, sort ascending. Must be used together with sort_by_field"},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"apollo_contact_update":{"id":"apollo_contact_update","name":"Apollo Update Contact","description":"Update an existing contact in your Apollo database","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"contact_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the contact to update (e.g., \\"con_abc123\\")"},"first_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"First name of the contact"},"last_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Last name of the contact"},"email":{"type":"string","required":false,"visibility":"user-or-llm","description":"Email address"},"title":{"type":"string","required":false,"visibility":"user-or-llm","description":"Job title (e.g., \\"VP of Sales\\", \\"Software Engineer\\")"},"account_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"Apollo account ID (e.g., \\"acc_abc123\\")"},"owner_id":{"type":"string","required":false,"visibility":"user-only","description":"User ID of the contact owner (accepted by Apollo but not officially documented for PATCH /contacts/{id})"},"organization_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Name of the contact\'s employer (e.g., \\"Apollo\\")"},"website_url":{"type":"string","required":false,"visibility":"user-or-llm","description":"Corporate website URL (e.g., \\"https://www.apollo.io/\\")"},"label_names":{"type":"array","required":false,"visibility":"user-or-llm","description":"Lists/labels to add the contact to (e.g., [\\"Prospects\\"])"},"contact_stage_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"Apollo ID for the contact stage"},"present_raw_address":{"type":"string","required":false,"visibility":"user-or-llm","description":"Personal location for the contact (e.g., \\"Atlanta, United States\\")"},"direct_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Primary phone number"},"corporate_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Work/office phone number"},"mobile_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Mobile phone number"},"home_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Home phone number"},"other_phone":{"type":"string","required":false,"visibility":"user-or-llm","description":"Alternative phone number"},"typed_custom_fields":{"type":"json","required":false,"visibility":"user-or-llm","description":"Custom field values keyed by custom field ID"}},"hostedApiKey":"none"},"apollo_email_accounts":{"id":"apollo_email_accounts","name":"Apollo Get Email Accounts","description":"Get list of team\'s linked email accounts in Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"}},"hostedApiKey":"none"},"apollo_opportunity_create":{"id":"apollo_opportunity_create","name":"Apollo Create Opportunity","description":"Create a new deal for an account in your Apollo database (master key required)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the opportunity/deal (e.g., \\"Enterprise License - Q1\\")"},"account_id":{"type":"string","required":false,"visibility":"user-or-llm","description":"ID of the account this opportunity belongs to (e.g., \\"acc_abc123\\")"},"amount":{"type":"string","required":false,"visibility":"user-or-llm","description":"Monetary value as a plain number string with no commas or currency symbols"},"opportunity_stage_id":{"type":"string","required":false,"visibility":"user-only","description":"ID of the opportunity stage"},"owner_id":{"type":"string","required":false,"visibility":"user-only","description":"User ID of the opportunity owner"},"closed_date":{"type":"string","required":false,"visibility":"user-or-llm","description":"Expected close date in YYYY-MM-DD format"},"typed_custom_fields":{"type":"json","required":false,"visibility":"user-only","description":"Custom field values as { custom_field_id: value } map"}},"hostedApiKey":"none"},"apollo_opportunity_get":{"id":"apollo_opportunity_get","name":"Apollo Get Opportunity","description":"Retrieve complete details of a specific deal/opportunity by ID","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"opportunity_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the opportunity to retrieve (e.g., \\"opp_abc123\\")"}},"hostedApiKey":"none"},"apollo_opportunity_search":{"id":"apollo_opportunity_search","name":"Apollo Search Opportunities","description":"Search and list all deals/opportunities in your team\'s Apollo account","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"sort_by_field":{"type":"string","required":false,"visibility":"user-or-llm","description":"Sort field: \\"amount\\", \\"is_closed\\", or \\"is_won\\""},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"apollo_opportunity_update":{"id":"apollo_opportunity_update","name":"Apollo Update Opportunity","description":"Update an existing deal/opportunity in your Apollo database","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"opportunity_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the opportunity to update (e.g., \\"opp_abc123\\")"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Name of the opportunity/deal (e.g., \\"Enterprise License - Q1\\")"},"amount":{"type":"string","required":false,"visibility":"user-or-llm","description":"Monetary value as a plain number string with no commas or currency symbols"},"opportunity_stage_id":{"type":"string","required":false,"visibility":"user-only","description":"ID of the opportunity stage"},"owner_id":{"type":"string","required":false,"visibility":"user-only","description":"User ID of the opportunity owner"},"closed_date":{"type":"string","required":false,"visibility":"user-or-llm","description":"Expected close date in YYYY-MM-DD format"},"typed_custom_fields":{"type":"json","required":false,"visibility":"user-only","description":"Custom field values as { custom_field_id: value } map"}},"hostedApiKey":"none"},"apollo_organization_bulk_enrich":{"id":"apollo_organization_bulk_enrich","name":"Apollo Bulk Organization Enrichment","description":"Enrich data for up to 10 organizations at once using Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"domains":{"type":"array","required":true,"visibility":"user-or-llm","description":"Array of company domains to enrich (max 10, no www. or @, e.g., [\\"apollo.io\\", \\"stripe.com\\"])"}},"hostedApiKey":"none"},"apollo_organization_enrich":{"id":"apollo_organization_enrich","name":"Apollo Organization Enrichment","description":"Enrich data for a single organization using Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"domain":{"type":"string","required":true,"visibility":"user-or-llm","description":"Company domain (e.g., \\"apollo.io\\", \\"acme.com\\")"}},"hostedApiKey":"none"},"apollo_organization_search":{"id":"apollo_organization_search","name":"Apollo Organization Search","description":"Search Apollo\'s database for companies using filters","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"organization_locations":{"type":"array","required":false,"visibility":"user-or-llm","description":"Company HQ locations (cities, US states, or countries)"},"organization_not_locations":{"type":"array","required":false,"visibility":"user-or-llm","description":"Exclude companies whose HQ is in these locations"},"organization_num_employees_ranges":{"type":"array","required":false,"visibility":"user-or-llm","description":"Employee count ranges as \\"min,max\\" strings (e.g., [\\"1,10\\", \\"250,500\\", \\"10000,20000\\"])"},"q_organization_keyword_tags":{"type":"array","required":false,"visibility":"user-or-llm","description":"Industry or keyword tags"},"q_organization_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Organization name to search for (e.g., \\"Acme\\", \\"TechCorp\\")"},"organization_ids":{"type":"array","required":false,"visibility":"user-or-llm","description":"Apollo organization IDs to include (e.g., [\\"5e66b6381e05b4008c8331b8\\"])"},"q_organization_domains_list":{"type":"array","required":false,"visibility":"user-or-llm","description":"Domain names to filter by (no www. or @, up to 1,000)"},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"apollo_people_bulk_enrich":{"id":"apollo_people_bulk_enrich","name":"Apollo Bulk People Enrichment","description":"Enrich data for up to 10 people at once using Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"people":{"type":"array","required":true,"visibility":"user-or-llm","description":"Array of people to enrich (max 10)"},"reveal_personal_emails":{"type":"boolean","required":false,"visibility":"user-only","description":"Reveal personal email addresses (uses credits)"},"reveal_phone_number":{"type":"boolean","required":false,"visibility":"user-only","description":"Reveal phone numbers (uses credits, requires webhook_url)"},"webhook_url":{"type":"string","required":false,"visibility":"user-only","description":"Webhook URL for async phone number delivery (required when reveal_phone_number is true)"}},"hostedApiKey":"none"},"apollo_people_enrich":{"id":"apollo_people_enrich","name":"Apollo People Enrichment","description":"Enrich data for a single person using Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"first_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"First name of the person"},"last_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Last name of the person"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Full name of the person (alternative to first_name/last_name)"},"id":{"type":"string","required":false,"visibility":"user-or-llm","description":"Apollo ID for the person"},"hashed_email":{"type":"string","required":false,"visibility":"user-or-llm","description":"MD5 or SHA-256 hashed email"},"email":{"type":"string","required":false,"visibility":"user-or-llm","description":"Email address of the person"},"organization_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Company name where the person works"},"domain":{"type":"string","required":false,"visibility":"user-or-llm","description":"Company domain (e.g., \\"apollo.io\\", \\"acme.com\\")"},"linkedin_url":{"type":"string","required":false,"visibility":"user-or-llm","description":"LinkedIn profile URL"},"reveal_personal_emails":{"type":"boolean","required":false,"visibility":"user-only","description":"Reveal personal email addresses (uses credits)"},"reveal_phone_number":{"type":"boolean","required":false,"visibility":"user-only","description":"Reveal phone numbers (uses credits, requires webhook_url)"},"webhook_url":{"type":"string","required":false,"visibility":"user-only","description":"Webhook URL for async phone number delivery (required when reveal_phone_number is true)"}},"hostedApiKey":"none"},"apollo_people_search":{"id":"apollo_people_search","name":"Apollo People Search","description":"Search Apollo\'s database for people using demographic filters","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key"},"person_titles":{"type":"array","required":false,"visibility":"user-or-llm","description":"Job titles to search for (e.g., [\\"CEO\\", \\"VP of Sales\\"])"},"include_similar_titles":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Whether to return people with job titles similar to person_titles"},"person_locations":{"type":"array","required":false,"visibility":"user-or-llm","description":"Locations to search in (e.g., [\\"San Francisco, CA\\", \\"New York, NY\\"])"},"person_seniorities":{"type":"array","required":false,"visibility":"user-or-llm","description":"Seniority levels (one of: owner, founder, c_suite, partner, vp, head, director, manager, senior, entry, intern)"},"organization_ids":{"type":"array","required":false,"visibility":"user-or-llm","description":"Apollo organization IDs to filter by (e.g., [\\"5e66b6381e05b4008c8331b8\\"])"},"organization_names":{"type":"array","required":false,"visibility":"user-or-llm","description":"Company names to search within (legacy filter)"},"organization_locations":{"type":"array","required":false,"visibility":"user-or-llm","description":"Headquarters locations of the people\'s current employer (e.g., [\'texas\', \'tokyo\', \'spain\'])"},"q_organization_domains_list":{"type":"array","required":false,"visibility":"user-or-llm","description":"Employer domain names (e.g., [\\"apollo.io\\", \\"microsoft.com\\"]) — up to 1,000, no www. or @"},"organization_num_employees_ranges":{"type":"array","required":false,"visibility":"user-or-llm","description":"Employee count ranges for the person\'s current employer. Each entry is \\"min,max\\" (e.g., [\\"1,10\\", \\"250,500\\", \\"10000,20000\\"])"},"contact_email_status":{"type":"array","required":false,"visibility":"user-or-llm","description":"Email statuses to filter by: \\"verified\\", \\"unverified\\", \\"likely to engage\\", \\"unavailable\\""},"q_keywords":{"type":"string","required":false,"visibility":"user-or-llm","description":"Keywords to search for"},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination, default 1 (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, default 25, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"apollo_sequence_add_contacts":{"id":"apollo_sequence_add_contacts","name":"Apollo Add Contacts to Sequence","description":"Add contacts to an Apollo sequence","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"sequence_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the sequence to add contacts to (e.g., \\"seq_abc123\\")"},"contact_ids":{"type":"array","required":false,"visibility":"user-or-llm","description":"Array of contact IDs to add to the sequence (e.g., [\\"con_abc123\\", \\"con_def456\\"]). Either contact_ids or label_names must be provided."},"label_names":{"type":"array","required":false,"visibility":"user-or-llm","description":"Array of label names to identify contacts to add to the sequence. Either contact_ids or label_names must be provided."},"send_email_from_email_account_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the email account to send from. Use the Get Email Accounts operation to look this up."},"send_email_from_email_address":{"type":"string","required":false,"visibility":"user-only","description":"Specific email address to send from within the email account."},"sequence_no_email":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts even if they have no email address"},"sequence_unverified_email":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts with unverified email addresses"},"sequence_job_change":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts who recently changed jobs"},"sequence_active_in_other_campaigns":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts active in other campaigns"},"sequence_finished_in_other_campaigns":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts who finished other campaigns"},"sequence_same_company_in_same_campaign":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts even if others from the same company are in the sequence"},"contacts_without_ownership_permission":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts without ownership permission"},"add_if_in_queue":{"type":"boolean","required":false,"visibility":"user-only","description":"Add contacts even if they are in the queue"},"contact_verification_skipped":{"type":"boolean","required":false,"visibility":"user-only","description":"Skip contact verification when adding"},"user_id":{"type":"string","required":false,"visibility":"user-only","description":"ID of the user performing the action"},"status":{"type":"string","required":false,"visibility":"user-only","description":"Initial status for added contacts: \\"active\\" or \\"paused\\""},"auto_unpause_at":{"type":"string","required":false,"visibility":"user-only","description":"ISO 8601 datetime to automatically unpause contacts"}},"hostedApiKey":"none"},"apollo_sequence_search":{"id":"apollo_sequence_search","name":"Apollo Search Sequences","description":"Search for sequences/campaigns in your team\'s Apollo account (master key required)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"q_name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Search sequences by name (e.g., \\"Outbound Q1\\", \\"Follow-up\\")"},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"apollo_task_create":{"id":"apollo_task_create","name":"Apollo Create Task","description":"Create one or more tasks in Apollo (one task per contact_id, master key required)","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"user_id":{"type":"string","required":true,"visibility":"user-or-llm","description":"ID of the Apollo user the task is assigned to"},"contact_ids":{"type":"array","required":true,"visibility":"user-or-llm","description":"Array of contact IDs. One task is created per contact."},"priority":{"type":"string","required":false,"visibility":"user-or-llm","description":"Task priority: \\"high\\", \\"medium\\", or \\"low\\" (defaults to \\"medium\\")"},"due_at":{"type":"string","required":true,"visibility":"user-or-llm","description":"Due date/time in ISO 8601 format (e.g., \\"2024-12-31T23:59:59Z\\")"},"type":{"type":"string","required":true,"visibility":"user-or-llm","description":"Task type: \\"call\\", \\"outreach_manual_email\\", \\"linkedin_step_connect\\", \\"linkedin_step_message\\", \\"linkedin_step_view_profile\\", \\"linkedin_step_interact_post\\", or \\"action_item\\""},"status":{"type":"string","required":true,"visibility":"user-or-llm","description":"Task status: \\"scheduled\\", \\"completed\\", or \\"skipped\\""},"note":{"type":"string","required":false,"visibility":"user-or-llm","description":"Free-form note providing context for the task"}},"hostedApiKey":"none"},"apollo_task_search":{"id":"apollo_task_search","name":"Apollo Search Tasks","description":"Search for tasks in Apollo","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Apollo API key (master key required)"},"sort_by_field":{"type":"string","required":false,"visibility":"user-or-llm","description":"Sort field: \\"task_due_at\\" or \\"task_priority\\""},"open_factor_names":{"type":"array","required":false,"visibility":"user-or-llm","description":"Filter by status. Common values: [\\"task_types\\"] for open tasks, [\\"task_completed_at\\"] for completed tasks."},"page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Page number for pagination (e.g., 1, 2, 3)"},"per_page":{"type":"number","required":false,"visibility":"user-or-llm","description":"Results per page, max 100 (e.g., 25, 50, 100)"}},"hostedApiKey":"none"},"appconfig_create_application":{"id":"appconfig_create_application","name":"AppConfig Create Application","description":"Create an application in AWS AppConfig","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the application to create"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"Description of the application"}},"hostedApiKey":"none"},"appconfig_create_configuration_profile":{"id":"appconfig_create_configuration_profile","name":"AppConfig Create Configuration Profile","description":"Create a configuration profile in an AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID to create the configuration profile in"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the configuration profile"},"locationUri":{"type":"string","required":true,"visibility":"user-or-llm","description":"Where the configuration is stored. Use \\"hosted\\" for AppConfig-hosted configurations, or an SSM/S3 URI"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"Description of the configuration profile"},"retrievalRoleArn":{"type":"string","required":false,"visibility":"user-or-llm","description":"ARN of an IAM role to retrieve the configuration (required for non-hosted URIs)"},"type":{"type":"string","required":false,"visibility":"user-or-llm","description":"Profile type: AWS.Freeform (default) or AWS.AppConfig.FeatureFlags"}},"hostedApiKey":"none"},"appconfig_create_environment":{"id":"appconfig_create_environment","name":"AppConfig Create Environment","description":"Create an environment for an AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID to create the environment in"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the environment to create"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"Description of the environment"}},"hostedApiKey":"none"},"appconfig_create_hosted_configuration_version":{"id":"appconfig_create_hosted_configuration_version","name":"AppConfig Create Hosted Configuration Version","description":"Create a new hosted configuration version for an AppConfig configuration profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to add the version to"},"content":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration content (e.g., a JSON or YAML document)"},"contentType":{"type":"string","required":true,"visibility":"user-or-llm","description":"Content type of the configuration (e.g., application/json, text/plain)"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"Description of the configuration version"},"latestVersionNumber":{"type":"number","required":false,"visibility":"user-or-llm","description":"The version number of the latest version, used for optimistic concurrency"},"versionLabel":{"type":"string","required":false,"visibility":"user-or-llm","description":"A user-defined label for the configuration version"}},"hostedApiKey":"none"},"appconfig_delete_application":{"id":"appconfig_delete_application","name":"AppConfig Delete Application","description":"Delete an AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID to delete"}},"hostedApiKey":"none"},"appconfig_delete_configuration_profile":{"id":"appconfig_delete_configuration_profile","name":"AppConfig Delete Configuration Profile","description":"Delete an AWS AppConfig configuration profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to delete"}},"hostedApiKey":"none"},"appconfig_delete_environment":{"id":"appconfig_delete_environment","name":"AppConfig Delete Environment","description":"Delete an AWS AppConfig environment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the environment"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID to delete"}},"hostedApiKey":"none"},"appconfig_delete_hosted_configuration_version":{"id":"appconfig_delete_hosted_configuration_version","name":"AppConfig Delete Hosted Configuration Version","description":"Delete a specific hosted configuration version from an AppConfig profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID that owns the version"},"versionNumber":{"type":"number","required":true,"visibility":"user-or-llm","description":"The version number to delete"}},"hostedApiKey":"none"},"appconfig_get_application":{"id":"appconfig_get_application","name":"AppConfig Get Application","description":"Get details about a single AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID to retrieve"}},"hostedApiKey":"none"},"appconfig_get_configuration":{"id":"appconfig_get_configuration","name":"AppConfig Get Configuration","description":"Retrieve the latest deployed configuration for an AppConfig application, environment, and profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID or name to retrieve configuration for"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID or name to retrieve configuration for"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID or name to retrieve"}},"hostedApiKey":"none"},"appconfig_get_configuration_profile":{"id":"appconfig_get_configuration_profile","name":"AppConfig Get Configuration Profile","description":"Get details about a single AWS AppConfig configuration profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to retrieve"}},"hostedApiKey":"none"},"appconfig_get_deployment":{"id":"appconfig_get_deployment","name":"AppConfig Get Deployment","description":"Get details about a specific AWS AppConfig deployment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID of the deployment"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID of the deployment"},"deploymentNumber":{"type":"number","required":true,"visibility":"user-or-llm","description":"The sequence number of the deployment"}},"hostedApiKey":"none"},"appconfig_get_environment":{"id":"appconfig_get_environment","name":"AppConfig Get Environment","description":"Get details about a single AWS AppConfig environment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the environment"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID to retrieve"}},"hostedApiKey":"none"},"appconfig_get_hosted_configuration_version":{"id":"appconfig_get_hosted_configuration_version","name":"AppConfig Get Hosted Configuration Version","description":"Retrieve a specific hosted configuration version from an AppConfig profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to read the version from"},"versionNumber":{"type":"number","required":true,"visibility":"user-or-llm","description":"The version number to retrieve"}},"hostedApiKey":"none"},"appconfig_list_applications":{"id":"appconfig_list_applications","name":"AppConfig List Applications","description":"List applications in AWS AppConfig","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"maxResults":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of applications to return (1-50)"},"nextToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token from a previous response"}},"hostedApiKey":"none"},"appconfig_list_configuration_profiles":{"id":"appconfig_list_configuration_profiles","name":"AppConfig List Configuration Profiles","description":"List configuration profiles for an AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profiles"},"maxResults":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of configuration profiles to return (1-50)"},"nextToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token from a previous response"}},"hostedApiKey":"none"},"appconfig_list_deployment_strategies":{"id":"appconfig_list_deployment_strategies","name":"AppConfig List Deployment Strategies","description":"List deployment strategies available in AWS AppConfig","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"maxResults":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of deployment strategies to return (1-50)"},"nextToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token from a previous response"}},"hostedApiKey":"none"},"appconfig_list_deployments":{"id":"appconfig_list_deployments","name":"AppConfig List Deployments","description":"List deployments for an AWS AppConfig environment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID of the deployments"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID of the deployments"},"maxResults":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of deployments to return (1-50)"},"nextToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token from a previous response"}},"hostedApiKey":"none"},"appconfig_list_environments":{"id":"appconfig_list_environments","name":"AppConfig List Environments","description":"List environments for an AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the environments"},"maxResults":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of environments to return (1-50)"},"nextToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token from a previous response"}},"hostedApiKey":"none"},"appconfig_list_hosted_configuration_versions":{"id":"appconfig_list_hosted_configuration_versions","name":"AppConfig List Hosted Configuration Versions","description":"List hosted configuration versions for an AWS AppConfig configuration profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to list versions for"},"maxResults":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of versions to return (1-50)"},"nextToken":{"type":"string","required":false,"visibility":"user-or-llm","description":"Pagination token from a previous response"}},"hostedApiKey":"none"},"appconfig_start_deployment":{"id":"appconfig_start_deployment","name":"AppConfig Start Deployment","description":"Start deploying a configuration version to an AWS AppConfig environment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID to deploy in"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID to deploy to"},"deploymentStrategyId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The deployment strategy ID to use"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to deploy"},"configurationVersion":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration version to deploy"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"Description of the deployment"}},"hostedApiKey":"none"},"appconfig_stop_deployment":{"id":"appconfig_stop_deployment","name":"AppConfig Stop Deployment","description":"Stop an in-progress AWS AppConfig deployment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID of the deployment"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID of the deployment"},"deploymentNumber":{"type":"number","required":true,"visibility":"user-or-llm","description":"The sequence number of the deployment to stop"}},"hostedApiKey":"none"},"appconfig_update_application":{"id":"appconfig_update_application","name":"AppConfig Update Application","description":"Update the name or description of an AWS AppConfig application","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID to update"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"New name for the application"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"New description for the application"}},"hostedApiKey":"none"},"appconfig_update_configuration_profile":{"id":"appconfig_update_configuration_profile","name":"AppConfig Update Configuration Profile","description":"Update the name, description, or retrieval role of an AppConfig configuration profile","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the configuration profile"},"configurationProfileId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The configuration profile ID to update"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"New name for the configuration profile"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"New description for the configuration profile"},"retrievalRoleArn":{"type":"string","required":false,"visibility":"user-or-llm","description":"New ARN of the IAM role used to retrieve the configuration"}},"hostedApiKey":"none"},"appconfig_update_environment":{"id":"appconfig_update_environment","name":"AppConfig Update Environment","description":"Update the name or description of an AWS AppConfig environment","version":"1.0","params":{"region":{"type":"string","required":true,"visibility":"user-only","description":"AWS region (e.g., us-east-1)"},"accessKeyId":{"type":"string","required":true,"visibility":"user-only","description":"AWS access key ID"},"secretAccessKey":{"type":"string","required":true,"visibility":"user-only","description":"AWS secret access key"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The application ID that owns the environment"},"environmentId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The environment ID to update"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"New name for the environment"},"description":{"type":"string","required":false,"visibility":"user-or-llm","description":"New description for the environment"}},"hostedApiKey":"none"},"arxiv_get_author_papers":{"id":"arxiv_get_author_papers","name":"ArXiv Get Author Papers","description":"Search for papers by a specific author on ArXiv.","version":"1.0.0","params":{"authorName":{"type":"string","required":true,"visibility":"user-or-llm","description":"Author name to search for"},"maxResults":{"type":"number","required":false,"visibility":"user-only","description":"Maximum number of results to return (default: 10, max: 2000)"}},"hostedApiKey":"none"},"arxiv_get_paper":{"id":"arxiv_get_paper","name":"ArXiv Get Paper","description":"Get detailed information about a specific ArXiv paper by its ID.","version":"1.0.0","params":{"paperId":{"type":"string","required":true,"visibility":"user-or-llm","description":"ArXiv paper ID (e.g., \\"1706.03762\\")"}},"hostedApiKey":"none"},"arxiv_search":{"id":"arxiv_search","name":"ArXiv Search","description":"Search for academic papers on ArXiv by keywords, authors, titles, or other fields.","version":"1.0.0","params":{"searchQuery":{"type":"string","required":true,"visibility":"user-or-llm","description":"The search query to execute"},"searchField":{"type":"string","required":false,"visibility":"user-only","description":"Field to search in: all, ti (title), au (author), abs (abstract), co (comment), jr (journal), cat (category), rn (report number)"},"maxResults":{"type":"number","required":false,"visibility":"user-only","description":"Maximum number of results to return (default: 10, max: 2000)"},"sortBy":{"type":"string","required":false,"visibility":"user-only","description":"Sort by: relevance, lastUpdatedDate, submittedDate (default: relevance)"},"sortOrder":{"type":"string","required":false,"visibility":"user-only","description":"Sort order: ascending, descending (default: descending)"}},"hostedApiKey":"none"},"asana_add_comment":{"id":"asana_add_comment","name":"Asana Add Comment","description":"Add a comment (story) to an Asana task","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"taskGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana task GID (numeric string)"},"text":{"type":"string","required":true,"visibility":"user-or-llm","description":"The text content of the comment"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_add_followers":{"id":"asana_add_followers","name":"Asana Add Followers","description":"Add one or more followers to an Asana task","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"taskGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"GID of the Asana task (numeric string)"},"followers":{"type":"array","required":true,"visibility":"user-or-llm","description":"Array of user GIDs to add as followers to the task"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_create_project":{"id":"asana_create_project","name":"Asana Create Project","description":"Create a new project in an Asana workspace","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"workspace":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana workspace GID (numeric string) where the project will be created"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the project"},"notes":{"type":"string","required":false,"visibility":"user-or-llm","description":"Notes or description for the project"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_create_section":{"id":"asana_create_section","name":"Asana Create Section","description":"Create a new section in an Asana project","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"projectGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"GID of the Asana project (numeric string) to add the section to"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the section"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_create_subtask":{"id":"asana_create_subtask","name":"Asana Create Subtask","description":"Create a subtask under an existing Asana task","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"taskGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"GID of the parent Asana task (numeric string)"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the subtask"},"notes":{"type":"string","required":false,"visibility":"user-or-llm","description":"Notes or description for the subtask"},"assignee":{"type":"string","required":false,"visibility":"user-or-llm","description":"User GID to assign the subtask to"},"due_on":{"type":"string","required":false,"visibility":"user-or-llm","description":"Due date in YYYY-MM-DD format"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_create_task":{"id":"asana_create_task","name":"Asana Create Task","description":"Create a new task in Asana","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"workspace":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana workspace GID (numeric string) where the task will be created"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"Name of the task"},"notes":{"type":"string","required":false,"visibility":"user-or-llm","description":"Notes or description for the task"},"assignee":{"type":"string","required":false,"visibility":"user-or-llm","description":"User GID to assign the task to"},"due_on":{"type":"string","required":false,"visibility":"user-or-llm","description":"Due date in YYYY-MM-DD format"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_delete_task":{"id":"asana_delete_task","name":"Asana Delete Task","description":"Delete an Asana task by its GID (moves it to the trash)","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"taskGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"GID of the Asana task to delete (numeric string)"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_get_project":{"id":"asana_get_project","name":"Asana Get Project","description":"Retrieve a single Asana project by its GID","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"projectGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana project GID (numeric string) to retrieve"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_get_projects":{"id":"asana_get_projects","name":"Asana Get Projects","description":"Retrieve all projects from an Asana workspace","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"workspace":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana workspace GID (numeric string) to retrieve projects from"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_get_task":{"id":"asana_get_task","name":"Asana Get Task","description":"Retrieve a single task by GID or get multiple tasks with filters","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"taskGid":{"type":"string","required":false,"visibility":"user-or-llm","description":"The globally unique identifier (GID) of the task. If not provided, will get multiple tasks."},"workspace":{"type":"string","required":false,"visibility":"user-or-llm","description":"Asana workspace GID (numeric string) to filter tasks (required when not using taskGid)"},"project":{"type":"string","required":false,"visibility":"user-or-llm","description":"Asana project GID (numeric string) to filter tasks"},"limit":{"type":"number","required":false,"visibility":"user-or-llm","description":"Maximum number of tasks to return (default: 50)"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_list_sections":{"id":"asana_list_sections","name":"Asana List Sections","description":"List all sections in an Asana project","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"projectGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"GID of the Asana project (numeric string) to list sections from"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_list_workspaces":{"id":"asana_list_workspaces","name":"Asana List Workspaces","description":"List all Asana workspaces and organizations the authenticated user belongs to","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_search_tasks":{"id":"asana_search_tasks","name":"Asana Search Tasks","description":"Search for tasks in an Asana workspace","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"workspace":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana workspace GID (numeric string) to search tasks in"},"text":{"type":"string","required":false,"visibility":"user-or-llm","description":"Text to search for in task names"},"assignee":{"type":"string","required":false,"visibility":"user-or-llm","description":"Filter tasks by assignee user GID"},"projects":{"type":"array","required":false,"visibility":"user-or-llm","description":"Array of Asana project GIDs (numeric strings) to filter tasks by"},"completed":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Filter by completion status"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"asana_update_task":{"id":"asana_update_task","name":"Asana Update Task","description":"Update an existing task in Asana","version":"1.0.0","params":{"accessToken":{"type":"string","required":true,"visibility":"hidden","description":"OAuth access token for Asana"},"taskGid":{"type":"string","required":true,"visibility":"user-or-llm","description":"Asana task GID (numeric string) of the task to update"},"name":{"type":"string","required":false,"visibility":"user-or-llm","description":"Updated name for the task"},"notes":{"type":"string","required":false,"visibility":"user-or-llm","description":"Updated notes or description for the task"},"assignee":{"type":"string","required":false,"visibility":"user-or-llm","description":"Updated assignee user GID"},"completed":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Mark task as completed or not completed"},"due_on":{"type":"string","required":false,"visibility":"user-or-llm","description":"Updated due date in YYYY-MM-DD format"}},"oauth":{"required":true,"provider":"asana"},"hostedApiKey":"none"},"ashby_add_candidate_tag":{"id":"ashby_add_candidate_tag","name":"Ashby Add Candidate Tag","description":"Adds a tag to a candidate in Ashby and returns the updated candidate.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"candidateId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the candidate to add the tag to"},"tagId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the tag to add"}},"hostedApiKey":"none"},"ashby_anonymize_candidate":{"id":"ashby_anonymize_candidate","name":"Ashby Anonymize Candidate","description":"Strips personally identifiable information from a candidate in Ashby. This does not delete the candidate - the record and its applications remain, with the PII removed. Ashby exposes no candidate deletion endpoint; true deletion is UI-only, restricted by role, and limited to a 10-day window. Requires the candidatesWrite permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"candidateId":{"type":"string","required":true,"visibility":"user-or-llm","description":"UUID of the candidate to anonymize"}},"hostedApiKey":"none"},"ashby_change_application_source":{"id":"ashby_change_application_source","name":"Ashby Change Application Source","description":"Changes the source attributed to an existing application, so programmatically created applications report correctly on the recruiting side. Requires the candidatesWrite permission.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"UUID of the application whose source should change"},"sourceId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the source to attribute the application to, as returned by List Sources. Omit only when unsetSource is true."},"unsetSource":{"type":"boolean","required":false,"visibility":"user-or-llm","description":"Set true to deliberately clear the application source. Required to unset, so that a missing or empty sourceId cannot wipe attribution by accident."}},"hostedApiKey":"none"},"ashby_change_application_stage":{"id":"ashby_change_application_stage","name":"Ashby Change Application Stage","description":"Moves an application to a different interview stage. Requires an archive reason when moving to an Archived stage.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"applicationId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the application to update the stage of"},"interviewStageId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the interview stage to move the application to"},"archiveReasonId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Archive reason UUID. Required when moving to an Archived stage, ignored otherwise"},"archiveEmail":{"type":"json","required":false,"visibility":"user-or-llm","description":"Archive email configuration with communicationTemplateId and optional sendAt ISO 8601 timestamp. Pass null or omit to send no archive email."}},"hostedApiKey":"none"},"ashby_create_application":{"id":"ashby_create_application","name":"Ashby Create Application","description":"Creates a new application for a candidate on a job. Optionally specify interview plan, stage, source, and credited user.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"candidateId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the candidate to consider for the job"},"jobId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the job to consider the candidate for"},"interviewPlanId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the interview plan to use (defaults to the job default plan)"},"interviewStageId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the interview stage to place the application in, or FirstPreInterviewScreen (defaults to the first Lead stage)"},"sourceId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the source to set on the application"},"creditedToUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the user the application is credited to"},"createdAt":{"type":"string","required":false,"visibility":"user-or-llm","description":"ISO 8601 timestamp to set as the application creation date (defaults to now)"},"applicationHistory":{"type":"json","required":false,"visibility":"user-or-llm","description":"Optional documented application history entries to create with the application"}},"hostedApiKey":"none"},"ashby_create_candidate":{"id":"ashby_create_candidate","name":"Ashby Create Candidate","description":"Creates a new candidate record in Ashby.","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"name":{"type":"string","required":true,"visibility":"user-or-llm","description":"The candidate full name"},"email":{"type":"string","required":false,"visibility":"user-or-llm","description":"Primary email address for the candidate"},"phoneNumber":{"type":"string","required":false,"visibility":"user-or-llm","description":"Primary phone number for the candidate"},"linkedInUrl":{"type":"string","required":false,"visibility":"user-or-llm","description":"LinkedIn profile URL"},"githubUrl":{"type":"string","required":false,"visibility":"user-or-llm","description":"GitHub profile URL"},"website":{"type":"string","required":false,"visibility":"user-or-llm","description":"Personal website URL"},"sourceId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the source to attribute the candidate to"},"creditedToUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"UUID of the Ashby user to credit with sourcing this candidate"},"createdAt":{"type":"string","required":false,"visibility":"user-or-llm","description":"Backdated creation timestamp in ISO 8601 (e.g. 2024-01-01T00:00:00Z). Defaults to now."},"alternateEmailAddresses":{"type":"json","required":false,"visibility":"user-or-llm","description":"Array of additional email address strings to add to the candidate, e.g. [\\"a@x.com\\",\\"b@y.com\\"]"},"location":{"type":"json","required":false,"visibility":"user-or-llm","description":"Candidate location object with optional city, region, and country"}},"hostedApiKey":"none"},"ashby_create_note":{"id":"ashby_create_note","name":"Ashby Create Note","description":"Creates a note on a candidate in Ashby. Supports plain text and HTML content (bold, italic, underline, links, lists, code).","version":"1.0.0","params":{"apiKey":{"type":"string","required":true,"visibility":"user-only","description":"Ashby API Key"},"onBehalfOfUserId":{"type":"string","required":false,"visibility":"user-or-llm","description":"Active Ashby user UUID to attribute this mutation to; the API key must permit on-behalf-of calls"},"candidateId":{"type":"string","required":true,"visibility":"user-or-llm","description":"The UUID of the candidate to add the note to"},"note":{"type":"string","required":true,"visibility":"user-or-llm","description":"The note content. If noteType is text/html, supports: , , , ,