overview
| Field | Description | Type | Required |
|---|---|---|---|
actionId | Identifier for the action, prefixed with the connector key to form its MCP tool name. | string | Yes |
actionType | Operation kind the engine treats this action as. Allowed: list, get, create, update, delete, custom, refresh_token, event, unknown | enum | Yes |
annotations | Explicit MCP tool-annotation overrides for the action. | object | No |
authRequirements | Per-authentication-method scopes required to run the action. | object | No |
categories | Business-domain classifications used for filtering the action. | string[] | Yes |
compositeIdentifiers | Configuration for building a record id from multiple provider fields. | object | No |
cursor | Engine-managed cursor pagination configuration. | object | No |
dataSync | Data Sync configuration for bulk syncing this action’s records. | object | No |
description | Short description shown in the UI and MCP tool declarations. | string | Yes |
details | Extended context about the action for agents and developers. | string | No |
effects | Semantic effects the action performs, used for MCP annotations and dashboard filtering. | string[] | No |
entrypointHttpMethod | HTTP method of the primary request. | string | No |
entrypointUrl | URL path of the action’s primary request. Paired with entrypointHttpMethod to form the action key such as GET /employees, and used as the request log URL. | string | No |
examples | Example input values for the action, each optionally labeled with exampleDescription. | object[] | No |
executionMode | Whether the action runs synchronously or is dispatched to an async workflow. Allowed: sync, async | enum | No |
fieldConfigs | Field-level mapping and typing configuration for the result. | array | No |
inputs | Parameters the action accepts, forming its tool input schema. | object[] | No |
label | Human-readable display name for the action. | string | Yes |
prerequisiteActions | Action ids this action declares as dependencies. | string[] | No |
providerEvents | Provider event names this action handles. | string[] | No |
releaseStage | Maturity level of the action. Allowed: preview, beta, ga, deprecated, internal | enum | No |
requiredScopes | Permission scopes required to run the action. | string | No |
resources | URL to provider documentation for this action. | string | No |
responses | Documented HTTP responses the action can return. | object[] | No |
result | Data returned to the caller, given as an expression or a map of output keys to expressions. | union | No |
schema | Name of the output schema the action conforms to. | string | No |
schemaType | Whether the output follows the native provider shape or the unified StackOne schema. Allowed: native, unifiedDefault: native | enum | Yes |
steps | Ordered steps executed to carry out the action. | array | Yes |
tags | Free-form tags for grouping and filtering the action. | string[] | No |
validationRules | Cross-field validation rules applied to the action inputs. | array | No |
Action types
Action types
actionType tells the engine how to treat the operation.Unified types (list, get, create, update, delete) return normalized data:- Consistent response schemas across providers.
- Cross-provider compatibility.
- Automatic pagination handling.
- Normalized error responses.
list action always returns { data: [...], next: <cursor or null> }.Custom (custom) returns the raw provider response, with no schema normalization. Use it for provider-specific endpoints that need full flexibility.Special-purpose types are used in other blocks, not actions[]:event— an event handler underevents.actionsthat runs when a matching provider event arrives (matched viaproviderEvents). Same shape as a regular action.refresh_token— the credential-refresh action underrefreshAuthentication.
annotations
Explicit MCP tool-annotation overrides for the action.| Field | Description | Type | Required |
|---|---|---|---|
destructiveHint | Whether the action may delete or overwrite data. | boolean | No |
idempotentHint | Whether repeating the action has no additional effect. | boolean | No |
openWorldHint | Whether the action interacts with an open, external world. | boolean | No |
readOnlyHint | Whether the action only reads data. | boolean | No |
title | Human-readable title exposed to MCP clients. | string | No |
authRequirements
Per-authentication-method scopes required to run the action. ExamplescompositeIdentifiers
Configuration for building a record id from multiple provider fields.| Field | Description | Type | Required |
|---|---|---|---|
enabled | Whether composite identifiers are built for records. | boolean | Yes |
fields | Field mappings that make up each composite identifier. | object[] | No |
version | Version of the composite identifier encoding. | number | No |
compositeIdentifiers.fields
compositeIdentifiers.fields
Field mappings that make up each composite identifier.
| Field | Description | Type | Required |
|---|---|---|---|
components | Ordered output field keys whose values combine into the identifier. | string[] | Yes |
remote | Provider field the identifier component is read from. | string | No |
targetFieldKey | Key the composite identifier is written to. | string | Yes |
cursor
Engine-managed cursor pagination configuration.| Field | Description | Type | Required |
|---|---|---|---|
enabled | Whether cursor pagination is enabled. Only applies to list actions and has no effect on others. | boolean | Yes |
pageSize | Number of records requested per page. | number | Yes |
dataSync
Synced records are stored for reading with Deep Query. See Data Sync. Data Sync configuration for bulk syncing this action’s records.| Field | Description | Type | Required |
|---|---|---|---|
allowed | Whether Data Sync is enabled for this action. | boolean | Yes |
dataKey | Path within the step output to the records array, used when the action returns them in a single call rather than paginating. | string | No |
incremental | Change-tracking configuration for incremental syncs. | union | No |
indexField | Field or fields forming each record’s primary key during sync. | union | Yes |
maxDurationMinutes | Maximum time a single sync run may take. | integer | No |
maxPages | Maximum number of pages fetched in a single sync run. | integer | No |
pagination | Pagination strategy used while syncing. | union | No |
dataSync.incremental
dataSync.incremental
Change-tracking configuration for incremental syncs.
- time_filter
- delta_token
| Field | Description | Type | Required |
|---|---|---|---|
format | Encoding of the timestamp value: iso8601, unix_seconds, or unix_millis.Allowed: iso8601, unix_seconds, unix_millis | enum | Yes |
iterator | Names the request parameter carrying the last-sync timestamp and where on the request to place it. | object | Yes |
response | Configures reading the newest record timestamp from each page to advance the watermark. | object | No |
safetyBufferSeconds | Seconds subtracted from the run start time when falling back to the local clock so records near the boundary are not skipped. Default: 60 | integer | Yes |
type | Selects the updated-since strategy where each sync requests only records changed after the last watermark. | string | Yes |
dataSync.incremental.time_filter.iterator
dataSync.incremental.time_filter.iterator
Names the request parameter carrying the last-sync timestamp and where on the request to place it.
| Field | Description | Type | Required |
|---|---|---|---|
in | Where to add the timestamp parameter: query, body, or headers.Allowed: query, body, headers | enum | Yes |
key | Request parameter name the last-sync timestamp is sent under. | string | Yes |
dataSync.incremental.time_filter.response
dataSync.incremental.time_filter.response
Configures reading the newest record timestamp from each page to advance the watermark.
| Field | Description | Type | Required |
|---|---|---|---|
updatedAtPath | Path within each returned record to its last-updated timestamp, read to advance the watermark. | string | Yes |
dataSync.pagination
dataSync.pagination
Pagination strategy used while syncing.
- cursor
- offset
- page
| Field | Description | Type | Required |
|---|---|---|---|
iterator | Request parameter that carries the next-page cursor. | object | Yes |
response | How records and the next-page cursor are located in the response. | object | Yes |
stopCondition | Expression evaluated against each response to stop paging. Defaults to stopping when the next-page cursor key is null. | string | No |
type | Selects the cursor-based pagination strategy. | string | Yes |
dataSync.pagination.cursor.iterator
dataSync.pagination.cursor.iterator
Request parameter that carries the next-page cursor.
| Field | Description | Type | Required |
|---|---|---|---|
in | Where to add the pagination parameters: query, body, or headers.Allowed: query, body, headers | enum | Yes |
key | Request parameter the next-page cursor is sent in. | string | Yes |
dataSync.pagination.cursor.response
dataSync.pagination.cursor.response
How records and the next-page cursor are located in the response.
| Field | Description | Type | Required |
|---|---|---|---|
dataKey | Response key holding the array of records for each page. | string | Yes |
nextKey | Response key holding the cursor for the next page. | string | Yes |
- cursor
- offset
- page
- time_filter
- delta_token
effects
Semantic effects the action performs, used for MCP annotations and dashboard filtering. Optional, but worth setting on every action so an MCP client can auto-approve reads and prompt before writes.
An action can carry more than one effect. A find-or-create gets
[read, write].
How effects become MCP annotations
How effects become MCP annotations
With no
effects and no annotations override, no hints are emitted, so a read looks no safer than a delete.examples
Example input values for the action, each optionally labeled withexampleDescription.
| Field | Description | Type | Required |
|---|---|---|---|
exampleDescription | Explains what this usage example demonstrates. | string | No |
fieldConfigs
Field-level mapping and typing configuration for the result. Examplesinputs
Parameters the action accepts, forming its tool input schema.| Field | Description | Type | Required |
|---|---|---|---|
array | Whether the input accepts a list of values. Default: false | boolean | Yes |
arrayFormat | How a list input’s values are formatted in the request, such as repeated, comma-separated, or bracketed. Currently not in use. Allowed: repeat, brackets, comma, stringify | enum | No |
description | Explains the input for callers and generated tool schemas. | string | Yes |
in | Part of the HTTP request this input is placed in. Allowed: body, query, path, headers | enum | Yes |
name | Parameter name exposed to callers and mapped into the request. | string | Yes |
oneOf | Allowed values when the input is an enum. | union | No |
properties | Nested inputs when the input is an object. | object[] | No |
required | Whether the caller must supply this input. | boolean | Yes |
rules | Validation rules applied to the input value. | object | No |
type | Data type of the input value. Allowed: string, number, boolean, datetime_string, object, enum | enum | No |
variants | Alternative typed shapes the input may take. | object[] | No |
inputs.oneOf
inputs.oneOf
Allowed values when the input is an enum.
- Option 1
- Option 2
| Field | Description | Type | Required |
|---|---|---|---|
values | Explicit list of allowed enum values. | string[] | Yes |
inputs.rules
inputs.rules
Validation rules applied to the input value.
| Field | Description | Type | Required |
|---|---|---|---|
errorMessage | Message shown when the value violates a rule. | string | No |
format | Named format the value must conform to. Allowed: email, url, uri, uuid, date, datetime | enum | No |
max | Maximum numeric value allowed. | number | No |
maxLength | Maximum number of characters the value may have. | number | No |
min | Minimum numeric value allowed. | number | No |
minLength | Minimum number of characters the value must have. | number | No |
pattern | Regular expression the value must match. | string | No |
responses
Documented HTTP responses the action can return.| Field | Description | Type | Required |
|---|---|---|---|
description | What this response status means. | string | Yes |
statusCode | HTTP status code being documented. | number | Yes |
result
Data returned to the caller, given as an expression or a map of output keys to expressions. Examples- Expression
- Object map
steps
See Step Functions for the full catalog and their parameters. Ordered steps executed to carry out the action.- Single step
- Iterator step
| Field | Description | Type | Required |
|---|---|---|---|
condition | Expression gating whether this step runs. | string | No |
description | Explains what this step does. | string | Yes |
ignoreError | Whether a failure in this step is ignored so execution continues. | boolean | No |
onConditionError | How to behave when the condition expression errors. Allowed: true, false, break | enum | No |
stepFunction | Step function executed by this step. | object | Yes |
stepId | Identifier for this step, used to reference its output. | string | Yes |
steps.Single step.stepFunction
steps.Single step.stepFunction
Step function executed by this step.
| Field | Description | Type | Required |
|---|---|---|---|
functionName | Name of the step function to execute. | string | Yes |
parameters | Arguments passed to the step function. | object | Yes |
version | Version of the step function to use. | string | No |
validationRules
Cross-field validation rules applied to the action inputs.- atLeastOneOf
- requiredIf
- mutuallyExclusive
| Field | Description | Type | Required |
|---|---|---|---|
errorMessage | Message shown when the rule is violated. | string | No |
fields | Input names of which at least one must be provided. | string[] | Yes |
rule | Requires at least one of the listed inputs to be provided. | string | Yes |
- atLeastOneOf
- requiredIf
- mutuallyExclusive
Related
Step functions
Full catalog of stepFunction implementations.
Expression language
JEXL syntax for condition, iterator, result, and step inputs.