{"files":{"SKILL.md":"---\nname: n8n-public-api\ndescription: \"n8n Public API skill. Use when working with n8n Public for audit, credentials, executions. Covers 60 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# n8n Public API\nAPI version: 1.1.1\n\n## Auth\nApiKey X-N8N-API-KEY in header\n\n## Base URL\n/api/v1\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /credentials -- list credentials\n3. POST /audit -- create first audit\n\n## Endpoints\n60 endpoints across 11 groups. See references/api-spec.lap for full details.\n\n### Audit\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /audit | Generate an audit |\n\n### Credentials\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /credentials | List credentials |\n| POST | /credentials | Create a credential |\n| PATCH | /credentials/{id} | Update credential by ID |\n| DELETE | /credentials/{id} | Delete credential by ID |\n| GET | /credentials/schema/{credentialTypeName} | Show credential data schema |\n| PUT | /credentials/{id}/transfer | Transfer a credential to another project. |\n\n### Executions\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /executions | Retrieve all executions |\n| GET | /executions/{id} | Retrieve an execution |\n| DELETE | /executions/{id} | Delete an execution |\n| POST | /executions/{id}/retry | Retry an execution |\n| POST | /executions/{id}/stop | Stop an execution |\n| POST | /executions/stop | Stop multiple executions |\n| GET | /executions/{id}/tags | Get execution tags |\n| PUT | /executions/{id}/tags | Update tags of an execution |\n\n### Tags\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /tags | Create a tag |\n| GET | /tags | Retrieve all tags |\n| GET | /tags/{id} | Retrieves a tag |\n| DELETE | /tags/{id} | Delete a tag |\n| PUT | /tags/{id} | Update a tag |\n\n### Workflows\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /workflows | Create a workflow |\n| GET | /workflows | Retrieve all workflows |\n| GET | /workflows/{id} | Retrieve a workflow |\n| DELETE | /workflows/{id} | Delete a workflow |\n| PUT | /workflows/{id} | Update a workflow |\n| GET | /workflows/{id}/{versionId} | Retrieves a specific version of a workflow |\n| POST | /workflows/{id}/activate | Publish a workflow |\n| POST | /workflows/{id}/deactivate | Deactivate a workflow |\n| PUT | /workflows/{id}/transfer | Transfer a workflow to another project |\n| GET | /workflows/{id}/tags | Get workflow tags |\n| PUT | /workflows/{id}/tags | Update tags of a workflow |\n\n### Users\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /users | Retrieve all users |\n| POST | /users | Create multiple users |\n| GET | /users/{id} | Get user by ID/Email |\n| DELETE | /users/{id} | Delete a user |\n| PATCH | /users/{id}/role | Change a user's global role |\n\n### Source-control\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /source-control/pull | Pull changes from the remote repository |\n\n### Variables\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /variables | Create a variable |\n| GET | /variables | Retrieve variables |\n| DELETE | /variables/{id} | Delete a variable |\n| PUT | /variables/{id} | Update a variable |\n\n### Data-tables\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /data-tables | List all data tables |\n| POST | /data-tables | Create a new data table |\n| GET | /data-tables/{dataTableId} | Get a data table |\n| PATCH | /data-tables/{dataTableId} | Update a data table |\n| DELETE | /data-tables/{dataTableId} | Delete a data table |\n| GET | /data-tables/{dataTableId}/rows | Retrieve rows from a data table |\n| POST | /data-tables/{dataTableId}/rows | Insert rows into a data table |\n| PATCH | /data-tables/{dataTableId}/rows/update | Update rows in a data table |\n| POST | /data-tables/{dataTableId}/rows/upsert | Upsert a row in a data table |\n| DELETE | /data-tables/{dataTableId}/rows/delete | Delete rows from a data table |\n\n### Projects\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /projects | Create a project |\n| GET | /projects | Retrieve projects |\n| DELETE | /projects/{projectId} | Delete a project |\n| PUT | /projects/{projectId} | Update a project |\n| GET | /projects/{projectId}/users | List project members |\n| POST | /projects/{projectId}/users | Add one or more users to a project |\n| DELETE | /projects/{projectId}/users/{userId} | Delete a user from a project |\n| PATCH | /projects/{projectId}/users/{userId} | Change a user's role in a project |\n\n### Discover\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /discover | Discover available API capabilities |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Create a audit?\" -> POST /audit\n- \"List all credentials?\" -> GET /credentials\n- \"Create a credential?\" -> POST /credentials\n- \"Partially update a credential?\" -> PATCH /credentials/{id}\n- \"Delete a credential?\" -> DELETE /credentials/{id}\n- \"Get schema details?\" -> GET /credentials/schema/{credentialTypeName}\n- \"List all executions?\" -> GET /executions\n- \"Get execution details?\" -> GET /executions/{id}\n- \"Delete a execution?\" -> DELETE /executions/{id}\n- \"Create a retry?\" -> POST /executions/{id}/retry\n- \"Create a stop?\" -> POST /executions/{id}/stop\n- \"List all tags?\" -> GET /executions/{id}/tags\n- \"Create a tag?\" -> POST /tags\n- \"Get tag details?\" -> GET /tags/{id}\n- \"Delete a tag?\" -> DELETE /tags/{id}\n- \"Update a tag?\" -> PUT /tags/{id}\n- \"Create a workflow?\" -> POST /workflows\n- \"List all workflows?\" -> GET /workflows\n- \"Get workflow details?\" -> GET /workflows/{id}\n- \"Delete a workflow?\" -> DELETE /workflows/{id}\n- \"Update a workflow?\" -> PUT /workflows/{id}\n- \"Create a activate?\" -> POST /workflows/{id}/activate\n- \"Create a deactivate?\" -> POST /workflows/{id}/deactivate\n- \"List all users?\" -> GET /users\n- \"Create a user?\" -> POST /users\n- \"Get user details?\" -> GET /users/{id}\n- \"Delete a user?\" -> DELETE /users/{id}\n- \"Create a pull?\" -> POST /source-control/pull\n- \"Create a variable?\" -> POST /variables\n- \"List all variables?\" -> GET /variables\n- \"Delete a variable?\" -> DELETE /variables/{id}\n- \"Update a variable?\" -> PUT /variables/{id}\n- \"List all data-tables?\" -> GET /data-tables\n- \"Create a data-table?\" -> POST /data-tables\n- \"Get data-table details?\" -> GET /data-tables/{dataTableId}\n- \"Partially update a data-table?\" -> PATCH /data-tables/{dataTableId}\n- \"Delete a data-table?\" -> DELETE /data-tables/{dataTableId}\n- \"Search rows?\" -> GET /data-tables/{dataTableId}/rows\n- \"Create a row?\" -> POST /data-tables/{dataTableId}/rows\n- \"Create a upsert?\" -> POST /data-tables/{dataTableId}/rows/upsert\n- \"Create a project?\" -> POST /projects\n- \"List all projects?\" -> GET /projects\n- \"Delete a project?\" -> DELETE /projects/{projectId}\n- \"Update a project?\" -> PUT /projects/{projectId}\n- \"Partially update a user?\" -> PATCH /projects/{projectId}/users/{userId}\n- \"List all discover?\" -> GET /discover\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api n8n Public API\n@base /api/v1\n@version 1.1.1\n@auth ApiKey X-N8N-API-KEY in header\n@endpoints 60\n@hint download_for_search\n@toc audit(1), credentials(6), executions(8), tags(5), workflows(11), users(5), source-control(1), variables(4), data-tables(10), projects(8), discover(1)\n\n@group audit\n@endpoint POST /audit\n@desc Generate an audit\n@optional {additionalOptions: map{daysAbandonedWorkflow: int, categories: [str]}}\n@returns(200) {Credentials Risk Report: map, Database Risk Report: map, Filesystem Risk Report: map, Nodes Risk Report: map, Instance Risk Report: map} # Operation successful.\n@errors {401: Unauthorized, 500: Internal server error.}\n\n@endgroup\n\n@group credentials\n@endpoint GET /credentials\n@desc List credentials\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail.}\n@returns(200) {data: [any], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint POST /credentials\n@desc Create a credential\n@required {name: str, type: str, data: map}\n@optional {id: str, isResolvable: bool # Whether this credential has resolvable fields, createdAt: str(date-time), updatedAt: str(date-time)}\n@returns(200) {id: str, name: str, type: str, createdAt: str(date-time), updatedAt: str(date-time)} # Operation successful.\n@errors {400: Bad request - invalid credential type or data., 401: Unauthorized, 415: Unsupported media type.}\n\n@endpoint PATCH /credentials/{id}\n@desc Update credential by ID\n@required {id: str # The credential ID that needs to be updated}\n@optional {name: str # The name of the credential, type: str # The credential type. If changing type, data must also be provided., data: map # The credential data. Required when changing credential type., isGlobal: bool # Whether this credential is available globally, isResolvable: bool # Whether this credential has resolvable fields, isPartialData: bool=false # If true, unredacts and merges existing credential data with the provided data. If false, replaces the entire data object.}\n@returns(200) {id: str, name: str, type: str, createdAt: str(date-time), updatedAt: str(date-time)} # Operation successful.\n@errors {400: Bad request - invalid credential type or data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint DELETE /credentials/{id}\n@desc Delete credential by ID\n@required {id: str # The credential ID that needs to be deleted}\n@returns(200) {id: str, name: str, type: str, data: map, isResolvable: bool, createdAt: str(date-time), updatedAt: str(date-time)} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint GET /credentials/schema/{credentialTypeName}\n@desc Show credential data schema\n@required {credentialTypeName: str # The credential type name that you want to get the schema for}\n@returns(200) Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PUT /credentials/{id}/transfer\n@desc Transfer a credential to another project.\n@required {id: str # The ID of the credential., destinationProjectId: str # The ID of the project to transfer the credential to.}\n@returns(200) Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endgroup\n\n@group executions\n@endpoint GET /executions\n@desc Retrieve all executions\n@optional {includeData: bool # Whether or not to include the execution's detailed data., status: str(canceled/crashed/error/new/running/success/unknown/waiting) # Status to filter the executions by., workflowId: str # Workflow to filter the executions by., projectId: str, limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail.}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint GET /executions/{id}\n@desc Retrieve an execution\n@required {id: num # The ID of the execution.}\n@optional {includeData: bool # Whether or not to include the execution's detailed data.}\n@returns(200) {id: num, data: map, finished: bool, mode: str, retryOf: num?, retrySuccessId: num?, startedAt: str(date-time), stoppedAt: str(date-time)?, workflowId: num, waitTill: str(date-time)?, customData: map, status: str} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint DELETE /executions/{id}\n@desc Delete an execution\n@required {id: num # The ID of the execution.}\n@returns(200) {id: num, data: map, finished: bool, mode: str, retryOf: num?, retrySuccessId: num?, startedAt: str(date-time), stoppedAt: str(date-time)?, workflowId: num, waitTill: str(date-time)?, customData: map, status: str} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint POST /executions/{id}/retry\n@desc Retry an execution\n@required {id: num # The ID of the execution.}\n@optional {loadWorkflow: bool # Whether to load the currently saved workflow to execute instead of the one saved at the time of the execution. If set to true, it will retry with the latest version of the workflow.}\n@returns(200) {id: num, data: map, finished: bool, mode: str, retryOf: num?, retrySuccessId: num?, startedAt: str(date-time), stoppedAt: str(date-time)?, workflowId: num, waitTill: str(date-time)?, customData: map, status: str} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found., 409: Conflict}\n\n@endpoint POST /executions/{id}/stop\n@desc Stop an execution\n@required {id: num # The ID of the execution.}\n@returns(200) {id: num, data: map, finished: bool, mode: str, retryOf: num?, retrySuccessId: num?, startedAt: str(date-time), stoppedAt: str(date-time)?, workflowId: num, waitTill: str(date-time)?, customData: map, status: str} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint POST /executions/stop\n@desc Stop multiple executions\n@required {status: [str] # Array of execution statuses to stop. Must include at least one status.}\n@optional {workflowId: str # Optional workflow ID to filter executions. If not provided, will stop executions across all accessible workflows., startedAfter: str(date-time) # Only stop executions that started after this time., startedBefore: str(date-time) # Only stop executions that started before this time.}\n@returns(200) {stopped: num} # Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized}\n\n@endpoint GET /executions/{id}/tags\n@desc Get execution tags\n@required {id: num # The ID of the execution.}\n@returns(200) List of annotation tags\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PUT /executions/{id}/tags\n@desc Update tags of an execution\n@required {id: num # The ID of the execution.}\n@returns(200) List of tags after updating\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endgroup\n\n@group tags\n@endpoint POST /tags\n@desc Create a tag\n@required {name: str}\n@optional {id: str, createdAt: str(date-time), updatedAt: str(date-time)}\n@returns(201) {id: str, name: str, createdAt: str(date-time), updatedAt: str(date-time)} # A tag object\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 409: Conflict}\n\n@endpoint GET /tags\n@desc Retrieve all tags\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail.}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint GET /tags/{id}\n@desc Retrieves a tag\n@required {id: str # The ID of the tag.}\n@returns(200) {id: str, name: str, createdAt: str(date-time), updatedAt: str(date-time)} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint DELETE /tags/{id}\n@desc Delete a tag\n@required {id: str # The ID of the tag.}\n@returns(200) {id: str, name: str, createdAt: str(date-time), updatedAt: str(date-time)} # Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint PUT /tags/{id}\n@desc Update a tag\n@required {id: str # The ID of the tag., name: str}\n@optional {id: str, createdAt: str(date-time), updatedAt: str(date-time)}\n@returns(200) {id: str, name: str, createdAt: str(date-time), updatedAt: str(date-time)} # Tag object\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found., 409: Conflict}\n\n@endgroup\n\n@group workflows\n@endpoint POST /workflows\n@desc Create a workflow\n@required {name: str, nodes: [map{id: str, name: str, webhookId: str, disabled: bool, notesInFlow: bool, notes: str, type: str, typeVersion: num, executeOnce: bool, alwaysOutputData: bool, retryOnFail: bool, maxTries: num, waitBetweenTries: num, continueOnFail: bool, onError: str, position: [num], parameters: map, credentials: map, createdAt: str(date-time), updatedAt: str(date-time)}], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}}\n@optional {id: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str # Current version identifier used for optimistic locking, triggerCount: int # Number of active trigger nodes in the workflow, staticData: any, pinData: map # Pinned sample data for nodes, keyed by node name, meta: map{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool} # Workflow metadata such as template information, tags: [map{id: str, name!: str, createdAt: str(date-time), updatedAt: str(date-time)}], shared: [map{role: str, workflowId: str, projectId: str, project: map, createdAt: str(date-time), updatedAt: str(date-time)}], activeVersion: map{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}}\n@returns(200) {id: str, name: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str, triggerCount: int, nodes: [map], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}, staticData: any, pinData: map?, meta: map?{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool}, tags: [map], shared: [map], activeVersion: map?{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}} # A workflow object\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized}\n\n@endpoint GET /workflows\n@desc Retrieve all workflows\n@optional {active: bool, tags: str, name: str, projectId: str, excludePinnedData: bool # Set this to avoid retrieving pinned data, limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail.}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint GET /workflows/{id}\n@desc Retrieve a workflow\n@required {id: str # The ID of the workflow.}\n@optional {excludePinnedData: bool # Set this to avoid retrieving pinned data}\n@returns(200) {id: str, name: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str, triggerCount: int, nodes: [map], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}, staticData: any, pinData: map?, meta: map?{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool}, tags: [map], shared: [map], activeVersion: map?{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint DELETE /workflows/{id}\n@desc Delete a workflow\n@required {id: str # The ID of the workflow.}\n@returns(200) {id: str, name: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str, triggerCount: int, nodes: [map], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}, staticData: any, pinData: map?, meta: map?{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool}, tags: [map], shared: [map], activeVersion: map?{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PUT /workflows/{id}\n@desc Update a workflow\n@required {id: str # The ID of the workflow., name: str, nodes: [map{id: str, name: str, webhookId: str, disabled: bool, notesInFlow: bool, notes: str, type: str, typeVersion: num, executeOnce: bool, alwaysOutputData: bool, retryOnFail: bool, maxTries: num, waitBetweenTries: num, continueOnFail: bool, onError: str, position: [num], parameters: map, credentials: map, createdAt: str(date-time), updatedAt: str(date-time)}], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}}\n@optional {id: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str # Current version identifier used for optimistic locking, triggerCount: int # Number of active trigger nodes in the workflow, staticData: any, pinData: map # Pinned sample data for nodes, keyed by node name, meta: map{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool} # Workflow metadata such as template information, tags: [map{id: str, name!: str, createdAt: str(date-time), updatedAt: str(date-time)}], shared: [map{role: str, workflowId: str, projectId: str, project: map, createdAt: str(date-time), updatedAt: str(date-time)}], activeVersion: map{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}}\n@returns(200) {id: str, name: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str, triggerCount: int, nodes: [map], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}, staticData: any, pinData: map?, meta: map?{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool}, tags: [map], shared: [map], activeVersion: map?{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}} # Workflow object\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint GET /workflows/{id}/{versionId}\n@desc Retrieves a specific version of a workflow\n@required {id: str # The ID of the workflow., versionId: str # The version ID to retrieve}\n@returns(200) {versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, name: str?, description: str?, createdAt: str(date-time), updatedAt: str(date-time)} # Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint POST /workflows/{id}/activate\n@desc Publish a workflow\n@required {id: str # The ID of the workflow.}\n@optional {versionId: str # The specific version ID to activate or publish. If not provided, the latest version is used., name: str # Optional name for the workflow version during activation., description: str # Optional description for the workflow version during activation.}\n@returns(200) {id: str, name: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str, triggerCount: int, nodes: [map], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}, staticData: any, pinData: map?, meta: map?{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool}, tags: [map], shared: [map], activeVersion: map?{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}} # Workflow object\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint POST /workflows/{id}/deactivate\n@desc Deactivate a workflow\n@required {id: str # The ID of the workflow.}\n@returns(200) {id: str, name: str, active: bool, createdAt: str(date-time), updatedAt: str(date-time), isArchived: bool, versionId: str, triggerCount: int, nodes: [map], connections: map, settings: map{saveExecutionProgress: bool, saveManualExecutions: bool, saveDataErrorExecution: str, saveDataSuccessExecution: str, executionTimeout: num, errorWorkflow: str, timezone: str, executionOrder: str, callerPolicy: str, callerIds: str, timeSavedPerExecution: num, availableInMCP: bool}, staticData: any, pinData: map?, meta: map?{onboardingId: str, templateId: str, instanceId: str, templateCredsSetupCompleted: bool}, tags: [map], shared: [map], activeVersion: map?{versionId: str, workflowId: str, nodes: [map], connections: map, authors: str, createdAt: str(date-time), updatedAt: str(date-time)}} # Workflow object\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PUT /workflows/{id}/transfer\n@desc Transfer a workflow to another project\n@required {id: str # The ID of the workflow., destinationProjectId: str # The ID of the project to transfer the workflow to.}\n@returns(200) Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint GET /workflows/{id}/tags\n@desc Get workflow tags\n@required {id: str # The ID of the workflow.}\n@returns(200) List of tags\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PUT /workflows/{id}/tags\n@desc Update tags of a workflow\n@required {id: str # The ID of the workflow.}\n@returns(200) List of tags after add the tag\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endgroup\n\n@group users\n@endpoint GET /users\n@desc Retrieve all users\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail., includeRole: bool=false # Whether to include the user's role or not., projectId: str}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint POST /users\n@desc Create multiple users\n@returns(200) {user: map{id: str, email: str, inviteAcceptUrl: str, emailSent: bool}, error: str} # Operation successful.\n@errors {401: Unauthorized, 403: Forbidden}\n\n@endpoint GET /users/{id}\n@desc Get user by ID/Email\n@required {id: str(identifier) # The ID or email of the user.}\n@optional {includeRole: bool=false # Whether to include the user's role or not.}\n@returns(200) {id: str, email: str(email), firstName: str, lastName: str, isPending: bool, createdAt: str(date-time), updatedAt: str(date-time), role: str} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint DELETE /users/{id}\n@desc Delete a user\n@required {id: str(identifier) # The ID or email of the user.}\n@returns(204) Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint PATCH /users/{id}/role\n@desc Change a user's global role\n@required {id: str(identifier) # The ID or email of the user., newRoleName: str}\n@returns(200) Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endgroup\n\n@group source-control\n@endpoint POST /source-control/pull\n@desc Pull changes from the remote repository\n@optional {force: bool, autoPublish: str(none/all/published)=none # Controls automatic workflow publishing after import: - `none`: Keep workflows in their local published state (default) - `all`: Publish all imported workflows - `published`: Publish only workflows that were published locally before import, variables: map}\n@returns(200) {variables: map{added: [str], changed: [str]}, credentials: [map], workflows: [map], tags: map{tags: [map], mappings: [map]}} # Import result\n@errors {400: The request is invalid or provides malformed data., 409: Conflict}\n\n@endgroup\n\n@group variables\n@endpoint POST /variables\n@desc Create a variable\n@required {key: str, value: str}\n@optional {id: str, type: str, projectId: str}\n@returns(201) Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized}\n\n@endpoint GET /variables\n@desc Retrieve variables\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail., projectId: str, state: str}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint DELETE /variables/{id}\n@desc Delete a variable\n@required {id: str # The ID of the variable.}\n@returns(204) Operation successful.\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PUT /variables/{id}\n@desc Update a variable\n@required {id: str # The ID of the variable., key: str, value: str}\n@optional {id: str, type: str, projectId: str}\n@returns(204) Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endgroup\n\n@group data-tables\n@endpoint GET /data-tables\n@desc List all data tables\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail., filter: str(jsonString) # JSON string of filter conditions, sortBy: str # Sort format: field:asc or field:desc}\n@returns(200) {data: [map], nextCursor: str?} # Successfully retrieved data tables\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized}\n\n@endpoint POST /data-tables\n@desc Create a new data table\n@required {name: str # Name of the data table, columns: [map{name!: str, type!: str}] # Column definitions for the table}\n@returns(201) {id: str, name: str, columns: [map], projectId: str, createdAt: str(date-time), updatedAt: str(date-time)} # Data table created successfully\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 409: Conflict}\n@example_request {\"name\":\"customers\",\"columns\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"status\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"number\"}]}\n\n@endpoint GET /data-tables/{dataTableId}\n@desc Get a data table\n@required {dataTableId: str(nanoid) # The ID of the data table}\n@returns(200) {id: str, name: str, columns: [map], projectId: str, createdAt: str(date-time), updatedAt: str(date-time)} # Successfully retrieved data table\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint PATCH /data-tables/{dataTableId}\n@desc Update a data table\n@required {dataTableId: str(nanoid) # The ID of the data table, name: str # New name for the data table}\n@returns(200) {id: str, name: str, columns: [map], projectId: str, createdAt: str(date-time), updatedAt: str(date-time)} # Data table updated successfully\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found., 409: Conflict}\n@example_request {\"name\":\"updated-customers\"}\n\n@endpoint DELETE /data-tables/{dataTableId}\n@desc Delete a data table\n@required {dataTableId: str(nanoid) # The ID of the data table}\n@returns(204) Data table deleted successfully\n@errors {401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint GET /data-tables/{dataTableId}/rows\n@desc Retrieve rows from a data table\n@required {dataTableId: str(nanoid) # The ID of the data table}\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail., filter: str(jsonString) # JSON string of filter conditions, sortBy: str # Sort format: columnName:asc or columnName:desc, search: str # Search text across all string columns}\n@returns(200) {data: [map], nextCursor: str?} # Successfully retrieved rows\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endpoint POST /data-tables/{dataTableId}/rows\n@desc Insert rows into a data table\n@required {dataTableId: str(nanoid) # The ID of the data table, data: [map] # Array of rows to insert. Each row is an object with column names as keys.}\n@optional {returnType: str(count/id/all)=count # - count: Return only the number of rows inserted - id: Return an array of inserted row IDs - all: Return the full row data for all inserted rows}\n@returns(200) Rows inserted successfully\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n@example_request {\"data\":[{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"age\":30},{\"name\":\"Jane Smith\",\"email\":\"jane@example.com\",\"age\":25}],\"returnType\":\"all\"}\n\n@endpoint PATCH /data-tables/{dataTableId}/rows/update\n@desc Update rows in a data table\n@required {dataTableId: str(nanoid) # The ID of the data table, filter: map{type: str, filters!: [map]} # Filter conditions to match rows for update, data: map # Column values to update}\n@optional {returnData: bool=false # If true, return the updated rows; if false, return true on success, dryRun: bool=false # If true, preview changes without persisting them}\n@returns(200) Rows updated successfully\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n@example_request {\"filter\":{\"type\":\"and\",\"filters\":[{\"columnName\":\"status\",\"condition\":\"eq\",\"value\":\"pending\"}]},\"data\":{\"status\":\"completed\",\"updatedBy\":\"admin\"},\"returnData\":false,\"dryRun\":false}\n\n@endpoint POST /data-tables/{dataTableId}/rows/upsert\n@desc Upsert a row in a data table\n@required {dataTableId: str(nanoid) # The ID of the data table, filter: map{type: str, filters!: [map]} # Filter conditions to match existing row. If no row matches, a new row is inserted., data: map # Column values for the row}\n@optional {returnData: bool=false # If true, return the upserted row; if false, return true on success, dryRun: bool=false # If true, preview changes without persisting them}\n@returns(200) Row upserted successfully\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n@example_request {\"filter\":{\"type\":\"and\",\"filters\":[{\"columnName\":\"email\",\"condition\":\"eq\",\"value\":\"user@example.com\"}]},\"data\":{\"email\":\"user@example.com\",\"name\":\"Updated Name\",\"status\":\"active\"},\"returnData\":true,\"dryRun\":false}\n\n@endpoint DELETE /data-tables/{dataTableId}/rows/delete\n@desc Delete rows from a data table\n@required {dataTableId: str(nanoid) # The ID of the data table, filter: str(jsonString) # JSON string of filter conditions. Required to prevent accidental deletion of all data.}\n@optional {returnData: bool=false # If true, return the deleted rows; if false, return true on success, dryRun: bool=false # If true, preview which rows would be deleted without actually deleting them}\n@returns(200) Rows deleted successfully\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 404: The specified resource was not found.}\n\n@endgroup\n\n@group projects\n@endpoint POST /projects\n@desc Create a project\n@required {name: str}\n@optional {id: str, type: str}\n@returns(201) Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized}\n\n@endpoint GET /projects\n@desc Retrieve projects\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail.}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized}\n\n@endpoint DELETE /projects/{projectId}\n@desc Delete a project\n@required {projectId: str # The ID of the project.}\n@returns(204) Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint PUT /projects/{projectId}\n@desc Update a project\n@required {projectId: str # The ID of the project., name: str}\n@optional {id: str, type: str}\n@returns(204) Operation successful.\n@errors {400: The request is invalid or provides malformed data., 401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint GET /projects/{projectId}/users\n@desc List project members\n@required {projectId: str # The ID of the project.}\n@optional {limit: num=100 # The maximum number of items to return., cursor: str # Paginate by setting the cursor parameter to the nextCursor attribute returned by the previous request's response. Default value fetches the first \"page\" of the collection. See pagination for more detail.}\n@returns(200) {data: [map], nextCursor: str?} # Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint POST /projects/{projectId}/users\n@desc Add one or more users to a project\n@required {projectId: str # The ID of the project., relations: [map{userId!: str, role!: str}] # A list of userIds and roles to add to the project.}\n@returns(201) Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint DELETE /projects/{projectId}/users/{userId}\n@desc Delete a user from a project\n@required {projectId: str # The ID of the project., userId: str # The ID of the user.}\n@returns(204) Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endpoint PATCH /projects/{projectId}/users/{userId}\n@desc Change a user's role in a project\n@required {projectId: str # The ID of the project., userId: str # The ID of the user., role: str # The role assigned to the user in the project.}\n@returns(204) Operation successful.\n@errors {401: Unauthorized, 403: Forbidden, 404: The specified resource was not found.}\n\n@endgroup\n\n@group discover\n@endpoint GET /discover\n@desc Discover available API capabilities\n@optional {include: str # Include additional data. Use \"schemas\" to inline request body schemas per endpoint, eliminating the need to fetch the full OpenAPI spec., resource: str # Filter to a specific resource (e.g. \"workflow\", \"tags\", \"credential\")., operation: str # Filter to endpoints with a specific operation (e.g. \"read\", \"create\", \"list\").}\n@returns(200) {data: map{scopes: [str], resources: map, filters: map, specUrl: str}} # Discovery response with available resources and endpoints.\n@errors {401: Unauthorized}\n\n@endgroup\n\n@end\n"}}