---
title: "List Guideline Sets For Company"
method: GET
path: "/internal/marketing/guideline-sets"
tags: ["internal"]
---

# List Guideline Sets For Company

`GET /internal/marketing/guideline-sets`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/internal/marketing/guideline-sets`
- Auth: none declared

A company's live guideline sets, their documents, and what their newest reading is doing.

Its own read rather than the customer route's, because that one is scoped to the session's
company and this caller is staff acting on someone else's. It also carries
`always_ingest_full_document`, which the customer response deliberately does not.

## Query parameters

- `company_id` string, uuid, required

## Response `200`

Successful Response

- AdminGuidelineSet[]
  - `guideline_set_id` string, uuid, required
  - `name` string, required
  - `documents` AdminSetDocument[], required
    - `file_id` string, uuid, required
    - `filename` string, required
    - `role` 'primary' | 'supporting', required: What one document contributes to a guideline set. PRIMARY documents are read *for obligations*: every requirement traces to exactly one of them, and `MarketingGuidelineRequirement.file_id` names it. SUPPORTING documents — a brand book, a glossary, a claims-substantiation memo — are read *for context* and produce no requirement of their own. The distinction is not presentational. It decides which documents a product line drags into `gather_candidates`, so filing a glossary as primary is how a definitions list becomes a hundred obligations nobody wrote, and filing a standards document as supporting is how its rules quietly stop being checked.
    - `always_ingest_full_document` boolean, required
  - `latest_status` 'queued' | 'running' | 'succeeded' | 'failed': Lifecycle of one decomposition run.
  - `latest_stage` 'queued' | 'selecting' | 'downloading' | 'extracting' | 'grounding' | 'storing' | 'done': Where a running decomposition has got to. Only the stages a watching human can perceive. Resolving the model's channel names to `MarketingCollateralType` and writing the rows are both sub-second, so they are not stages — a step that never renders is a step that misleads. `EXTRACTING` is the one that takes the minute.

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-05** `eb329fb4c94a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/changes/internal/marketing/guideline-sets/get.md)

---

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