---
title: "List"
method: GET
path: "/service-accounts"
tags: ["service-accounts"]
---

# List

`GET /service-accounts`

## Request

- Base URL: `https://api.instruxi.dev/api/v1/enforcer`
- URL: `https://api.instruxi.dev/api/v1/enforcer/service-accounts`
- Auth: one of:
  - API key in header `Authorization`
  - API key in header `X-API-Key`

Service accounts visible to the caller: tenant_read reads the roster, tenant_manage (or cross_tenant) is required to write any of them. q matches the slug or name (case-insensitive substring); role filters by role slug; active and has_agent are ternary (true/false, absent = no filter). has_agent filters on agents.service_account_id.

## Query parameters

- `q` string
- `role` string
- `active` boolean
- `has_agent` boolean
- `limit` integer
- `offset` integer

## Response `200`

OK

- InternalDeliveryHttpHandlerServiceAccountPageResponse
  - `data` InternalDeliveryHttpHandlerServiceAccountPage
    - `filtered` integer
    - `items` InternalDeliveryHttpHandlerServiceAccountView[]
      - `active` boolean
      - `agent_id` string: AgentID is nil on this branch (see serviceaccounts.AgentBinding) — agents.service_account_id lands with v3-agents-schema.
      - `created_at` string
      - `created_by` string
      - `description` string
      - `email` string
      - `groups` InternalDeliveryHttpHandlerServiceAccountGroupRef[]: Groups is populated on GET /service-accounts/{id} only — a list page decorating every row with its group memberships is an N+1 this type does not force; use GET /service-accounts/{id}/groups for the full list on any one account.
        - `id` string
        - `name` string
        - `slug` string
      - `id` string
      - `key_count` integer
      - `kind` string
      - `last_used_at` string
      - `name` string
      - `role` InternalDeliveryHttpHandlerServiceAccountRoleView
        - `id` string
        - `permissions` InternalDeliveryHttpHandlerServiceAccountPermsView
          - `admin_managed` boolean
          - `cross_tenant` boolean
          - `tenant_manage` boolean
          - `tenant_read` boolean
          - `tenant_write` boolean
        - `slug` string
      - `slug` string
      - `tenant_id` string
      - `updated_at` string
    - `limit` integer
    - `offset` integer
    - `total` integer
  - `success` boolean

## Other responses

- `400`: unknown_param
- `401`: Unauthorized
- `503`: authz_unavailable

---

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