# Analytics Runs, failures, time saved, connector health and backend traffic for the apps you can open. 2 routes, from the API’s own OpenAPI document. URL: https://docs.qaldy.com/reference/api/analytics/ 2 routes. Every path starts at `https://cloud-api.qaldy.com`. Sign-in, tokens, errors and limits are on the [overview](https://docs.qaldy.com/reference/api/). ## Routes | Method | Path | What it does | |---|---|---| | [[GET]] | [`/​v1/​workspaces/​{ws}/​analytics`](#get-v1-workspaces-ws-analytics) | Runs, failures, time saved, connector health and backend traffic (apps you can view) | | [[GET]] | [`/​v1/​workspaces/​{ws}/​incidents`](#get-v1-workspaces-ws-incidents) | Failures grouped into incidents: first bad run, blast radius, cause (apps you can view) | ## Reference ### [[GET]] `/v1/workspaces/{ws}/analytics` Runs, failures, time saved, connector health and backend traffic (apps you can view). - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. - **Who:** member, filtered to `can_view` apps like the runs list (an app you cannot open is not counted or named; `appId` for it is 404 `app_not_found`); backend requests are workspace-wide, so admins only and never with `appId`. Tokens: `read` | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `ws` | path | string | yes | 1 to 128 characters | | `range` | query | "7d" · "30d" · "90d" | | default "30d" | | `appId` | query | string | | 1 to 128 characters | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `range` | "7d" · "30d" · "90d" | yes | | | `days` | integer | yes | at least 1 | | `appId` | string or null | yes | | | `timezone` | string | yes | | | `generatedAt` | string (date-time) | yes | | | `from` | string (date) | yes | | | `to` | string (date) | yes | | | `truncated` | boolean | yes | | | `totals` | object | yes | | | `totals.runs` | integer | yes | at least 0 | | `totals.succeeded` | integer | yes | at least 0 | | `totals.failed` | integer | yes | at least 0 | | `totals.blocked` | integer | yes | at least 0 | | `totals.waiting` | integer | yes | at least 0 | | `totals.hoursSaved` | number | yes | at least 0 | | `tiles` | object | yes | | | `tiles.runsToday` | object | yes | | | `tiles.failureRate` | object | yes | | | `tiles.hoursSaved` | object | yes | | | `tiles.medianMs` | object | yes | | | `tiles.p95Ms` | object | yes | | | `daily` | object[] | yes | | | `daily[].day` | string (date) | yes | | | `daily[].succeeded` | integer | yes | at least 0 | | `daily[].failed` | integer | yes | at least 0 | | `daily[].blocked` | integer | yes | at least 0 | | `daily[].waiting` | integer | yes | at least 0 | | `daily[].hoursSaved` | number | yes | at least 0 | | `daily[].requests` | integer | yes | at least 0 | | `byApp` | object[] | yes | | …and 14 more fields. The full schema is in [openapi.json](https://docs.qaldy.com/openapi.json). Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)). ### [[GET]] `/v1/workspaces/{ws}/incidents` Failures grouped into incidents: first bad run, blast radius, cause (apps you can view). - **Authentication:** the console’s session cookie. - **Token:** a personal access token or an MCP sign-in with the `read` scope. - **Who:** member (filtered to `can_view`); tokens: yes, read scope | Parameter | In | Type | Required | Notes | |---|---|---|---|---| | `ws` | path | string | yes | 1 to 128 characters | | `range` | query | "7d" · "30d" · "90d" | | default "7d" | | `appId` | query | string | | 1 to 128 characters | | `locale` | query | "en" · "ru" · "kk" | | | **Response 200** | Field | Type | Required | Notes | |---|---|---|---| | `range` | "7d" · "30d" · "90d" | yes | | | `generatedAt` | string (date-time) | yes | | | `incidents` | object[] | yes | | | `incidents[].id` | string | yes | at least 1 characters | | `incidents[].status` | "open" · "recovered" | yes | | | `incidents[].failureClass` | "egress_denied" · "secret_missing" · "auth_rejected" · "quota" · "ai_budget" · "ai_setup" · "timeout" · "connector_rate_limited" · … | yes | | | `incidents[].confidence` | "high" · "medium" · "low" | yes | | | `incidents[].subject` | object | yes | | | `incidents[].title` | string | yes | at least 1 characters | | `incidents[].cause` | string | yes | at least 1 characters | | `incidents[].next` | string | yes | at least 1 characters | | `incidents[].firstRun` | object | yes | | | `incidents[].lastFailureAt` | string (date-time) | yes | | | `incidents[].recoveredAt` | string (date-time) or null | yes | | | `incidents[].failedRuns` | integer | yes | at least 1 | | `incidents[].runsInSpan` | integer | yes | at least 1 | | `incidents[].apps` | object[] | yes | | | `incidents[].automations` | object[] | yes | | | `truncated` | boolean | yes | | Errors: `400`, `401`, `403`, `404`, `409`, `429` (the error format is on the [overview](https://docs.qaldy.com/reference/api/#errors)).