---
title: "List AI-generated suggestions"
method: GET
path: "/v1/models/{modelId}/suggestions"
tags: ["AI Model Suggestions"]
---

# List AI-generated suggestions

`GET /v1/models/{modelId}/suggestions`

<Note>
  This endpoint requires **Organization Admin** permissions.
</Note>

Lists AI-generated suggestions for a shared model. Suggestions can be filtered by status and are returned with keyset-based pagination.

Suggestions are sorted by priority, creation date, and ID for stable pagination.

## Path parameters

- `modelId` string, uuid, required

## Query parameters

- `status` 'active' | 'ignored' | 'all'
- `cursor` string
- `pageSize` integer

## Response `200`

List of suggestions for the model

- object
  - `records` ModelSuggestion[], required — List of AI-generated suggestions
    - `id` string, uuid, required — Unique identifier for the suggestion.
    - `category` string, required — Suggestion category, e.g. `missing_context`.
    - `title` string, required — Short human-readable title.
    - `rationale` string, required — Explanation of why the suggestion was made.
    - `priority` integer, required — Priority from 1 (highest) to 10 (lowest).
    - `proposedChanges` SuggestionProposedChanges, required — The change(s) the suggestion would apply to the model.
      - `kind` 'context_edits', required — The kind of change. Currently always `context_edits`.
      - `edits` SuggestionContextEdit[], required
        - `field` string, required — The model field being edited (e.g. `ai_context`).
        - `target` string, required — Dot-path identifying what the edit applies to, e.g. `views.orders.fields.status`.
        - `value` union, required — The proposed value for the field.
          - string
          - string[]
    - `evidence` SuggestionEvidenceItem[], nullable, required — Source evidence for the suggestion. `null` for rows created before evidence was tracked; `[]` when none was cited.
      - `type` 'ai_chat', required — The kind of evidence. Currently always `ai_chat`.
      - `chatAiSessionId` string, uuid, required — Chat session that motivated the suggestion.
      - `capturedAt` string, required — ISO 8601 timestamp of when the evidence was captured.
    - `ignoreReason` string, nullable, required — Optional free-text reason recorded when the suggestion was dismissed.
    - `ignoredAt` string, date-time, nullable, required — ISO 8601 timestamp of dismissal, or `null` if active.
    - `ignoredBy` string, uuid, nullable, required — User ID that dismissed the suggestion, or `null` if active.
    - `aiModifiedAt` string, date-time, required — ISO 8601 timestamp of the last AI write (create or AI update). Unaffected by dismiss/restore.
    - `createdAt` string, date-time, required — ISO 8601 timestamp of when the suggestion was created.
    - `updatedAt` string, date-time, required — ISO 8601 timestamp of the last write of any kind, including dismiss/restore.
  - `pageInfo` PageInfo, required — Pagination information for paginated responses.
    - `hasNextPage` boolean — Indicates if there are more records available.
    - `nextCursor` string, nullable — Cursor for the next page of results. `null` if no more results.
    - `pageSize` integer — Number of records per page.
    - `totalRecords` integer — Total number of records matching the query.

## Other responses

- `400` — Bad Request Possible error messages: - `Invalid cursor value` - `modelId: Invalid UUID` - `pageSize must be between 1 and 100`
- `401` — Missing or invalid authentication
- `403` — Forbidden. Possible causes: - Requesting user lacks Organization Admin permissions
- `404` — Not Found Possible error messages: - `Shared model with id <modelId> does not exist` - `Model not found or not accessible`
- `429` — Too Many Requests - Rate limit exceeded (60 requests/minute)

---

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