---
title: "List Guideline Set Requirements"
method: GET
path: "/marketing/guideline-sets/{guideline_set_id}/requirements"
tags: ["marketing-guideline-sets"]
---

# List Guideline Set Requirements

`GET /marketing/guideline-sets/{guideline_set_id}/requirements`

## 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/marketing/guideline-sets/{guideline_set_id}/requirements`
- Auth: none declared

Every live requirement this set holds, for reviewing and approving it.

Filtered directly on `guideline_set_id` rather than on the set's current member documents. Both
write paths set it on every requirement they create, so this is simpler than — and answers a
different question from — `gather_candidates`' two-armed reachability: that resolves what an
*analysis* may judge against right now, this shows everything the set holds, including a
requirement whose source document has since been removed from the set. A librarian reviewing a
set wants to see that row and act on it, not have it vanish from view.

## Path parameters

- `guideline_set_id` string, uuid, required

## Query parameters

- `state` GuidelineRequirementState[], nullable

## Response `200`

Successful Response

- RequirementListResponse: A page of the library. `truncated` rather than a total: counting the matches for an unanchored `ILIKE` costs the same scan twice, and what a reader needs to know is that there is more, not exactly how much more.
  - `requirements` GuidelineRequirementResponse[], required
    - `requirement_id` string, uuid, required
    - `file_id` string, uuid, required
    - `filename` string, nullable, required
    - `decomposition_id` string, uuid, nullable, required
    - `guideline_set_id` string, uuid, nullable, required
    - `ordinal` integer, required
    - `revision_number` integer, required
    - `state` 'active' | 'disabled' | 'archived' | 'superseded' | 'proposed', required: Whether a requirement is in the working library, and if not, why not. All of them are recorded as revisions, so every one is reversible and readable. ARCHIVED and SUPERSEDED are deliberately distinct: ARCHIVED is a person deciding this obligation does not apply to them, SUPERSEDED is a newer decomposition of the same guideline taking over. A regeneration must never overwrite the first with the second — that would erase a human decision.
    - `requirement_text` string, required
    - `judging_guidance` string, nullable, required
    - `context` string, nullable, required
    - `collateral_types` MarketingCollateralType[], nullable, required
    - `marketing_team_ids` string[], nullable, required
    - `source_collateral_terms` string[], nullable, required
    - `trigger_terms` string[], required
    - `unresolved_collateral_terms` string[], required
    - `section_label` string, nullable, required
    - `title` string, nullable, required
    - `source_page` integer, nullable, required
    - `citation` GroundedSpan, required: Where a requirement appears to have come from, and how much to trust it.
      - `page_number` integer, required
      - `boxes` BoundingBox[]
        - `x0` number, required
        - `y0` number, required
        - `x1` number, required
        - `y1` number, required
      - `source_text` string, nullable
      - `matched_terms` string[]
      - `score` number
      - `basis` string
      - `cited_page` integer, nullable
      - `refusal` string, nullable
    - `change_kind` 'extracted' | 'edited' | 'disabled' | 'enabled' | 'archived' | 'restored' | 'superseded' | 'proposed' | 'approved', required: What a revision was for. Redundant with comparing a revision to its predecessor, and that is the point: the reason a change was made is the part a diff cannot recover.
    - `change_note` string, nullable, required
    - `updated_at` string, date-time, required
    - `updated_by_email` string, nullable, required
    - `has_human_edits` boolean, required
    - `signal` RequirementSignal: One requirement's track record, as a ranked read reports it. Present only when the list was asked for an `order`; `None` otherwise, so an ordinary library read pays neither the aggregate nor the payload. A row whose requirement has never been checked is absent from a ranked read entirely rather than carrying zeros — there is nothing to rank. **The two halves are in different units and must not be added or compared.** `collateral_checked` and the three `checks_*` count *checks* — one per (evaluation, requirement), which `uq_marketing_requirement_check_once_per_evaluation` guarantees. The `risks_*` count *risks*, and one check can produce several, so `risks_flagged + risks_over_flagged` is not bounded by `checks_failed`. The rates come from the server because the server ordered by them. A client re-deriving them would be a second definition of the number the ranking was built on. `None` means no evidence, which is a different claim from `0.0`.
      - `collateral_checked` integer, required
      - `checks_failed` integer, required
      - `checks_passed` integer, required
      - `checks_not_determined` integer, required
      - `checks_current_revision` integer, required
      - `verdicts` object, required
      - `risks_superseded` integer, required
      - `false_positive_rate` number, nullable, required
      - `dismissal_rate` number, nullable, required
      - `fire_rate` number, nullable, required
    - `downvotes` integer, nullable
  - `truncated` boolean, required
  - `signal_floor` integer, nullable
  - `signal_window_days` integer, nullable
  - `max_requirements_per_state_change` integer, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-02** `425d5b8a3c17`: 1 info
  - endpoint added

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

---

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