---
title: "Patch Installation"
method: PATCH
path: "/api/integrations/installations/{installation_id}"
tags: ["integrations"]
---

# Patch Installation

`PATCH /api/integrations/installations/{installation_id}`

## 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/installations/{installation_id}`
- Auth: none declared

Patch an installation's folder-level flags (``hidden``). Absent field is a no-op.

## Path parameters

- `installation_id` string, uuid, required

## Headers

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

## Request body

- PatchInstallationRequest: Patch an installation's folder-level flags (``PATCH /installations/{id}``). ``hidden`` absent (``None``) is a no-op; ``True``/``False`` maps to ``InstallationService.set_hidden``.
  - `hidden` boolean, nullable

## Response `200`

Successful Response

- InstallationDetailOut: One installation's detail: its own identity fields + the read-path row. ``item`` is the server-assembled :class:`CatalogItemOut` for this installation's definition (definition metadata + aggregate/facets + connection summaries + setup descriptor), reusing the exact read-path assembly so the write surface never re-derives status. ``viewer_setup`` is the caller's own stored setup progress. ``created`` is ``True`` only when a ``POST`` just minted the row (idempotent re-install returns the existing row with ``created=False``).
  - `installation_id` string, uuid, required
  - `library_id` string, uuid, required
  - `definition_id` string, uuid, required
  - `source` string, required
  - `state` string, required
  - `created` boolean
  - `item` CatalogItemOut, required: One catalog row: a definition plus its server-computed status for the viewer. The three independent facts (decision D14): ``installed`` is a folder-level fact; ``connected_for_viewer`` is derived from the handler facets computed from the viewer's OWN evidence; and ``viewer_setup_state`` is derived from that (``configured`` when connected, else ``None``; never stored, TOS-5190 slice 3). Another member installing or connecting can never move the viewer's ``viewer_setup_state`` or ``connected_for_viewer``.
    - `definition_id` string, uuid, nullable, required
    - `slug` string, required
    - `name` string, required
    - `category` string, nullable
    - `family_key` string, nullable
    - `capabilities` string[]
    - `featured` boolean
    - `publisher_trust` string, required
    - `vendor` string, nullable
    - `description` string, nullable
    - `icon_url` string, nullable
    - `catalog_key` string, required
    - `publication_id` string, uuid, nullable
    - `publication_series_id` string, uuid, nullable
    - `publication_version` integer, nullable
    - `installed_publication_version` integer, nullable
    - `update_available` boolean
    - `installed` boolean, required
    - `installed_library_ids` string[]
    - `installation_id` string, uuid, nullable
    - `selected_installation_id` string, uuid, nullable
    - `installation_count` integer
    - `installation_ambiguous` boolean
    - `installations` InstallationSummaryOut[]
      - `installation_id` string, uuid, required
      - `definition_id` string, uuid, required
      - `library_id` string, uuid, required
      - `library_name` string, required
      - `library_role` string, required
      - `state` string, required
      - `installed_publication_version` integer, nullable
      - `allowed_actions` CatalogActionId[]
    - `aggregate_state` 'setup_needed' | 'verifying' | 'connected' | 'partially_connected' | 'needs_attention' | 'disabled' | 'error': The single row-level state, computed from a definition's facet states.
    - `facets` FacetStatusOut[]
      - `direction` 'provides_tools' | 'uses_mind' | 'feeds_mind', required: The capability direction a facet reports on.
      - `state` 'setup_needed' | 'verifying' | 'connected' | 'stale' | 'needs_reauthorization' | 'disabled' | 'error' | 'unsupported', required: One capability direction's status, as a handler reports it.
      - `reason_code` string, nullable
      - `reason_text` string, nullable
      - `evidence_at` string, date-time, nullable
      - `allowed_actions` CatalogActionId[]
    - `connection_summaries` ConnectionSummaryOut[]
      - `ref` string, required
      - `label` string, required
      - `state` 'setup_needed' | 'verifying' | 'connected' | 'stale' | 'needs_reauthorization' | 'disabled' | 'error' | 'unsupported', required: One capability direction's status, as a handler reports it.
      - `scope` string, nullable
      - `evidence_at` string, date-time, nullable
      - `personal` boolean
      - `actions` CatalogActionId[]
      - `capture_connection_id` string, uuid, nullable
    - `connection_count` integer
    - `connection_noun` 'account' | 'agent' | 'environment' | 'server': User-facing noun for one separately manageable connection.
    - `setup` SetupOut: What the viewer must do to configure this installation (from ``SetupDescriptor``). Carries the concrete setup CONTENT the retired hard-coded connect UI held as frontend constants, so no client hard-codes an app list again: the thinqOS MCP ``server_url``, the primary-Mind ``behavior_prompt`` (+ its note), the client ``prerequisite``, the typed ``steps``, and a ``docs_url``. Every field is publishable; none ever carries credential material.
      - `kind` string, required
      - `current_step` string, nullable
      - `steps` SetupStepOut[]
        - `id` string, required
        - `label` string, required
        - `instructions` string[]
        - `copy_value` string, nullable
        - `copy_label` string, nullable
        - `action` 'connect' | 'reconnect' | 'disconnect' | 'verify' | 'configure' | 'mint_observer_key' | 'enable' | 'disable' | 'remove_from_library': Closed wire vocabulary for actions the generic UI may render.
      - `instructions` string, nullable
      - `server_url` string, nullable
      - `behavior_prompt` string, nullable
      - `behavior_prompt_note` string, nullable
      - `prerequisite` string, nullable
      - `docs_url` string, nullable
    - `attention_reasons` AttentionReasonOut[]
      - `code` string, required
      - `text` string, required
    - `viewer_setup_state` string, nullable
    - `viewer_setup_step` string, nullable
    - `connected_for_viewer` boolean
    - `allowed_actions` CatalogActionId[]
    - `error` string, nullable
    - `family_peer_installations` FamilyPeerInstallationOut[]
      - `definition_id` string, uuid, required
      - `name` string, required
      - `library_id` string, uuid, required
      - `library_name` string, required
      - `connection_noun` 'account' | 'agent' | 'environment' | 'server', required: User-facing noun for one separately manageable connection.
    - `generated_at` string, date-time, required
  - `viewer_setup` SetupStateOut: The viewer's setup for one installation, derived from their live connection. Viewer-scoped (decision D14): never carries another member's setup. Distinct from :class:`SetupOut`, which is the handler's setup *descriptor* (what to do). Nothing stores it (TOS-5190 slice 3).
    - `installation_id` string, uuid, required
    - `identity_id` string, uuid, required
    - `state` string, required
    - `current_step` string, nullable
    - `configured_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)
