> ## Documentation Index
> Fetch the complete documentation index at: https://open.manus.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Confirmation Events

> Every waiting event type that accepts task.confirmAction, with its input schema, inputs, and target event

<sup>Questions or issues? Contact us at [api-support@manus.ai](mailto:api-support@manus.ai).</sup>

This page lists every waiting event type that you answer with [task.confirmAction](https://open.manus.ai/docs/v2/task.confirmAction.md). Use it when you render your own confirmation UI for one event type or for all of them. For the end-to-end flow, read [Confirm an action](https://open.manus.ai/docs/v2/task-lifecycle#confirm-an-action) first.

## How to read an entry

Each entry is named after `status_detail.waiting_for_event_type` and contains:

| Part | Meaning |
| - | - |
| **Context** | Where to read the details to show the user. |
| **Waiting status** | The `status_update.status_detail` of the waiting event. Build `task.confirmAction.input` from its `confirm_input_schema`. |
| **Inputs** | Inputs that `task.confirmAction` accepts for this type, and what each one does. Fields outside the schema are ignored. |
| **Target event** | What [task.listMessages](https://open.manus.ai/docs/v2/task.listMessages.md) returns with `verbose=true&start_event_id=<waiting_for_event_id>`. |

The examples use sample data in production formats. Task IDs and event IDs are 22-character IDs. `action_id` is a 22-character ID for connector tools, or the model's tool-call ID for built-in tools such as the terminal. Treat every ID as an opaque string.

> [!NOTE]
>
> `confirmed: false` means the event did not consume the input and the task is still waiting. A target's `tool_used.status` describes the preparation step, not the pending action: many targets report `success` while the action still waits. To skip without a schema-specific input, [resume without a decision](https://open.manus.ai/docs/v2/task-lifecycle#resume-without-a-decision).

## Index

| Event type | Decision |
| - | - |
| [gmailSendAction](#gmailSendAction) | Send, save as draft, or cancel |
| [outlookSendMailsAction](#outlookSendMailsAction) | Send, save as draft, or cancel |
| [googleCalendarCreate](#googleCalendarCreate) | Create calendar events, or cancel |
| [googleCalendarUpdate](#googleCalendarUpdate) | Update calendar events, or cancel |
| [googleCalendarDelete](#googleCalendarDelete) | Delete calendar events, or cancel |
| [outlookCalendarCreate](#outlookCalendarCreate) | Create calendar events, or cancel |
| [outlookCalendarUpdate](#outlookCalendarUpdate) | Update calendar events, or cancel |
| [outlookCalendarDelete](#outlookCalendarDelete) | Delete calendar events, or cancel |
| [terminalExecute](#terminalExecute) | Run a command |
| [apiHighCreditNotice](#apiHighCreditNotice) | Run, stop, or stop asking about a high-credit data API call |
| [webdevRequestSecrets](#webdevRequestSecrets) | Provide or reject requested secrets |
| [shopifyAction](#shopifyAction) | Delete a Shopify product, or cancel |
| [instagramCreateResult](#instagramCreateResult) | Publish a prepared Instagram draft |
| [metaMarketingAction](#metaMarketingAction) | Select ad accounts to analyze |
| [needConnectMyBrowser](#needConnectMyBrowser) | Select a browser, or skip |
| [videoGenerateApprovalRequest](#videoGenerateApprovalRequest) | Approve or decline video generation |
| [selfConfigSaveAction](#selfConfigSaveAction) | Skip a connector configuration suggestion |
| [connectorOauthExpired](#connectorOauthExpired) | Continue after connector reauthorization |
| [deployAction](#deployAction) | Deploy a service |
| [webdevRunAction](#webdevRunAction) | Create a Webdev project |
| [metaMarketingActionResult](#metaMarketingActionResult) | Choose the Meta analysis mode |
| [mapreduceAction](#mapreduceAction) | Start a map-reduce run |

## Manus agent events

These events come from tools that the current Manus agent runs in the main task loop.

### Email

> [accordion] gmailSendAction
>
> Send, save as draft, or cancel
>
> **Context:** `tool_used.params.messages[]`: recipients, subject and body. Array positions are the values for `indices`.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "gmailSendAction",
>   "waiting_description": "Preparing Gmail messages",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": {
>         "type": "boolean",
>         "description": "Whether the user approves the selected operation: sending OR saving as a draft. Draft-only approval is true, even when sending is explicitly forbidden. False cancels the entire operation."
>       },
>       "save_draft": {
>         "type": "boolean",
>         "description": "True selects saving as a draft without sending; false selects sending. This choice executes only when accept is true."
>       },
>       "indices": {
>         "type": "array",
>         "items": { "type": "integer", "minimum": 0 },
>         "minItems": 1
>       }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Send the messages. |
> | `{ "accept": false }` | Cancel the whole operation. |
> | `{ "accept": true, "save_draft": true }` | Save the messages as drafts without sending. |
>
> Optional `indices` applies the decision only to the listed positions in `params.messages[]`.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "gmail",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing Gmail message",
>     "description": "Preparing Gmail messages",
>     "message": { "action": "Preparing Gmail messages" },
>     "params": {
>       "messages": [
>         {
>           "subject": "Launch review moved to Friday",
>           "to": ["alex@example.com"],
>           "cc": ["jordan@example.com"],
>           "content": "Hi Alex,\n\nThe launch review moved to Friday at 10:00. The agenda is unchanged.\n\nThanks"
>         }
>       ]
>     }
>   }
> }
> ```

> [accordion] outlookSendMailsAction
>
> Send, save as draft, or cancel
>
> **Context:** `tool_used.params.messages[]`: recipients, subject and body. Array positions are the values for `indices`.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "outlookSendMailsAction",
>   "waiting_description": "Preparing Outlook mail messages",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "save_draft": { "type": "boolean" },
>       "indices": {
>         "type": "array",
>         "items": { "type": "integer", "minimum": 0 },
>         "minItems": 1
>       }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Send the messages. |
> | `{ "accept": false }` | Cancel the whole operation. |
> | `{ "accept": true, "save_draft": true }` | Save the messages as drafts without sending. |
>
> Optional `indices` applies the decision only to the listed positions in `params.messages[]`.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "outlook_mail",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing Outlook mail message",
>     "description": "Preparing Outlook mail messages",
>     "message": { "action": "Preparing Outlook mail messages" },
>     "params": {
>       "messages": [
>         {
>           "subject": "Launch review moved to Friday",
>           "to": ["alex@example.com"],
>           "cc": ["jordan@example.com"],
>           "content": "Hi Alex,\n\nThe launch review moved to Friday at 10:00. The agenda is unchanged.\n\nThanks"
>         }
>       ]
>     }
>   }
> }
> ```

### Calendar

Google and Outlook calendar types share one input schema. `event_id` is the provider event ID: a Google Calendar event ID, or a Microsoft Graph event ID for Outlook.

> [accordion] googleCalendarCreate
>
> Create calendar events, or cancel
>
> **Context:** `tool_used.params.events[]`: title, time, location, attendees and reminders.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "googleCalendarCreate",
>   "waiting_description": "Preparing to create calendar events",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Create the events. |
> | `{ "accept": false }` | Cancel the creation. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "google_calendar",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing calendar event",
>     "description": "Preparing to create calendar events",
>     "message": { "action": "Preparing calendar events" },
>     "params": {
>       "events": [
>         {
>           "calendar_id": "primary",
>           "summary": "Launch review",
>           "description": "Walk through the launch checklist.",
>           "start_time": "2026-11-06T10:00:00+08:00",
>           "end_time": "2026-11-06T11:00:00+08:00",
>           "location": "Room 4B",
>           "attendees": ["alex@example.com", "jordan@example.com"],
>           "reminders": [30]
>         }
>       ]
>     }
>   }
> }
> ```

> [accordion] googleCalendarUpdate
>
> Update calendar events, or cancel
>
> **Context:** `tool_used.params.events[]`: the event ID and only the fields that change. The current title and time are not exposed; read them from the calendar with `event_id` if you need a before-and-after view.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "googleCalendarUpdate",
>   "waiting_description": "Preparing to update calendar events",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Apply the changes. |
> | `{ "accept": false }` | Cancel the update. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "google_calendar",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing calendar event update",
>     "description": "Preparing to update calendar events",
>     "message": { "action": "Preparing calendar event update" },
>     "params": {
>       "events": [
>         {
>           "calendar_id": "primary",
>           "event_id": "g9j9k95ja8mr1fcsp4kj5vt7qa",
>           "start_time": "2026-11-07T10:00:00+08:00",
>           "end_time": "2026-11-07T11:00:00+08:00"
>         }
>       ]
>     }
>   }
> }
> ```

> [accordion] googleCalendarDelete
>
> Delete calendar events, or cancel
>
> **Context:** `tool_used.params.events[]`: the calendar ID and event ID. The title and time of the event are not exposed; read them from the calendar with `event_id` if you need to show them.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "googleCalendarDelete",
>   "waiting_description": "Deleted google calendar events",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Delete the events. |
> | `{ "accept": false }` | Cancel the deletion. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "google_calendar",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is deleting google calendar event",
>     "description": "Deleted google calendar events",
>     "message": { "action": "Deleting google calendar event" },
>     "params": {
>       "events": [
>         {
>           "calendar_id": "primary",
>           "event_id": "g9j9k95ja8mr1fcsp4kj5vt7qa"
>         }
>       ]
>     }
>   }
> }
> ```
>
> While the deletion waits, this target reports `status: "success"` and a past-tense `description`. Decide from the waiting status, not from the target `status`.

> [accordion] outlookCalendarCreate
>
> Create calendar events, or cancel
>
> **Context:** `tool_used.params.events[]`: title, time, location and attendees.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "outlookCalendarCreate",
>   "waiting_description": "Preparing Outlook calendar event",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Create the events. |
> | `{ "accept": false }` | Cancel the creation. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "outlook_calendar",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing Outlook calendar event",
>     "description": "Preparing Outlook calendar event",
>     "message": { "action": "Preparing Outlook calendar event" },
>     "params": {
>       "events": [
>         {
>           "summary": "Launch review",
>           "description": "Walk through the launch checklist.",
>           "start_time": "2026-11-06T10:00:00+08:00",
>           "end_time": "2026-11-06T11:00:00+08:00",
>           "location": "Room 4B",
>           "attendees": ["alex@example.com", "jordan@example.com"]
>         }
>       ]
>     }
>   }
> }
> ```

> [accordion] outlookCalendarUpdate
>
> Update calendar events, or cancel
>
> **Context:** `tool_used.params.events[]`: the event ID and only the fields that change. The current title and time are not exposed.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "outlookCalendarUpdate",
>   "waiting_description": "Preparing Outlook calendar event update",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Apply the changes. |
> | `{ "accept": false }` | Cancel the update. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "outlook_calendar",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing Outlook calendar event update",
>     "description": "Preparing Outlook calendar event update",
>     "message": { "action": "Preparing Outlook calendar event update" },
>     "params": {
>       "events": [
>         {
>           "event_id": "AAMkADc3MWUyMGQ5LTAyNzMtNGM4Mi04YmVmLTlhNWFlYjFjMWU1ZgBGAAAAAAC7XmrBQgFsQ4q1v9H0CwRbBwB2zVJEfqtVQaJ6mX3cDpYxAAAAAAENAAB2zVJEfqtVQaJ6mX3cDpYxAAAWqF8kAAA=",
>           "start_time": "2026-11-07T10:00:00+08:00",
>           "end_time": "2026-11-07T11:00:00+08:00"
>         }
>       ]
>     }
>   }
> }
> ```

> [accordion] outlookCalendarDelete
>
> Delete calendar events, or cancel
>
> **Context:** `tool_used.params.events[]`: the event ID only. The title and time of the event are not exposed.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "outlookCalendarDelete",
>   "waiting_description": "Preparing Outlook calendar event deletion",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Delete the events. |
> | `{ "accept": false }` | Cancel the deletion. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "outlook_calendar",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Manus is preparing Outlook calendar event deletion",
>     "description": "Preparing Outlook calendar event deletion",
>     "message": { "action": "Preparing Outlook calendar event deletion" },
>     "params": {
>       "events": [
>         {
>           "event_id": "AAMkADc3MWUyMGQ5LTAyNzMtNGM4Mi04YmVmLTlhNWFlYjFjMWU1ZgBGAAAAAAC7XmrBQgFsQ4q1v9H0CwRbBwB2zVJEfqtVQaJ6mX3cDpYxAAAAAAENAAB2zVJEfqtVQaJ6mX3cDpYxAAAWqF8kAAA="
>         }
>       ]
>     }
>   }
> }
> ```

### Terminal and data APIs

> [accordion] terminalExecute
>
> Run a command
>
> **Context:** `tool_used.params`: the command and its working directory (`cwd`).
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "terminalExecute",
>   "waiting_description": "Executed command `npm install`",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "always_allow": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true, "always_allow": true }` | Run the command, and skip future command confirmations. |
>
> `always_allow` is optional. `{ "accept": true }` runs only this command.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "terminal",
>     "action_id": "call_00_BWLvuKV9xZB2z6LIggvwrRyjWFt",
>     "status": "pending_confirmation",
>     "brief": "Install dependencies",
>     "description": "Executed command `npm install`",
>     "message": { "action": "Executing command", "param": "npm install" },
>     "params": {
>       "brief": "Install dependencies",
>       "command": "npm install",
>       "session": "default",
>       "cwd": "/home/ubuntu/app"
>     }
>   }
> }
> ```

> [accordion] apiHighCreditNotice
>
> Run, stop, or stop asking about a high-credit data API call
>
> **Context:** `tool_used.params`: the data API command that the notice stopped. The credit amount and per-API breakdown are not exposed, and the waiting status has no `waiting_description`.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "apiHighCreditNotice",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "action": {
>         "type": "string",
>         "enum": ["accept", "reject", "do_not_show_again"]
>       }
>     },
>     "required": ["action"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "action": "accept" }` | Run the command. |
> | `{ "action": "reject" }` | Stop the command. The agent asks for another approach. |
> | `{ "action": "do_not_show_again" }` | Run the command, and stop future notices for this task. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "terminal",
>     "action_id": "call_00_BWLvuKV9xZB2z6LIggvwrRyjWFt",
>     "status": "pending_confirmation",
>     "brief": "Fetch 12 months of traffic data",
>     "description": "Executed command `python3 /home/ubuntu/traffic.py --domains example.com,example.org --months 12`",
>     "message": {
>       "action": "Executing command",
>       "param": "python3 /home/ubuntu/traffic.py --domains example.com,example.org --months 12"
>     },
>     "params": {
>       "brief": "Fetch 12 months of traffic data",
>       "command": "python3 /home/ubuntu/traffic.py --domains example.com,example.org --months 12",
>       "session": "default",
>       "cwd": "/home/ubuntu"
>     }
>   }
> }
> ```

### Web projects

> [accordion] webdevRequestSecrets
>
> Provide or reject requested secrets
>
> **Context:** `waiting_description`: the request text. The requested key names are not exposed as structured data; read them from the text or ask the user.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "webdevRequestSecrets",
>   "waiting_description": "Add your Stripe secret key so the checkout page can create payments.",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "secrets": {
>         "type": "array",
>         "items": {
>           "type": "object",
>           "properties": {
>             "key": { "type": "string" },
>             "value": { "type": "string" },
>             "next_value": { "type": "string" },
>             "from": {},
>             "variant": { "type": "string", "enum": ["request", "edit"] }
>           },
>           "required": ["key"]
>         }
>       }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true, "secrets": [{ "key": "STRIPE_SECRET_KEY", "value": "<your Stripe secret key>" }] }` | Provide the secret values. |
> | `{ "accept": false }` | Reject the request. |
>
> Send `key` and `value` for each requested secret. Never log the values.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "assistant_message",
>   "assistant_message": {
>     "content": "Add your Stripe secret key so the checkout page can create payments."
>   }
> }
> ```

### Social and commerce

> [accordion] shopifyAction
>
> Delete a Shopify product, or cancel
>
> **Context:** `tool_used.params`: the product ID (`id`, a Shopify GID) and name (`display_name`). Only delete operations wait for confirmation.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "shopifyAction",
>   "waiting_description": "Deleting Shopify product",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Delete the product. |
> | `{ "accept": false }` | Cancel the deletion. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "shopify",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "pending_confirmation",
>     "brief": "Deleting Shopify product",
>     "description": "Deleting Shopify product",
>     "message": { "action": "Deleting Shopify product" },
>     "params": {
>       "id": "gid://shopify/Product/1719879125696",
>       "display_name": "Classic Tee - Navy"
>     }
>   }
> }
> ```

> [accordion] instagramCreateResult
>
> Publish a prepared Instagram draft
>
> **Context:** `tool_used.result.media`: the prepared draft (caption, author and media). `params` is the original input. The waiting status has no `waiting_description`.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "instagramCreateResult",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Publish the draft. |
>
> There is no decline input. To leave the draft unpublished, [resume without a decision](https://open.manus.ai/docs/v2/task-lifecycle#resume-without-a-decision).
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "instagram",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Instagram action completed successfully",
>     "description": "Instagram action completed successfully",
>     "message": { "action": "Instagram action completed successfully" },
>     "params": {
>       "type": "post",
>       "caption": "Launch day. Link in bio.",
>       "media": [
>         {
>           "type": "image",
>           "media_url": "https://cdn.example.com/launch/hero.jpg",
>           "alt_text": "Product on a desk"
>         }
>       ]
>     },
>     "result": {
>       "containerIds": ["17890570448387046"],
>       "media": {
>         "id": "X0SCXV59huUdjxubJrOYyx",
>         "type": "post",
>         "status": "draft",
>         "caption": "Launch day. Link in bio.",
>         "author": {
>           "username": "acme.studio",
>           "avatarUrl": "https://cdn.example.com/avatars/acme.jpg"
>         },
>         "mediaItems": [
>           {
>             "mediaUrl": "https://cdn.example.com/launch/hero.jpg",
>             "type": "image"
>           }
>         ]
>       }
>     }
>   }
> }
> ```

> [accordion] metaMarketingAction
>
> Select ad accounts to analyze
>
> **Context:** `tool_used.result.adAccounts[]`: the accounts to choose from. Use their `id` values.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "metaMarketingAction",
>   "waiting_description": "Select ad accounts to analyze",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "selectedAccountIds": {
>         "type": "array",
>         "items": { "type": "string" }
>       }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true, "selectedAccountIds": ["act_4763618418622564"] }` | Analyze the selected accounts. |
>
> An empty `selectedAccountIds` returns `confirmed: false`.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "meta_marketing",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "success",
>     "brief": "Select ad accounts to analyze",
>     "description": "Select ad accounts to analyze",
>     "message": { "action": "Select ad accounts to analyze" },
>     "params": { "keywords": ["acme"] },
>     "result": {
>       "adAccounts": [
>         {
>           "id": "act_4763618418622564",
>           "name": "Acme Retail",
>           "account_status": 1,
>           "currency": "USD",
>           "timezone_name": "America/Los_Angeles",
>           "amount_spent": "1520.35"
>         }
>       ]
>     }
>   }
> }
> ```

### Browser, media, and configuration

These types have no target event. `start_event_id` returns no event, so decide from `waiting_for_event_type` and `confirm_input_schema`.

> [accordion] needConnectMyBrowser
>
> Select a browser, or skip
>
> **Context:** None. Get the browser list from [browser.onlineList](https://open.manus.ai/docs/v2/browser.onlineList.md). See also [Using My Browser](https://open.manus.ai/docs/v2/task-lifecycle#using-my-browser).
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "needConnectMyBrowser",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "action": { "type": "string", "enum": ["select", "skip"] },
>       "client_id": { "type": "string" },
>       "reason": {
>         "type": "string",
>         "enum": ["no_clients_available", "same_browser_rejected", "client_offline", "api_error"]
>       }
>     },
>     "required": ["action"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "action": "select", "client_id": "0e9ad711-8471-4fcc-a9de-8309f0f12c87" }` | Use this browser. `client_id` comes from [browser.onlineList](https://open.manus.ai/docs/v2/browser.onlineList.md). |
> | `{ "action": "skip" }` | Skip browser selection. |
>
> **Target event:** None. `start_event_id` returns no event.

> [accordion] videoGenerateApprovalRequest
>
> Approve or decline video generation
>
> **Context:** None. The model, duration and credit estimate are not exposed. Ask the person who owns the task, or [resume without a decision](https://open.manus.ai/docs/v2/task-lifecycle#resume-without-a-decision).
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "vga-37e993c6408f",
>   "waiting_for_event_type": "videoGenerateApprovalRequest",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Generate the video. |
> | `{ "accept": false }` | Decline. The video is not generated. |
>
> **Target event:** None. `start_event_id` returns no event.
>
> For this type, `waiting_for_event_id` is `vga-` followed by 12 hexadecimal characters, not a 22-character ID.

> [accordion] selfConfigSaveAction
>
> Skip a connector configuration suggestion
>
> **Context:** None. Applying the suggestion needs `connectors[].uid`, which the API does not expose.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "selfConfigSaveAction",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "action": { "type": "string", "enum": ["apply", "skip"] },
>       "applyScope": {
>         "type": "string",
>         "enum": ["current_task", "current_and_future", "current_future_and_project"]
>       },
>       "connectors": {
>         "type": "array",
>         "items": {
>           "type": "object",
>           "properties": {
>             "uid": { "type": "string" },
>             "targetState": { "type": "string", "enum": ["enable", "disable"] },
>             "allowedAccountUids": {
>               "type": "array",
>               "items": { "type": "string" }
>             }
>           },
>           "required": ["uid", "targetState"]
>         }
>       }
>     },
>     "required": ["action"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "action": "skip" }` | Skip the suggestion. |
>
> **Target event:** None. `start_event_id` returns no event.

> [accordion] connectorOauthExpired
>
> Continue after connector reauthorization
>
> **Context:** None. The connector name is not exposed. Ask the person who owns the task, or [resume without a decision](https://open.manus.ai/docs/v2/task-lifecycle#resume-without-a-decision).
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "connectorOauthExpired",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Continue after the user reauthorizes the connector. |
>
> `{ "accept": false }` returns `confirmed: false`.
>
> **Target event:** None. `start_event_id` returns no event.

## Earlier agent loop events

The current Manus agent loop does not create these types. They can appear in tasks that ran on an earlier agent loop, so handle them if your integration reads those tasks.

> [accordion] deployAction
>
> Deploy a service
>
> **Context:** `waiting_description`: the path of the service to deploy. `start_event_id` returns the same text as an `assistant_message`.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "deployAction",
>   "waiting_description": "Manus is attempting to deploy the service located at `/home/ubuntu/site` to the public network. Please confirm if you agree by clicking the button.",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "global_allow": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true, "global_allow": true }` | Deploy, and skip future deploy confirmations. |
>
> `global_allow` is optional. `{ "accept": true }` deploys only this time.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "assistant_message",
>   "assistant_message": {
>     "content": "Manus is attempting to deploy the service located at `/home/ubuntu/site` to the public network. Please confirm if you agree by clicking the button."
>   }
> }
> ```

> [accordion] webdevRunAction
>
> Create a Webdev project
>
> **Context:** `tool_used.params`: project name, title, description and scaffold (`features`).
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "webdevRunAction",
>   "waiting_description": "Creating project",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "mode": { "type": "string", "enum": ["quality", "speed", "max"] }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true, "mode": "speed" }` | Create the project in the selected mode. |
>
> `mode` is `quality`, `speed` (default), or `max`.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "webdev",
>     "action_id": "X0SCXV59huUdjxubJrOYyx",
>     "status": "pending_confirmation",
>     "brief": "Create the launch site",
>     "description": "Creating project",
>     "message": { "action": "Initialize project", "param": "launch-site" },
>     "params": {
>       "brief": "Create the launch site",
>       "description": "Marketing site for the Friday launch",
>       "features": "web-static",
>       "project_name": "launch-site",
>       "project_title": "Launch Site"
>     }
>   }
> }
> ```

> [accordion] metaMarketingActionResult
>
> Choose the Meta analysis mode
>
> **Context:** None in practice. The target is a `tool_used` event with empty `params`; the event asks which analysis mode to use.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "metaMarketingActionResult",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" },
>       "mode": { "type": "string", "enum": ["speed", "quality", "max"] }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true, "mode": "quality" }` | Continue in the selected mode. |
>
> `mode` is optional: `speed`, `quality`, or `max`.
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "meta_marketing",
>     "action_id": "JkEdxOMNliowUvV1bEb20t",
>     "status": "success",
>     "brief": "Meta ads action completed successfully",
>     "description": "Meta ads action completed successfully",
>     "message": { "action": "Meta ads action completed successfully" },
>     "params": {}
>   }
> }
> ```

> [accordion] mapreduceAction
>
> Start a map-reduce run
>
> **Context:** `tool_used.params`: the title, the input list (`iterableInput`), the prompt template and the output fields.
>
> **Waiting status:**
>
> ```json theme={null}
> {
>   "waiting_for_event_id": "R0ayNknItM38cc6a2DbB4W",
>   "waiting_for_event_type": "mapreduceAction",
>   "waiting_description": "Processing data with Wide Research",
>   "confirm_input_schema": {
>     "type": "object",
>     "properties": {
>       "accept": { "type": "boolean" }
>     },
>     "required": ["accept"]
>   }
> }
> ```
>
> **Inputs:**
>
> | Input | Effect |
> | - | - |
> | `{ "accept": true }` | Start the run. |
>
> **Target event:**
>
> ```json theme={null}
> {
>   "id": "R0ayNknItM38cc6a2DbB4W",
>   "type": "tool_used",
>   "tool_used": {
>     "tool": "map_reduce",
>     "action_id": "call_00_BWLvuKV9xZB2z6LIggvwrRyjWFt",
>     "status": "success",
>     "brief": "Research three companies",
>     "description": "Processing data with Wide Research",
>     "message": { "action": "Using Wide Research" },
>     "params": {
>       "brief": "Research three companies",
>       "toolName": "agent_map_subtasks",
>       "name": "company_research",
>       "title": "Research three companies",
>       "taskDescription": "Research each company and summarize its pricing.",
>       "iterableInput": ["Acme", "Globex", "Initech"],
>       "promptTemplate": "Research {{input}} and summarize its pricing.",
>       "outputSchema": [
>         {
>           "name": "summary",
>           "type": "string",
>           "title": "Summary",
>           "description": "Pricing summary"
>         }
>       ],
>       "estimatedCost": [30, 60]
>     }
>   }
> }
> ```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.