Skip to content
Vulnotes LogoVulnotes
Reports API

Reports API ​

Report reads require ro:reports; changes require rw:reports. Both are limited to the reports visible to the key's owner. A known report ID can return 404 when team restrictions hide it.

Use X-API-Key for authentication. The examples below assume VULNOTES_URL contains your instance URL without a trailing slash and VULNOTES_API_KEY contains your key.

Create a report ​

bash
curl --fail-with-body "$VULNOTES_URL/api/reports" \
  -H "X-API-Key: $VULNOTES_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"title":"External assessment","language":"EN"}'

The response contains the report's _id. To link existing resources at creation, include company, template, and vulnTemplate or vulnTemplates using their IDs.

Common operations ​

All paths below are relative to /api.

Method and pathUse
GET /reports?page=1&limit=25List accessible reports
GET /reports/{id}Read a report
PUT /reports/{id}Update supplied report fields
POST /reports/{id}/duplicateCreate an independent draft copy
GET /reports/{id}/findingsList findings
POST /reports/{id}/findingsAdd a finding
POST /reports/{id}/findings/from-libraryAdd a library item using vulnerabilityId
PUT /reports/{id}/findings/{findingId}Update a finding
PUT /reports/{id}/content/{sectionKey}Update one content section

Findings use an id string inside the report; it is different from the report's MongoDB _id. Read the linked vulnerability templates before sending dynamic field data.

Read the report's content map and linked template to identify section keys. Send content and/or isComplete to PUT /reports/{id}/content/{sectionKey}, or use client.reports.update_content_section() in the Python SDK. Sending a complete content map to PUT /reports/{id} is rejected; update each section separately.

Status and copies ​

Valid report statuses are draft, waiting-for-review, under-review, and completed. Completing a report can create its final PDF archive and schedule retention deletion. Treat it as a workflow transition.

Duplication creates a new draft with separate editable content and copied owned files. The copy stays in the source report's group but starts without its review, client remediation, or retest state.

Export ​

Method and pathResult
GET /reports/{id}/export/jsonReport backup as JSON
GET /reports/{id}/export/pdfGenerated PDF
POST /reports/{id}/export/docxWord document
POST /reports/{id}/export/xlsxFinding spreadsheet
POST /reports/{id}/export/zipExport archive
GET /reports/{id}/archiveStored completion PDF, when available

Export requests require ro:reports. Check the reference for format-specific request options. Save binary responses to a file; use --fail-with-body so an error response is not mistaken for a valid export.

A report JSON backup is different from the library/client ZIP exported in Settings > Integrations.