Skip to main content
Questions or issues? Contact us at api-support@manus.ai. Every webhook request from Manus includes a cryptographic signature. Verifying it ensures the request is authentic and hasn’t been tampered with.

How it works

Manus signs each request using RSA-SHA256 (2048-bit key). Your server verifies the signature with our public key.
1

Extract headers

Read X-Webhook-Signature and X-Webhook-Timestamp from the incoming request.
2

Check timestamp

Reject requests older than 5 minutes to prevent replay attacks.
3

Reconstruct the signed content

Concatenate: {timestamp}.{url}.{sha256_hex(body)}
4

Verify signature

Verify the signature using the public key.

Request headers

Signature format

The signature is computed over this string:
Example:

Get the public key

Fetch the public key from the webhook.publicKey endpoint:
Cache this key on your server with a reasonable TTL (e.g. 1 hour). Do not fetch it on every webhook request.

Verification examples

Flask handler:

Best practices