---
title: "Ownership + runbook registry"
method: GET
path: "/v1/ops/ownership"
tags: ["Ops"]
---

# Ownership + runbook registry

`GET /v1/ops/ownership`

List the ownership registry, or resolve one alert class / subsystem.

Every entry names an owner AND a procedure (runbook link or inline
text) — the loader rejects an entry with one but not the other, and CI
pins that every declared alert class is covered by exactly one
subsystem.

## Query parameters

- `alert_class` string, nullable — Resolve the subsystem covering one alert class (the names in the platform alerting rules). Unknown classes 404 loudly — an alert with no owner is a registry gap, not an empty result.
- `subsystem` string, nullable — Filter to one subsystem id.

## Response `200`

Successful Response

- OwnershipListResponse
  - `subsystems` OwnershipEntry[], required — Registry entries matching the filters (all when none).
    - `id` string, required — Stable subsystem slug.
    - `owner` string, required — Lane/team that fixes this subsystem.
    - `escalation` string, nullable — Who to pull in when the owner is dark.
    - `runbook` string, nullable — Repo path or URL of the procedure doc.
    - `runbook_text` string, nullable — Inline minimal procedure when no doc exists yet.
    - `description` string, nullable
    - `alert_classes` string[] — Alert names (infra/gke/alerting-rules.yaml) covered.
  - `total` integer, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `422` — Validation Error
- `500` — Internal Server Error

---

[API](https://skmtc.net/mixpeek/apis/mixpeek-api.md) · [All operations](https://skmtc.net/mixpeek/apis/mixpeek-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mixpeek/mixpeek-api/revisions/27f74c951c4d/schema)
