Hours saved
How the hours-saved figure is calculated, and the overrides an admin can set. 2 routes, from the API’s own OpenAPI document.
2 routes. Every path starts at https://cloud-api.qaldy.com. Sign-in, tokens, errors and limits are on the overview.
Routes#
| Method | Path | What it does |
|---|---|---|
| GET | /v1/workspaces/{ws}/roi | Hours saved this year, with the formula rows |
| PUT | /v1/workspaces/{ws}/roi/overrides | Edit an app's manual minutes per run (admins) |
Reference#
GET /v1/workspaces/{ws}/roi#
Hours saved this year, with the formula rows.
- Authentication: the console’s session cookie.
- Token: a personal access token or an MCP sign-in with the
readscope. - Who: member
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
ws | path | string | yes | 1 to 128 characters |
Response 200
| Field | Type | Required | Notes |
|---|---|---|---|
period | "year" | yes | |
hoursSaved | number | yes | at least 0 |
runs | integer | yes | at least 0 |
moneySavedMinor | integer | yes | at least 0 |
hourlyCostMinor | integer | yes | at least 0 |
currency | "EUR" · "USD" · "KZT" | yes | |
trees | integer | yes | at least 0 |
rows | object[] | yes | |
rows[].appId | string | yes | at least 1 characters |
rows[].appName | string | yes | at least 1 characters |
rows[].runs | integer | yes | at least 0 |
rows[].manualMinutesPerRun | number | yes | at least 0 |
rows[].minutes | number | yes | at least 0 |
rows[].hours | number | yes | at least 0 |
rows[].overridden | boolean | yes | |
rows[].demoBaselineRuns | integer | at least 0. default 0 |
Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).
PUT /v1/workspaces/{ws}/roi/overrides#
Edit an app's manual minutes per run (admins).
- Authentication: the console’s session cookie.
- Token: not available. This route is for a signed-in person in the console (
403 console_onlyfor a token). - Who: admin
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
ws | path | string | yes | 1 to 128 characters |
Request body (application/json)
| Field | Type | Required | Notes |
|---|---|---|---|
appId | string | yes | at least 1 characters |
manualMinutesPerRun | number | yes | 0 to 1440 |
Response 200
| Field | Type | Required | Notes |
|---|---|---|---|
period | "year" | yes | |
hoursSaved | number | yes | at least 0 |
runs | integer | yes | at least 0 |
moneySavedMinor | integer | yes | at least 0 |
hourlyCostMinor | integer | yes | at least 0 |
currency | "EUR" · "USD" · "KZT" | yes | |
trees | integer | yes | at least 0 |
rows | object[] | yes | |
rows[].appId | string | yes | at least 1 characters |
rows[].appName | string | yes | at least 1 characters |
rows[].runs | integer | yes | at least 0 |
rows[].manualMinutesPerRun | number | yes | at least 0 |
rows[].minutes | number | yes | at least 0 |
rows[].hours | number | yes | at least 0 |
rows[].overridden | boolean | yes | |
rows[].demoBaselineRuns | integer | at least 0. default 0 |
Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).