---
title: "List Instance Health"
method: GET
path: "/api/integrations/instances/health"
tags: ["integrations"]
---

# List Instance Health

`GET /api/integrations/instances/health`

## Request

- Base URL: `https://app.thinqos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.thinqos.com/api/integrations/instances/health`
- Auth: none declared

Health for every integration in the subject's live set (TOS-2708).

One row per instance, carrying the filter bucket (``ready`` / ``degraded`` /
``needs_attention`` / ``unknown``), the healthy/affected split, and the typed
failure detail — so the Connected list can render All / Needs attention /
Degraded / Ready without deriving health from raw evidence itself.

``subject_identity_id`` is the identity whose profile is being viewed, which
is NOT always the caller: an owner reading an owned agent's Integrations tab
must see the AGENT's connections. It matters because a ``per_caller``
instance holds one connection row per identity — scoping to the caller there
would render the owner's own credential health under the agent's name. Same
authority as ``/instances/installed-on/{identity_id}``: self or an owner.

Batched on purpose: connections, rollups, tool rows, definitions and profiles
are each one query for the whole page, never one per instance.

## Query parameters

- `subject_identity_id` string, uuid, nullable

## Headers

- `x-impersonate-identity-id` string, nullable

## Response `200`

Successful Response

- InstanceHealthOut[]
  - `instance_id` string, uuid, required
  - `alias` string, required
  - `health` ConnectionHealthOut, required: Health of one connection, rendered without the client inventing anything. ``status`` carries the Connected-filter buckets directly (``ready`` / ``degraded`` / ``needs_attention`` / ``unknown``), so the list filters and the degraded/failure screens all read one field. ``credential_status`` keeps the underlying evidence-ladder value for callers that need it. ``unknown`` means CONNECTED BUT NOT YET MEASURED — a credential-free integration that owns no connection row, or a connection probed before the rollup existed. There is no evidence of a problem, so it belongs in the **Ready** filter bucket; render the detail as "Not checked yet" rather than showing ``summary`` (which would read "0 of 0 tools available"). It is a distinct value rather than being folded into ``ready`` because claiming "no capability is failing" when nothing was measured is a fabrication.
    - `status` 'ready' | 'degraded' | 'needs_attention' | 'unknown', required
    - `credential_status` 'connected' | 'needs_reconnect' | 'admin_repair' | 'unreachable' | 'missing', required
    - `healthy_tools` integer, required
    - `total_tools` integer, required
    - `affected_tools` AffectedToolOut[]
      - `name` string, required
      - `reason` string, required
      - `failure_code` string, nullable
      - `evidence` 'probe' | 'telemetry', required
      - `observed_at` string, date-time, nullable
    - `healthy_summary` string, required
    - `summary` string, required
    - `checked_at` string, date-time, nullable
    - `failure` ConnectionFailureDetail: The four named fields the connection-failure screen renders, plus the action. Populated from the closed ``IntegrationFailureCode`` taxonomy (TOS-2708), so every failure category — OAuth denial, wrong account, invalid/expired key, missing scopes, failed safe probe, rate limit, unreachable endpoint, partially unavailable tools — resolves to named copy rather than an error string the user has to interpret.
      - `code` string, required
      - `failed_check` string, required
      - `cause` string, required
      - `preserved` string, required
      - `diagnostic_reference` string, required
      - `next_action` string, required
  - `definition_slug` string, nullable
  - `viewer_can_repair` boolean
  - `held` boolean
  - `hold_state` string, nullable
  - `service_name` string, nullable
  - `account_email` string, nullable
  - `account_label` string, nullable
  - `key_owner` string, nullable
  - `key_borrowed` boolean
  - `definition_id` string, uuid, nullable
  - `service_icon_url` string, nullable
  - `last_tested_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

---

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