Tenable Scan Exports API

The Scan Exports API from Tenable — 4 operation(s) for scan exports.

OpenAPI Specification

tenable-scan-exports-api-openapi.yml Raw ↑
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