Skip to main content
POST
/
v2
/
file.upload
UploadFile
curl --request POST \
  --url https://api.manus.ai/v2/file.upload \
  --header 'Content-Type: application/json' \
  --data '
{
  "filename": "<string>"
}
'
{
  "ok": true,
  "request_id": "<string>",
  "file": {
    "id": "<string>",
    "filename": "<string>",
    "created_at": 123
  },
  "upload_url": "<string>",
  "upload_expires_at": 123
}
Questions or issues? Contact us at api-support@manus.ai.
OAuth scope: create_task or manage_all_tasks — see the Open App guide.
Upload: Send file content to the returned upload_url via PUT request.Use in tasks: Pass the file.id as file_id in task.create or task.sendMessage message content.Expiration: The upload_url expires in 3 minutes. Files are automatically deleted 48 hours after upload.
Limits: Up to 512 MB per file and 10 GB total storage per account. Exceeding either limit returns a QuotaExceededError. Executable and script file types (e.g. .exe, .sh, .bat, .dmg) are not allowed.

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
filename
string
required

Name of the file to upload, including extension (e.g., "report.pdf", "data.csv"). The extension helps determine the file type.

Response

File record created successfully.

ok
boolean

Whether the request was successful.

Example:

true

request_id
string

Unique identifier for this API request.

file
object

The created file record. Status will be pending until the upload completes.

upload_url
string

Presigned S3 URL for uploading the file content. Send a PUT request with the file bytes as the body. Expires in 3 minutes.

upload_expires_at
integer<int64>

Unix timestamp (seconds) when the upload_url expires. Complete the upload before this time.