Dashboard APIs

Programmatic access to dashboards and reports

The Veza Dashboard API (referred to as "Assessment Reports" in the API) enables programmatic access to Veza dashboards, queries, and analytics. You can use these APIs to automate dashboard management, retrieve time-series data, and integrate Veza insights into your own tools and workflows.

These customer-facing APIs are available under the prefix <VezaURL>/api/preview/assessments/, for example:

https://company.veza.com/api/preview/assessments/reports

The Dashboard API enables you to:

  • List and filter dashboards by integration, category, or risk level

  • Retrieve time-series and comparison data for trend analysis

  • Create custom dashboards programmatically

  • Share dashboards with teams via API

  • Track dashboard changes and query results over time

Important concepts

Terminology

  • Assessment Reports (API term) = Dashboards (UI term)

  • Assessment Queries (API term) = Saved Queries (UI term)

Conceptually, these APIs manage Reports, presented to users in Veza as Dashboards for visibility, action, and collaboration.

A Report is a collection of Saved Queries, which can be constructed using the Query Builder or Query Builder API.

Understanding dashboard identifiers

Dashboard IDs are stable UUID identifiers that remain constant regardless of dashboard name changes, modifications to dashboard contents, or sharing status. IDs are universally unique identifiers such as 64e4231c-ead9-4bf0-bed7-afa94511f476.

You can find dashboard IDs by:

  1. Using the List Dashboards endpoint with filters

  2. Viewing the dashboard URL in the Veza UI: /app/dashboard/library/{dashboard_id}

  3. Checking the OOTB Dashboards reference for system dashboard IDs

Dashboard types

Dashboards have a type field indicating their origin:

  • system_created: Out-of-the-box (OOTB) dashboards created and managed by Veza. These cannot be modified or deleted via API and are available to all tenants automatically.

  • user_created: Custom dashboards created using the Veza GUI or APIs, specific to your organization. These dashboards can be modified, shared, and deleted via API.

Authentication

You can issue new API keys from Administration > API Keys > Add New API Key. Provide the key as the bearer auth token in the header of each request.

Required Roles:

Operation
Required Roles

View dashboards

viewer, operator, admin

Create/modify dashboards

admin, operator

Share dashboards

admin

Example:

curl --location --request GET \
  'https://company.veza.com/api/preview/assessments/reports' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'

API Endpoints

Dashboard Management

List All Dashboards

List reports

get
Authorizations
Query parameters
typestringOptionalDeprecated
include_inactive_reportsbooleanOptional
include_inactive_queriesbooleanOptional
filterstringOptional
order_bystringOptional
skip_section_mergebooleanOptional
page_sizeinteger · int32Optional

The maximum number of results to be returned. Fewer results may be returned even when more pages exist.

page_tokenstringOptional

The token specifying the specific page of results to retrieve.

Responses
200

OK

application/json
get
/api/preview/assessments/reports
GET /api/preview/assessments/reports HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "values": [
    {
      "id": "text",
      "name": "text",
      "description": "text",
      "type": "text",
      "variables": [
        "text"
      ],
      "customized_variables": [
        {
          "key": "text",
          "value": "text"
        }
      ],
      "created_by": "text",
      "visibility": 1,
      "owners": [
        "text"
      ],
      "integration_types": [
        "text"
      ],
      "labels": [
        "text"
      ],
      "created_at": "2025-10-25T06:40:11.136Z",
      "updated_at": "2025-10-25T06:40:11.136Z",
      "report_type": 1,
      "dynamic_filter": "text",
      "sections": [
        {
          "name": "text",
          "description": "text",
          "section_type": 1,
          "queries": [
            "text"
          ],
          "query_display_properties": [
            {
              "query_id": "text",
              "display_name": "text"
            }
          ],
          "dynamic_display_name": "text"
        }
      ],
      "supported_display_modes": [
        1
      ],
      "namespace": "text",
      "shared": true,
      "team_id": "text"
    }
  ],
  "next_page_token": "text",
  "has_more": true
}

