From 4bf235d2f5c5cf2b901e1d43ae129f7b08a09bb5 Mon Sep 17 00:00:00 2001
From: Llewellyn vd Berg <113503285+llewellyn-sl@users.noreply.github.com>
Date: Fri, 13 Mar 2026 13:02:57 +0200
Subject: [PATCH 1/5] docs: reconcile platform api workflow docs
---
.../docs/describe-workflow.ParamsDetails.json | 2 +-
.../docs/describe-workflow.StatusCodes.json | 2 +-
.../docs/describe-workflow.api.mdx | 2 +-
.../parameter-tables/workflows/parameters.yml | 5 +++--
.../docs/info/workflows.info.api.mdx | 4 ++++
.../docs/list-workflows.ParamsDetails.json | 2 +-
.../docs/list-workflows.StatusCodes.json | 2 +-
platform-api-docs/docs/list-workflows.api.mdx | 2 +-
.../specs/seqera-api-latest-decorated.yml | 22 +++++++++++++------
9 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/platform-api-docs/docs/describe-workflow.ParamsDetails.json b/platform-api-docs/docs/describe-workflow.ParamsDetails.json
index 0a3f6a0b3..2b206b1d8 100644
--- a/platform-api-docs/docs/describe-workflow.ParamsDetails.json
+++ b/platform-api-docs/docs/describe-workflow.ParamsDetails.json
@@ -1 +1 @@
-{"parameters":[{"name":"workflowId","in":"path","description":"Workflow string identifier","required":true,"schema":{"type":"string"}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier","schema":{"type":"integer","format":"int64"}},{"name":"attributes","in":"query","description":"Comma-separated list of attributes to retrieve. Returns an empty value for each attribute not specified.","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["optimized","labels","messages","minimal","pipelineVersion"],"x-enum-varnames":["optimized","labels","messages","minimal","pipelineVersion"],"title":"WorkflowQueryAttribute"}}}]}
+{"parameters":[{"name":"workflowId","in":"path","description":"Workflow string identifier","required":true,"schema":{"type":"string"}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier","schema":{"type":"integer","format":"int64"}},{"name":"attributes","in":"query","description":"Comma-separated list of attributes to retrieve. Supported values are `optimized`, `labels`, `messages`, `minimal`, and `pipelineInfo`. Returns `null` for each attribute not specified.","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["optimized","labels","messages","minimal","pipelineInfo"],"x-enum-varnames":["optimized","labels","messages","minimal","pipelineInfo"],"title":"WorkflowQueryAttribute"}}}]}
diff --git a/platform-api-docs/docs/describe-workflow.StatusCodes.json b/platform-api-docs/docs/describe-workflow.StatusCodes.json
index 55d567d97..5a32e07a6 100644
--- a/platform-api-docs/docs/describe-workflow.StatusCodes.json
+++ b/platform-api-docs/docs/describe-workflow.StatusCodes.json
@@ -1 +1 @@
-{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"workflow":{"required":["commandLine","projectName","runName","sessionId","submit","userName","workDir"],"type":"object","properties":{"requiresAttention":{"description":"If `true`, the workflow has issues that require user attention.","type":"boolean"},"status":{"description":"Current workflow execution status.","type":"string","enum":["SUBMITTED","RUNNING","SUCCEEDED","FAILED","CANCELLED","UNKNOWN"],"title":"WorkflowStatus"},"ownerId":{"description":"Numeric identifier of the workflow owner.","type":"integer","format":"int64","readOnly":true},"repository":{"description":"Source repository URL or path for the workflow project.","type":"string"},"id":{"description":"Workflow string identifier.","maxLength":16,"type":"string"},"submit":{"description":"Timestamp when the workflow was submitted.","type":"string","format":"date-time"},"start":{"description":"Timestamp when workflow execution started.","type":"string","format":"date-time"},"complete":{"description":"Timestamp when workflow execution completed.","type":"string","format":"date-time"},"dateCreated":{"description":"Timestamp when the workflow record was created.","type":"string","format":"date-time","nullable":true,"readOnly":true},"lastUpdated":{"description":"Timestamp when the workflow record was last updated.","type":"string","format":"date-time","nullable":true,"readOnly":true},"runName":{"description":"Workflow run name. Must be unique within the session.","maxLength":80,"type":"string"},"sessionId":{"description":"Nextflow session identifier for the workflow run.","maxLength":36,"type":"string"},"profile":{"description":"Nextflow profile or profile selection used for the run.","maxLength":100,"type":"string"},"workDir":{"description":"Workflow work directory path.","type":"string"},"commitId":{"description":"Source control commit identifier for the workflow run.","maxLength":40,"type":"string"},"userName":{"description":"Username reported for the workflow owner.","maxLength":40,"type":"string"},"scriptId":{"description":"Internal script or pipeline identifier associated with the run.","maxLength":40,"type":"string"},"revision":{"description":"Source control revision, branch, or tag used for the run.","maxLength":100,"type":"string"},"commandLine":{"description":"Full command line used to launch the workflow.","maxLength":8096,"type":"string"},"projectName":{"description":"Pipeline or project name reported by Nextflow.","maxLength":200,"type":"string"},"scriptName":{"description":"Main workflow script filename.","maxLength":100,"type":"string"},"launchId":{"description":"Legacy launch identifier associated with the workflow.","maxLength":22,"type":"string"},"configFiles":{"description":"Array of configuration files used for the workflow run.","type":"array","items":{"type":"string"}},"params":{"description":"Workflow input parameter map.","type":"object","additionalProperties":true},"configText":{"description":"Inline Nextflow configuration text used for the run.","type":"string"},"manifest":{"type":"object","properties":{"nextflowVersion":{"description":"Nextflow version declared by the pipeline manifest.","maxLength":20,"type":"string"},"defaultBranch":{"description":"Default source control branch declared by the manifest.","maxLength":20,"type":"string"},"version":{"description":"Pipeline version declared by the manifest.","maxLength":20,"type":"string"},"homePage":{"description":"Pipeline homepage URL declared by the manifest.","maxLength":200,"type":"string"},"gitmodules":{"description":"Comma-separated git submodule paths declared by the manifest.","maxLength":150,"type":"string"},"description":{"description":"Pipeline description declared by the manifest.","maxLength":1024,"type":"string"},"name":{"description":"Pipeline name declared by the manifest.","maxLength":150,"type":"string"},"mainScript":{"description":"Main workflow script filename declared by the manifest.","maxLength":100,"type":"string"},"author":{"description":"Pipeline author declared by the manifest.","maxLength":150,"type":"string"},"icon":{"description":"Relative path or URL for the pipeline icon.","maxLength":255,"type":"string"}},"title":"WfManifest","description":"Workflow manifest metadata."},"nextflow":{"description":"Nextflow runtime metadata.","type":"object","properties":{"version":{"description":"Nextflow runtime version used for the workflow run.","maxLength":20,"type":"string"},"build":{"description":"Nextflow build identifier.","maxLength":10,"type":"string"},"timestamp":{"description":"Timestamp associated with the reported Nextflow build.","type":"string","format":"date-time"}},"title":"WfNextflow"},"stats":{"description":"Aggregated workflow task statistics.","type":"object","properties":{"computeTimeFmt":{"description":"Human-readable total compute time across workflow tasks.","maxLength":50,"type":"string"},"cachedCount":{"description":"Number of cached tasks.","type":"integer","format":"int32"},"failedCount":{"description":"Number of failed tasks.","type":"integer","format":"int32"},"ignoredCount":{"description":"Number of ignored tasks.","type":"integer","format":"int32"},"succeedCount":{"description":"Number of successful tasks.","type":"integer","format":"int32"},"cachedCountFmt":{"description":"Human-readable cached task count.","type":"string"},"succeedCountFmt":{"description":"Human-readable successful task count.","type":"string"},"failedCountFmt":{"description":"Human-readable failed task count.","type":"string"},"ignoredCountFmt":{"description":"Human-readable ignored task count.","type":"string"},"cachedPct":{"description":"Percentage of tasks satisfied from cache.","type":"number","format":"float"},"failedPct":{"description":"Percentage of tasks that failed.","type":"number","format":"float"},"succeedPct":{"description":"Percentage of tasks that succeeded.","type":"number","format":"float"},"ignoredPct":{"description":"Percentage of tasks that were ignored.","type":"number","format":"float"},"cachedDuration":{"description":"Aggregate duration in milliseconds for cached tasks.","type":"integer","format":"int64"},"failedDuration":{"description":"Aggregate duration in milliseconds for failed tasks.","type":"integer","format":"int64"},"succeedDuration":{"description":"Aggregate duration in milliseconds for successful tasks.","type":"integer","format":"int64"}},"title":"WfStats"},"fusion":{"description":"Fusion runtime metadata.","type":"object","properties":{"enabled":{"description":"If `true`, Fusion was enabled for the workflow run.","type":"boolean"},"version":{"description":"Fusion version reported for the workflow run.","maxLength":20,"type":"string"}},"title":"WfFusionMeta"},"wave":{"description":"Wave runtime metadata.","type":"object","properties":{"enabled":{"description":"If `true`, Wave was enabled for the workflow run.","type":"boolean"}},"title":"WfWaveMeta"},"errorMessage":{"description":"Summarized task error message associated with the workflow failure.","type":"string"},"errorReport":{"description":"Detailed error report associated with the workflow failure.","type":"string"},"deleted":{"description":"If `true`, the workflow record has been soft-deleted.","type":"boolean","readOnly":true},"projectDir":{"description":"Local project directory used for the workflow run.","type":"string"},"homeDir":{"description":"Home directory used by the workflow runtime.","type":"string"},"container":{"description":"Workflow-level container image.","type":"string"},"containerEngine":{"description":"Container engine used for workflow execution.","type":"string"},"scriptFile":{"description":"Resolved path to the executed workflow script.","type":"string"},"launchDir":{"description":"Directory from which the workflow was launched.","type":"string"},"duration":{"description":"Total workflow duration in milliseconds.","type":"integer","format":"int64"},"exitStatus":{"description":"Final workflow exit status code.","type":"integer","format":"int32"},"resume":{"description":"If `true`, the workflow was launched with resume enabled.","type":"boolean"},"success":{"description":"If `true`, the workflow completed successfully.","type":"boolean"},"logFile":{"description":"Path to the workflow log file.","maxLength":255,"type":"string"},"outFile":{"description":"Path to the workflow standard output file.","maxLength":255,"type":"string"},"operationId":{"description":"Internal operation identifier associated with the workflow launch.","maxLength":110,"type":"string"}},"title":"Workflow"},"progress":{"type":"object","properties":{"workflowProgress":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"executors":{"type":"array","items":{"type":"string"}},"cpus":{"type":"integer","format":"int64"},"cpuTime":{"type":"integer","format":"int64"},"cpuLoad":{"type":"integer","format":"int64"},"memoryRss":{"type":"integer","format":"int64"},"memoryReq":{"type":"integer","format":"int64"},"readBytes":{"type":"integer","format":"int64"},"writeBytes":{"type":"integer","format":"int64"},"volCtxSwitch":{"type":"integer","format":"int64"},"invCtxSwitch":{"type":"integer","format":"int64"},"loadTasks":{"type":"integer","format":"int64"},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"},"cost":{"type":"number"},"netCpus":{"type":"integer","format":"int64"},"netCpuTime":{"type":"integer","format":"int64"},"netCpuLoad":{"type":"integer","format":"int64"},"netMemoryRss":{"type":"integer","format":"int64"},"netMemoryReq":{"type":"integer","format":"int64"},"netMemoryConsumption":{"type":"number"},"netReadBytes":{"type":"integer","format":"int64"},"netWriteBytes":{"type":"integer","format":"int64"},"netVolCtxSwitch":{"type":"integer","format":"int64"},"netInvCtxSwitch":{"type":"integer","format":"int64"},"netCost":{"type":"number"}},"title":"WorkflowLoad"},"processesProgress":{"type":"array","items":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","process","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"process":{"type":"string"},"cpus":{"type":"integer","format":"int64","deprecated":true},"cpuTime":{"type":"integer","format":"int64","deprecated":true},"cpuLoad":{"type":"integer","format":"int64","deprecated":true},"memoryRss":{"type":"integer","format":"int64","deprecated":true},"memoryReq":{"type":"integer","format":"int64","deprecated":true},"readBytes":{"type":"integer","format":"int64","deprecated":true},"writeBytes":{"type":"integer","format":"int64","deprecated":true},"volCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"invCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"loadTasks":{"type":"integer","format":"int64","deprecated":true},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"}},"title":"ProcessLoad"}},"totalProcesses":{"type":"integer","format":"int32"}},"title":"ProgressData"},"platform":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"title":"ComputePlatformDto"},"jobInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"operationId":{"type":"string"},"message":{"type":"string"},"status":{"type":"string"},"exitCode":{"type":"integer","format":"int32"}},"title":"JobInfoDto"},"orgId":{"type":"integer","format":"int64"},"orgName":{"type":"string"},"workspaceId":{"type":"integer","format":"int64"},"workspaceName":{"type":"string"},"labels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Label numeric identifier."},"name":{"type":"string","description":"Label key name."},"value":{"type":"string","description":"Label value."},"resource":{"type":"boolean","description":"Whether this is a resource label (applied to workflow tasks for compute resource allocation)."},"isDefault":{"type":"boolean","description":"Whether this label is automatically applied to new resources by default."},"isDynamic":{"type":"boolean","description":"Whether this label's value can be dynamically computed from workflow metadata."},"isInterpolated":{"type":"boolean","description":"Whether this label contains interpolated variables resolved at runtime."},"dateCreated":{"type":"string","format":"date-time","description":"Timestamp when the label was created."}},"description":"Label object for categorizing and organizing resources (workflows, pipelines, compute environments, actions, datasets).","title":"LabelDbDto"}},"optimized":{"type":"boolean"},"messages":{"type":"array","items":{"type":"string"}}},"title":"DescribeWorkflowResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"workflow":{"type":"object","allOf":[{"type":"object","properties":{"messages":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"ownerId":{"type":"integer","format":"int64"},"submit":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"},"complete":{"type":"string","format":"date-time"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"runName":{"type":"string"},"sessionId":{"type":"string"},"profile":{"type":"string"},"workDir":{"type":"string"},"commitId":{"type":"string"},"userName":{"type":"string"},"scriptId":{"type":"string"},"revision":{"type":"string"},"commandLine":{"type":"string"},"projectName":{"type":"string"},"scriptName":{"type":"string"},"launchId":{"type":"string"},"status":{"type":"string","enum":["SUBMITTED","RUNNING","SUCCEEDED","FAILED","CANCELLED","UNKNOWN"],"title":"WorkflowStatus"},"requiresAttention":{"type":"boolean"},"configFiles":{"type":"array","items":{"type":"string"}},"params":{"type":"object","additionalProperties":true},"configText":{"type":"string"},"manifest":{"type":"object","properties":{"nextflowVersion":{"description":"Nextflow version declared by the pipeline manifest.","maxLength":20,"type":"string"},"defaultBranch":{"description":"Default source control branch declared by the manifest.","maxLength":20,"type":"string"},"version":{"description":"Pipeline version declared by the manifest.","maxLength":20,"type":"string"},"homePage":{"description":"Pipeline homepage URL declared by the manifest.","maxLength":200,"type":"string"},"gitmodules":{"description":"Comma-separated git submodule paths declared by the manifest.","maxLength":150,"type":"string"},"description":{"description":"Pipeline description declared by the manifest.","maxLength":1024,"type":"string"},"name":{"description":"Pipeline name declared by the manifest.","maxLength":150,"type":"string"},"mainScript":{"description":"Main workflow script filename declared by the manifest.","maxLength":100,"type":"string"},"author":{"description":"Pipeline author declared by the manifest.","maxLength":150,"type":"string"},"icon":{"description":"Relative path or URL for the pipeline icon.","maxLength":255,"type":"string"}},"title":"WfManifest"},"nextflow":{"type":"object","properties":{"version":{"description":"Nextflow runtime version used for the workflow run.","maxLength":20,"type":"string"},"build":{"description":"Nextflow build identifier.","maxLength":10,"type":"string"},"timestamp":{"description":"Timestamp associated with the reported Nextflow build.","type":"string","format":"date-time"}},"title":"WfNextflow"},"stats":{"type":"object","properties":{"computeTimeFmt":{"description":"Human-readable total compute time across workflow tasks.","maxLength":50,"type":"string"},"cachedCount":{"description":"Number of cached tasks.","type":"integer","format":"int32"},"failedCount":{"description":"Number of failed tasks.","type":"integer","format":"int32"},"ignoredCount":{"description":"Number of ignored tasks.","type":"integer","format":"int32"},"succeedCount":{"description":"Number of successful tasks.","type":"integer","format":"int32"},"cachedCountFmt":{"description":"Human-readable cached task count.","type":"string"},"succeedCountFmt":{"description":"Human-readable successful task count.","type":"string"},"failedCountFmt":{"description":"Human-readable failed task count.","type":"string"},"ignoredCountFmt":{"description":"Human-readable ignored task count.","type":"string"},"cachedPct":{"description":"Percentage of tasks satisfied from cache.","type":"number","format":"float"},"failedPct":{"description":"Percentage of tasks that failed.","type":"number","format":"float"},"succeedPct":{"description":"Percentage of tasks that succeeded.","type":"number","format":"float"},"ignoredPct":{"description":"Percentage of tasks that were ignored.","type":"number","format":"float"},"cachedDuration":{"description":"Aggregate duration in milliseconds for cached tasks.","type":"integer","format":"int64"},"failedDuration":{"description":"Aggregate duration in milliseconds for failed tasks.","type":"integer","format":"int64"},"succeedDuration":{"description":"Aggregate duration in milliseconds for successful tasks.","type":"integer","format":"int64"}},"title":"WfStats"},"errorMessage":{"type":"string"},"errorReport":{"type":"string"},"deleted":{"type":"boolean"},"projectDir":{"type":"string"},"homeDir":{"type":"string"},"container":{"type":"string"},"repository":{"type":"string"},"containerEngine":{"type":"string"},"scriptFile":{"type":"string"},"launchDir":{"type":"string"},"duration":{"type":"integer","format":"int64"},"exitStatus":{"type":"integer","format":"int32"},"resume":{"type":"boolean"},"success":{"type":"boolean"}},"title":"WorkflowDbDto"},{"properties":{"fusion":{"type":"object","properties":{"enabled":{"description":"If `true`, Fusion was enabled for the workflow run.","type":"boolean"},"version":{"description":"Fusion version reported for the workflow run.","maxLength":20,"type":"string"}},"title":"WfFusionMeta"},"wave":{"type":"object","properties":{"enabled":{"description":"If `true`, Wave was enabled for the workflow run.","type":"boolean"}},"title":"WfWaveMeta"},"logFile":{"type":"string"},"outFile":{"type":"string"},"operationId":{"type":"string"}}}],"title":"WorkflowMaxDbDto"},"progress":{"type":"object","properties":{"workflowProgress":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"executors":{"type":"array","items":{"type":"string"}},"cpus":{"type":"integer","format":"int64"},"cpuTime":{"type":"integer","format":"int64"},"cpuLoad":{"type":"integer","format":"int64"},"memoryRss":{"type":"integer","format":"int64"},"memoryReq":{"type":"integer","format":"int64"},"readBytes":{"type":"integer","format":"int64"},"writeBytes":{"type":"integer","format":"int64"},"volCtxSwitch":{"type":"integer","format":"int64"},"invCtxSwitch":{"type":"integer","format":"int64"},"loadTasks":{"type":"integer","format":"int64"},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"},"cost":{"type":"number"},"netCpus":{"type":"integer","format":"int64"},"netCpuTime":{"type":"integer","format":"int64"},"netCpuLoad":{"type":"integer","format":"int64"},"netMemoryRss":{"type":"integer","format":"int64"},"netMemoryReq":{"type":"integer","format":"int64"},"netMemoryConsumption":{"type":"number"},"netReadBytes":{"type":"integer","format":"int64"},"netWriteBytes":{"type":"integer","format":"int64"},"netVolCtxSwitch":{"type":"integer","format":"int64"},"netInvCtxSwitch":{"type":"integer","format":"int64"},"netCost":{"type":"number"}},"title":"WorkflowLoad"},"processesProgress":{"type":"array","items":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","process","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"process":{"type":"string"},"cpus":{"type":"integer","format":"int64","deprecated":true},"cpuTime":{"type":"integer","format":"int64","deprecated":true},"cpuLoad":{"type":"integer","format":"int64","deprecated":true},"memoryRss":{"type":"integer","format":"int64","deprecated":true},"memoryReq":{"type":"integer","format":"int64","deprecated":true},"readBytes":{"type":"integer","format":"int64","deprecated":true},"writeBytes":{"type":"integer","format":"int64","deprecated":true},"volCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"invCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"loadTasks":{"type":"integer","format":"int64","deprecated":true},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"}},"title":"ProcessLoad"}},"totalProcesses":{"type":"integer","format":"int32"}},"title":"ProgressData"},"platform":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"title":"ComputePlatformDto"},"jobInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"operationId":{"type":"string"},"message":{"type":"string"},"status":{"type":"string"},"exitCode":{"type":"integer","format":"int32"}},"title":"JobInfoDto"},"orgId":{"type":"integer","format":"int64"},"orgName":{"type":"string"},"workspaceId":{"type":"integer","format":"int64"},"workspaceName":{"type":"string"},"labels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Label numeric identifier."},"name":{"type":"string","description":"Label key name."},"value":{"type":"string","description":"Label value."},"resource":{"type":"boolean","description":"Whether this is a resource label (applied to workflow tasks for compute resource allocation)."},"isDefault":{"type":"boolean","description":"Whether this label is automatically applied to new resources by default."},"isDynamic":{"type":"boolean","description":"Whether this label's value can be dynamically computed from workflow metadata."},"isInterpolated":{"type":"boolean","description":"Whether this label contains interpolated variables resolved at runtime."},"dateCreated":{"type":"string","format":"date-time","description":"Timestamp when the label was created."}},"description":"Label object for categorizing and organizing resources (workflows, pipelines, compute environments, actions, datasets).","title":"LabelDbDto"}},"optimized":{"type":"boolean"},"messages":{"type":"array","items":{"type":"string"}},"pipelineInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Pipeline numeric identifier."},"workspaceId":{"type":"integer","format":"int64","description":"Workspace numeric identifier where the pipeline is located."},"version":{"description":"Pipeline version information.","type":"object","properties":{"id":{"type":"string","description":"Pipeline version string identifier."},"name":{"type":"string","description":"Pipeline version name."},"dateCreated":{"type":"string","format":"date-time","description":"Date and time the version was created, in ISO 8601 format."},"lastUpdated":{"type":"string","format":"date-time","description":"Date and time the version was last updated, in ISO 8601 format."},"hash":{"type":"string","description":"Git commit hash for this version."},"isDefault":{"type":"boolean","description":"Whether this version is the default version."},"isDraftVersion":{"type":"boolean","description":"Whether this version is a draft (unpublished) version."}},"title":"PipelineMinInfoResponse.PipelineVersionMinInfoResponse"}},"title":"PipelineMinInfoResponse"}},"title":"DescribeWorkflowResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/describe-workflow.api.mdx b/platform-api-docs/docs/describe-workflow.api.mdx
index 59f29be73..58b801d80 100644
--- a/platform-api-docs/docs/describe-workflow.api.mdx
+++ b/platform-api-docs/docs/describe-workflow.api.mdx
@@ -5,7 +5,7 @@ description: "Retrieves the details of the workflow record associated with the g
sidebar_label: "Describe workflow"
hide_title: true
hide_table_of_contents: true
-api: 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
+api: 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
sidebar_class_name: "get api-method"
info_path: platform-api//seqera-api
custom_edit_url: null
diff --git a/platform-api-docs/docs/info/parameter-tables/workflows/parameters.yml b/platform-api-docs/docs/info/parameter-tables/workflows/parameters.yml
index 8c58931ec..e44d381a7 100644
--- a/platform-api-docs/docs/info/parameter-tables/workflows/parameters.yml
+++ b/platform-api-docs/docs/info/parameter-tables/workflows/parameters.yml
@@ -2,8 +2,9 @@
Type: array
Location: query
Req/Opt: Optional
- Description: "Additional attribute values to include in the response (`labels`,
- `optimized` status). Returns an empty value (`labels: null`) if omitted."
+ Description: Additional attribute values to include in the response. Supported
+ values are `optimized`, `labels`, `messages`, `minimal`, and `pipelineInfo`.
+ Returns `null` for attributes omitted from the request.
- Name: "`workspaceId`"
Type: integer
Location: query
diff --git a/platform-api-docs/docs/info/workflows.info.api.mdx b/platform-api-docs/docs/info/workflows.info.api.mdx
index 772b8a5f3..b8534f8e8 100644
--- a/platform-api-docs/docs/info/workflows.info.api.mdx
+++ b/platform-api-docs/docs/info/workflows.info.api.mdx
@@ -17,6 +17,10 @@ import MDXComponents from "@theme-original/MDXComponents";
Manage workflow executions ([pipeline runs](https://docs.seqera.io/platform-cloud/monitoring/overview)) in Seqera Platform.
+The `List workflows` and `Describe workflow` endpoints support the `attributes` query parameter to enrich the default response. Current supported values are `optimized`, `labels`, `messages`, `minimal`, and `pipelineInfo`.
+
+Use `attributes=pipelineInfo` to include the source pipeline reference for a run, including the pipeline identifier, workspace identifier, and version metadata.
+
### Path and query parameters
::table{file=parameter-tables/workflows/parameters.yml}
diff --git a/platform-api-docs/docs/list-workflows.ParamsDetails.json b/platform-api-docs/docs/list-workflows.ParamsDetails.json
index 7371101fe..d0f6115bc 100644
--- a/platform-api-docs/docs/list-workflows.ParamsDetails.json
+++ b/platform-api-docs/docs/list-workflows.ParamsDetails.json
@@ -1 +1 @@
-{"parameters":[{"name":"attributes","in":"query","description":"Additional attribute values to include in the response (`labels`, `optimized` status). Returns an empty value (`labels: null`) if omitted.","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["optimized","labels","messages","minimal","pipelineVersion"],"x-enum-varnames":["optimized","labels","messages","minimal","pipelineVersion"],"title":"WorkflowQueryAttribute"}}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier","schema":{"type":"integer","format":"int64"}},{"name":"max","in":"query","description":"Pagination max results","schema":{"type":"integer","format":"int32"}},{"name":"offset","in":"query","description":"Pagination offset","schema":{"type":"integer","format":"int32"}},{"name":"search","in":"query","description":"Filter search parameter","schema":{"type":"string"}}]}
+{"parameters":[{"name":"attributes","in":"query","description":"Additional attribute values to include in the response. Supported values are `optimized`, `labels`, `messages`, `minimal`, and `pipelineInfo`. Returns `null` for attributes omitted from the request.","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["optimized","labels","messages","minimal","pipelineInfo"],"x-enum-varnames":["optimized","labels","messages","minimal","pipelineInfo"],"title":"WorkflowQueryAttribute"}}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier","schema":{"type":"integer","format":"int64"}},{"name":"max","in":"query","description":"Pagination max results","schema":{"type":"integer","format":"int32"}},{"name":"offset","in":"query","description":"Pagination offset","schema":{"type":"integer","format":"int32"}},{"name":"search","in":"query","description":"Filter search parameter","schema":{"type":"string"}}]}
diff --git a/platform-api-docs/docs/list-workflows.StatusCodes.json b/platform-api-docs/docs/list-workflows.StatusCodes.json
index 2530aff26..738a3eaaa 100644
--- a/platform-api-docs/docs/list-workflows.StatusCodes.json
+++ b/platform-api-docs/docs/list-workflows.StatusCodes.json
@@ -1 +1 @@
-{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"workflows":{"type":"array","items":{"type":"object","properties":{"workflow":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"ownerId":{"type":"integer","format":"int64"},"submit":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"},"complete":{"type":"string","format":"date-time"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"runName":{"type":"string"},"sessionId":{"type":"string"},"profile":{"type":"string"},"workDir":{"type":"string"},"commitId":{"type":"string"},"userName":{"type":"string"},"scriptId":{"type":"string"},"revision":{"type":"string"},"commandLine":{"type":"string"},"projectName":{"type":"string"},"scriptName":{"type":"string"},"launchId":{"type":"string"},"status":{"type":"string","enum":["SUBMITTED","RUNNING","SUCCEEDED","FAILED","CANCELLED","UNKNOWN"],"title":"WorkflowStatus"},"requiresAttention":{"type":"boolean"},"configFiles":{"type":"array","items":{"type":"string"}},"params":{"type":"object","additionalProperties":true},"configText":{"type":"string"},"manifest":{"type":"object","properties":{"nextflowVersion":{"description":"Nextflow version declared by the pipeline manifest.","maxLength":20,"type":"string"},"defaultBranch":{"description":"Default source control branch declared by the manifest.","maxLength":20,"type":"string"},"version":{"description":"Pipeline version declared by the manifest.","maxLength":20,"type":"string"},"homePage":{"description":"Pipeline homepage URL declared by the manifest.","maxLength":200,"type":"string"},"gitmodules":{"description":"Comma-separated git submodule paths declared by the manifest.","maxLength":150,"type":"string"},"description":{"description":"Pipeline description declared by the manifest.","maxLength":1024,"type":"string"},"name":{"description":"Pipeline name declared by the manifest.","maxLength":150,"type":"string"},"mainScript":{"description":"Main workflow script filename declared by the manifest.","maxLength":100,"type":"string"},"author":{"description":"Pipeline author declared by the manifest.","maxLength":150,"type":"string"},"icon":{"description":"Relative path or URL for the pipeline icon.","maxLength":255,"type":"string"}},"title":"WfManifest"},"nextflow":{"type":"object","properties":{"version":{"description":"Nextflow runtime version used for the workflow run.","maxLength":20,"type":"string"},"build":{"description":"Nextflow build identifier.","maxLength":10,"type":"string"},"timestamp":{"description":"Timestamp associated with the reported Nextflow build.","type":"string","format":"date-time"}},"title":"WfNextflow"},"stats":{"type":"object","properties":{"computeTimeFmt":{"description":"Human-readable total compute time across workflow tasks.","maxLength":50,"type":"string"},"cachedCount":{"description":"Number of cached tasks.","type":"integer","format":"int32"},"failedCount":{"description":"Number of failed tasks.","type":"integer","format":"int32"},"ignoredCount":{"description":"Number of ignored tasks.","type":"integer","format":"int32"},"succeedCount":{"description":"Number of successful tasks.","type":"integer","format":"int32"},"cachedCountFmt":{"description":"Human-readable cached task count.","type":"string"},"succeedCountFmt":{"description":"Human-readable successful task count.","type":"string"},"failedCountFmt":{"description":"Human-readable failed task count.","type":"string"},"ignoredCountFmt":{"description":"Human-readable ignored task count.","type":"string"},"cachedPct":{"description":"Percentage of tasks satisfied from cache.","type":"number","format":"float"},"failedPct":{"description":"Percentage of tasks that failed.","type":"number","format":"float"},"succeedPct":{"description":"Percentage of tasks that succeeded.","type":"number","format":"float"},"ignoredPct":{"description":"Percentage of tasks that were ignored.","type":"number","format":"float"},"cachedDuration":{"description":"Aggregate duration in milliseconds for cached tasks.","type":"integer","format":"int64"},"failedDuration":{"description":"Aggregate duration in milliseconds for failed tasks.","type":"integer","format":"int64"},"succeedDuration":{"description":"Aggregate duration in milliseconds for successful tasks.","type":"integer","format":"int64"}},"title":"WfStats"},"errorMessage":{"type":"string"},"errorReport":{"type":"string"},"deleted":{"type":"boolean"},"projectDir":{"type":"string"},"homeDir":{"type":"string"},"container":{"type":"string"},"repository":{"type":"string"},"containerEngine":{"type":"string"},"scriptFile":{"type":"string"},"launchDir":{"type":"string"},"duration":{"type":"integer","format":"int64"},"exitStatus":{"type":"integer","format":"int32"},"resume":{"type":"boolean"},"success":{"type":"boolean"}},"title":"WorkflowDbDto"},"progress":{"type":"object","properties":{"workflowProgress":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"executors":{"type":"array","items":{"type":"string"}},"cpus":{"type":"integer","format":"int64"},"cpuTime":{"type":"integer","format":"int64"},"cpuLoad":{"type":"integer","format":"int64"},"memoryRss":{"type":"integer","format":"int64"},"memoryReq":{"type":"integer","format":"int64"},"readBytes":{"type":"integer","format":"int64"},"writeBytes":{"type":"integer","format":"int64"},"volCtxSwitch":{"type":"integer","format":"int64"},"invCtxSwitch":{"type":"integer","format":"int64"},"loadTasks":{"type":"integer","format":"int64"},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"},"cost":{"type":"number"},"netCpus":{"type":"integer","format":"int64"},"netCpuTime":{"type":"integer","format":"int64"},"netCpuLoad":{"type":"integer","format":"int64"},"netMemoryRss":{"type":"integer","format":"int64"},"netMemoryReq":{"type":"integer","format":"int64"},"netMemoryConsumption":{"type":"number"},"netReadBytes":{"type":"integer","format":"int64"},"netWriteBytes":{"type":"integer","format":"int64"},"netVolCtxSwitch":{"type":"integer","format":"int64"},"netInvCtxSwitch":{"type":"integer","format":"int64"},"netCost":{"type":"number"}},"title":"WorkflowLoad"},"processesProgress":{"type":"array","items":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","process","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"process":{"type":"string"},"cpus":{"type":"integer","format":"int64","deprecated":true},"cpuTime":{"type":"integer","format":"int64","deprecated":true},"cpuLoad":{"type":"integer","format":"int64","deprecated":true},"memoryRss":{"type":"integer","format":"int64","deprecated":true},"memoryReq":{"type":"integer","format":"int64","deprecated":true},"readBytes":{"type":"integer","format":"int64","deprecated":true},"writeBytes":{"type":"integer","format":"int64","deprecated":true},"volCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"invCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"loadTasks":{"type":"integer","format":"int64","deprecated":true},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"}},"title":"ProcessLoad"}},"totalProcesses":{"type":"integer","format":"int32"}},"title":"ProgressData"},"orgId":{"type":"integer","format":"int64"},"orgName":{"type":"string"},"workspaceId":{"type":"integer","format":"int64"},"workspaceName":{"type":"string"},"labels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Label numeric identifier."},"name":{"type":"string","description":"Label key name."},"value":{"type":"string","description":"Label value."},"resource":{"type":"boolean","description":"Whether this is a resource label (applied to workflow tasks for compute resource allocation)."},"isDefault":{"type":"boolean","description":"Whether this label is automatically applied to new resources by default."},"isDynamic":{"type":"boolean","description":"Whether this label's value can be dynamically computed from workflow metadata."},"isInterpolated":{"type":"boolean","description":"Whether this label contains interpolated variables resolved at runtime."},"dateCreated":{"type":"string","format":"date-time","description":"Timestamp when the label was created."}},"description":"Label object for categorizing and organizing resources (workflows, pipelines, compute environments, actions, datasets).","title":"LabelDbDto"}},"starred":{"type":"boolean"},"optimized":{"type":"boolean"}},"title":"ListWorkflowsResponse.ListWorkflowsElement"}},"totalSize":{"type":"integer","format":"int64"}},"title":"ListWorkflowsResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"workflows":{"type":"array","items":{"type":"object","properties":{"workflow":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"ownerId":{"type":"integer","format":"int64"},"submit":{"type":"string","format":"date-time"},"start":{"type":"string","format":"date-time"},"complete":{"type":"string","format":"date-time"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"runName":{"type":"string"},"sessionId":{"type":"string"},"profile":{"type":"string"},"workDir":{"type":"string"},"commitId":{"type":"string"},"userName":{"type":"string"},"scriptId":{"type":"string"},"revision":{"type":"string"},"commandLine":{"type":"string"},"projectName":{"type":"string"},"scriptName":{"type":"string"},"launchId":{"type":"string"},"status":{"type":"string","enum":["SUBMITTED","RUNNING","SUCCEEDED","FAILED","CANCELLED","UNKNOWN"],"title":"WorkflowStatus"},"requiresAttention":{"type":"boolean"},"configFiles":{"type":"array","items":{"type":"string"}},"params":{"type":"object","additionalProperties":true},"configText":{"type":"string"},"manifest":{"type":"object","properties":{"nextflowVersion":{"description":"Nextflow version declared by the pipeline manifest.","maxLength":20,"type":"string"},"defaultBranch":{"description":"Default source control branch declared by the manifest.","maxLength":20,"type":"string"},"version":{"description":"Pipeline version declared by the manifest.","maxLength":20,"type":"string"},"homePage":{"description":"Pipeline homepage URL declared by the manifest.","maxLength":200,"type":"string"},"gitmodules":{"description":"Comma-separated git submodule paths declared by the manifest.","maxLength":150,"type":"string"},"description":{"description":"Pipeline description declared by the manifest.","maxLength":1024,"type":"string"},"name":{"description":"Pipeline name declared by the manifest.","maxLength":150,"type":"string"},"mainScript":{"description":"Main workflow script filename declared by the manifest.","maxLength":100,"type":"string"},"author":{"description":"Pipeline author declared by the manifest.","maxLength":150,"type":"string"},"icon":{"description":"Relative path or URL for the pipeline icon.","maxLength":255,"type":"string"}},"title":"WfManifest"},"nextflow":{"type":"object","properties":{"version":{"description":"Nextflow runtime version used for the workflow run.","maxLength":20,"type":"string"},"build":{"description":"Nextflow build identifier.","maxLength":10,"type":"string"},"timestamp":{"description":"Timestamp associated with the reported Nextflow build.","type":"string","format":"date-time"}},"title":"WfNextflow"},"stats":{"type":"object","properties":{"computeTimeFmt":{"description":"Human-readable total compute time across workflow tasks.","maxLength":50,"type":"string"},"cachedCount":{"description":"Number of cached tasks.","type":"integer","format":"int32"},"failedCount":{"description":"Number of failed tasks.","type":"integer","format":"int32"},"ignoredCount":{"description":"Number of ignored tasks.","type":"integer","format":"int32"},"succeedCount":{"description":"Number of successful tasks.","type":"integer","format":"int32"},"cachedCountFmt":{"description":"Human-readable cached task count.","type":"string"},"succeedCountFmt":{"description":"Human-readable successful task count.","type":"string"},"failedCountFmt":{"description":"Human-readable failed task count.","type":"string"},"ignoredCountFmt":{"description":"Human-readable ignored task count.","type":"string"},"cachedPct":{"description":"Percentage of tasks satisfied from cache.","type":"number","format":"float"},"failedPct":{"description":"Percentage of tasks that failed.","type":"number","format":"float"},"succeedPct":{"description":"Percentage of tasks that succeeded.","type":"number","format":"float"},"ignoredPct":{"description":"Percentage of tasks that were ignored.","type":"number","format":"float"},"cachedDuration":{"description":"Aggregate duration in milliseconds for cached tasks.","type":"integer","format":"int64"},"failedDuration":{"description":"Aggregate duration in milliseconds for failed tasks.","type":"integer","format":"int64"},"succeedDuration":{"description":"Aggregate duration in milliseconds for successful tasks.","type":"integer","format":"int64"}},"title":"WfStats"},"errorMessage":{"type":"string"},"errorReport":{"type":"string"},"deleted":{"type":"boolean"},"projectDir":{"type":"string"},"homeDir":{"type":"string"},"container":{"type":"string"},"repository":{"type":"string"},"containerEngine":{"type":"string"},"scriptFile":{"type":"string"},"launchDir":{"type":"string"},"duration":{"type":"integer","format":"int64"},"exitStatus":{"type":"integer","format":"int32"},"resume":{"type":"boolean"},"success":{"type":"boolean"}},"title":"WorkflowDbDto"},"progress":{"type":"object","properties":{"workflowProgress":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"executors":{"type":"array","items":{"type":"string"}},"cpus":{"type":"integer","format":"int64"},"cpuTime":{"type":"integer","format":"int64"},"cpuLoad":{"type":"integer","format":"int64"},"memoryRss":{"type":"integer","format":"int64"},"memoryReq":{"type":"integer","format":"int64"},"readBytes":{"type":"integer","format":"int64"},"writeBytes":{"type":"integer","format":"int64"},"volCtxSwitch":{"type":"integer","format":"int64"},"invCtxSwitch":{"type":"integer","format":"int64"},"loadTasks":{"type":"integer","format":"int64"},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"},"cost":{"type":"number"},"netCpus":{"type":"integer","format":"int64"},"netCpuTime":{"type":"integer","format":"int64"},"netCpuLoad":{"type":"integer","format":"int64"},"netMemoryRss":{"type":"integer","format":"int64"},"netMemoryReq":{"type":"integer","format":"int64"},"netMemoryConsumption":{"type":"number"},"netReadBytes":{"type":"integer","format":"int64"},"netWriteBytes":{"type":"integer","format":"int64"},"netVolCtxSwitch":{"type":"integer","format":"int64"},"netInvCtxSwitch":{"type":"integer","format":"int64"},"netCost":{"type":"number"}},"title":"WorkflowLoad"},"processesProgress":{"type":"array","items":{"required":["aborted","cached","cpuLoad","cpuTime","cpus","failed","ignored","invCtxSwitch","loadCpus","loadMemory","loadTasks","memoryReq","memoryRss","peakCpus","peakMemory","peakTasks","pending","process","readBytes","retries","running","submitted","succeeded","volCtxSwitch","writeBytes"],"type":"object","properties":{"pending":{"type":"integer","format":"int64"},"submitted":{"type":"integer","format":"int64"},"running":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64"},"failed":{"type":"integer","format":"int64"},"cached":{"type":"integer","format":"int64"},"aborted":{"type":"integer","format":"int64"},"retries":{"type":"integer","format":"int64"},"ignored":{"type":"integer","format":"int64"},"memoryEfficiency":{"type":"number","format":"float"},"cpuEfficiency":{"type":"number","format":"float"},"dateCreated":{"type":"string","format":"date-time"},"lastUpdated":{"type":"string","format":"date-time"},"version":{"type":"integer","format":"int64"},"process":{"type":"string"},"cpus":{"type":"integer","format":"int64","deprecated":true},"cpuTime":{"type":"integer","format":"int64","deprecated":true},"cpuLoad":{"type":"integer","format":"int64","deprecated":true},"memoryRss":{"type":"integer","format":"int64","deprecated":true},"memoryReq":{"type":"integer","format":"int64","deprecated":true},"readBytes":{"type":"integer","format":"int64","deprecated":true},"writeBytes":{"type":"integer","format":"int64","deprecated":true},"volCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"invCtxSwitch":{"type":"integer","format":"int64","deprecated":true},"loadTasks":{"type":"integer","format":"int64","deprecated":true},"loadCpus":{"type":"integer","format":"int64"},"loadMemory":{"type":"integer","format":"int64"},"peakCpus":{"type":"integer","format":"int64"},"peakTasks":{"type":"integer","format":"int64"},"peakMemory":{"type":"integer","format":"int64"}},"title":"ProcessLoad"}},"totalProcesses":{"type":"integer","format":"int32"}},"title":"ProgressData"},"orgId":{"type":"integer","format":"int64"},"orgName":{"type":"string"},"workspaceId":{"type":"integer","format":"int64"},"workspaceName":{"type":"string"},"labels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Label numeric identifier."},"name":{"type":"string","description":"Label key name."},"value":{"type":"string","description":"Label value."},"resource":{"type":"boolean","description":"Whether this is a resource label (applied to workflow tasks for compute resource allocation)."},"isDefault":{"type":"boolean","description":"Whether this label is automatically applied to new resources by default."},"isDynamic":{"type":"boolean","description":"Whether this label's value can be dynamically computed from workflow metadata."},"isInterpolated":{"type":"boolean","description":"Whether this label contains interpolated variables resolved at runtime."},"dateCreated":{"type":"string","format":"date-time","description":"Timestamp when the label was created."}},"description":"Label object for categorizing and organizing resources (workflows, pipelines, compute environments, actions, datasets).","title":"LabelDbDto"}},"starred":{"type":"boolean"},"optimized":{"type":"boolean"},"pipelineInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Pipeline numeric identifier."},"workspaceId":{"type":"integer","format":"int64","description":"Workspace numeric identifier where the pipeline is located."},"version":{"description":"Pipeline version information.","type":"object","properties":{"id":{"type":"string","description":"Pipeline version string identifier."},"name":{"type":"string","description":"Pipeline version name."},"dateCreated":{"type":"string","format":"date-time","description":"Date and time the version was created, in ISO 8601 format."},"lastUpdated":{"type":"string","format":"date-time","description":"Date and time the version was last updated, in ISO 8601 format."},"hash":{"type":"string","description":"Git commit hash for this version."},"isDefault":{"type":"boolean","description":"Whether this version is the default version."},"isDraftVersion":{"type":"boolean","description":"Whether this version is a draft (unpublished) version."}},"title":"PipelineMinInfoResponse.PipelineVersionMinInfoResponse"}},"title":"PipelineMinInfoResponse"}},"title":"ListWorkflowsResponse.ListWorkflowsElement"}},"totalSize":{"type":"integer","format":"int64"},"hasMore":{"type":"boolean"}},"title":"ListWorkflowsResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/list-workflows.api.mdx b/platform-api-docs/docs/list-workflows.api.mdx
index 7f30967b5..8d37396a4 100644
--- a/platform-api-docs/docs/list-workflows.api.mdx
+++ b/platform-api-docs/docs/list-workflows.api.mdx
@@ -5,7 +5,7 @@ description: "Lists all workflow records, enriched with `attributes`. Append `?w
sidebar_label: "List workflows"
hide_title: true
hide_table_of_contents: true
-api: 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
+api: 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
sidebar_class_name: "get api-method"
info_path: platform-api//seqera-api
custom_edit_url: null
diff --git a/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml b/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml
index f58bd0945..fcb2e80a6 100644
--- a/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml
+++ b/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml
@@ -7273,8 +7273,9 @@ paths:
parameters:
- name: attributes
in: query
- description: 'Additional attribute values to include in the response (`labels`,
- `optimized` status). Returns an empty value (`labels: null`) if omitted.'
+ description: Additional attribute values to include in the response. Supported
+ values are `optimized`, `labels`, `messages`, `minimal`, and `pipelineInfo`.
+ Returns `null` for attributes omitted from the request.
explode: false
schema:
type: array
@@ -7584,8 +7585,9 @@ paths:
format: int64
- name: attributes
in: query
- description: Comma-separated list of attributes to retrieve. Returns an empty
- value for each attribute not specified.
+ description: Comma-separated list of attributes to retrieve. Supported values
+ are `optimized`, `labels`, `messages`, `minimal`, and `pipelineInfo`.
+ Returns `null` for each attribute not specified.
explode: false
schema:
type: array
@@ -12199,7 +12201,7 @@ components:
type: object
properties:
workflow:
- $ref: '#/components/schemas/Workflow'
+ $ref: '#/components/schemas/WorkflowMaxDbDto'
progress:
$ref: '#/components/schemas/ProgressData'
platform:
@@ -12226,6 +12228,8 @@ components:
type: array
items:
type: string
+ pipelineInfo:
+ $ref: '#/components/schemas/PipelineMinInfoResponse'
DescribeWorkspaceResponse:
type: object
properties:
@@ -13498,6 +13502,8 @@ components:
totalSize:
type: integer
format: int64
+ hasMore:
+ type: boolean
ListWorkflowsResponse.ListWorkflowsElement:
type: object
properties:
@@ -13523,6 +13529,8 @@ components:
type: boolean
optimized:
type: boolean
+ pipelineInfo:
+ $ref: '#/components/schemas/PipelineMinInfoResponse'
ListWorkspacesAndOrgResponse:
type: object
properties:
@@ -16243,13 +16251,13 @@ components:
- labels
- messages
- minimal
- - pipelineVersion
+ - pipelineInfo
x-enum-varnames:
- optimized
- labels
- messages
- minimal
- - pipelineVersion
+ - pipelineInfo
WorkflowStatus:
type: string
enum:
From 07d71ada368509d427d7ce2273e22667da08bcb2 Mon Sep 17 00:00:00 2001
From: Llewellyn vd Berg <113503285+llewellyn-sl@users.noreply.github.com>
Date: Fri, 13 Mar 2026 13:21:20 +0200
Subject: [PATCH 2/5] docs: restore limited API example languages
---
docusaurus.config.js | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/docusaurus.config.js b/docusaurus.config.js
index aedcb2ea8..5edd2d30f 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -312,6 +312,44 @@ export default async function createConfigAsync() {
contextualSearch: false,
placeholder: 'Search Seqera docs...',
},
+ languageTabs: [
+ {
+ highlight: "python",
+ language: "python",
+ logoClass: "python",
+ },
+ {
+ highlight: "bash",
+ language: "curl",
+ logoClass: "curl",
+ },
+ {
+ highlight: "java",
+ language: "java",
+ logoClass: "java",
+ variant: "unirest",
+ },
+ {
+ highlight: "r",
+ language: "r",
+ logoClass: "r",
+ },
+ {
+ highlight: "javascript",
+ language: "javascript",
+ logoClass: "javascript",
+ },
+ {
+ highlight: "go",
+ language: "go",
+ logoClass: "go",
+ },
+ {
+ highlight: "powershell",
+ language: "powershell",
+ logoClass: "powershell",
+ },
+ ],
prism: {
additionalLanguages: [
"bash",
From 2e8aa9a5ee39f810d76ac1c0eb7a352868fe85d0 Mon Sep 17 00:00:00 2001
From: Llewellyn vd Berg <113503285+llewellyn-sl@users.noreply.github.com>
Date: Mon, 16 Mar 2026 16:06:19 +0200
Subject: [PATCH 3/5] docs: add FGA platform api docs
---
.../docs/check-permission.ParamsDetails.json | 1 +
.../docs/check-permission.RequestSchema.json | 1 +
.../docs/check-permission.StatusCodes.json | 1 +
.../docs/check-permission.api.mdx | 66 ++
.../docs/create-role.ParamsDetails.json | 1 +
.../docs/create-role.RequestSchema.json | 1 +
.../docs/create-role.StatusCodes.json | 1 +
platform-api-docs/docs/create-role.api.mdx | 66 ++
.../docs/delete-role.ParamsDetails.json | 1 +
.../docs/delete-role.RequestSchema.json | 1 +
.../docs/delete-role.StatusCodes.json | 1 +
platform-api-docs/docs/delete-role.api.mdx | 66 ++
.../docs/describe-role.ParamsDetails.json | 1 +
.../docs/describe-role.RequestSchema.json | 1 +
.../docs/describe-role.StatusCodes.json | 1 +
platform-api-docs/docs/describe-role.api.mdx | 66 ++
.../info/parameter-tables/orgs/parameters.yml | 5 +
.../permissions/parameters.yml | 15 +
.../parameter-tables/roles/parameters.yml | 30 +
.../parameter-tables/roles/request-bodies.yml | 32 +
.../docs/info/permissions.info.api.mdx | 24 +
.../docs/info/roles.info.api.mdx | 28 +
...list-available-features.ParamsDetails.json | 1 +
...list-available-features.RequestSchema.json | 1 +
.../list-available-features.StatusCodes.json | 1 +
.../docs/list-available-features.api.mdx | 66 ++
.../list-role-permissions.ParamsDetails.json | 1 +
.../list-role-permissions.RequestSchema.json | 1 +
.../list-role-permissions.StatusCodes.json | 1 +
.../docs/list-role-permissions.api.mdx | 66 ++
.../docs/list-roles.ParamsDetails.json | 1 +
.../docs/list-roles.RequestSchema.json | 1 +
.../docs/list-roles.StatusCodes.json | 1 +
platform-api-docs/docs/list-roles.api.mdx | 66 ++
...r-roles-in-organization.ParamsDetails.json | 1 +
...r-roles-in-organization.RequestSchema.json | 1 +
...ser-roles-in-organization.StatusCodes.json | 1 +
.../list-user-roles-in-organization.api.mdx | 66 ++
.../retrieve-permissions.ParamsDetails.json | 1 +
.../retrieve-permissions.RequestSchema.json | 1 +
.../retrieve-permissions.StatusCodes.json | 1 +
.../docs/retrieve-permissions.api.mdx | 66 ++
platform-api-docs/docs/sidebar.ts | 78 ++
.../docs/update-role.ParamsDetails.json | 1 +
.../docs/update-role.RequestSchema.json | 1 +
.../docs/update-role.StatusCodes.json | 1 +
platform-api-docs/docs/update-role.api.mdx | 66 ++
.../validate-role-name.ParamsDetails.json | 1 +
.../validate-role-name.RequestSchema.json | 1 +
.../docs/validate-role-name.StatusCodes.json | 1 +
.../docs/validate-role-name.api.mdx | 66 ++
.../specs/seqera-api-latest-decorated.yml | 749 ++++++++++++++++++
52 files changed, 1720 insertions(+)
create mode 100644 platform-api-docs/docs/check-permission.ParamsDetails.json
create mode 100644 platform-api-docs/docs/check-permission.RequestSchema.json
create mode 100644 platform-api-docs/docs/check-permission.StatusCodes.json
create mode 100644 platform-api-docs/docs/check-permission.api.mdx
create mode 100644 platform-api-docs/docs/create-role.ParamsDetails.json
create mode 100644 platform-api-docs/docs/create-role.RequestSchema.json
create mode 100644 platform-api-docs/docs/create-role.StatusCodes.json
create mode 100644 platform-api-docs/docs/create-role.api.mdx
create mode 100644 platform-api-docs/docs/delete-role.ParamsDetails.json
create mode 100644 platform-api-docs/docs/delete-role.RequestSchema.json
create mode 100644 platform-api-docs/docs/delete-role.StatusCodes.json
create mode 100644 platform-api-docs/docs/delete-role.api.mdx
create mode 100644 platform-api-docs/docs/describe-role.ParamsDetails.json
create mode 100644 platform-api-docs/docs/describe-role.RequestSchema.json
create mode 100644 platform-api-docs/docs/describe-role.StatusCodes.json
create mode 100644 platform-api-docs/docs/describe-role.api.mdx
create mode 100644 platform-api-docs/docs/info/parameter-tables/permissions/parameters.yml
create mode 100644 platform-api-docs/docs/info/parameter-tables/roles/parameters.yml
create mode 100644 platform-api-docs/docs/info/parameter-tables/roles/request-bodies.yml
create mode 100644 platform-api-docs/docs/info/permissions.info.api.mdx
create mode 100644 platform-api-docs/docs/info/roles.info.api.mdx
create mode 100644 platform-api-docs/docs/list-available-features.ParamsDetails.json
create mode 100644 platform-api-docs/docs/list-available-features.RequestSchema.json
create mode 100644 platform-api-docs/docs/list-available-features.StatusCodes.json
create mode 100644 platform-api-docs/docs/list-available-features.api.mdx
create mode 100644 platform-api-docs/docs/list-role-permissions.ParamsDetails.json
create mode 100644 platform-api-docs/docs/list-role-permissions.RequestSchema.json
create mode 100644 platform-api-docs/docs/list-role-permissions.StatusCodes.json
create mode 100644 platform-api-docs/docs/list-role-permissions.api.mdx
create mode 100644 platform-api-docs/docs/list-roles.ParamsDetails.json
create mode 100644 platform-api-docs/docs/list-roles.RequestSchema.json
create mode 100644 platform-api-docs/docs/list-roles.StatusCodes.json
create mode 100644 platform-api-docs/docs/list-roles.api.mdx
create mode 100644 platform-api-docs/docs/list-user-roles-in-organization.ParamsDetails.json
create mode 100644 platform-api-docs/docs/list-user-roles-in-organization.RequestSchema.json
create mode 100644 platform-api-docs/docs/list-user-roles-in-organization.StatusCodes.json
create mode 100644 platform-api-docs/docs/list-user-roles-in-organization.api.mdx
create mode 100644 platform-api-docs/docs/retrieve-permissions.ParamsDetails.json
create mode 100644 platform-api-docs/docs/retrieve-permissions.RequestSchema.json
create mode 100644 platform-api-docs/docs/retrieve-permissions.StatusCodes.json
create mode 100644 platform-api-docs/docs/retrieve-permissions.api.mdx
create mode 100644 platform-api-docs/docs/update-role.ParamsDetails.json
create mode 100644 platform-api-docs/docs/update-role.RequestSchema.json
create mode 100644 platform-api-docs/docs/update-role.StatusCodes.json
create mode 100644 platform-api-docs/docs/update-role.api.mdx
create mode 100644 platform-api-docs/docs/validate-role-name.ParamsDetails.json
create mode 100644 platform-api-docs/docs/validate-role-name.RequestSchema.json
create mode 100644 platform-api-docs/docs/validate-role-name.StatusCodes.json
create mode 100644 platform-api-docs/docs/validate-role-name.api.mdx
diff --git a/platform-api-docs/docs/check-permission.ParamsDetails.json b/platform-api-docs/docs/check-permission.ParamsDetails.json
new file mode 100644
index 000000000..22c89b9c2
--- /dev/null
+++ b/platform-api-docs/docs/check-permission.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"query","description":"Organization numeric identifier.","schema":{"type":"integer","format":"int64"}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier.","schema":{"type":"integer","format":"int64"}},{"name":"operationId","in":"query","description":"Operation identifier to check in the selected context.","required":true,"schema":{"type":"string"}}]}
diff --git a/platform-api-docs/docs/check-permission.RequestSchema.json b/platform-api-docs/docs/check-permission.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/check-permission.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/check-permission.StatusCodes.json b/platform-api-docs/docs/check-permission.StatusCodes.json
new file mode 100644
index 000000000..0d57dccdb
--- /dev/null
+++ b/platform-api-docs/docs/check-permission.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Result of checking whether the authenticated user can perform a given operation in the selected context.","properties":{"authorized":{"type":"boolean","description":"Whether the authenticated user is authorized to perform the requested operation."}},"title":"CheckPermissionResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/check-permission.api.mdx b/platform-api-docs/docs/check-permission.api.mdx
new file mode 100644
index 000000000..2f1846f38
--- /dev/null
+++ b/platform-api-docs/docs/check-permission.api.mdx
@@ -0,0 +1,66 @@
+---
+id: check-permission
+title: "Check permission"
+description: "Checks whether the authenticated user is allowed to perform the given operation in the specified user, organization, or workspace context."
+sidebar_label: "Check permission"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNVU1v20YQ/SuLOTUAIdlp2oNOcYI0MHqo4aTowdBhvRyRa5O769mhXYXgfy9m+SHKUqwkyKEnidzhzHtv3s60wLqIsLqBgFTbGK13EdYZ5BgN2cDWO1jB+xLNfVRPJXKJpLhEpRsu0bE1mjFXTURSNipdVf4Jc8VeBaSNpzoFF/YRnfIBSUtGZV16HQMau7HD95nyVGhnv6QYeVJPnu5j0AaV8Y7xX15ABlOay3yEdjWBhwyCJl0jIwmvFpyuEVbgqbjMIQMrfB4apC08Z/nXrLxyTY1kjbK5sNxYJKkdTYm1hlULvA2S1jrGAgkyELKa+1e/v4Guy6baE41TCP6Z+P7M8nPBXhZg16CprLTSiMZT07BCIz2ftYTwobGEOayYGjyCMzJZV0DXrSU4Bu8iRjl/fXYmP89w/AkZpPSO5VSHUInRrHfLuygh7WEJf3uHhg84XWNsKlZ+07OwrjhlY6PdZF79VeseUSGQhLHtmUlmT/aLqDKBvPW+Qu0OG3/6Zk3pnl8uER+jxE4oF9J/YMsVHl6R60F/6DqJenOsA+90Pub9nlbsfHADNcaoC5Rh8rxD+0KNgUfcsuPwgcjTAfJfj3hn6pTzPM6jlCqiacjyNk2Fd6gJ6aLhElY3a7FljVx6mSgFJoxajmA5m4vL5CC5hkiP43hpqIIVlMwhrpZLHezCVL7JFxEfkPTC+oNef0on6qrSnHr4XuLVxdUlCIwR5ScRtRdojnXSSCqOEyE5KwVBNvz5YxwHd0+c2Fu38enzQdABhZQ9BVDoWoNxCBY3aJPcsE9+Thlrbas0jTb+7e6gy0CU6+ucL87Pf1ucycvgI9c6uWkYWsm0KswH+x7KdufK/9d6Gvojj8tQaeuEXxKqHUy1v2wz6G21zqD0keW4bW91xL+p6jp53Q9rMVtuo76t5H5tdBXxBUm+YZcdBXqP29myfNRVIzEg2+Tbi59aYy9U3l+VP1j/l+thDr1SP7zSXlJnb5/uMK7lgayATEMlgxJ1jpRa1396YQwGnn11ME/3RtHHD58hS5tkvkP2b3rKPhxpt53lbts+4rO/R9d1MOJneYZu3XXdf3bGgLk=
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Checks whether the authenticated user is allowed to perform the given operation in the specified user, organization, or workspace context.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/create-role.ParamsDetails.json b/platform-api-docs/docs/create-role.ParamsDetails.json
new file mode 100644
index 000000000..dd9160da2
--- /dev/null
+++ b/platform-api-docs/docs/create-role.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/create-role.RequestSchema.json b/platform-api-docs/docs/create-role.RequestSchema.json
new file mode 100644
index 000000000..2aae28379
--- /dev/null
+++ b/platform-api-docs/docs/create-role.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"description":"Role create request","content":{"application/json":{"schema":{"type":"object","description":"Request payload for creating a custom role in an organization.","properties":{"name":{"type":"string","description":"Role name."},"description":{"type":"string","description":"Role description."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission names assigned to the role."}},"title":"CreateRoleRequest"}}},"required":true}}
diff --git a/platform-api-docs/docs/create-role.StatusCodes.json b/platform-api-docs/docs/create-role.StatusCodes.json
new file mode 100644
index 000000000..484fb0ed5
--- /dev/null
+++ b/platform-api-docs/docs/create-role.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","description":"Created role details.","properties":{"name":{"type":"string","description":"Role name."},"description":{"type":"string","description":"Role description."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission names assigned to the role."}},"title":"CreateRoleResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"},"409":{"description":"Duplicate role name","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}}}}
diff --git a/platform-api-docs/docs/create-role.api.mdx b/platform-api-docs/docs/create-role.api.mdx
new file mode 100644
index 000000000..a2f4280cd
--- /dev/null
+++ b/platform-api-docs/docs/create-role.api.mdx
@@ -0,0 +1,66 @@
+---
+id: create-role
+title: "Create role"
+description: "Creates a custom role in the organization identified by `orgId`."
+sidebar_label: "Create role"
+hide_title: true
+hide_table_of_contents: true
+api: eJztVktv4zYQ/ivEnFpAtZN2W6A+NUm3QIACCZL0ZBjYiTS2maVIhRwl6wr878WQki1b+0Kxhx56k8h5fDPfPNgB4ybAYgneGQqwKqCiUHrdsHYWFnDlCZmCQlW2gV2tRE5pq3hLyvkNWv03iqzSFVnWa02Vetypd85vrqt3MyjANeSTyHW1N3jnDEEBDXqsickLhA4s1gQLSKpQgBYAzy35HZzCuhl7tm1NXpcHBF7cenputacKFuxbKiCUW6oRFh3wrhE32jJtyEMBa+dr5Hz0yxuIcZXVKfClq3aic+xe4KsyRaJ6QSigdJbJsohj0xhdJnjzpyA63RSAe3yikiex3WWDqsGdcViptfPZl7abKQ9oj2iQyBsvKWdNQZzlpO6dBvbabqZOxZyIziCe3H2V6ugoWWjI1zoE7WwYWUDvUcjUTHWYWj71DH/qwMqt1cFawhgUhqA3lirFLlWiZGMGMRbAmg0d1VmfT4hyfVwV6SA0zoacqx/PzqdkZ0vVtyO4N5gprIhRm/A/bx/hLTMjxMUC3pydTbm5xOrfNOChCpZQUwi4IRl9p7QdEzIITsMfwX/rvfMT5D9Nkd8MU1FZxwqNca9UQZL+dSr9e5vDyRlLyfyvxhsLCFS2XvMuDfVLQk/+ouUtLJYrGa018dbJLmhcoq1BuYN5XkGi7l+GldB6AwvYMjdhMZ9jo2elcW01C/RMHmfaTcr6Pt2oW4Msc11diby6uL0G8T1Au5fc5DjHAPehikfol4b8PyYhKPqPP4aN8fTKKR+S87vDynj7AevG0KGPP9WE++OjxlsO56soa3DtErI+5X2AEtGXYpdM6pJCLyz1gmWql+O8jrNJNWqTduHa/Xa4iAUIKdnP+ez8/OfZWRoYLnCNdhTpVb8X84o/GUn7kv0WL4ueK6YPPG8MaiuAUmRdX1Sjd81Wim2xhK57xEB/eROjHOf3hZRapQM+GmmSNZpAn4H+3V3fT9+rr3iIfBTle9qNXjovaFqRSSX6gl4LkNQuBWwJK/IJYVa6yjh+eBC7B93JBIjFoHFRltTwZ2XHbXl7c/8gld4/fWpXiY7HV3lV4avglFcdD0sinXVg0G7aNDAg25S+wOO2OmmjFNWwY+xuhLDrssSDe082RhgyxvIPcRVj/AcSGbud
+sidebar_class_name: "post api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Creates a custom role in the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/delete-role.ParamsDetails.json b/platform-api-docs/docs/delete-role.ParamsDetails.json
new file mode 100644
index 000000000..178f18516
--- /dev/null
+++ b/platform-api-docs/docs/delete-role.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"roleName","in":"path","description":"Role name.","required":true,"schema":{"type":"string"}},{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/delete-role.RequestSchema.json b/platform-api-docs/docs/delete-role.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/delete-role.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/delete-role.StatusCodes.json b/platform-api-docs/docs/delete-role.StatusCodes.json
new file mode 100644
index 000000000..990d6f9b3
--- /dev/null
+++ b/platform-api-docs/docs/delete-role.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"204":{"description":"OK - No content"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"},"404":{"description":"Role not found","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}}}}
diff --git a/platform-api-docs/docs/delete-role.api.mdx b/platform-api-docs/docs/delete-role.api.mdx
new file mode 100644
index 000000000..060906bbc
--- /dev/null
+++ b/platform-api-docs/docs/delete-role.api.mdx
@@ -0,0 +1,66 @@
+---
+id: delete-role
+title: "Delete role"
+description: "Deletes the role identified by `roleName` in the organization identified by `orgId`."
+sidebar_label: "Delete role"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNVF1vEzEQ/CvWPoFkkhQKD/dES4NUgUrVlqcqUp27TeLWZ1/tvZZw8n9H67vLt6BCQuIpOXvsmVnPbgOk5gGyW/DOYICJhAJD7nVF2lnI4AwNEgZBCxQMEbpAS3qmsRDTpbjjtQtV4p3QNoGcnyurfyo+vwt2fn5e3A1AgqvQJ8h5sSK5cgZBQqW8KpHQs6wGrCoRMuh5QIJmXZWiBeyK5RsEH2AKj4+19lhARr5GCSFfYKkga4CWFV8ZyGs7hxjliiUJ7Ckea/TLPY5vm/5sXaLX+dqnfxGztoRz9CBh5nypqF36cAwxTvh4qJwNGPjE29Ex/+xo+CLeiAsncmcJLUGUcDwa7eNOVSFYDAYCCT06a0BVldF58jC8D4xtNlSu9d9CiSGoOXIwOvFueo8531d5fkXSrdAeeKi+QJoML429d/6q8wcxxqT83QGHfT6EdSSUMe4Zi9bngXq07+5IzFxti//VapQQMK+9pmVK9ikqj/6kpgVktxN++RJp4bghitQQqRl4F4apO4dN3wUR+C7/1DdJ7Q1ksCCqQjYcqkoPcuPqYhDwEb0aaLcX4+u0Iy6NIs6g+MR4cXJ5Diyk13nNhWpNb6pd+WZG6ALO39MEAtn9+dyn+/6ZUnG0nbl0vCtSp4Jp/ySQ7eocQwfmF1Z5euFt85uWsVTapOaauY/rjSiBK9fyHA2Ojt4PRrxYuUClSgnp5kE7mNLg2xXYrEP2r4ZkV2TCHzSsjNKWRSa3TReMfmxLyFYDciJh4QLxZtNMVcDv3sTIy+1A47wUOqip4djPlAn4G2uvrroOeS1eMPkOKn7A5cZofVKmZkzK2ZPymoX8vaitkX+QvltUdrnJ3stalS1OooQFqgJ9UtNun+Q5VrRxcG+cbPXt2fjr+GYMEtR2n+z0RSI4qKtpWsSNe0Ab40om8TdrjPEXrVGkrw==
+sidebar_class_name: "delete api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Deletes the role identified by `roleName` in the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/describe-role.ParamsDetails.json b/platform-api-docs/docs/describe-role.ParamsDetails.json
new file mode 100644
index 000000000..178f18516
--- /dev/null
+++ b/platform-api-docs/docs/describe-role.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"roleName","in":"path","description":"Role name.","required":true,"schema":{"type":"string"}},{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/describe-role.RequestSchema.json b/platform-api-docs/docs/describe-role.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/describe-role.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/describe-role.StatusCodes.json b/platform-api-docs/docs/describe-role.StatusCodes.json
new file mode 100644
index 000000000..4ed7c04c7
--- /dev/null
+++ b/platform-api-docs/docs/describe-role.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Role description response.","properties":{"role":{"type":"object","description":"Role details with assigned permissions.","properties":{"name":{"type":"string","description":"Role name."},"description":{"type":"string","description":"Role description."},"isPredefined":{"type":"boolean","description":"Whether the role is predefined by the system."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission names assigned to the role."}},"title":"RoleDto"}},"title":"DescribeRoleResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"},"404":{"description":"Role not found","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}}}}
diff --git a/platform-api-docs/docs/describe-role.api.mdx b/platform-api-docs/docs/describe-role.api.mdx
new file mode 100644
index 000000000..17dd2885f
--- /dev/null
+++ b/platform-api-docs/docs/describe-role.api.mdx
@@ -0,0 +1,66 @@
+---
+id: describe-role
+title: "Describe role"
+description: "Retrieves the details of the role identified by `roleName` in the organization identified by `orgId`."
+sidebar_label: "Describe role"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNVktv20YQ/iuLOTUAIdmN2wNPcR4tjBSt4aTIwRDgFTkS1yF36Z2hXZXY/17M8iFKFBInh6AnSTuzM988vm/VAustQXoL3pVIsEogR8q8qdk4CyncIHuDj0iKC1Q5sjYlKbeJP+WOMjlaNhuDuVrv1J2c/akrvFPGRifnt9qaf7UEPHZ2fnuV3y0gAVejjy5XOaTwNmJY440rERKotdcVMnpB2oLVFUIKQyZIwAjUWnMBM/wCUS5IEo8PjfGYQ8q+wQQoK7DSkLbAu1pCEntjtxBCMmaJEIcUDw363SzHX9MKbVOhN9m+Uv+szMYybtFDAhvnK83d0a8XEMJKrlPtLCHJjZ/PzuTjCMN7SCBzltGyWHVdlyaLkJb3JC7tPKlb32PGp3s2OVJDeqmk9jIqNh0WmcGzA3a782S4UJrIbC3mqkZfGSLjLM2jdyM4ns4XRhyObM+6OjmKEQxde8xxY6zMawyxdq5EbWcxPhXIBfoJIUjVYwBZc7HQjhirGH9S8iS89l7LahnGik6s5HHaPwyx8HAfLfaA9q1lN2JayEoDG5Zpxarfsjs4mzLuph83hCAuF6f27bXOlSw1En/L4u15cAsVEuktiuYcr8/hGgyOp3g6FvDOe+dnyF+eYMqgNMo6Vros3RPmEL0v5t7dcjlWG9fY/P9aakiAMGu84V1UyNeoPfrLhgtIb1eiIBVy4URatxizilamsIyqv2wHKQ0ggfzjoLSNLyGFgrmmdLnUtVlkpWvyBeEDer0wbsaGD9GirkvNImTqjfiry+srEBQDyA/Spa7iKdSxaMkIvUpG7kUnSPovvw0Sef/EsTPGbly83neoRyFpvwZQyjUZUu8s49VZHO9h8dOSsdKmjAq9ca/2hpCAdK7Lc744P/9lcRYJ74grbfeKNrItkvMYYrvfsR/2/PZ9Z/yHl3WpjRXcsQFtvyvDP4QE0vHhXSVQOGIxtu1aE/7tyxDkuHsoZYVyQ3pdCg02uiT8Qq0/3fSMeaGe8aKeRPwZd5Mn+1GXjfjE1XvU3giQ7wd18FfiZPpByu1umn2ANbYtrEICBeocfUTTmS+zDGueXJzJywGPf3/3ERLQh7w54kmMfhJU23YeH91ntCGMGFl+C8AQ/gPQ14A9
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Retrieves the details of the role identified by `roleName` in the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/info/parameter-tables/orgs/parameters.yml b/platform-api-docs/docs/info/parameter-tables/orgs/parameters.yml
index f9c63961c..ca4a68923 100644
--- a/platform-api-docs/docs/info/parameter-tables/orgs/parameters.yml
+++ b/platform-api-docs/docs/info/parameter-tables/orgs/parameters.yml
@@ -39,3 +39,8 @@
Req/Opt: Optional
Description: Optional array of specific quota names to include in the response.
Omit to retrieve all quotas.
+- Name: "`userId`"
+ Type: integer
+ Location: path
+ Req/Opt: Required
+ Description: User numeric identifier.
diff --git a/platform-api-docs/docs/info/parameter-tables/permissions/parameters.yml b/platform-api-docs/docs/info/parameter-tables/permissions/parameters.yml
new file mode 100644
index 000000000..fb2519b61
--- /dev/null
+++ b/platform-api-docs/docs/info/parameter-tables/permissions/parameters.yml
@@ -0,0 +1,15 @@
+- Name: "`orgId`"
+ Type: integer
+ Location: query
+ Req/Opt: Optional
+ Description: Organization numeric identifier.
+- Name: "`workspaceId`"
+ Type: integer
+ Location: query
+ Req/Opt: Optional
+ Description: Workspace numeric identifier.
+- Name: "`operationId`"
+ Type: string
+ Location: query
+ Req/Opt: Required
+ Description: Operation identifier to check in the selected context.
diff --git a/platform-api-docs/docs/info/parameter-tables/roles/parameters.yml b/platform-api-docs/docs/info/parameter-tables/roles/parameters.yml
new file mode 100644
index 000000000..9931605d5
--- /dev/null
+++ b/platform-api-docs/docs/info/parameter-tables/roles/parameters.yml
@@ -0,0 +1,30 @@
+- Name: "`orgId`"
+ Type: integer
+ Location: query
+ Req/Opt: Required
+ Description: Organization numeric identifier.
+- Name: "`max`"
+ Type: integer
+ Location: query
+ Req/Opt: Optional
+ Description: "Maximum number of results to return. Default: `50`. Maximum: `100`."
+- Name: "`offset`"
+ Type: integer
+ Location: query
+ Req/Opt: Optional
+ Description: "Number of results to skip for pagination. Default: `0`."
+- Name: "`name`"
+ Type: string
+ Location: query
+ Req/Opt: Optional
+ Description: Role name search filter.
+- Name: "`type`"
+ Type: string
+ Location: query
+ Req/Opt: Optional
+ Description: Role type filter.
+- Name: "`roleName`"
+ Type: string
+ Location: path
+ Req/Opt: Required
+ Description: Role name.
diff --git a/platform-api-docs/docs/info/parameter-tables/roles/request-bodies.yml b/platform-api-docs/docs/info/parameter-tables/roles/request-bodies.yml
new file mode 100644
index 000000000..8ac1cbe51
--- /dev/null
+++ b/platform-api-docs/docs/info/parameter-tables/roles/request-bodies.yml
@@ -0,0 +1,32 @@
+- Name: "**CreateRole**"
+ Type: ""
+ Req/Opt: ""
+ Description: Create role
+- Name: name
+ Type: string
+ Req/Opt: Optional
+ Description: Role name.
+- Name: description
+ Type: string
+ Req/Opt: Optional
+ Description: Role description.
+- Name: permissions
+ Type: array
+ Req/Opt: Optional
+ Description: List of permission names assigned to the role.
+- Name: "**UpdateRole**"
+ Type: ""
+ Req/Opt: ""
+ Description: Update role
+- Name: name
+ Type: string
+ Req/Opt: Optional
+ Description: Role name.
+- Name: description
+ Type: string
+ Req/Opt: Optional
+ Description: Role description.
+- Name: permissions
+ Type: array
+ Req/Opt: Optional
+ Description: List of permission names assigned to the role.
diff --git a/platform-api-docs/docs/info/permissions.info.api.mdx b/platform-api-docs/docs/info/permissions.info.api.mdx
new file mode 100644
index 000000000..84e16a253
--- /dev/null
+++ b/platform-api-docs/docs/info/permissions.info.api.mdx
@@ -0,0 +1,24 @@
+---
+id: permissions-info
+title: "Permissions"
+description: "API operations for frontend-visible permissions and feature availability in Seqera Platform"
+sidebar_label: Permissions
+hide_title: false
+custom_edit_url: null
+---
+
+import ApiLogo from "@theme/ApiLogo";
+import Heading from "@theme/Heading";
+import SchemaTabs from "@theme/SchemaTabs";
+import TabItem from "@theme/TabItem";
+import Export from "@theme/ApiExplorer/Export";
+import MDXComponents from "@theme-original/MDXComponents";
+
+
+Use these endpoints to inspect the authenticated user's effective roles, allowed operations, and available features in a personal workspace context or an organization workspace context.
+
+The `Check permission` endpoint accepts an `operationId` query parameter using the operation identifier returned by `Retrieve permissions`.
+
+### Path and query parameters
+
+::table{file=parameter-tables/permissions/parameters.yml}
diff --git a/platform-api-docs/docs/info/roles.info.api.mdx b/platform-api-docs/docs/info/roles.info.api.mdx
new file mode 100644
index 000000000..509afe140
--- /dev/null
+++ b/platform-api-docs/docs/info/roles.info.api.mdx
@@ -0,0 +1,28 @@
+---
+id: roles-info
+title: "Roles"
+description: "API operations for predefined and custom organization roles in Seqera Platform"
+sidebar_label: Roles
+hide_title: false
+custom_edit_url: null
+---
+
+import ApiLogo from "@theme/ApiLogo";
+import Heading from "@theme/Heading";
+import SchemaTabs from "@theme/SchemaTabs";
+import TabItem from "@theme/TabItem";
+import Export from "@theme/ApiExplorer/Export";
+import MDXComponents from "@theme-original/MDXComponents";
+
+
+Use these endpoints to list predefined and custom roles, discover assignable permissions, and create, update, validate, or delete custom roles in an organization context.
+
+Use `List role permissions` as the discovery endpoint for the permission names accepted by `Create role` and `Update role`.
+
+### Path and query parameters
+
+::table{file=parameter-tables/roles/parameters.yml}
+
+### Request body parameters
+
+::table{file=parameter-tables/roles/request-bodies.yml}
diff --git a/platform-api-docs/docs/list-available-features.ParamsDetails.json b/platform-api-docs/docs/list-available-features.ParamsDetails.json
new file mode 100644
index 000000000..4661c0329
--- /dev/null
+++ b/platform-api-docs/docs/list-available-features.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"query","description":"Organization numeric identifier.","schema":{"type":"integer","format":"int64"}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier.","schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/list-available-features.RequestSchema.json b/platform-api-docs/docs/list-available-features.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/list-available-features.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/list-available-features.StatusCodes.json b/platform-api-docs/docs/list-available-features.StatusCodes.json
new file mode 100644
index 000000000..16ed3d47c
--- /dev/null
+++ b/platform-api-docs/docs/list-available-features.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Features enabled in the selected context.","properties":{"features":{"type":"array","items":{"type":"string","description":"Feature flag identifier.","enum":["DATA_EXPLORER","DATA_STUDIO","MANAGED_IDENTITY","SEQERA_COMPUTE","DYNAMIC_RESOURCE_LABELS","CONTAINERS","METERING","SEQERA_COMPUTE_ENABLE_CE_TYPE_CHOICE","PIPELINE_VERSIONING","STUDIO_METRICS","DATA_STUDIO_CONNECT_IFRAME","DATA_STUDIO_SSH_ENABLED","SSH_KEYS_MANAGEMENT","SEQERA_AI_DEBUG_BUTTON","CUSTOM_ROLES","CE_FORMS_V2","AUDIT_LOG_V2"],"title":"FeatureId"},"description":"Feature identifiers enabled in the selected context."}},"title":"ListFeaturesResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/list-available-features.api.mdx b/platform-api-docs/docs/list-available-features.api.mdx
new file mode 100644
index 000000000..2872343cf
--- /dev/null
+++ b/platform-api-docs/docs/list-available-features.api.mdx
@@ -0,0 +1,66 @@
+---
+id: list-available-features
+title: "List available features"
+description: "Lists the feature flags enabled for the authenticated user in the specified organization or workspace context."
+sidebar_label: "List available features"
+hide_title: true
+hide_table_of_contents: true
+api: eJy9Vt9v4zYM/lcMPhtJe7vtIU9zErU1LrEz27mtOASGajOJWttyJbm9LvD/PlCJm1+9a4cBe2plUeT3kR/JbMDwlYbBN6hRlUJrISsNCxdy1JkStRGyggFMhDbaMWt0lshNo9BZFnylHaz4XYG5s5TK3vLGrLEyIuMGc6fRqBxR2RtdYyaWAnNHqhWvxN+cXDtSOc9SPeiaZ+hksjL43fTABVmjshZ+vgvvPXFRULSrLQINLtRc8RINKmKwgYqXCAOQauXn4IIg5I8Nqhc45RMeYqiaEpXIHJET9KVARQh0tsaSw2AD5qUmt6IyuEIFLiylKrnZfvrtM7St+xr7lcx7CP58Zf3fwy9cUKhrWWnU9OLTxQX9OaH8BVywGa4M3fK6LqhOQlb9e00mm/Og8u4eM3MGvivBa/27ImOBGVX+oJK1oloasYW27Iq3j8GV4pQfYbA8/K6NEtXqR7GtAE9yhlVTkpTHXuKl7K/ZJIxYBO72HCfzsR+CC1Mv8K7ZOPXHLEj85BZciNkfLPLSUTidzRNGL24Db+qP0ojF4TwasXTiDdkkBhdGYZB4fsAiOkxZwiI/uD5zkbLAG05YOmJpcjtj6egm9EfkeObP2MQPWPqVRbEfBrvHFls6ZUnkj+JjxOkoDAI2SlL/KvKm7OQyjm92scbkJ75Jv7DbON1ynLIg2UPz/HTMhvPrdDhPkjAgLvM4CadpFE6YpcbSqzCaxunXT+CCNx/7SToJr+m4cMEIU+A+/34O7Y9Ks6/KBxTStnvf1OedtqKdoqFtyeTzW5oe8txR+NigNv9G3PREKMxJKyVqzVdoGZ5o/li5neGZQA8JMKWkOkP+yxvd2M03p5LG4UUhnzG3rjRmjRLmxU60IXKFymvMGgbfFtToJZq1pJm4QouR0xX0D6Z3f7kfkBrVUzcdG1XAANbG1HrQ7/Na9LJCNnlP4yMq3hPyrNVie+PMCm5o5jgjsne8mQ+EpAMaU163OTqE+5omitgNNDrfWSNwd/9cddPs/tnYBIhqKe3zXU53KCjsewCJrshQ74xJEDyzgjgmf0gZSy4KO0yX8vf9ResCZW4b57J3eflr74I+1lKbkltB7UY+idbh3XZyDrJ/BHaz1+f/v053paBjvy64qIiKzclmJ6HjHwDuflAvXFhLbchis7njGueqaFv6vF1sJK1caAscBkteaPwJ8w8s3jexPuDLwWZ/4kVDNkCb9+PB39u5P4l8vNf38Rd0UIIA2A51YY08R2XTsn3qZRnW5uDV2XA66utrRjObH/fQSc9Y7936rF4OfG82W4tEPmDVttDhN3SGdtG27T/bxV/I
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Lists the feature flags enabled for the authenticated user in the specified organization or workspace context.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/list-role-permissions.ParamsDetails.json b/platform-api-docs/docs/list-role-permissions.ParamsDetails.json
new file mode 100644
index 000000000..8f1cfcce8
--- /dev/null
+++ b/platform-api-docs/docs/list-role-permissions.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"name","in":"query","description":"Permission name search filter.","schema":{"type":"string"}}]}
diff --git a/platform-api-docs/docs/list-role-permissions.RequestSchema.json b/platform-api-docs/docs/list-role-permissions.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/list-role-permissions.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/list-role-permissions.StatusCodes.json b/platform-api-docs/docs/list-role-permissions.StatusCodes.json
new file mode 100644
index 000000000..fa7344777
--- /dev/null
+++ b/platform-api-docs/docs/list-role-permissions.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Available role permissions.","properties":{"permissions":{"type":"array","items":{"type":"object","description":"Metadata for a role permission.","properties":{"name":{"type":"string","description":"Permission name."},"category":{"type":"string","description":"Permission category."}},"title":"RolePermissionResponseDto"},"description":"Permission definitions available for assignment to roles."}},"title":"ListRolePermissionsResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"},"404":{"description":"Not found","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}}}}
diff --git a/platform-api-docs/docs/list-role-permissions.api.mdx b/platform-api-docs/docs/list-role-permissions.api.mdx
new file mode 100644
index 000000000..beffbb7ef
--- /dev/null
+++ b/platform-api-docs/docs/list-role-permissions.api.mdx
@@ -0,0 +1,66 @@
+---
+id: list-role-permissions
+title: "List role permissions"
+description: "Lists the role permissions available for assignment in the organization identified by `orgId`."
+sidebar_label: "List role permissions"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNVUtv3EYM/isDnlpA2LUTtwed6qRJYPRlOOnJWCBcidKOI83IHMrpVtB/DziSvA9t7ORQoCc9yJnv4+tjB4JlgPQW2FcUYJVATiFj24j1DlL43QYJRjZk1ME0xLUNwXoXDD6grXBdkSk8GwzBlq4mJ8a6eMBzic7+i3qTsTk5sYWl3Ky35qPn8ir/uIAEfEMcXa7yEe7GV3S9w4EEGmSsSYiVaQcOa4IU4h2QgFWe9y3xFo7Z/7VPwbU1sc12VFjxme5by5RDKtxSAiHbUI2QdiDbRmGsEyqJIYHCc40y/Pr5Avo+eeQSH09S2UVk1NkEQs42prCVDERmwEHYuhL6fqUsQ+NdoKD2F2dn+jgK9TdIIPNOyIlasWkqm8XIl3dBXbo5hF/fUSYzrpePlT0uuhJtWGsmdiCzZ9y7GJlRc2CF6vA84B8kmKPg0EnHqHPQIevHmXom5QvoE8hQqPS8/a7T06GF1hzESqXnDvv0ZqzQr+IV56t35VRYZ+XpCRIfcxAOAU8Mx4QKfa+eF6c64xXmRrucgnxPi+wG4xZqCgFLUnk4LuRhYSbHE128i+MNs+cZ85cnenrSBuO8GKwq/5lyiN4Xc+8/vZjCty7/v0bZJxAoa9nKNurYK0ImvmxlA+ntSse8Jtl41cGSIiqqCZaxF5bNgSYG4odJEFuuIIWNSBPS5RIbu8gq3+aLQPfEuLB+1tzvo8VcVyiqaua1+pvL6ytQGhPL95qmIeR9ro9RK+KkXPq9jk6QjC9vJ728+ywxNdYVPh4fUzSyUNjnCGq4NqMwOmt9MYv1PQx+P2Sq0VZRrgv/y87QJ6CZG3DOF+fnPy3O9Gfjg9TodvoSB24mgcdUu12z/ffbcky80D+ybCq0TonHDHRjt0ybPDlQ5lUCGx9EzV23xkB/c9X3+nvYVtpFuQ3KL4e0wCrQE2H+cDNOzY/mGzbsSc6faLu3wh+watUHdKV+O49nd+oT0OPG3iGv9IOtQsdxTGBDmBPH3AxnLrOMGtk7NdOWgyF+9+YDJICHM3M0I/H2aWm67d7dXTd4fPCfyPU9TMRFv6Ff9X3/Ba+eZxw=
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Lists the role permissions available for assignment in the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/list-roles.ParamsDetails.json b/platform-api-docs/docs/list-roles.ParamsDetails.json
new file mode 100644
index 000000000..c96c2c57a
--- /dev/null
+++ b/platform-api-docs/docs/list-roles.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"max","in":"query","description":"Maximum number of results to return. Default: `50`. Maximum: `100`.","schema":{"type":"integer","format":"int32"}},{"name":"offset","in":"query","description":"Number of results to skip for pagination. Default: `0`.","schema":{"type":"integer","format":"int32"}},{"name":"name","in":"query","description":"Role name search filter.","schema":{"type":"string"}},{"name":"type","in":"query","description":"Role type filter.","schema":{"type":"string","enum":["predefined","custom"]}}]}
diff --git a/platform-api-docs/docs/list-roles.RequestSchema.json b/platform-api-docs/docs/list-roles.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/list-roles.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/list-roles.StatusCodes.json b/platform-api-docs/docs/list-roles.StatusCodes.json
new file mode 100644
index 000000000..ba5453116
--- /dev/null
+++ b/platform-api-docs/docs/list-roles.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Paginated role list response.","properties":{"roles":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Role name."},"description":{"type":"string","description":"Role description."},"isPredefined":{"type":"boolean","description":"Whether the role is predefined by the system."}},"title":"ListRolesResponse.RoleInfo"},"description":"Roles matching the query."},"totalSize":{"type":"integer","format":"int32","description":"Total number of matching roles."}},"title":"ListRolesResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/list-roles.api.mdx b/platform-api-docs/docs/list-roles.api.mdx
new file mode 100644
index 000000000..153cbb243
--- /dev/null
+++ b/platform-api-docs/docs/list-roles.api.mdx
@@ -0,0 +1,66 @@
+---
+id: list-roles
+title: "List roles"
+description: "Lists predefined and custom roles available in the organization identified by `orgId`."
+sidebar_label: "List roles"
+hide_title: true
+hide_table_of_contents: true
+api: eJy1Vttu4zYQ/RVinlpAcJy99EFPzbbbIugt2KToQ2AgtDSymFCkMhxl4zX078VQki1f6rjZ9skWOZfDwzPDWQHrRYD0FshbDDBLIMeQkanZeAcp/GoCB1UT5lgYh7nSLldZE9hXKroo/aSN1XOLyjjFJSpPC+3MFy0RlMnRsSkM5mq+VHeeFpf53QQS8DVSNLnM+zSfIoIEak26QkYSXCtwukJIIXpCAkZQPTZIS9jF+sc4sWsqJJNtAJBkJXxsDGEOKVODCYSsxEpDugJe1pLGOMYFEiRQeKo0d0vfvYO2TdZYKv18HMlv+tlUTSUg5kjKF4owNJaDYq8IuSE3UT9ioRvLqbp7P72bqN4nVXfn02mk6ERwb99sgfNFEZCP4/v9EK7wYGpVeFK1XhgXWRyD/BpM8ecoIrl8JWYqoKasVIWx3N3ZXsrAZNxiK0HceTmBmJ0QOQF0TSVVsRE+JNDJHmZtOxMlhdq7gEHc30yn8rMjx1/ExztGx7Kr69qaLPJ6dh/EZLWPwM/vMeM99FfdlWAei05ZE1gNCOQkNUk9sengdLW8CaqJtDBiGKtwKNm2e8fpPin/cGMTaHf2TnIdLcUIJlxtyN6EmHtvUbu9GH+VyCVS7DiRE7PVpubLuBOWgbGaiFaADVsc95pPA4HydekKv3eQiDSoSnNWGreIIaO8ImL2rO21+YKnlMNu5BtxHjWIdY54eS8ghraV/XeHZPdB50raHAb+N/rbdMZbqDAEvUB5DY4rZTA8VJtr9B+JPO0hf3ugYIYnQTnPSlvrP2MeQwXMGjK8jA/CB9SEdNFwCentTGqxQi69PCOL2PhqLVtwRv2DEpCehtekIQsplMx1SM/OdG0mmfVNPgn4iKQnxu9d1HXcUVdWs1yp+kHs1cXVJUjqAdm1ENmRMsa35kUyDh0nyjoaQdL/+WkQy/1njic2Ikdx70nsUUjalwDKcU2GoTcWBegsKmD78OMjY6WNjVot/PebjTYBYa7Lcz45P38/mcpi7QNX2m2aRZSoGgjfaQZrDf5/00TPMuMzn9VWGyco43FXvRxGE07pA8vCajXXAf8k27ay3L0bIpLcBIGQQ1poG/DIgb751JfNt+qE6eMgygdcjsabJ20bsQF53E7H8d8MHEfwdSPPK9G9ftw4xtgw57wS1JGJ40jWfpL5mpw7Q8iRZP1Us0k2kw8yki32vgRK1DlSVG3nc5FlWI9p2Wv7Wx3z5483kIDeblY7zSlGH0YJtxzFXq06ixv/gK5tYQ1cvqGdtW37N9xtQTc=
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Lists predefined and custom roles available in the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/list-user-roles-in-organization.ParamsDetails.json b/platform-api-docs/docs/list-user-roles-in-organization.ParamsDetails.json
new file mode 100644
index 000000000..8b8d6d3ae
--- /dev/null
+++ b/platform-api-docs/docs/list-user-roles-in-organization.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"path","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"userId","in":"path","description":"User numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/list-user-roles-in-organization.RequestSchema.json b/platform-api-docs/docs/list-user-roles-in-organization.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/list-user-roles-in-organization.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/list-user-roles-in-organization.StatusCodes.json b/platform-api-docs/docs/list-user-roles-in-organization.StatusCodes.json
new file mode 100644
index 000000000..0e442b2ef
--- /dev/null
+++ b/platform-api-docs/docs/list-user-roles-in-organization.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"A user's organization membership details and workspace-level roles and permissions.","properties":{"user":{"type":"object","properties":{"memberId":{"type":"integer","format":"int64","description":"Member numeric identifier."},"userId":{"type":"integer","format":"int64"},"userName":{"type":"string","description":"Username of the organization member."},"email":{"type":"string","description":"Email address of the organization member."},"firstName":{"type":"string","description":"First name of the organization member."},"lastName":{"type":"string","description":"Last name of the organization member."},"avatar":{"type":"string","description":"Avatar image URL for the organization member."},"role":{"type":"string","enum":["owner","member","collaborator"],"x-enum-varnames":["owner","member","collaborator"],"title":"OrgRole"}},"title":"MemberDbDto"},"userWorkspaces":{"type":"array","items":{"type":"object","description":"Workspace-specific roles and permissions for a user.","properties":{"workspaceId":{"type":"integer","format":"int64","description":"Workspace numeric identifier."},"workspaceName":{"type":"string","description":"Workspace name."},"roles":{"type":"array","items":{"type":"object","description":"A role assigned to the user in a workspace and the source of that assignment.","properties":{"role":{"type":"string","description":"Workspace role name."},"roleSourceType":{"type":"string","description":"Source of a workspace role assignment.","enum":["individual","team"],"title":"WspRoleSourceType"},"sourceTeamId":{"type":"integer","format":"int64","nullable":true,"description":"Source team numeric identifier when the role is inherited from a team."},"sourceTeamName":{"type":"string","nullable":true,"description":"Source team name when the role is inherited from a team."},"sourceTeamType":{"nullable":true,"type":"string","description":"Team type.","enum":["regular","system_owners"],"title":"TeamType"}},"title":"UserWorkspaceRoleDto"},"description":"Roles held by the user in this workspace."},"permissions":{"type":"array","items":{"type":"object","description":"A permission granted to the user in a workspace and the roles that grant it.","properties":{"permission":{"type":"string","description":"Permission name."},"roles":{"type":"array","items":{"type":"string"},"description":"Roles that grant the permission."}},"title":"UserWorkspacePermissionDto"},"description":"Effective permissions granted in this workspace."}},"title":"UserWorkspaceRolesDto"},"description":"Workspace access details for the user within the organization."}},"title":"ListUserRolesResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/list-user-roles-in-organization.api.mdx b/platform-api-docs/docs/list-user-roles-in-organization.api.mdx
new file mode 100644
index 000000000..55cd34142
--- /dev/null
+++ b/platform-api-docs/docs/list-user-roles-in-organization.api.mdx
@@ -0,0 +1,66 @@
+---
+id: list-user-roles-in-organization
+title: "List user roles in organization"
+description: "Lists an organization member or collaborator's workspace roles and effective permissions across the organization identified by `orgId`."
+sidebar_label: "List user roles in organization"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNWN1v20YM/1cO99INUOx26/bgp6VrOgTLtiAf6EMQrLREW9dKdwp5cpoJ+t8Hnj4s20rspBiwJ9sSj/yR/JFHutIelqxnN9rRkvVtpBPkmEzhjbN6ps8Me1ZglaMlWPMPyHOVYz5HUo5U7LIM5o7AO3rF6t7RFy4gRkUuQzmYKFwsMPZmhapAyg2zcZYVxOSYlU9xU7VJ0HqzMJio+YP65Gh5mnya6Ei7AimInCYtrmtGuhAzp/avgQod6QIIcvRI4lmlLeSoZzro0pE24lgBPtXb3g7VKFvmSCZeIyKBQXhXGsJEzzyVGGmOU8xBzyrtHwqxYqzHJZKO9MJRDr559PNbXddRD6VkpD1YxLv/AMOtHOfCWUaWEz+8fi0fW3H4XUc6dtaj9fIWiiIzcQjL9DOLSLVr1M0/Y+x3/DhW4uwrHmMQp6ZQCXowWcOVnj9HGa4wG7BowB0JQUHCB28aJ8TCGJJNqcam0Gd/oLa9+KNh/Fg+6qhL5yEJaIT/DDToxdmTsctRCghhlFvsFkrjTTCPOZhsv7oTEVOQJITM+3QuDLE/DOYHEVWHAM3gUJ1ncKBKWIEH2q/wOMgpk8MS1fXFmVo4elKxUG9MLdoyD/3y3oYEN0dCvaxboTTSr0cierSCkEM+6Iw3XqxKI5LOJj2jf9ZQ8P38vXcdjT525cIDpEAED9JaPOa8vz57HUdcYGwWJh6vuhAwCMW8W4B93b6sunoMjxVYr/8w9gz0QY59Or8hSschKAqYzdJiorwL5JFoKGMVDG4+iZu8Y1dS3PIXfHs0R+t3w/cY1x7zKmDZcO0yGLsK5/fpueyBwdaFvQWyo7qxiVmZpIRMR9oj5EOqfuTiYhNAHenG9yuE/FBC2FIqQTQ2d9ooZLE9QhF1n6INMQ9OGFbGpkjGY6IW5HIF4eRkE9ljVHoGEulPL7LdJWrb1tOJk5NKRIbJIVyWGUhM+YE95n+HJsPDFPUWh+3ketg/JINtX9k0GeYrlWIWxrEh5X1qBvNe8G/QLb6l0tZq1JLA+sPKrWlaodTCKWVGCm2ten+ZnK9hPLuLtCofCecApCBfg5o8nqE1mtE8nYwO2V34xtL1FBV41Ma6/0AcywjRTW7dVRrSc298auzO1bppcWN8v2jnUV3XIvN2bCJ9B4mSsRfZP2c0XU/KNzpHZlhiKIw9c2IjuJvOgQcnRI52kP84Mkt3e4uyzivIMnePSVDFGJdk/EPYUd4hENJx6VM9u7mVMT1HnzrZdZYYMMqSMNNT2dOmVdhl6qlEnKdVM3/W04aeoplW3fJTUqZnOvW+4Nl0CoWZxJkrkwnjHRJMjNu9H8IbdZ6BlzatfhV5dXx+qgVWh/pSgtwEbIi9j5lY1O1uIr/nQUhH7ZcP3QXw+d6HaBi7cOF4G+AWhZjdB1DcNTFyKyzsgDiwY9P5ocvtzBzM/rJ+UUdaItfYeTN58+anyevQ2hz7HAK72hVOKNwwvuk8ZnNH3gZdrUn7P1qq21x5/OqnRQbGhsmSwjLREK79YyDSs259DpyTB/0S29DuNtKpYy9HqmoOjNeU1bU8viuRhOW3kV4BmebCu6l0Yli+J3q2gIy3r9phxL67aAv5e3XAjj7qVdexrfTrFWSl/NKR/oIP/X8DsqG/CNQTy/oLwLSBrW/rSKcIiSy3N1X78jiOsfCDYzsdcKN5/HZypSMNm7W5VYtB+yikqmokrtwXtHXdI/TyWwDW9b+eXWUZ
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Lists an organization member or collaborator's workspace roles and effective permissions across the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/retrieve-permissions.ParamsDetails.json b/platform-api-docs/docs/retrieve-permissions.ParamsDetails.json
new file mode 100644
index 000000000..4661c0329
--- /dev/null
+++ b/platform-api-docs/docs/retrieve-permissions.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"orgId","in":"query","description":"Organization numeric identifier.","schema":{"type":"integer","format":"int64"}},{"name":"workspaceId","in":"query","description":"Workspace numeric identifier.","schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/retrieve-permissions.RequestSchema.json b/platform-api-docs/docs/retrieve-permissions.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/retrieve-permissions.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/retrieve-permissions.StatusCodes.json b/platform-api-docs/docs/retrieve-permissions.StatusCodes.json
new file mode 100644
index 000000000..813fa4c1d
--- /dev/null
+++ b/platform-api-docs/docs/retrieve-permissions.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Roles and operations available to the authenticated user by context.","properties":{"user":{"type":"object","properties":{"operations":{"type":"array","items":{"type":"string"},"description":"Operation identifiers available in this context."},"roles":{"type":"array","items":{"type":"string"},"description":"Role names held in this context."}},"title":"ListPermissionsResponse.OperationsAndRolesDto"},"organization":{"type":"object","properties":{"operations":{"type":"array","items":{"type":"string"},"description":"Operation identifiers available in this context."},"roles":{"type":"array","items":{"type":"string"},"description":"Role names held in this context."}},"title":"ListPermissionsResponse.OperationsAndRolesDto"},"workspace":{"type":"object","properties":{"operations":{"type":"array","items":{"type":"string"},"description":"Operation identifiers available in this context."},"roles":{"type":"array","items":{"type":"string"},"description":"Role names held in this context."}},"title":"ListPermissionsResponse.OperationsAndRolesDto"}},"title":"ListPermissionsResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"}}}
diff --git a/platform-api-docs/docs/retrieve-permissions.api.mdx b/platform-api-docs/docs/retrieve-permissions.api.mdx
new file mode 100644
index 000000000..21accf508
--- /dev/null
+++ b/platform-api-docs/docs/retrieve-permissions.api.mdx
@@ -0,0 +1,66 @@
+---
+id: retrieve-permissions
+title: "Retrieve permissions"
+description: "Lists the roles and operations available to the authenticated user in the current user, organization, and workspace contexts."
+sidebar_label: "Retrieve permissions"
+hide_title: true
+hide_table_of_contents: true
+api: eJztVk1v2zAM/SsCz0bS7uvg09p9odiAFd2GHYocGJuJ1dqSS9HtMsP/faBiJ04TtFt32GWnxBKl9/hIimxBcBkgvYSauLIhWO8CzBLIKWRsa7HeQQqfbJBgpCDDvqRg0OXG18So+8HgLdoS5yUZ8dEKGynIic1QKDdNIDbWxZ2sYSYncS0xnpfo7M94TRJvvfN8HWrMyGTeCf2QMIEENlhnOaRwQcKWbul8RDmBGhkrEmJ1pwWHFUEKnpdnOSRg1Y2bhngF9537PCJhXFMR28zYXPkvLLHih6ygCiFtQVa1Xmud0JIYElh4rlDWS69eQNclG+yNL48x+L5x+u/hZwkwhdq7QEFPPDs60p97Ln+EBKLATnQX67rUYFnvpldBTdp9UD+/okz2yF88NSPmqyHG6mPNelzsmrUaHILetdoCjmyRGVViK1SN14OwdUvo9sI/XDISfexATFwbtly7BGIV/AWmamY0S4IpqMwPYHQJiJWS+uIbpfpFH93Jhng4cXmMwlvxijWuqv8iPlHETfH+V/BJCj5+ErpOrV4ceqBOMTdMNw0F+ZOXSo9YplwbWkUh4JK0mT0cvsFwX6+RD++YPe8xf37gad3E0XkxWJb+jvJ4VaCsYSur2J5OCZn4pJEC0suZvtoVSeG1vS0pckTdgmm90+QC8e3Q4RouIYVCpA7pdIq1nWSlb/JJoBtinFi/91R/iTvmvETRvmHeqL05OT8DJTDw+6JyrqUZs9yoo4hDU9LveTSCpP/zfuhIV3cS/bZu4ePxXsqehcI+RlDdtRmF3ljzALOYB7vOj12mCm0ZG+LCv95udAmocmuc48nx8cvJkS7WPkiFMY/6tj2MF2ZX+h2m7TYn//lw1IdFv6d1idapW1Gfts+ivemu8EF0uW3nGOgbl12ny+vpRHMrt0Ep55AusAz0gPe/MT0dJHhNq9F4dotlozag49Pvgz82OD2AvDucbfFn+sFWCcTKTKAgzHUauWz7oydZRrWMTu09Sjv1/OHdV0gAd4voXtHE24dX3K1Gd7ft2uKrvybXdTDwF/2GbtZ13S/jqyR5
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Lists the roles and operations available to the authenticated user in the current user, organization, and workspace contexts.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/sidebar.ts b/platform-api-docs/docs/sidebar.ts
index aa1d5438a..ef2eaa337 100644
--- a/platform-api-docs/docs/sidebar.ts
+++ b/platform-api-docs/docs/sidebar.ts
@@ -748,6 +748,36 @@ const sidebar: SidebarsConfig = {
label: "Describe organization quotas",
className: "api-method get",
},
+ {
+ type: "doc",
+ id: "list-user-roles-in-organization",
+ label: "List user roles in organization",
+ className: "api-method get",
+ },
+ ],
+ },
+ {
+ type: "category",
+ label: "permissions",
+ items: [
+ {
+ type: "doc",
+ id: "retrieve-permissions",
+ label: "Retrieve permissions",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "check-permission",
+ label: "Check permission",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "list-available-features",
+ label: "List available features",
+ className: "api-method get",
+ },
],
},
{
@@ -882,6 +912,54 @@ const sidebar: SidebarsConfig = {
},
],
},
+ {
+ type: "category",
+ label: "roles",
+ items: [
+ {
+ type: "doc",
+ id: "list-roles",
+ label: "List roles",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "create-role",
+ label: "Create role",
+ className: "api-method post",
+ },
+ {
+ type: "doc",
+ id: "list-role-permissions",
+ label: "List role permissions",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "describe-role",
+ label: "Describe role",
+ className: "api-method get",
+ },
+ {
+ type: "doc",
+ id: "update-role",
+ label: "Update role",
+ className: "api-method put",
+ },
+ {
+ type: "doc",
+ id: "delete-role",
+ label: "Delete role",
+ className: "api-method delete",
+ },
+ {
+ type: "doc",
+ id: "validate-role-name",
+ label: "Validate role name",
+ className: "api-method get",
+ },
+ ],
+ },
{
type: "category",
label: "service-info",
diff --git a/platform-api-docs/docs/update-role.ParamsDetails.json b/platform-api-docs/docs/update-role.ParamsDetails.json
new file mode 100644
index 000000000..178f18516
--- /dev/null
+++ b/platform-api-docs/docs/update-role.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"roleName","in":"path","description":"Role name.","required":true,"schema":{"type":"string"}},{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/update-role.RequestSchema.json b/platform-api-docs/docs/update-role.RequestSchema.json
new file mode 100644
index 000000000..1bdd6991d
--- /dev/null
+++ b/platform-api-docs/docs/update-role.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body","body":{"description":"Role update request","content":{"application/json":{"schema":{"type":"object","description":"Request payload for updating a custom role in an organization.","properties":{"name":{"type":"string","description":"Role name."},"description":{"type":"string","description":"Role description."},"permissions":{"type":"array","items":{"type":"string"},"description":"List of permission names assigned to the role."}},"title":"UpdateRoleRequest"}}},"required":true}}
diff --git a/platform-api-docs/docs/update-role.StatusCodes.json b/platform-api-docs/docs/update-role.StatusCodes.json
new file mode 100644
index 000000000..6c90e5ce2
--- /dev/null
+++ b/platform-api-docs/docs/update-role.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"204":{"description":"OK - No content"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"},"404":{"description":"Role not found","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"409":{"description":"Duplicate role name","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}}}}
diff --git a/platform-api-docs/docs/update-role.api.mdx b/platform-api-docs/docs/update-role.api.mdx
new file mode 100644
index 000000000..762ff7b70
--- /dev/null
+++ b/platform-api-docs/docs/update-role.api.mdx
@@ -0,0 +1,66 @@
+---
+id: update-role
+title: "Update role"
+description: "Updates the details of the role identified by `roleName` in the organization identified by `orgId`."
+sidebar_label: "Update role"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNVt9v3DYM/lcEPq2Ae5ds2YD5aUnXAcGGNkiTp+CA8GzenVJZciQ66c3w/15Qsn0/mwV9GPpmSxT58SP1iS0wLgPkd+CdoQCzDEoKhdc1a2chh9u6RKageEWqJEZtgnKL+CsnlC7Jsl5oKtV8re5l7QNWdK+0jUbOL9Hqf1Hc7Rs7v7ws7yeQgavJR5PLcox57QxBBjV6rIjJC8oWLFYEOQxxIAMtMGvkFexjFw9KDkgIT4+N9lRCzr6hDEKxogohb4HXtbgM7LVdQtdlY5QIcAjx2JBfH8T4uJ2fbSryutjk6V8VWVumJXnIYOF8hZyWfjuDrpul4xT4wpVrOXMkxSbypXpDyKBwlsmymGNdG11EeNOHIGfaQwBu/kAFH/KXHKoa18ZhqRbOp1jaLhWqognsqr4NrEK7U2zJvPZSWNYUJFgidZ/vF4rW7e296ujWUvRQk690CNrZsOUBvUcppmaqwpEm2Hf9jw4sfb/xFjEGhSHopaVSsRsvxUSaCFizoZ1u7vmETrZ3uyIuhNrZkLj6+eTssNgf/1Zv1QenhvJ2GZydnBzaXWD5Pc2wQXQHFYWASxI92O+R3aIOhsfu0UjBe++dv+7zk/Qj8l+OZDjogLKOFRrjnqlMeR7hI7WKY7VwjS1/5FR/PwT/Z5MA9jpqk5j9kBl0GQQqGq95HTX4gtCTP294BfndTDSqIl45ke66iVFFjXOYxjdl2g5i3YE48k+DljfeQA4r5jrk0ynWelIY15STQI/kcaLdwQ3/FHfUlUEWqVTvxF6dX12CoBhAfhKWUsbbUMekJSL0Oiz/82gEWf/x1yDCD88cmRH2rzcq/P4LVrWhjaR9S4/G5R0NuhvWZ528LAsXkfXk9wlKRv+VuzCpCwq9sXQOFrFzdnndZpMq1CY+Lwv3x2ajy0CKkuKcTk5Pf52cRO10gSu0W5ne9k9Nepv31Hls3v9paujLyfSFp7VBbQVzTL7tW3AYazLIx4lhlsHKBZbNtp1joFtvuk6W0wsvnVnqgHMjt2uBJtALmf503V/EN+oVo8BRxJ9pvTVrPKFpxCZ29BN6LUC+H9TODHQ0/PAi2vV29AHWSFsn7boiLMlHNGn7XYr59kacbI4faJcMVenEeVFQzS/abgvK1e2NXMx++KlcGac/fJa5Cp8TUhcpiPc9rrVg0C6bqHSQXMo1xl0V2Lv1MamjXLRtsrhxn8l23UgNy7/w0nVfAbzC6Gg=
+sidebar_class_name: "put api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Updates the details of the role identified by `roleName` in the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/docs/validate-role-name.ParamsDetails.json b/platform-api-docs/docs/validate-role-name.ParamsDetails.json
new file mode 100644
index 000000000..dff5eb1c4
--- /dev/null
+++ b/platform-api-docs/docs/validate-role-name.ParamsDetails.json
@@ -0,0 +1 @@
+{"parameters":[{"name":"name","in":"query","description":"Role name to validate.","required":true,"schema":{"type":"string"}},{"name":"orgId","in":"query","description":"Organization numeric identifier.","required":true,"schema":{"type":"integer","format":"int64"}}]}
diff --git a/platform-api-docs/docs/validate-role-name.RequestSchema.json b/platform-api-docs/docs/validate-role-name.RequestSchema.json
new file mode 100644
index 000000000..188a349c4
--- /dev/null
+++ b/platform-api-docs/docs/validate-role-name.RequestSchema.json
@@ -0,0 +1 @@
+{"title":"Body"}
diff --git a/platform-api-docs/docs/validate-role-name.StatusCodes.json b/platform-api-docs/docs/validate-role-name.StatusCodes.json
new file mode 100644
index 000000000..91955c038
--- /dev/null
+++ b/platform-api-docs/docs/validate-role-name.StatusCodes.json
@@ -0,0 +1 @@
+{"responses":{"204":{"description":"OK - No content"},"400":{"description":"Bad request","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}},"403":{"description":"Operation not allowed"},"409":{"description":"Role name already exists","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}},"title":"ErrorResponse"}}}}}}
diff --git a/platform-api-docs/docs/validate-role-name.api.mdx b/platform-api-docs/docs/validate-role-name.api.mdx
new file mode 100644
index 000000000..414da1359
--- /dev/null
+++ b/platform-api-docs/docs/validate-role-name.api.mdx
@@ -0,0 +1,66 @@
+---
+id: validate-role-name
+title: "Validate role name"
+description: "Confirms that the given role name is valid and available within the organization identified by `orgId`."
+sidebar_label: "Validate role name"
+hide_title: true
+hide_table_of_contents: true
+api: eJzNVE1v1DAQ/SvWnEAKuy0UJHKirQqqkAoqhUu1UmeT2Y1bx07tyZYl8n9H4yTd7QcFcUCcEtvjmffGb14HjMsA+Tl4ZyjALIOSQuF1w9pZyOHQ2YX2dVBcISuuSC31iqyScGWxJqWDWqHRpUJbKlyhNjg3pG40V9qmG84v0eofKCmVLsmyXmgq1XytLpxfHpcXE8jANeRTyHEJOXyTlMh06gydYE2QQYMea2LygrcDKQ55/8lAC9jrlvwa7lM4vYXKroeKTFLR03WrPZWQs28pg1BUVCPkHfC6kdyBvbZLiDG7LZfwPl3v0zZd29bkdbGh7f+osrZMS/KQwcL5GrnferMHMc7kemicDRTkxsudPfncw/BRvVAnThXOMlmGmMHezs7DuAMslYChwJDBGJ13gE1jdJE4TC+DxHZbKDf4z6GmEHBJIp0BvJtfUiH5Gi+PyroHOgY+1l9gzUa2jrx3/nTgBzHGhPzVIwxHuSjrWKEx7obKnufbh9EbDaDxhOVa0XcdOPyvpGMGgYrWa14nsR8QevL7LVeQn89EAzVx5WRSlpSqohzBNI3xdFQ5SBq/Gkem9QZyqJibkE+n2OhJYVxbTgJdk8eJdg+0/CWdqM8GWYSoDiVe7X8+BsEwQvwiPer5bgO9pSwVYVC5rOcpCLLh5/0o8csbTn3RduHS9aE/Awop+zuAQlcXFIZgeVws0uPeJb9NmWrUJk3Ywr3bHMQMpHN9nd3J7u7ryY5sNi5wjUkcgymMZrVxxfs4u43M/qGlDu1n+s7TxqC2Aj/1oRsEM/p+BreSmWVQucBy1nVzDPTVmxhlu7c7EVKpgyAqIV+gCfQE2Wenw9Q8V7/04UdhXtF64+4rNK2EgDjxXxX/A1N+Asbo+hscM1l4LUDSRGZQEZbkU3v6S/tFQQ1v3XpgL3fm+MPRGWSAdyfn3qSk7MMR2vVW7q7rI87cFdkYYUTOsoY4izH+BAaDuuE=
+sidebar_class_name: "get api-method"
+info_path: platform-api//seqera-api
+custom_edit_url: null
+---
+
+import MethodEndpoint from "@theme/ApiExplorer/MethodEndpoint";
+import ParamsDetails from "@theme/ParamsDetails";
+import RequestSchema from "@theme/RequestSchema";
+import StatusCodes from "@theme/StatusCodes";
+import OperationTabs from "@theme/OperationTabs";
+import TabItem from "@theme/TabItem";
+import Heading from "@theme/Heading";
+import Translate from "@docusaurus/Translate";
+
+
+
+
+
+
+
+
+
+
+Confirms that the given role name is valid and available within the organization identified by `orgId`.
+
+
+ Request
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml b/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml
index fcb2e80a6..9103a4f03 100644
--- a/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml
+++ b/platform-api-docs/scripts/specs/seqera-api-latest-decorated.yml
@@ -9515,6 +9515,495 @@ paths:
description: Operation not allowed
security:
- BearerAuth: []
+ /orgs/{orgId}/users/{userId}/roles:
+ get:
+ tags:
+ - orgs
+ summary: List user roles in organization
+ description: Lists an organization member or collaborator's workspace roles
+ and effective permissions across the organization identified by `orgId`.
+ operationId: ListUserRolesInOrganization
+ parameters:
+ - name: orgId
+ in: path
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ - name: userId
+ in: path
+ description: User numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListUserRolesResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ security:
+ - BearerAuth: []
+ /permissions:
+ get:
+ tags:
+ - permissions
+ summary: Retrieve permissions
+ description: Lists the roles and operations available to the authenticated
+ user in a personal workspace context or an organization workspace context.
+ operationId: RetrievePermissions
+ parameters:
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ schema:
+ type: integer
+ format: int64
+ - name: workspaceId
+ in: query
+ description: Workspace numeric identifier.
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListPermissionsResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ security:
+ - BearerAuth: []
+ /permissions/check:
+ get:
+ tags:
+ - permissions
+ summary: Check permission
+ description: Checks whether the authenticated user is allowed to perform the
+ given operation in a personal workspace context or an organization workspace
+ context. Append `?operationId=` to specify the operation identifier
+ to check. Use [Retrieve permissions](https://docs.seqera.io/platform-api/retrieve-permissions)
+ to retrieve the available operation identifiers for the current context.
+ operationId: CheckPermission
+ parameters:
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ schema:
+ type: integer
+ format: int64
+ - name: workspaceId
+ in: query
+ description: Workspace numeric identifier.
+ schema:
+ type: integer
+ format: int64
+ - name: operationId
+ in: query
+ description: Operation identifier to check in the selected context.
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CheckPermissionResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ security:
+ - BearerAuth: []
+ /permissions/features:
+ get:
+ tags:
+ - permissions
+ summary: List available features
+ description: Lists the available features enabled for the authenticated user
+ in a personal workspace context or an organization workspace context.
+ operationId: ListAvailableFeatures
+ parameters:
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ schema:
+ type: integer
+ format: int64
+ - name: workspaceId
+ in: query
+ description: Workspace numeric identifier.
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListFeaturesResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ security:
+ - BearerAuth: []
+ /roles:
+ get:
+ tags:
+ - roles
+ summary: List roles
+ description: Lists predefined and custom roles available in the organization
+ identified by `orgId`.
+ operationId: ListRoles
+ parameters:
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ - name: max
+ in: query
+ description: 'Maximum number of results to return. Default: `50`. Maximum:
+ `100`.'
+ schema:
+ type: integer
+ format: int32
+ - name: offset
+ in: query
+ description: 'Number of results to skip for pagination. Default: `0`.'
+ schema:
+ type: integer
+ format: int32
+ - name: name
+ in: query
+ description: Role name search filter.
+ schema:
+ type: string
+ - name: type
+ in: query
+ description: Role type filter.
+ schema:
+ type: string
+ enum:
+ - predefined
+ - custom
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListRolesResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ security:
+ - BearerAuth: []
+ post:
+ tags:
+ - roles
+ summary: Create role
+ description: Creates a custom role in the organization identified by `orgId`.
+ operationId: CreateRole
+ parameters:
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ requestBody:
+ description: Role create request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreateRoleRequest'
+ required: true
+ responses:
+ '201':
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/CreateRoleResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ '409':
+ description: Duplicate role name
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ security:
+ - BearerAuth: []
+ /roles/permissions:
+ get:
+ tags:
+ - roles
+ summary: List role permissions
+ description: Lists the available role permissions for assignment in the organization
+ identified by `orgId`.
+ operationId: ListRolePermissions
+ parameters:
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ - name: name
+ in: query
+ description: Permission name search filter.
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ListRolePermissionsResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ '404':
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ security:
+ - BearerAuth: []
+ /roles/{roleName}:
+ get:
+ tags:
+ - roles
+ summary: Describe role
+ description: Retrieves the details of the role identified by `roleName` in
+ the organization identified by `orgId`.
+ operationId: DescribeRole
+ parameters:
+ - name: roleName
+ in: path
+ description: Role name.
+ required: true
+ schema:
+ type: string
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DescribeRoleResponse'
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ '404':
+ description: Role not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ security:
+ - BearerAuth: []
+ put:
+ tags:
+ - roles
+ summary: Update role
+ description: Updates the details of the role identified by `roleName` in the
+ organization identified by `orgId`.
+ operationId: UpdateRole
+ parameters:
+ - name: roleName
+ in: path
+ description: Role name.
+ required: true
+ schema:
+ type: string
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ requestBody:
+ description: Role update request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UpdateRoleRequest'
+ required: true
+ responses:
+ '204':
+ description: OK - No content
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ '404':
+ description: Role not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '409':
+ description: Duplicate role name
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ security:
+ - BearerAuth: []
+ delete:
+ tags:
+ - roles
+ summary: Delete role
+ description: Deletes the role identified by `roleName` in the organization
+ identified by `orgId`.
+ operationId: DeleteRole
+ parameters:
+ - name: roleName
+ in: path
+ description: Role name.
+ required: true
+ schema:
+ type: string
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '204':
+ description: OK - No content
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ '404':
+ description: Role not found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ security:
+ - BearerAuth: []
+ /roles/validate:
+ get:
+ tags:
+ - roles
+ summary: Validate role name
+ description: Confirms that the given role name is valid and available within
+ the organization identified by `orgId`.
+ operationId: ValidateRoleName
+ parameters:
+ - name: name
+ in: query
+ description: Role name to validate.
+ required: true
+ schema:
+ type: string
+ - name: orgId
+ in: query
+ description: Organization numeric identifier.
+ required: true
+ schema:
+ type: integer
+ format: int64
+ responses:
+ '204':
+ description: OK - No content
+ '400':
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '403':
+ description: Operation not allowed
+ '409':
+ description: Role name already exists
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ security:
+ - BearerAuth: []
components:
schemas:
AbstractGridConfig:
@@ -17291,6 +17780,262 @@ components:
nullable: true
description: Optional relative path within the data-link root to mount.
Can be `null` to mount the data-link root.
+ CheckPermissionResponse:
+ type: object
+ description: Result of checking whether the authenticated user can perform a
+ given operation in the selected context.
+ properties:
+ authorized:
+ type: boolean
+ description: Whether the authenticated user is authorized to perform the
+ requested operation.
+ CreateRoleRequest:
+ type: object
+ description: Request payload for creating a custom role in an organization.
+ properties:
+ name:
+ type: string
+ description: Role name.
+ description:
+ type: string
+ description: Role description.
+ permissions:
+ type: array
+ items:
+ type: string
+ description: List of permission names assigned to the role.
+ CreateRoleResponse:
+ type: object
+ description: Created role details.
+ properties:
+ name:
+ type: string
+ description: Role name.
+ description:
+ type: string
+ description: Role description.
+ permissions:
+ type: array
+ items:
+ type: string
+ description: List of permission names assigned to the role.
+ DescribeRoleResponse:
+ type: object
+ description: Role description response.
+ properties:
+ role:
+ $ref: '#/components/schemas/RoleDto'
+ FeatureId:
+ type: string
+ description: Feature identifier.
+ enum:
+ - DATA_EXPLORER
+ - DATA_STUDIO
+ - MANAGED_IDENTITY
+ - SEQERA_COMPUTE
+ - DYNAMIC_RESOURCE_LABELS
+ - CONTAINERS
+ - METERING
+ - SEQERA_COMPUTE_ENABLE_CE_TYPE_CHOICE
+ - PIPELINE_VERSIONING
+ - STUDIO_METRICS
+ - DATA_STUDIO_CONNECT_IFRAME
+ - DATA_STUDIO_SSH_ENABLED
+ - SSH_KEYS_MANAGEMENT
+ - SEQERA_AI_DEBUG_BUTTON
+ - CUSTOM_ROLES
+ - CE_FORMS_V2
+ - AUDIT_LOG_V2
+ ListFeaturesResponse:
+ type: object
+ description: Features enabled in the selected context.
+ properties:
+ features:
+ type: array
+ items:
+ $ref: '#/components/schemas/FeatureId'
+ description: Feature identifiers enabled in the selected context.
+ ListPermissionsResponse:
+ type: object
+ description: Roles and operations available to the authenticated user by context.
+ properties:
+ user:
+ $ref: '#/components/schemas/ListPermissionsResponse.OperationsAndRolesDto'
+ organization:
+ $ref: '#/components/schemas/ListPermissionsResponse.OperationsAndRolesDto'
+ workspace:
+ $ref: '#/components/schemas/ListPermissionsResponse.OperationsAndRolesDto'
+ ListPermissionsResponse.OperationsAndRolesDto:
+ type: object
+ properties:
+ operations:
+ type: array
+ items:
+ type: string
+ description: Operation identifiers available in this context.
+ roles:
+ type: array
+ items:
+ type: string
+ description: Role names held in this context.
+ ListRolePermissionsResponse:
+ type: object
+ description: Available role permissions.
+ properties:
+ permissions:
+ type: array
+ items:
+ $ref: '#/components/schemas/RolePermissionResponseDto'
+ description: Permission definitions available for assignment to roles.
+ ListRolesResponse:
+ type: object
+ description: Paginated role list response.
+ properties:
+ roles:
+ type: array
+ items:
+ $ref: '#/components/schemas/ListRolesResponse.RoleInfo'
+ description: Roles matching the query.
+ totalSize:
+ type: integer
+ format: int32
+ description: Total number of matching roles.
+ ListRolesResponse.RoleInfo:
+ type: object
+ properties:
+ name:
+ type: string
+ description: Role name.
+ description:
+ type: string
+ description: Role description.
+ isPredefined:
+ type: boolean
+ description: Whether the role is predefined by the system.
+ ListUserRolesResponse:
+ type: object
+ description: A user's organization membership details and workspace-level roles
+ and permissions.
+ properties:
+ user:
+ $ref: '#/components/schemas/MemberDbDto'
+ userWorkspaces:
+ type: array
+ items:
+ $ref: '#/components/schemas/UserWorkspaceRolesDto'
+ description: Workspace access details for the user within the organization.
+ RoleDto:
+ type: object
+ description: Role details with assigned permissions.
+ properties:
+ name:
+ type: string
+ description: Role name.
+ description:
+ type: string
+ description: Role description.
+ isPredefined:
+ type: boolean
+ description: Whether the role is predefined by the system.
+ permissions:
+ type: array
+ items:
+ type: string
+ description: List of permission names assigned to the role.
+ RolePermissionResponseDto:
+ type: object
+ description: Metadata for a role permission.
+ properties:
+ name:
+ type: string
+ description: Permission name.
+ category:
+ type: string
+ description: Permission category.
+ TeamType:
+ type: string
+ description: Team type.
+ enum:
+ - regular
+ - system_owners
+ UpdateRoleRequest:
+ type: object
+ description: Request payload for updating a custom role in an organization.
+ properties:
+ name:
+ type: string
+ description: Role name.
+ description:
+ type: string
+ description: Role description.
+ permissions:
+ type: array
+ items:
+ type: string
+ description: List of permission names assigned to the role.
+ UserWorkspacePermissionDto:
+ type: object
+ description: A permission granted to the user in a workspace and the roles
+ that grant it.
+ properties:
+ permission:
+ type: string
+ description: Permission name.
+ roles:
+ type: array
+ items:
+ type: string
+ description: Roles that grant the permission.
+ UserWorkspaceRoleDto:
+ type: object
+ description: A role assigned to the user in a workspace and the source of that
+ assignment.
+ properties:
+ role:
+ type: string
+ description: Workspace role name.
+ roleSourceType:
+ $ref: '#/components/schemas/WspRoleSourceType'
+ sourceTeamId:
+ type: integer
+ format: int64
+ nullable: true
+ description: Source team numeric identifier when the role is inherited
+ from a team.
+ sourceTeamName:
+ type: string
+ nullable: true
+ description: Source team name when the role is inherited from a team.
+ sourceTeamType:
+ $ref: '#/components/schemas/TeamType'
+ nullable: true
+ UserWorkspaceRolesDto:
+ type: object
+ description: Workspace-specific roles and permissions for a user.
+ properties:
+ workspaceId:
+ type: integer
+ format: int64
+ description: Workspace numeric identifier.
+ workspaceName:
+ type: string
+ description: Workspace name.
+ roles:
+ type: array
+ items:
+ $ref: '#/components/schemas/UserWorkspaceRoleDto'
+ description: Roles held by the user in this workspace.
+ permissions:
+ type: array
+ items:
+ $ref: '#/components/schemas/UserWorkspacePermissionDto'
+ description: Effective permissions granted in this workspace.
+ WspRoleSourceType:
+ type: string
+ description: Source of a workspace role assignment.
+ enum:
+ - individual
+ - team
securitySchemes:
BearerAuth:
type: http
@@ -17319,12 +18064,16 @@ tags:
description: Workflow launch events
- name: orgs
description: Organizations
+- name: permissions
+ description: Frontend-visible permissions and feature availability
- name: pipelines
description: Pipelines
- name: pipeline-secrets
description: Pipeline secrets in a user or workspace context
- name: platforms
description: Computing platforms
+- name: roles
+ description: Custom and predefined organization roles
- name: service-info
description: Seqera Platform API service information
- name: studios
From a8d28303c9fb3a5c46d380ab72f25b3571a84dab Mon Sep 17 00:00:00 2001
From: Llewellyn vd Berg <113503285+llewellyn-sl@users.noreply.github.com>
Date: Wed, 25 Mar 2026 11:12:21 -0400
Subject: [PATCH 4/5] docs: refine hidden FGA endpoint docs
---
platform-api-docs/docs/delete-role.api.mdx | 4 ++--
platform-api-docs/docs/info/permissions.info.api.mdx | 4 ++--
platform-api-docs/docs/sidebar.ts | 6 ------
.../scripts/specs/seqera-api-latest-decorated.yml | 6 +++---
4 files changed, 7 insertions(+), 13 deletions(-)
diff --git a/platform-api-docs/docs/delete-role.api.mdx b/platform-api-docs/docs/delete-role.api.mdx
index 060906bbc..a786738fa 100644
--- a/platform-api-docs/docs/delete-role.api.mdx
+++ b/platform-api-docs/docs/delete-role.api.mdx
@@ -1,7 +1,7 @@
---
id: delete-role
title: "Delete role"
-description: "Deletes the role identified by `roleName` in the organization identified by `orgId`."
+description: "Deletes the custom role identified by `roleName` in the organization identified by `orgId`. Predefined roles cannot be deleted."
sidebar_label: "Delete role"
hide_title: true
hide_table_of_contents: true
@@ -37,7 +37,7 @@ import Translate from "@docusaurus/Translate";
-Deletes the role identified by `roleName` in the organization identified by `orgId`.
+Deletes the custom role identified by `roleName` in the organization identified by `orgId`. Predefined roles cannot be deleted.
Date: Fri, 3 Apr 2026 23:31:11 +0200
Subject: [PATCH 5/5] docs: add GCP Fusion snapshot machine guidance [EDU-1113]
---
fusion_docs/guide/snapshots/gcp.md | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/fusion_docs/guide/snapshots/gcp.md b/fusion_docs/guide/snapshots/gcp.md
index 320999c90..6d7221c0e 100644
--- a/fusion_docs/guide/snapshots/gcp.md
+++ b/fusion_docs/guide/snapshots/gcp.md
@@ -31,6 +31,17 @@ Fusion Snapshots work with sensible defaults (5 automatic retry attempts). For c
[Incremental snapshots](./index.md#incremental-snapshots) are enabled by default on x86_64 instances and capture only changed memory pages between checkpoints. This is particularly beneficial for Google Batch's shorter reclamation window. Use x86_64 instances to enable incremental snapshots.
+## Machine type guidance
+
+Fusion Snapshots on Google Batch work best when the underlying compute environment uses machine types that provide local SSD support and enough memory bandwidth to complete checkpoints within the preemption window.
+
+- If you don't specify a machine type, Seqera Platform selects a VM from Google Cloud families that support local SSDs.
+- Any machine type you specify for Fusion Snapshots must support local SSDs.
+- For production workloads, start with an `n2-highmem-16-lssd` VM or larger, then validate checkpoint duration with your workload profile.
+- If your workload has larger memory footprints, increase the machine size conservatively and re-test snapshot and restore times before widening usage.
+
+See [Google Cloud Batch compute environment configuration](../../platform-cloud/docs/compute-envs/google-cloud-batch.md#use-fusion-v2) for the underlying Fusion v2 compute recommendations that also apply to Fusion Snapshots on Google Batch.
+
## Resource limits
A single job can request more resources than are available on a single instance. To prevent this, set resource limits using the `process.resourceLimits` directive in your Nextflow configuration. See [Resource limits](./configuration.md#resource-limits) for more information.