---
title: "GET /experimental/orgs/{orgId}/home-summary"
method: GET
path: "/experimental/orgs/{orgId}/home-summary"
tags: ["Orgs"]
---

# GET /experimental/orgs/{orgId}/home-summary

`GET /experimental/orgs/{orgId}/home-summary`

Headline counts, quality distribution, security-review coverage, and trailing-window activity for the org Home dashboard, aggregated across every workspace in the org the caller can see, plus org-owned SCM accounts that belong to no workspace. `connected` drives the blank-slate vs connected state; the quality bar and the context-health bands use a fixed 70/90 threshold in v1. `connected` is org-wide (any SCM integration, or any SCM account on record) independent of workspace visibility, so it can be true even when every count below is zero because the caller cannot see the org workspaces. Scan status and all counts include org-owned SCM accounts.

## Path parameters

- `orgId` string, uuid, required

## Headers

- `Authorization` string

## Response `200`

Default Response

- object
  - `connected` boolean, required — Whether the org has any SCM integration, or any SCM account on record from an earlier connection. When false, the counts below are all zero / null.
  - `repoCount` number, required
  - `skillCount` number, required
  - `avgQuality` number, nullable, required — Mean quality (0–100) over skills with a resolvable quality score, or null when none are scored.
  - `belowBarCount` number, required — Scored skills under `qualityBar`.
  - `qualityBar` number, required
  - `securityFindingsCount` number, required — Skills whose latest security review flagged HIGH/CRITICAL risk.
  - `securityNeedsReviewCount` number, required — Skills with no usable security review verdict — never reviewed or the latest review failed.
  - `reviewedCount` number, required — Skills with a completed security review.
  - `reviewInProgressCount` number, required — Skills with a security review still pending.
  - `openFindingsCount` number, required — Active Findings across the org, matching the org Findings feed the Home card links to.
  - `criticalFindingsCount` number, required — Active Findings at critical priority.
  - `window` object, required — The trailing window the activity figures below are measured over, and which their `previous` counts compare against. `installs` is the exception: it is measured over the same number of days but ends on `installsThrough`, because installs are read from a nightly snapshot that never covers today.
    - `days` integer, required
    - `since` string, date, required
    - `installsThrough` string, date, nullable, required
  - `newMembers` object, required — Org members who joined during the window, and during the equally long window before it.
    - `current` integer, required
    - `previous` integer, required
  - `publishes` object, required — Registry versions published from this org over the window. Counts plugins, not the skills inside them. `series` carries one point per day with zeros included.
    - `total` integer, required
    - `delta` object, required
      - `current` integer, required
      - `previous` integer, required
    - `series` object[], required
      - `day` string, required
      - `count` integer, required
  - `installs` object, nullable, required — Installs of plugins this org published, from the nightly PostHog snapshot, over the window ending `window.installsThrough`. Counts deliberate installs only — a CLI auto-sync re-install is not one. `mostInstalled` below is the same measure broken out per plugin, so its rows sum to a subset of this total. Scoped to the workspaces the caller can see, like `publishes`. Null means the snapshot has never completed a run (a fresh deployment, or a worker with no PostHog credentials); it is never a request-time failure, since this endpoint makes no PostHog call. Zero would be the wrong answer there, because it would assert nobody installed anything.
    - `total` integer, required
    - `delta` object, required
      - `current` integer, required
      - `previous` integer, required
    - `series` object[], required
      - `day` string, required
      - `count` integer, required
  - `contextHealth` object, required — The org Context collection bucketed by review quality. Read from the same context model the org Context page and the Total context figure use, over the same source scope (visible workspaces plus org-owned SCM accounts) and the same family de-duplication, so the four bands partition that collection and `total` equals the org Context page's `meta.total` for the same caller. The bands are that page's `filter[score]` bands, so each one addresses exactly the rows the page lists when filtered to it. These totals are still scoped differently to `avgQuality` and `belowBarCount` above, which come from the per-workspace scan summaries.
    - `unscored` integer, required
    - `belowSeventy` integer, required
    - `seventyToEightyNine` integer, required
    - `ninetyPlus` integer, required
    - `total` integer, required
  - `mostInstalled` object[], required — The org's most-installed plugins over the same trailing window and from the same nightly PostHog snapshot as `installs`, ranked most-installed first. `installs` counts deliberate installs only (a CLI auto-sync re-install is not one), so this panel agrees with the installs card beside it rather than with the cumulative registry download counter. Scoped to the workspaces the caller can see, and measured over the window ending `window.installsThrough`; empty when no snapshot has ever completed or nothing was installed in the window.
    - `pluginName` string, required — `workspace/plugin`, as recorded at install time in the nightly snapshot.
    - `installs` integer, required
  - `lastScannedAt` string, date-time, nullable, required — Most recent completed scan of any SCM account in the org, or null when nothing has been scanned yet. Accounts whose connection has since been removed still count.
  - `scanStatus` union, required — Org-wide scan state across the org's SCM accounts, so a client can tell a failed or in-flight estate apart from a clean empty one. The highest-precedence state across all accounts in the org, in order: `failed` (an account has a failed scan), `running` (a scan is in flight), `ok` (at least one scan succeeded), `none` (no scan drives a state). `failed` and `running` reflect only accounts that are still connected: once an SCM connection is removed, that account cannot put the org into either state. `ok` counts every account. `none` therefore does not mean "never scanned", and can be returned alongside a non-null `lastScannedAt`.
    - 'none'
    - 'running'
    - 'failed'
    - 'ok'
  - `scanFailure` object, nullable, required — The SCM provider whose most recent scan failed, so a client can point the user at the integration to check. Non-null only when `scanStatus` is `failed`. Identifies the provider only: the account name and the underlying error are deliberately not exposed.
    - `provider` string, required — The failed scan's SCM provider.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `500` — Internal Server Error

## Changes

- **2026-09-15** `d50a02b79ad3` — 2 info
  - added the optional property `error/code` to the response with the `403` status
  - added the optional property `error/url` to the response with the `403` status
- **2026-09-01** `756235b720be` — 1 info
  - added the required property `scanFailure` to the response with the `200` status
- **2026-08-26** `c3a0e6fe9b65` — 4 breaking, 3 info
  - removed the required property `activeUsers` from the response with the `200` status
  - removed the required property `mostInstalled/items/downloads` from the response with the `200` status
  - removed the required property `mostInstalled/items/name` from the response with the `200` status
  - removed the required property `mostInstalled/items/workspaceName` from the response with the `200` status
  - …3 more
- **2026-08-24** `b3462f8c3bc7` — 2 info
  - added the required property `installs` to the response with the `200` status
  - added the required property `window/installsThrough` to the response with the `200` status
- **2026-08-21** `94ea3c4ec562` — 1 breaking, 5 info
  - removed the required property `scoreBands` from the response with the `200` status
  - added the required property `activeUsers` to the response with the `200` status
  - added the required property `contextHealth` to the response with the `200` status
  - added the required property `mostInstalled` to the response with the `200` status
  - …2 more

[Full history](https://skmtc.dev/tessl/apis/tessl-api/changes/experimental/orgs/:orgId/home-summary/get.md)

---

[API](https://skmtc.dev/tessl/apis/tessl-api.md) · [All operations](https://skmtc.dev/tessl/apis/tessl-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tessl/apis/tessl-api/revisions/b777eddaa913?raw)
