Skip to content
Vulnotes LogoVulnotes
Attachments API

Attachments API ​

Use the attachments API for supporting files such as scan results and engagement documents. For screenshots embedded in report content, use the images API.

Upload a report attachment ​

Send a multipart request with a file and the destination reportId. The key needs rw:reports and access to that report.

bash
curl --fail-with-body "$VULNOTES_URL/api/attachments/upload" \
  -H "X-API-Key: $VULNOTES_API_KEY" \
  -F "file=@assessment-notes.txt" \
  -F "reportId=$REPORT_ID"

The response includes attachment.id, the original filename, size, and MIME type. Keep the returned ID for later downloads.

The backend limit is 50 MB per file. A reverse proxy may impose a lower limit. Files are checked against allowed formats; changing the extension does not make an unsupported file acceptable.

List and download ​

A report read scope is enough to list and download attachments from an accessible report.

bash
curl --fail-with-body "$VULNOTES_URL/api/attachments/report/$REPORT_ID" \
  -H "X-API-Key: $VULNOTES_API_KEY"

curl --fail-with-body "$VULNOTES_URL/api/attachments/$ATTACHMENT_ID/download" \
  -H "X-API-Key: $VULNOTES_API_KEY" \
  --output assessment-notes.txt

Use the authenticated download endpoint instead of treating a stored upload path as a public link. Deletion uses DELETE /api/attachments/{id} and requires write access to the associated resource.

Other file types ​

  • Upload an image through POST /api/images/upload, using the multipart field image and a report or template association.
  • Template files require the matching template scopes, such as rw:templates to upload a template image.
  • Planning event files use the planning endpoints and planning permissions.

The Python SDK handles multipart encoding and binary downloads for you.