POST /api/executions, which uses the canonical integration_id + action_id +
input model.
POST /api/executions
string
required
The integration slug, e.g.
gmail, slack, instagram. See
discovering actions.string
required
The action to run, e.g.
send_email. This is the tool name with the integration prefix
removed (gmail_send_email → send_email). The full tool name (gmail_send_email)
also works.object
required
The action’s arguments. Field names are specific to each action — fetch them with
GET /api/actions/{integration_id}/{action_id}.boolean
default:"false"
Required (
true) for any write or destructive action. See The confirm field.string
Optional client-supplied key to safely retry a request without running the action twice.
POST /api/executions runs against your default connection for the integration. If
you have multiple connections for the same app and need to target a specific one, use
the tool endpoint with connectionId.Response
The response is a normalized execution summary.status is the field to branch on.
string
succeeded, blocked, or failed.string | null
Stable ID of the run.
null when the action was blocked before running (e.g. missing
confirmation). Pass to GET /api/executions/{id}.string
string
string
ISO 8601 timestamp.
string
ISO 8601 timestamp.
any
The provider’s result payload. Present on success.
object
{ title, summary } — a short human-readable description of the outcome.string
Human-readable error message (on
blocked / failed).string
Actionable guidance for recovering from a failure, when available.
object
e.g.
{ "tool": "clawlink.connect_app", "input": { "integration_id": "gmail" } } when
the app needs connecting or re-authing.200 succeeded · 409 blocked · 500 failed. A malformed request
(missing integration_id/action_id/input) returns 400.
The confirm field
Read-only actions run immediately. Write and destructive actions requireconfirm: true — this is a deliberate safety gate so an agent can’t send an email or
delete a record without an explicit go-ahead.
If you omit confirm (or set it false) on a write action, the execution is blocked
before it runs:
statusis"blocked",execution_idisnullerror_codeis"policy_blocked"- HTTP status is
409
confirm: true.
Examples
Field names below come from each action’s schema. Always confirm them withGET /api/actions/{integration_id}/{action_id} before going
to production — schemas can change.
- Gmail
- Slack
- Instagram
Send an email (
gmail · send_email). user_id must be the literal string "me".Discovering actions
You don’t have to hard-code action IDs or guess input fields — the catalog is queryable.List integrations
{ items, page, page_size, total }. Each item includes integration_id,
name, connected, connection_state, and capabilities (the action IDs it supports).
Query params: query, category, connected_only, supports_action, page,
page_size.
List an integration’s actions
{ integration_id, items: [...] } where each item has action_id, title,
description, and side_effect_level. Add &intent=send%20an%20email to rank by intent.
Get an action schema
This is how you find the exactinput field names for an action:
input_schema (full JSON Schema),
input_summary.required / input_summary.optional, requires_confirmation,
side_effect_level, examples, and preconditions.
Search the whole catalog
{ items: [{ kind, integration_id, action_id, title, summary, connected, connection_state }] }.
Fetch a past execution
output.
Alternative: tool-name endpoint
POST /api/tools/{tool_name}/execute is the lower-level endpoint the OpenClaw plugin
itself uses. Reach for it when you need to target a specific connection or attach
local file bytes (see File uploads). It is tool-name-centric — use
the full tool name (e.g. gmail_send_email) in the path.
object
The action arguments. If omitted, top-level keys (other than
connectionId,
confirmed, files) are treated as the arguments.number | string
Target a specific connection when you have more than one for the app. Omit to use the
default.
boolean
default:"false"
Confirmation gate for write actions (note the
-ed spelling).array
Base64 file attachments. See File uploads.
ok, data/result, error, meta)
plus a canonical object with the same execution-summary shape as /api/executions.
The error envelope is documented in Errors.