API and MCP
Endpoint list
Every /api/v1 operation with its method, path and required permission — generated from the API registry.
208 operations, generated from the same registry as the OpenAPI document. Try them in the API Explorer.
Identity
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/me | Describe the calling credential: tenant, user, auth kind and permissions | any |
GET | /api/v1/openapi.json | OpenAPI 3.1 document for this API | public |
Workflows
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/workflows | List workflows | workflows.view |
GET | /api/v1/workflows/{id} | Get a workflow with its recent runs | workflows.view |
POST | /api/v1/workflows | Create a workflow from nodes and edges | workflows.edit |
GET | /api/v1/workflows/{id}/definition | Get the draft definition in author-payload shape (edit it and send it back to PATCH /workflows/{id}) | workflows.view |
PATCH | /api/v1/workflows/{id} | Save draft changes to a workflow (publish separately, or with publish: true) | workflows.edit |
POST | /api/v1/workflows/{id}/publish | Publish the draft as a new version (runs use it) and activate the workflow | workflows.activate |
POST | /api/v1/workflows/start | Start a workflow run (sync, or async via the queue) | workflows.activate |
GET | /api/v1/workflows/{id}/inputs | Get the input parameters a workflow run accepts | workflows.view |
POST | /api/v1/workflows/events/{id}/complete | Resume a run waiting on an external event | workflows.activate |
GET | /api/v1/workflows/runs | List workflow runs | workflows.view_runs |
GET | /api/v1/workflows/runs/{id} | Get a workflow run with its logs | workflows.view_runs |
POST | /api/v1/workflows/runs/{id}/action | Pause, resume or cancel a run | workflows.activate |
GET | /api/v1/workflows/queue | List queued workflow jobs | workflows.view_runs |
POST | /api/v1/workflows/queue/{id}/action | Cancel or retry a queued job | workflows.activate |
DELETE | /api/v1/workflows/{id} | Delete a workflow (queued: its versions, runs and spawned tasks go with it) | workflows.delete |
POST | /api/v1/workflows/{id}/activate | Activate a workflow (it responds to its trigger) | workflows.activate |
POST | /api/v1/workflows/{id}/deactivate | Deactivate a workflow (its trigger is paused) | workflows.activate |
GET | /api/v1/workflows/{id}/versions | List published versions of a workflow (newest first) | workflows.view |
GET | /api/v1/workflows/{id}/versions/{versionId} | Get one published version with its full definition | workflows.view |
GET | /api/v1/workflows/{id}/instances | List live instances (waiting or paused runs) with their current node and version | workflows.view_runs |
POST | /api/v1/workflows/{id}/instances/migrate | Migrate live instances to another version (or dry-run the plan) | workflows.manage_runs |
Tasks
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/tasks | List tasks | tasks.view_all |
GET | /api/v1/tasks/assigned | List open tasks assigned to a user or team | tasks.view_all |
GET | /api/v1/tasks/{id} | Get a task | tasks.view_all |
PATCH | /api/v1/tasks/{id} | Update task fields and User Task field values | tasks.complete |
POST | /api/v1/tasks/{id}/action | Accept, hold, reject, complete, escalate or redirect a task | tasks.complete |
POST | /api/v1/tasks/ingest | Create a task (with optional subtasks) from an external system | tasks.create |
Agents
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/agents | List agents | agents.view |
POST | /api/v1/agents | Create an agent | agents.create |
GET | /api/v1/agents/{id} | Get an agent | agents.view |
PUT | /api/v1/agents/{id} | Update an agent | agents.edit |
PATCH | /api/v1/agents/{id} | Update an agent (same as PUT) | agents.edit |
DELETE | /api/v1/agents/{id} | Delete an agent (deactivates workflows that reference it) | agents.delete |
POST | /api/v1/agents/{id}/execute | Run an agent (sync, or async via the agent queue) | agents.test |
GET | /api/v1/agents/queue | List queued agent jobs | agents.view |
Decision tables
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/decision-tables | List decision tables | workflows.view |
POST | /api/v1/decision-tables | Create a decision table | workflows.edit |
GET | /api/v1/decision-tables/{id} | Get a decision table | workflows.view |
PUT | /api/v1/decision-tables/{id} | Update a decision table (omitted fields are kept) | workflows.edit |
PATCH | /api/v1/decision-tables/{id} | Update a decision table (same as PUT) | workflows.edit |
DELETE | /api/v1/decision-tables/{id} | Delete a decision table (queued) | workflows.delete |
POST | /api/v1/decision-tables/{id}/test | Evaluate a decision table against input values | workflows.view |
GET | /api/v1/decision-tables/{id}/export | Export a decision table as portable JSON | workflows.view |
POST | /api/v1/decision-tables/import | Create a decision table from an export document | workflows.create |
Data tables
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/data-tables | List data tables | data.view |
POST | /api/v1/data-tables | Create a data table | data.create |
GET | /api/v1/data-tables/{id} | Get a data table with its columns | data.view |
PATCH | /api/v1/data-tables/{id} | Rename a data table or replace its custom columns | data.edit_schema |
DELETE | /api/v1/data-tables/{id} | Delete a data table and all its rows (queued) | data.delete |
GET | /api/v1/data-tables/{id}/rows | List or search rows | data.view |
POST | /api/v1/data-tables/{id}/rows | Insert rows, or replace existing ones by row_id (single or bulk) | data.manage_rows |
GET | /api/v1/data-tables/{id}/rows/{rowId} | Get a row | data.view |
PATCH | /api/v1/data-tables/{id}/rows/{rowId} | Change cells of a row (others are kept) | data.manage_rows |
DELETE | /api/v1/data-tables/{id}/rows/{rowId} | Delete a row (queued; fires data_table_event "deleted" workflows) | data.manage_rows |
POST | /api/v1/data-tables/{id}/rows/bulk-delete | Delete up to 500 rows of a table (queued); unknown ids are ignored | data.manage_rows |
Integrations
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/integrations | List integrations | integrations.view |
POST | /api/v1/integrations | Create an integration (credentials are encrypted at rest) | integrations.create |
POST | /api/v1/integrations/import-openapi | Create an integration with one reference per operation from an OpenAPI 2/3 or Postman document | integrations.create |
GET | /api/v1/integrations/{id} | Get an integration (masked config) with its references | integrations.view |
PATCH | /api/v1/integrations/{id} | Update an integration | integrations.edit |
DELETE | /api/v1/integrations/{id} | Delete an integration and its references | integrations.delete |
POST | /api/v1/integrations/{id}/test | Test the connection (GET base URL with the configured auth) | integrations.test |
References
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/integrations/{id}/references | List an integration's references | integrations.view |
POST | /api/v1/integrations/{id}/references | Create a reference on an integration | integrations.manage_references |
GET | /api/v1/references/{id} | Get a reference (request config, inputs, outputs, response model) | integrations.view |
PATCH | /api/v1/references/{id} | Update a reference | integrations.manage_references |
DELETE | /api/v1/references/{id} | Delete a reference | integrations.manage_references |
POST | /api/v1/references/bulk-delete | Delete several references (ids outside the workspace are ignored) | integrations.manage_references |
POST | /api/v1/references/{id}/execute | Call a reference with input values | integrations.test |
Objects
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/objects | List composite objects with their sources | integrations.view |
POST | /api/v1/objects | Create a composite object (also generates its callable reference) | integrations.edit |
GET | /api/v1/objects/{id} | Get a composite object with its sources and generated references | integrations.view |
PATCH | /api/v1/objects/{id} | Update a composite object (name, description, or a full replacement source list) | integrations.edit |
DELETE | /api/v1/objects/{id} | Delete a composite object, its sources and generated references | integrations.delete |
Connectors
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/connectors/catalog | List the built-in connector templates | integrations.view |
GET | /api/v1/connectors | List enabled connectors (credentials masked) | integrations.view |
POST | /api/v1/connectors | Enable a connector: creates its integration and templated references | integrations.create |
GET | /api/v1/connectors/{id} | Get a connector with its template, integration and references | integrations.view |
PATCH | /api/v1/connectors/{id} | Update connector config/credentials (merged) and keep its integration in step | integrations.edit |
DELETE | /api/v1/connectors/{id} | Delete a connector, its integration and generated references | integrations.delete |
POST | /api/v1/connectors/{id}/test | Run the connector preflight and probe with its stored credentials | integrations.test |
POST | /api/v1/connectors/{id}/enable | Re-enable a connector and its integration | integrations.edit |
POST | /api/v1/connectors/{id}/disable | Disable a connector and deactivate its integration | integrations.edit |
POST | /api/v1/connectors/{id}/regenerate-references | Replace the generated references with the current template set | integrations.manage_references |
Email templates
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/email-templates | List email templates (without bodies) | workflows.view |
POST | /api/v1/email-templates | Create an email template | workflows.create |
GET | /api/v1/email-templates/{id} | Get an email template with its subject and bodies | workflows.view |
PATCH | /api/v1/email-templates/{id} | Update an email template | workflows.edit |
DELETE | /api/v1/email-templates/{id} | Delete an email template (409 for the default template) | workflows.edit |
POST | /api/v1/email-templates/{id}/preview | Render the subject and bodies with sample variables (nothing is sent) | workflows.view |
Workflow activities
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/workflow-activities | List custom workflow activities (without source code) | extensibility.view |
POST | /api/v1/workflow-activities | Create a custom workflow activity | extensibility.create |
POST | /api/v1/workflow-activities/import | Create an activity from a portable export | extensibility.create |
GET | /api/v1/workflow-activities/{id} | Get an activity with source code, manifest and readiness findings | extensibility.view |
PATCH | /api/v1/workflow-activities/{id} | Update an activity (omitted fields are kept) | extensibility.edit |
DELETE | /api/v1/workflow-activities/{id} | Delete an activity | extensibility.delete |
GET | /api/v1/workflow-activities/{id}/export | Export an activity as portable JSON (accepted by POST /workflow-activities/import) | extensibility.view |
Reports
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/reports | List saved reports | reports.view |
POST | /api/v1/reports | Create a saved report | reports.create |
GET | /api/v1/reports/{id} | Get a saved report | reports.view |
PUT | /api/v1/reports/{id} | Update a saved report | reports.edit_own |
PATCH | /api/v1/reports/{id} | Update a saved report (same as PUT) | reports.edit_own |
DELETE | /api/v1/reports/{id} | Delete a saved report | reports.delete |
POST | /api/v1/reports/preview | Run a report configuration without saving it | reports.view |
GET | /api/v1/reports/sources | List report data sources | reports.view |
GET | /api/v1/reports/{id}/export | Export a saved report as portable JSON | reports.view |
POST | /api/v1/reports/import | Create a saved report from an export document | reports.create |
Retention
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/retention-policies | List retention policies | settings.view |
POST | /api/v1/retention-policies | Create a retention policy | settings.edit |
GET | /api/v1/retention-policies/{id} | Get a retention policy | settings.view |
PUT | /api/v1/retention-policies/{id} | Update a retention policy | settings.edit |
PATCH | /api/v1/retention-policies/{id} | Update a retention policy (same as PUT) | settings.edit |
DELETE | /api/v1/retention-policies/{id} | Delete a retention policy | settings.edit |
GET | /api/v1/retention-policies/{id}/assets | List assets governed by a retention policy | settings.view |
POST | /api/v1/retention-policies/assign | Assign (or clear) the retention policy on an asset | settings.edit |
Roles & users
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/roles | List system and custom roles with their permissions | team.view_members |
POST | /api/v1/roles | Create a custom role | team.change_roles |
GET | /api/v1/roles/{id} | Get a role | team.view_members |
PATCH | /api/v1/roles/{id} | Update a role | team.change_roles |
DELETE | /api/v1/roles/{id} | Delete a custom role (its assignments are removed; 409 for system roles) | team.change_roles |
GET | /api/v1/users | List workspace users | team.view_members |
PUT | /api/v1/users/{id}/roles/{roleId} | Give a user a role (idempotent) | team.change_roles |
DELETE | /api/v1/users/{id}/roles/{roleId} | Remove a role from a user | team.change_roles |
Teams
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/teams | List teams with member counts | team.view_members |
POST | /api/v1/teams | Create a team | team.invite |
GET | /api/v1/teams/{id} | Get a team with its members | team.view_members |
PATCH | /api/v1/teams/{id} | Update a team | team.invite |
DELETE | /api/v1/teams/{id} | Delete a team and its memberships | team.remove |
PUT | /api/v1/teams/{id}/members/{userId} | Add a user to a team (idempotent) | team.invite |
DELETE | /api/v1/teams/{id}/members/{userId} | Remove a user from a team | team.remove |
Invitations
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/invitations | List invitations (pending by default) | team.invite |
POST | /api/v1/invitations | Invite someone to the workspace by email | team.invite |
DELETE | /api/v1/invitations/{id} | Revoke an invitation (its link stops working) | team.invite |
POST | /api/v1/invitations/{id}/resend | Email a pending invitation again with a fresh link and expiry | team.invite |
Audit log
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/audit-log | Query the object audit log (newest first) | settings.view |
Workspace theme
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/workspace-theme | Get the workspace theme (any member) | any |
PUT | /api/v1/workspace-theme | Replace the workspace theme | settings.edit |
POST | /api/v1/workspace-theme/apply-preset | Replace the workspace theme with a built-in template | settings.edit |
GET | /api/v1/workspace-theme/presets | List the built-in theme templates | any |
POST | /api/v1/workspace-theme/fonts | Upload a woff2 font for the workspace theme | settings.edit |
API keys
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/api-keys | List API keys (never the key itself) | settings.manage_api_keys |
POST | /api/v1/api-keys | Create an API key (the key is shown once) | settings.manage_api_keys |
POST | /api/v1/api-keys/{id}/revoke | Revoke an API key (kept for history, stops authenticating) | settings.manage_api_keys |
DELETE | /api/v1/api-keys/{id} | Delete an API key | settings.manage_api_keys |
Webhooks
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/workflows/{id}/webhooks | List the inbound webhooks of a workflow (secrets are never returned) | settings.manage_webhooks |
POST | /api/v1/workflows/{id}/webhooks | Create an inbound webhook that triggers the workflow | settings.manage_webhooks |
GET | /api/v1/webhooks/{id} | Get a webhook (the secret is never returned) | settings.manage_webhooks |
PATCH | /api/v1/webhooks/{id} | Update a webhook slug, payload mapping or active flag | settings.manage_webhooks |
DELETE | /api/v1/webhooks/{id} | Delete a webhook | settings.manage_webhooks |
POST | /api/v1/webhooks/{id}/rotate | Replace a webhook secret (the old one stops working) | settings.manage_webhooks |
GitHub sync
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/github-sync/status | Connection status, pending changes and latest run/deployment | sync.view |
POST | /api/v1/github-sync/commit | Commit pending changes to the repository | sync.manage |
GET | /api/v1/github-sync/runs | List sync runs | sync.view |
POST | /api/v1/github-sync/runs | Enqueue a full, pending-change or scoped sync | sync.manage |
GET | /api/v1/github-sync/runs/{id} | Get a sync run | sync.view |
POST | /api/v1/github-sync/deploy | Deploy the repository manifest into this workspace | sync.deploy |
GET | /api/v1/github-sync/deployments | List deployments | sync.view |
GET | /api/v1/github-sync/deployments/{id} | Get a deployment | sync.view |
GET | /api/v1/github-sync/schedule | Get the scheduled sync configuration | sync.view |
PUT | /api/v1/github-sync/schedule | Set the scheduled sync configuration | sync.manage |
DELETE | /api/v1/github-sync/schedule | Disable scheduled sync | sync.manage |
Directory sync
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/directory-sync/connections | List directory connections (Entra ID, Okta, LDAP, Google Workspace, SCIM) with sync state | settings.view |
POST | /api/v1/directory-sync/connections | Connect a directory (the connection is verified before it is saved) | settings.edit |
GET | /api/v1/directory-sync/connections/{provider} | Get a directory connection (credentials masked) | settings.view |
PATCH | /api/v1/directory-sync/connections/{provider} | Update a directory connection (re-verified when settings or credentials change) | settings.edit |
DELETE | /api/v1/directory-sync/connections/{provider} | Disconnect a directory: syncing stops and credentials are removed (SCIM: every token is revoked). Links and accounts are kept. | settings.edit |
POST | /api/v1/directory-sync/connections/{provider}/test | Test a directory connection (optionally with unsaved settings/credentials) | settings.edit |
POST | /api/v1/directory-sync/connections/{provider}/sync | Start a sync run now (runs in the background) | settings.edit |
GET | /api/v1/directory-sync/runs | List directory sync runs, newest first | settings.view |
GET | /api/v1/directory-sync/scim-tokens | List SCIM tokens (never the tokens themselves) | settings.view |
POST | /api/v1/directory-sync/scim-tokens | Create a SCIM token for the identity provider (shown once); enables SCIM provisioning | settings.edit |
DELETE | /api/v1/directory-sync/scim-tokens/{id} | Revoke and delete a SCIM token | settings.edit |
POST | /api/v1/directory-sync/scim-tokens/{id}/rotate | Replace a SCIM token with a new one (same name and scopes); the old one stops working now or after grace_minutes | settings.edit |
Config
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/config/export | Export workspace configuration as config-as-code files | any |
POST | /api/v1/config/apply | Apply config-as-code files (create or update; never deletes) | any |
Packages
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/packages | List packages authored in this workspace | packages.view |
POST | /api/v1/packages | Create a package from root artifacts (dependencies are included automatically) | packages.manage |
POST | /api/v1/packages/preview | Preview what a package of these roots would contain (dependencies and requirements) | packages.view |
POST | /api/v1/packages/inspect | Verify and describe a .utpkg file (nothing is installed) | packages.view |
GET | /api/v1/packages/{id} | Get a package and its recent versions | packages.view |
PATCH | /api/v1/packages/{id} | Update a package (metadata, items, data modes) | packages.manage |
DELETE | /api/v1/packages/{id} | Delete a package and its built versions (installs elsewhere are unaffected) | packages.manage |
GET | /api/v1/packages/{id}/contents | What the package contains now: artifacts (and why), data modes, requirements | packages.view |
GET | /api/v1/packages/{id}/versions | List built versions of a package | packages.view |
POST | /api/v1/packages/{id}/versions | Build, sign and publish a new version (.utpkg) | packages.manage |
GET | /api/v1/packages/{id}/versions/{versionId} | Get a built version (its manifest: requirements, files, checksum, signature) | packages.view |
GET | /api/v1/packages/{id}/versions/{versionId}/download | Download a built version as a .utpkg file (base64 in JSON) | packages.view |
GET | /api/v1/package-installs | The package library: installed packages with version, source and status | packages.view |
POST | /api/v1/package-installs/plan | Dry run: verify a package and show what installing or upgrading it would do | packages.view |
POST | /api/v1/package-installs | Install or upgrade a package (upgrade in place when it is installed already) | packages.install |
GET | /api/v1/package-installs/{id} | An installed package: requirement checklist and installed assets | packages.view |
POST | /api/v1/package-installs/{id}/upgrade | Upgrade an installed package to the version in the file (dry_run for the diff) | packages.install |
POST | /api/v1/package-installs/{id}/complete | Complete setup: fill missing requirement values and enable what they unblock | packages.install |
POST | /api/v1/package-installs/{id}/uninstall | Uninstall: remove package-owned assets (dry_run lists them; locally changed assets and tables with rows are kept unless force / delete_data) | packages.install |
GET | /api/v1/package-events | Package history: every install, upgrade, reconfigure (complete setup) and uninstall, failed attempts included (newest first) | packages.view |
GET | /api/v1/package-events/{id} | One package history event with the full plan / diff that was applied (secrets masked) | packages.view |
Events
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/events | List events from the unified event stream (oldest first, cursor paged) | observability.view |
GET | /api/v1/events/stream | Stream events live (Server-Sent Events) | observability.view |
Log export
| Method | Path | Summary | Permission |
|---|---|---|---|
GET | /api/v1/log-destinations | List log export destinations (credentials masked) | observability.view |
POST | /api/v1/log-destinations | Create a log export destination (Splunk HEC, Datadog, OTLP/HTTP, webhook, syslog, Azure Monitor, Event Hubs, Cloud Logging, Pub/Sub, CloudWatch Logs) | settings.edit |
GET | /api/v1/log-destinations/{id} | Get a log export destination (credentials masked) | observability.view |
PATCH | /api/v1/log-destinations/{id} | Update a log export destination | settings.edit |
DELETE | /api/v1/log-destinations/{id} | Delete a log export destination | settings.edit |
POST | /api/v1/log-destinations/{id}/reset-cursor | Move a destination's cursor to now or to the start of retention | settings.edit |
GET | /api/v1/log-destinations/{id}/status | Delivery status of a destination: lag, last success and last error | observability.view |
POST | /api/v1/log-destinations/{id}/test | Send one synthetic system.test event through the destination's formatter and connection | settings.edit |