assistant_message.content returned by task.listMessages. The API returns the original message content from the task without rewriting file paths or Manus resource protocols. Use the surrounding response fields and the related APIs described below to resolve supported Markdown links or images in the application.
Resolve each Markdown link or image destination by type:
- Render HTTP and HTTPS destinations normally. Do not match them against attachment paths.
- Resolve
manus-webdev://destinations as described in Website checkpoints. - Match absolute execution-environment paths against message attachments as described in File paths.
- Remove link or image nodes that use another unsupported non-HTTP protocol.
File paths
An assistant can reference an output file by its execution-environment path:attachments[].path identifies that reference and attachments[].url provides the downloadable HTTP/HTTPS URL:
attachments[].path. After a match, use attachments[].url as the link destination or image source. If no attachment matches this execution-environment path, remove the link or image node from the rendered output. Do not request path directly: it is a path inside the task’s execution environment, not a public URL.
path is optional. It is omitted for attachments that do not have a usable execution-environment path. Download URLs are temporary. If a URL stops working, call task.listMessages again to read the current attachment URL. Do not persist a signed URL as permanent file identity. When present, use file_uid and version_uid to correlate the source output file and version across messages.
- No v2 endpoint accepts either UID as input, and neither resolves a download URL.
- They are unrelated to the
file_idof temporary input files from file.upload, and to the website checkpointversion_idinmanus-webdev://links. - The same
file_uidcan appear in different tasks with differenturlvalues. Do not assume it belongs to the current task. - A transformed download, such as
slides_format=pptxormarkdown_format=docx, returns derived bytes while the UIDs still identify the source attachment version.
Cover images
Passinclude_cover=true to task.listMessages to receive a thumbnail for each assistant_message attachment. Without it, attachments carry no cover fields. Send the parameter only when rendering covers; routine polling does not need it.
Each attachment then carries cover_image_status:
ready—cover_imageholds the cover URL.pending— a cover is supported but not available yet. Treat an attachment that stayspendingfor several minutes as having no cover.unsupported— this attachment has no cover.
A cover belongs to the file, not to the message. When a later turn edits the same file, every attachment with that
file_uid shows the cover of the most recently rendered version. Deduplicate covers by file_uid, not by URL: cover_image is re-signed on every response and each URL is valid for 48 hours. Read a fresh URL from the next response instead of storing one.
artifact.list returns cover_image and cover_image_status with the same meanings for Library artifacts, but never starts PDF or spreadsheet cover generation; see Artifacts.
Website checkpoints
A website result can appear as a Markdown destination in this form:version_id for the website attached to the current task. Call website.listCheckpoints with the same task_id, then match the value against data[].version_id. If the checkpoint cannot be resolved, remove the link node from the rendered output.
Website checkpoint version_id and attachment version_uid are unrelated identifiers. Do not use an attachment version_uid with website.listCheckpoints.
Use website.status to read the current published URL and version. A checkpoint’s successful generation status does not mean that version is currently published.