---
title: "Get Service Account Memberships"
method: GET
path: "/api/platform/service-accounts/{service_account_id}/memberships"
tags: ["platform"]
---

# Get Service Account Memberships

`GET /api/platform/service-accounts/{service_account_id}/memberships`

## Request

- Base URL: `https://app.gocrisp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.gocrisp.com/api/platform/service-accounts/{service_account_id}/memberships`
- Auth: OAuth 2
  - Authorization code: `https://login.gocrisp.com/authorize`
  - Token URL: `https://login.gocrisp.com/oauth/token`

FGA-derived organization, group, portfolio, and account memberships.

Loaded on-demand by the service-account detail pane. The identifier is
resolved to its canonical ``service_account:<segment>`` subject before the
FGA fan-out. Requires ``reader`` on the ``members`` module instance (GET
maps to the reader relation on the parent router gate).

## Path parameters

- `service_account_id` string, required: Service account dock id or gcpsa| segment

## Response `200`

Successful Response

- ServiceAccountMembership: FGA-derived organizations, groups, portfolios, and accounts for one service account. Mirrors :class:`app.platform.users.models.UserMembership` but keyed by the service account's canonical FGA subject segment (``gcpsa|{uniqueId}`` when GCP-mapped, else the dock id). Each id is an independent principal.
  - `serviceAccountId` string, required
  - `organizations` MembershipOrganization[]
    - `id` string, required
    - `name` string, required
    - `displayName` string, nullable
    - `inherited` boolean
  - `groups` MembershipGroup[]
    - `id` string, required
    - `displayName` string, nullable
    - `organizationId` string, required
    - `organizationName` string, nullable
    - `inherited` boolean
    - `readonly` boolean
  - `portfolios` MembershipPortfolio[]
    - `id` string, required
    - `name` string, nullable
    - `inherited` boolean
  - `accounts` MembershipAccount[]
    - `id` string, required
    - `name` string, nullable
    - `inherited` boolean

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-12** `a09ec5461e0b`: 1 info
  - added the optional property `groups/items/readonly` to the response with the `200` status

[Operation history](https://skmtc.dev/gocrisp/apis/crisp-app-dock/changes/api/platform/service-accounts/:service_account_id/memberships/get.md)

---

[API](https://skmtc.dev/gocrisp/apis/crisp-app-dock.md) - [All operations](https://skmtc.dev/gocrisp/apis/crisp-app-dock/llms.txt) - [OpenAPI document](https://skmtc.dev/gocrisp/apis/crisp-app-dock/revisions/28638f87e7d4?raw)