Get Specific Dashboard

Get a report

get
Authorizations
Path parameters
idstringRequired
Query parameters
include_query_variablesbooleanOptional
include_inactive_queriesbooleanOptional
skip_section_mergebooleanOptional
Responses
200

OK

application/json
get
/api/preview/assessments/reports/{id}
GET /api/preview/assessments/reports/{id} HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "value": {
    "id": "text",
    "name": "text",
    "description": "text",
    "type": "text",
    "variables": [
      "text"
    ],
    "customized_variables": [
      {
        "key": "text",
        "value": "text"
      }
    ],
    "created_by": "text",
    "visibility": 1,
    "owners": [
      "text"
    ],
    "integration_types": [
      "text"
    ],
    "labels": [
      "text"
    ],
    "created_at": "2025-10-25T06:40:11.136Z",
    "updated_at": "2025-10-25T06:40:11.136Z",
    "report_type": 1,
    "dynamic_filter": "text",
    "sections": [
      {
        "name": "text",
        "description": "text",
        "section_type": 1,
        "queries": [
          "text"
        ],
        "query_display_properties": [
          {
            "query_id": "text",
            "display_name": "text"
          }
        ],
        "dynamic_display_name": "text"
      }
    ],
    "supported_display_modes": [
      1
    ],
    "namespace": "text",
    "shared": true,
    "team_id": "text"
  }
}

Create Dashboard

Create a new report

post
Authorizations
Body
namestringOptional
descriptionstringOptional
visibilityinteger · enumOptional
report_typeinteger · enumOptional
dynamic_filterstringOptional
supported_display_modesinteger · enum[]Optional
preview_onlybooleanOptional
Responses
200

OK

application/json
post
/api/preview/assessments/reports
POST /api/preview/assessments/reports HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 389

{
  "name": "text",
  "description": "text",
  "visibility": 1,
  "report_type": 1,
  "dynamic_filter": "text",
  "sections": [
    {
      "name": "text",
      "description": "text",
      "section_type": 1,
      "queries": [
        "text"
      ],
      "query_display_properties": [
        {
          "query_id": "text",
          "display_name": "text"
        }
      ],
      "dynamic_display_name": "text"
    }
  ],
  "supported_display_modes": [
    1
  ],
  "dynamic_report_headings": {
    "ANY_ADDITIONAL_PROPERTY": "text"
  },
  "preview_only": true
}
{
  "value": {
    "id": "text",
    "name": "text",
    "description": "text",
    "type": "text",
    "variables": [
      "text"
    ],
    "customized_variables": [
      {
        "key": "text",
        "value": "text"
      }
    ],
    "created_by": "text",
    "visibility": 1,
    "owners": [
      "text"
    ],
    "integration_types": [
      "text"
    ],
    "labels": [
      "text"
    ],
    "created_at": "2025-10-25T06:40:11.136Z",
    "updated_at": "2025-10-25T06:40:11.136Z",
    "report_type": 1,
    "dynamic_filter": "text",
    "sections": [
      {
        "name": "text",
        "description": "text",
        "section_type": 1,
        "queries": [
          "text"
        ],
        "query_display_properties": [
          {
            "query_id": "text",
            "display_name": "text"
          }
        ],
        "dynamic_display_name": "text"
      }
    ],
    "supported_display_modes": [
      1
    ],
    "namespace": "text",
    "shared": true,
    "team_id": "text"
  }
}

Update Dashboard

Update a report

put
Authorizations
Path parameters
idstringRequired
Body
idstringOptional
namestringOptional
descriptionstringOptional
visibilityinteger · enumOptional
dynamic_filterstringOptional
supported_display_modesinteger · enum[]Optional
Responses
200

OK

application/json
put
/api/preview/assessments/reports/{id}
PUT /api/preview/assessments/reports/{id} HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 365

