Skip to main content
POST
SendMessage
Questions or issues? Contact us at api-support@manus.ai.
OAuth scope: create_task or manage_all_tasks — see the Open App guide. With create_task scope, can only access tasks created by this Open App.
Shortcut: Use agent-default-main_task as task_id to send messages to the IM agent directly.Message length: User text in message.content is limited to approximately 5,000 estimated tokens. Manus uses a lightweight text estimate, so the exact character count varies by language and content. For a ContentPart array, the limit applies to the combined text of all text parts; file parts do not count. Input over the limit returns InvalidArgument (HTTP 400).Structured Output: Pass structured_output_schema to extract a JSON result when the task next finishes. A new schema replaces the previous one. See the Structured Output guide.Attach files: Upload via file.upload and pass the file_id in the message content, or use file_url / file_data directly. There is no hard limit on the number of attachments.Connectors: Control this task’s connectors with message.connectors and the top-level clear_connectors flag (three states):
  • Override — pass a non-empty message.connectors to replace the task’s connectors with the new list. Get IDs from connector.list or the Connectors guide.
  • Clear — pass clear_connectors: true to remove all connectors from the task.
  • Reuse (default) — omit both to keep the connectors configured at task.create time.
Passing a non-empty message.connectors together with clear_connectors: true returns InvalidArgument.Enable skills: Pass skill IDs from skill.list in message.enable_skills to control which skills are available for the agent. If omitted, the user’s default enabled skills are loaded automatically.Force skills: Pass skill IDs in message.force_skills to ensure the agent invokes them. Forced skills are automatically available even if not listed in enable_skills.Reference existing tasks: Pass task IDs in message.task_references (up to 20 per request) to let the agent browse those tasks on demand. Unlike connectors, references accumulate — see the warning below. Note that this field takes bare 22-character task IDs only: the agent-default-main_task shortcut above is valid as task_id but not as a reference, and neither is a full task URL.Waiting events: Use this endpoint for agent questions (messageAskUser or cascadeAskUser). Send selected options or a free-text answer as ordinary message.content; see question replies. For action confirmations such as gmailSendAction or deployAction, use task.confirmAction, whether or not confirm_input_schema is present. Do not automatically confirm unrecognized waiting types.
Task references accumulate; they cannot be replaced or cleared. IDs passed here are added to the references the task already has. Sending ["B"] to a task that already references A leaves it referencing both. An empty array is a no-op, and there is no clear_task_references counterpart to clear_connectors.The 20-item cap applies per request. A task accumulating more than 20 references across several messages keeps the 20 most recently referenced and drops the oldest.
Malformed input does fail the request. Every entry must be a bare 22-character alphanumeric task ID; anything else — a full task URL, or the agent-default-main_task shortcut — returns InvalidArgument (HTTP 400). More than 20 entries in one request fails the same way, and that cap is applied to the array as sent, before duplicates and the self-reference are removed.Referencing a task you cannot open, however, does not fail the request. Access is checked when the agent reads a reference, not when you send it. A task that does not exist, or that your account cannot open, is reported to the agent as not found — the agent continues without it. This is deliberate: failing at request time would let anyone probe which task IDs exist.The one exception is an OAuth App holding only the create_task scope. It can reference only tasks it created itself, and gets 404 at request time otherwise.A reference to the target task itself is silently dropped.
Attachment size limits depend on how you reference the file:
  • file_id — a file pre-uploaded via file.upload. No additional limit here; it is bound only by the upload limits (≤ 512 MB per file).
  • file_url — a direct URL that Manus downloads. Capped at 20 MB.
  • file_data — inline base64 content. Capped at 20 MB after decoding (~26.7 MB of base64 text).
These are two different paths: large files must be uploaded via file.upload first and referenced by file_id. Inline file_url / file_data attachments cannot exceed 20 MB.

Headers

x-manus-api-key
string

API key for direct authentication. Provide either this or Authorization, not both. See Authentication.

Authorization
string

OAuth2 access token in Bearer {token} format. Provide either this or x-manus-api-key, not both. See the Open App guide.

Example:

"Bearer {access_token}"

Body

application/json
task_id
string
required

The unique identifier of the task to send the message to. Supports the shortcut agent-default-main_task for the IM agent's main task.

message
object
required

The follow-up message. Supports the same content formats as task.create (plain text or multi-part with files). Note: message.connectors behaves differently here than in task.create — a non-empty list overrides the task's connectors, while omitting it (or passing an empty array) reuses the connectors configured at task.create time rather than re-resolving project/user defaults. To remove all connectors, use the top-level clear_connectors field instead.

agent_profile

Agent profile override for this turn and subsequent turns. Use the stable values standard, lite, or max. Versioned aliases such as 1.6-lite, 2.0-max, and the legacy manus-1.6-lite form are also accepted; the version segment is ignored because model versions are not selected independently. A version without a suffix, such as 1.6 or manus-1.6, means standard. Omit the field (or pass an empty string) to keep the task's current profile; unlike task.create, this endpoint does not default to standard. Free personal accounts are downgraded to lite when an override is provided.

Available options:
standard,
lite,
max
structured_output_schema
object

JSON Schema for structured output extraction. Arms the schema for the next time this task finishes (stop_reason: finish). Sending a new schema replaces any previous one. Omitting this field leaves the current schema state unchanged — it does not clear an armed schema. See the Structured Output guide.

clear_connectors
boolean
default:false

Removes all connectors from this task for this and subsequent turns. Combine with message.connectors to form three states: a non-empty message.connectors overrides the task's connectors with the new list; clear_connectors: true clears all connectors; omitting both reuses the connectors configured at task.create time. Passing a non-empty message.connectors together with clear_connectors: true is a conflict and returns InvalidArgument.

Response

Message sent successfully. The task will resume processing.

ok
boolean

Whether the request was successful.

Example:

true

request_id
string

Unique identifier for this API request.

task_id
string

The ID of the task the message was sent to.