---
title: "List Code Scan Prop Suggestions"
method: GET
path: "/v1/projects/{project_id}/code-scan/prop-suggestions"
tags: ["code-scan"]
---

# List Code Scan Prop Suggestions

`GET /v1/projects/{project_id}/code-scan/prop-suggestions`

## Request

- Base URL: `https://api.sonenta.dev`
- URL: `https://api.sonenta.dev/v1/projects/{project_id}/code-scan/prop-suggestions`
- Auth: none declared

AI-proposed translatable (component, prop) pairs, for the console (Viewer+).

Dismissed suggestions are EXCLUDED (they are the dev's "no"). Each carries
`confirmed` (a pick already exists — derived), `in_inventory` (still
discovered), and `created_by` (which agent). Confirming one is the ordinary
`POST /translatable-props`; dismissing is `DELETE` below.

## Path parameters

- `project_id` string, required

## Query parameters

- `limit` integer
- `offset` integer

## Response `200`

Successful Response

- CodeScanSuggestionsPage
  - `items` CodeScanSuggestionOut[], required
    - `uuid` string, required
    - `component` string, required
    - `prop` string, required
    - `rationale` string, nullable: The agent's short justification.
    - `created_at` string, date-time, required
    - `created_by` CodeScanRunActor: Display-ready attribution — the dashboard renders the `label`, never the raw `uuid` (which stays for an audit join). `label` is a human name resolved at BOUNDED per-page cost (a user's name/email, or a key's `name · prefix…last4`). A uuid that no longer resolves keeps its `type`/`uuid` and gets an explicit label (`unknown user` / `revoked or deleted key`) rather than vanishing — the attribution stays true, only the human name is gone.
      - `type` string, required: `user` or `api_key`.
      - `uuid` string, required
      - `label` string, nullable
    - `in_inventory` boolean, required: Is this (component, prop) still in the latest scan's inventory? false = the pair left the code.
    - `confirmed` boolean, required: DERIVED: a translatable-prop pick already exists for this pair (the human confirmed it). Never stored — always the live join vs the picks set.
  - `total` integer, required: Active (non-dismissed) suggestions on this project.
  - `limit` integer, required
  - `offset` integer, required

## Other responses

- `422`: Validation Error

---

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