{
  "id": "text",
  "name": "text",
  "description": "text",
  "visibility": 1,
  "dynamic_filter": "text",
  "sections": [
    {
      "name": "text",
      "description": "text",
      "section_type": 1,
      "queries": [
        "text"
      ],
      "query_display_properties": [
        {
          "query_id": "text",
          "display_name": "text"
        }
      ],
      "dynamic_display_name": "text"
    }
  ],
  "supported_display_modes": [
    1
  ],
  "dynamic_report_headings": {
    "ANY_ADDITIONAL_PROPERTY": "text"
  }
}
{
  "value": {
    "id": "text",
    "name": "text",
    "description": "text",
    "type": "text",
    "variables": [
      "text"
    ],
    "customized_variables": [
      {
        "key": "text",
        "value": "text"
      }
    ],
    "created_by": "text",
    "visibility": 1,
    "owners": [
      "text"
    ],
    "integration_types": [
      "text"
    ],
    "labels": [
      "text"
    ],
    "created_at": "2025-10-25T06:40:11.136Z",
    "updated_at": "2025-10-25T06:40:11.136Z",
    "report_type": 1,
    "dynamic_filter": "text",
    "sections": [
      {
        "name": "text",
        "description": "text",
        "section_type": 1,
        "queries": [
          "text"
        ],
        "query_display_properties": [
          {
            "query_id": "text",
            "display_name": "text"
          }
        ],
        "dynamic_display_name": "text"
      }
    ],
    "supported_display_modes": [
      1
    ],
    "namespace": "text",
    "shared": true,
    "team_id": "text"
  }
}

Delete Dashboard

Delete a report

delete
Authorizations
Path parameters
idstringRequired
Responses
200

OK

application/json
Responseobject
delete
/api/preview/assessments/reports/{id}
DELETE /api/preview/assessments/reports/{id} HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{}

Dashboard Analytics

Get Time-Series Data

get
Authorizations
Path parameters
idstringRequired
Query parameters
start_timestringOptional
latest_onlybooleanOptional
ignore_missing_queriesbooleanOptional
Responses
200

OK

application/json
get
/api/preview/assessments/reports/{id}/queries/timeseries
GET /api/preview/assessments/reports/{id}/queries/timeseries HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "values": [
    {
      "query_id": "text",
      "series": [
        {
          "evaluated_at": "text",
          "value": 1,
          "risks_count": 1
        }
      ]
    }
  ]
}

Get Comparison Data

get
Authorizations
Path parameters
idstringRequired
Query parameters
start_timestringOptional
snapshot_idstringOptional
Responses
200

OK

application/json
get
/api/preview/assessments/reports/{id}/queries/comparison
GET /api/preview/assessments/reports/{id}/queries/comparison HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "values": [
    {
      "query_id": "text",
      "baseline_value": 1,
      "baseline_evaluate_at": "text",
      "current_value": 1,
      "no_start_value": true
    }
  ]
}

Sharing Operations

Share Dashboard

post
Authorizations
Path parameters
report_idstringRequired
Body
report_idstringOptional
team_idsstring[]Optional
Responses
200

OK

application/json
Responseobject
post
/api/preview/assessments/reports/{report_id}:share
POST /api/preview/assessments/reports/{report_id}:share HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 40

{
  "report_id": "text",
  "team_ids": [
    "text"
  ]
}
{}

Unshare Dashboard

post
Authorizations
Path parameters
report_idstringRequired
Body
report_idstringOptional
team_idstringOptional
including_queriesbooleanOptional
Responses
200

OK

application/json
Responseobject
post
/api/preview/assessments/reports/{report_id}:unshare
POST /api/preview/assessments/reports/{report_id}:unshare HTTP/1.1
Host: your-tenant.cookiecloud.ai
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 62

{
  "report_id": "text",
  "team_id": "text",
  "including_queries": true
}
{}

Last updated

Was this helpful?