Webhooks allow you to receive real-time notifications when important events occur in your Manus tasks. When you register a webhook, Manus will send HTTP POST requests to your specified callback URL whenever these events are triggered.
When you create and execute tasks, two key lifecycle events can trigger webhook deliveries:
Task Creation: Immediately after a task is successfully created via the API
Task State Change: When a task completes, or requires user input
Each webhook delivery contains a specific event type identifier and a structured payload with relevant task information. Your endpoint will receive these as standard HTTP POST requests that you can process like any other API call.
Always validate webhook payloads in your application. Consider implementing signature verification or other security measures to ensure requests are coming from Manus.
When it triggers: Immediately after a new task is successfully created.Why it’s useful: Allows you to track task creation in your own systems, send confirmation emails, or update dashboards in real-time.Payload Schema:
When it triggers: When a task reaches a stopping point - either because it completed successfully or needs user input to proceed.Why it’s useful: Essential for knowing when your tasks finish and what the outcome was. Enables automated workflows based on task completion.Payload Schema:
Field
Type
Required
Description
event_id
string
Yes
Unique identifier for this webhook event
event_type
string
Yes
Always "task_stopped" for this event
task_id
string
Yes
Unique identifier for the task
task_title
string
Yes
Human-readable title of the task
task_url
string
Yes
Direct URL to view the task in Manus app
message
string
Yes
Status message from the task execution
attachments
array
No
List of files generated by the task
stop_reason
string
Yes
Why the task stopped: "finish" or "ask"
Stop Reason Values:
"finish": Task completed successfully and has final results
"ask": Task paused and requires user input or confirmation to continue
{ "event_id": "task_created_task_abc123", "event_type": "task_stopped", "task_detail": { "task_id": "task_abc123", "task_title": "Book restaurant reservation", "task_url": "https://manus.im/app/task_abc123", "message": "I found several restaurants with availability for your requested date and time. Which option would you prefer? 1) Bistro Milano - 7:00 PM, 2) Garden Terrace - 7:30 PM, 3) The Blue Door - 8:00 PM", "attachments": [], "stop_reason": "ask" }}
# Example webhook handler in Python/Flask@app.route('/manus-webhook', methods=['POST'])def handle_webhook(): data = request.json # Update task status in your database update_task_status( task_id=data['task_id'], status='completed' if data['stop_reason'] == 'finish' else 'waiting', message=data['message'] ) return '', 200