Tenable Scan Exports API
The Scan Exports API from Tenable — 4 operation(s) for scan exports.
The Scan Exports API from Tenable — 4 operation(s) for scan exports.
openapi: 3.0.0
info:
version: 1.0.0
title: Downloads About Scan Exports API
description: 'The Downloads API enables customers to access and download installation and update files for available Tenable products. You can use the API endpoints to list product pages, list downloads available for a specific product, and to download a file. The endpoints can also be used to determine and download the latest version of a file to facilitate the automation of an installation.
**Note:** The Tenable Downloads API uses a different server URL than the Tenable Vulnerability Management API:
`https://www.tenable.com/downloads/api/v2/pages`.
### Authentication
Like the Downloads website, certain files require authentication to download. When files have a `"requires_auth": true` attribute on the product list page, the Downloads API uses bearer token authentication and requires a valid token in the Authorization header to download the file:
```
Authorization: Bearer AbCdEf123456
```
To access or reset your authentication token, navigate to the [Authentication Token](https://www.tenable.com/downloads/api-docs) page.
Examples of product downloads that **do not** require authentication include Nessus and Nessus Agents.'
servers:
- url: https://www.tenable.com/downloads/api/v2
security:
- Bearer: []
tags:
- name: Scan Exports
x-displayName: Scan Exports
paths:
/scans/{scan_id}/export:
post:
summary: Export scan
description: "Exports the a scan in the specified format. Use the [Check scan export status](ref:scans-export-status) endpoint to see the status of the requested export. On receiving a `ready` status, download the export file using the [Download scan export](ref:scans-export-download) endpoint. \n\nIf you request a scan export in the `nessus` file format, but do not specify filters for the export, Tenable Vulnerability Management truncates the plugins output data in the export file at 5 MB or 5,000,000 characters, and appends `TRUNCATED` (bracketed by three asterisks) at the end of the output in the export file. You can obtain the full plugins output by exporting a scan in any file format other than `nessus` or `db`.\n\n Additionally, scan exports in the `db` format do not contain the full scan data set, and they are sourced from the scan task prior to the scan being indexed/processed. Scan `db` exports only contain the data for the hosts specified in the export request with the `asset_id` body parameter. Agent scan `db` exports contain only one host (the agent), and you can't export triggered agent scans. \n\n **Note:** Vulnerability findings with a `first_observed` date within the last 14 days are marked in the exported results as being in the `New` state. Vulnerability findings with a `first_observed` date older than 14 days are marked in the exported results as being in the `Active` state. <div class=\"perms-callout\">Requires the Scan Operator [24] user role and the Can View [16] scan permission. Alternatively, requires the `VM.VM_SCAN.VM_SCAN.EXPORT` custom role privilege. See [Roles](doc:roles) and [Permissions](doc:permissions).</div>"
operationId: scans-export-request
tags:
- Scan Exports
parameters:
- description: The identifier for the scan you want to export. This identifier can be either the `scans.schedule_uuid` or the `scans.id` attribute in the response message from the [List scans](ref:scans-list) endpoint. Tenable recommends that you use `scans.schedule_uuid`.
required: true
name: scan_id
in: path
schema:
type: string
- description: 'The unique identifier of the historical data that you want Tenable Vulnerability Management to export. This identifier corresponds to the `history.id` attribute of the response message from the [Get scan history](ref:scans-history) endpoint.
**Note:** This parameter is required if the scan export request is for the `db` format.'
required: false
name: history_id
in: query
schema:
type: integer
format: int32
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
format:
type: string
description: 'The file format to use (`nessus`, `html`, `pdf`, `csv`, or `db`).
You can export scans in `html` or `pdf` format for up to 60 days and in db format for up to 60 days. For scans that are older than 60 days, only the `Nessus` and `CSV` formats are supported.
Unlike other export formats, the `nessus` file format includes individual open port findings. This ensures you can still view open port findings in Tenable Security Center if your organization integrates Tenable Vulnerability Management with Tenable Security Center.
**Note:** For `db` format, the `history_id` query parameter and the `asset_id` and `password` body parameters are required.'
enum:
- nessus
- html
- pdf
- csv
- db
password:
type: string
description: The password used to encrypt the database. This parameter is only required when exporting as `db` and is not applicable to any other format.
format: password
chapters:
type: string
description: "The chapters to include in the export. \n\nThis parameter accepts a semi-colon delimited string comprised of some combination of the following options: `vuln_hosts_summary`, `vuln_by_host`, `compliance_exec`, `remediations`, `vuln_by_plugin`, `compliance`.\n\n**Note:** This parameter is required if the file format is `pdf` or `html`. It's not applicable to the `nessus`, `csv`, or `db` formats."
filter.0.filter:
type: string
description: "The name of the filter to apply to the exported scan report. \n\nYou can find available filters by using the [List vulnerability filters](ref:io-filters-vulnerabilities-workbench-list) endpoint. If you specify the name of the filter, you must specify the operator as the `filter.0.quality` parameter and the value as the `filter.0.value` parameter. To use multiple filters, increment the `<INDEX>` portion of `filter.<INDEX>.filter`, for example, `filter.1.filter`. \n\nFor more information about using this parameter, see [Scan Export Filters](doc:scan-export-filters-tio).\n\n**Note:** Filters are not supported when exporting scan results that are older than 60 days."
filter.0.quality:
type: string
description: "The operator of the filter to apply to the exported scan report. \n\nYou can find the operators for the filter using the [List vulnerability filters](ref:io-filters-vulnerabilities-workbench-list) endpoint. To use multiple filters, increment the `<INDEX>` portion of `filter.<INDEX>.quality`, for example, `filter.1.quality`. \n\nFor more information about using this parameter, see [Scan Export Filters](doc:scan-export-filters-tio)."
filter.0.value:
type: string
description: "The value of the filter to apply to the exported scan report. \n\nYou can find valid values for the filter in the `control` attribute of the objects returned by the [List vulnerability filters](ref:io-filters-vulnerabilities-workbench-list) endpoint. To use multiple filters, increment the `<INDEX>` portion of `filter.<INDEX>.value`, for example, `filter.1.value`. \n\nFor more information about using this parameter, see [Scan Export Filters](doc:scan-export-filters-tio)."
filter.search_type:
type: string
description: For multiple filters, specifies whether to use the AND or the OR logical operator. The default is AND. For more information about using this parameter, see [Scan Export Filters](doc:scan-export-filters-tio).
enum:
- and
- or
asset_id:
type: string
description: "The ID of the scanned asset. \n\n**Note:** This parameter is required for scan export requests in `db` format."
required:
- format
responses:
'200':
description: Returned if the scan export request was queued successfully.
content:
application/json:
schema:
type: object
properties:
file:
type: string
temp_token:
type: string
examples:
response:
value:
file: SSEUF-ee904e9c-4fb6-4643-88a2-a4e388651568-C:e112bd1-754-946-e35-1a7bf1cbd33-pdf
temp_token: 995bdb656fc6dc5d76e18ccafe7fbd390618fcd0257e0e1aa121f4412a6f7ecc
'400':
description: "Returned under the following conditions:\n - Your request message is missing a required parameter.\n - The `format` parameter in your request specified an unsupported export format for scan results that are older than 60 days. Only `nessus` and `csv` formats are supported for scan results that are older than 60 days.\n - Your request included filter query parameters for scan results that are older than 60 days."
'401':
description: Returned if the API keys specified in your request are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 401
error: Unauthorized
message: Invalid credentials.
'403':
description: Returned if you do not have permission to export scans. For more information, see [Roles](doc:roles) and [Permissions](doc:permissions).
'404':
description: Returned if the specified scan was not be found.
'429':
description: Returned if you attempt to send too many requests in a specific period of time. For more information, see [Rate Limiting](doc:rate-limiting).
content:
text/html:
examples:
response:
value: "<html>\n\n<head>\n <title>429 Too Many Requests</title>\n</head>\n\n<body bgcolor=\"white\">\n <center>\n <h1>429 Too Many Requests</h1>\n </center>\n <hr>\n <center>nginx</center>\n</body>\n\n</html>"
'500':
description: Returned if an internal error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 500
error: Internal Server Error
message: An internal server error occurred. Please wait a moment and try your request again.
security:
- Scan_Exports_cloud: []
/scans/exports:
get:
summary: List scan exports
description: Returns a list of scan exports generated within the past 30 days that the user is authorized to view. Use this endpoint to monitor the status of scan export requests, determine when the export is ready for download, or troubleshoot errors that occurred during the generation process. <div class="perms-callout">Requires the Scan Operator [24] user role and the Can View [16] scan permission. Alternatively, requires the `VM.VM_SCAN.VM_SCAN.EXPORT` custom role privilege. See [Roles](doc:roles) and [Permissions](doc:permissions).</div>
operationId: scans-export-list
tags:
- Scan Exports
parameters:
- name: sort
in: query
required: false
description: 'Specifies the property and direction used to sort the results. The format is `<property>:<direction>`. If omitted, the system uses the default value of `created_at:desc`.
**Supported properties:**
* `export_id` — The unique identifier (UUID) for the export.
* `created_at` — The date and time the export was created.
* `updated_at` — The date and time the export was last updated.
* `ready_at` — The date and time the export became ready for download.
**Supported directions:**
* `asc` — Ascending order.
* `desc` — Descending order.'
schema:
type: string
default: created_at:desc
pattern: ^(created_at|export_id|updated_at|ready_at):(asc|desc)$
- name: offset
in: query
required: false
description: Specifies the number of records to skip for offset-based pagination. If omitted, the system uses the default value of `0`.
schema:
type: integer
minimum: 0
default: 0
- name: limit
in: query
required: false
description: Specifies the maximum number of records to return. If omitted, the system uses the default value of `20`. The maximum allowed value is `5001`.
schema:
type: integer
default: 20
minimum: 1
maximum: 5001
responses:
'200':
description: Returned if the list of scan exports was retrieved successfully.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Scan_Exports_Response-List-Exports'
examples:
response:
value:
- export_id: SSEUF-0b91ea42-cbcf-4634-8364-2f650c7b6b1d-nessus
scan_uuid: 0b91ea42-cbcf-4634-8364-2f650c7b6b1d
schedule_id: '60261'
schedule_uuid: template-3e725f6a-95ef-cb37-3094-23497bdba00ccd5196a54cc88bf5
ready: true
error: false
format: nessus
metadata:
created_at: '2026-03-09T17:47:49.000Z'
updated_at: '2026-03-09T17:47:49.000Z'
ready_at: '2026-03-09T17:47:51.814Z'
created_by: 3781c1c7-841a-42de-9979-ea46628ce1de
chapters: ''
file_size: 1937335
num_chunks: 1
file_name: Test_Export_Scan_70992a.nessus
- export_id: SSEF-54975f7e-faa7-4415-9434-c74c1dcefcc9-F:5537b1dcac78d9bb9e9b8fdc355-html
scan_uuid: 54975f7e-faa7-4415-9434-c74c1dcefcc9
schedule_id: '503'
schedule_uuid: 379bed2d-f8e3-9c3e-66a9-5fa20a04175df74cb55a4f7f8a23
ready: false
error: false
format: html
metadata:
created_at: '2025-10-23T22:27:54.169Z'
updated_at: '2025-10-27T19:02:10.914Z'
created_by: 7f46340d-17cc-4760-b170-9fd0954f03e0
chapters: vuln_by_host;vuln_hosts_summary;remediations;audits;
filters:
severity:
eq:
- Info
- Low
- Medium
search_type: and
file_size: 12345
file_name: Test_Export_Scan_70992a.html
num_chunks: 5
- export_id: SSEF-54975f7e-faa7-4415-9434-c74c1dcefcc9-F:5537b1dcac78d9bb9e9b8fdc355-C:0bd71d1-579-079-f70-efa362d6458-pdf
scan_uuid: 54975f7e-faa7-4415-9434-c74c1dcefcc9
schedule_id: 379bed2d-f8e3-9c3e-66a9-5fa20a04175df74cb55a4f7f8a23
schedule_uuid: 379bed2d-f8e3-9c3e-66a9-5fa20a04175df74cb55a4f7f8a23
ready: true
error: false
format: pdf
metadata:
created_at: '2025-10-14T18:40:36.886Z'
updated_at: '2025-10-14T18:40:36.886Z'
ready_at: '2025-10-14T19:52:44.676Z'
created_by: 7f46340d-17cc-4760-b170-9fd0954f03e0
chapters: vuln_by_host;vuln_hosts_summary;remediations;audits;
filters:
plugin.attributes.cve.raw:
match:
- CVE-1233-323
plugin.name:
eq:
- r323432
host.target:
neq:
- example.com
search_type: and
file_size: 12345
file_name: Test_Export_Scan_a62b0f.pdf
num_chunks: 5
'401':
description: Returned if the API keys specified in your request are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 401
error: Unauthorized
message: Invalid credentials.
'403':
description: Returned if you do not have permission to list scan exports. For more information, see [Roles](doc:roles) and [Permissions](doc:permissions).
'429':
description: Returned if you attempt to send too many requests in a specific period of time. For more information, see [Rate Limiting](doc:rate-limiting).
content:
text/html:
examples:
response:
value: "<html>\n\n<head>\n <title>429 Too Many Requests</title>\n</head>\n\n<body bgcolor=\"white\">\n <center>\n <h1>429 Too Many Requests</h1>\n </center>\n <hr>\n <center>nginx</center>\n</body>\n\n</html>"
'500':
description: Returned if an internal error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 500
error: Internal Server Error
message: An internal server error occurred. Please wait a moment and try your request again.
security:
- Scan_Exports_cloud: []
/scans/{scan_id}/export/{file_id}/status:
get:
summary: Check scan export status
description: Returns the file status of the specified exported scan. When an export has been requested, it is necessary to poll this endpoint until a `ready` status is returned, at which point the file is complete and can be downloaded using the [Download scan export](ref:scans-export-download) endpoint.<div class="perms-callout">Requires the Scan Operator [24] user role and the Can View [16] scan permission. Alternatively, requires the or `VM.VM_SCAN.VM_SCAN.EXPORT` custom role privilege. See [Roles](doc:roles) and [Permissions](doc:permissions).</div>
operationId: scans-export-status
tags:
- Scan Exports
parameters:
- description: The unique identifier for the scan. This identifier can be either the `scans.schedule_uuid` or the `scans.id` attribute in the response message from the [List scans](ref:scans-list) endpoint. Tenable recommends that you use `scans.schedule_uuid`.
required: true
name: scan_id
in: path
schema:
type: string
- description: The ID of the file to poll (included in response from [Export scan](ref:scans-export-request) endpoint.
required: true
name: file_id
in: path
schema:
type: string
responses:
'200':
description: Returned if the status of the specified scan export was retrieved successfully.
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: The export status.
examples:
response:
value:
status: ready
'401':
description: Returned if the API keys specified in your request are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 401
error: Unauthorized
message: Invalid credentials.
'403':
description: Returned if you do not have permission to retrieve the scan export status. For more information, see [Roles](doc:roles) and [Permissions](doc:permissions).
'404':
description: Returned if the specified scan or file was not found.
'429':
description: Returned if you attempt to send too many requests in a specific period of time. For more information, see [Rate Limiting](doc:rate-limiting).
content:
text/html:
examples:
response:
value: "<html>\n\n<head>\n <title>429 Too Many Requests</title>\n</head>\n\n<body bgcolor=\"white\">\n <center>\n <h1>429 Too Many Requests</h1>\n </center>\n <hr>\n <center>nginx</center>\n</body>\n\n</html>"
'500':
description: Returned if an internal error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 500
error: Internal Server Error
message: An internal server error occurred. Please wait a moment and try your request again.
security:
- Scan_Exports_cloud: []
/scans/{scan_id}/export/{file_id}/download:
get:
summary: Download scan export
description: Download an exported scan.<div class="perms-callout">Requires the Scan Operator [24] user role and the Can View [16] scan permission. Alternatively, requires the `VM.VM_SCAN.VM_SCAN.EXPORT` custom role privilege. See [Roles](doc:roles) and [Permissions](doc:permissions).</div>
operationId: scans-export-download
tags:
- Scan Exports
parameters:
- description: The unique identifier for the exported scan you want to download. This identifier can be either the `scans.schedule_uuid` or the `scans.id` attribute in the response message from the [List scans](ref:scans-list) endpoint. Tenable recommends that you use `scans.schedule_uuid`.
required: true
name: scan_id
in: path
schema:
type: string
- description: The ID of the file to download (Included in response from the [Export scan](ref:scans-export-request) endpoint).
required: true
name: file_id
in: path
schema:
type: string
responses:
'200':
description: Returned if the specified scan export was retrieved successfully.
content:
application/octet-stream:
schema: {}
examples:
response:
value: {}
'401':
description: Returned if the API keys specified in your request are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 401
error: Unauthorized
message: Invalid credentials.
'404':
description: Returned if the specified scan or file was not be found.
'429':
description: Returned if you attempt to send too many requests in a specific period of time. For more information, see [Rate Limiting](doc:rate-limiting).
content:
text/html:
examples:
response:
value: "<html>\n\n<head>\n <title>429 Too Many Requests</title>\n</head>\n\n<body bgcolor=\"white\">\n <center>\n <h1>429 Too Many Requests</h1>\n </center>\n <hr>\n <center>nginx</center>\n</body>\n\n</html>"
'500':
description: Returned if an internal error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/Scan_Exports_ErrorResponse'
examples:
response:
value:
statusCode: 500
error: Internal Server Error
message: An internal server error occurred. Please wait a moment and try your request again.
security:
- Scan_Exports_cloud: []
components:
schemas:
Scan_Exports_ExportMetadata:
type: object
properties:
created_at:
type: string
format: date-time
description: A timestamp in ISO 8601 format indicating the date and time when the export was created.
updated_at:
type: string
format: date-time
description: A timestamp in ISO 8601 format indicating the date and time when the export was last updated.
ready_at:
type: string
format: date-time
description: A timestamp in ISO 8601 format indicating the date and time when the export became ready to download.
created_by:
type: string
description: The unique identifier (UUID) for the user who initiated the export.
chapters:
type: string
description: A semicolon-separated list of chapters included in the export.
filters:
type: object
properties: {}
description: An object containing the filter criteria applied to the export results.
file_size:
type: integer
description: The size of the export file in bytes.
file_name:
type: string
description: The name assigned to the export file.
num_chunks:
type: integer
description: The total number of data chunks that make up the complete export file. Large exports are divided into multiple chunks to facilitate more reliable and efficient downloads.
Scan_Exports_Response-List-Exports:
type: object
properties:
export_id:
type: string
description: The unique identifier for the scan export request.
scan_uuid:
type: string
description: The unique identifier (UUID) for the scan.
schedule_id:
type: string
description: The identifier for the scan schedule.
schedule_uuid:
type: string
description: The unique identifier (UUID) for the scan schedule.
ready:
type: boolean
description: A boolean value indicating whether the export is ready for download.
error:
type: boolean
description: A boolean value indicating whether an error occurred during export generation.
format:
type: string
description: The file format of the scan export. Possible values include `nessus`, `html`, `pdf`, `csv`, and `json`.
enum:
- nessus
- html
- pdf
- csv
- json
metadata:
$ref: '#/components/schemas/Scan_Exports_ExportMetadata'
Scan_Exports_ErrorResponse:
type: object
properties:
statusCode:
type: integer
description: The HTTP status code of the error.
error:
type: integer
description: The standard HTTP error name.
message:
type: string
description: A brief message about the cause of the error.
securitySchemes:
Bearer:
type: apiKey
in: header
name: Authorization
description: 'Example: Bearer {{token}}'
x-readme:
proxy-enabled: false
explorer-enabled: true
samples-enabled: true
samples-languages:
- python
- curl
- node
- powershell
- ruby
- javascript
- objectivec
- java
- php
- csharp
- go
- swift
- kotlin