---
title: "Start issue suggestions for a project"
method: POST
path: "/experimental/projects/{projectId}/factory/implement/issue-suggestions"
tags: ["Projects", "Integrations"]
---

# Start issue suggestions for a project

`POST /experimental/projects/{projectId}/factory/implement/issue-suggestions`

## Request

- Base URL: `https://api.tessl.io`
- URL: `https://api.tessl.io/experimental/projects/{projectId}/factory/implement/issue-suggestions`
- Auth: none declared

Starts issue-suggestions generation for the confirmed repository, or returns the existing pending or finished result for the same repository, model and generation version. Returns promptly with 200 and `pending` while generation runs in the background: poll the GET. Calling again while a result is pending or finished starts nothing; calling after `failed` retries. A repository the Tessl App cannot read is recorded as a `failed` result with the reason in `detail`, not as an error here. Returns 409 when the shared cache is unavailable, because generation needs it for its lease. Requires edit access to the project workspace.

## Path parameters

- `projectId` string, uuid, required

## Headers

- `Authorization` string

## Response `200`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
  - `data` object, required
    - `id` string, required
    - `type` 'issue-suggestions', required
    - `attributes` object, required
      - `status` union, required: `pending` covers both not started and running: poll the GET while it is `pending`, and POST to start. `ready` carries suggestions; `empty` means the inspected files supported none (see `detail`); `failed` carries an error in `detail` and a deliberate POST retries it.
        - 'pending'
        - 'ready'
        - 'empty'
        - 'failed'
      - `source` 'repository', required: Suggestions are written by one model call over files read from the repository at `commitSha`. They are not validated analysis.
      - `suggestions` object[], required
        - `id` string, required: Stable for one result.
        - `label` string, required: Short pill text of 3 to 5 words. Not the issue title: create the issue with `title`.
        - `title` string, required
        - `body` string, required: The complete issue body in Markdown: context, evidence, the change, and acceptance criteria.
        - `evidence` object[], required: Repository files, and lines where known, that support the issue.
          - `path` string, required
          - `line` integer
      - `detail` string, nullable, required: Why the result is pending, empty, failed or limited. Null when ready without limits.
      - `commitSha` string, nullable, required
      - `model` string, nullable, required
      - `generatedAt` string, date-time, nullable, required

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Default Response
- `404`: Not Found
- `409`: Conflict
- `500`: Internal Server Error

## Changes

- **2026-10-29** `06d2142ed144`: 1 info
  - api operation id `createProjectFactoryImplementIssueSuggestion` was added
- **2026-10-29** `93d1862a760f`: 1 info
  - added the required property `data/attributes/suggestions/items/label` to the response with the `200` status
- **2026-10-28** `13a6f2425511`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/tessl/apis/tessl-api/changes/experimental/projects/:projectId/factory/implement/issue-suggestions/post.md)

---

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