> ## Documentation Index
> Fetch the complete documentation index at: https://docs.deepdub.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Update an issue's state

> Move an issue through the review workflow. You can only change the state of issues your own API key created.

Moves an issue through the review workflow. This is separate from [`PUT /issues/{id}`](/api-reference/issues/update-issue), which edits the contents of a report — this endpoint only changes its `state`.

You can only change the state of issues created by your own API key; anything else returns `404`.

## States

| State                     | Meaning                                     |
| ------------------------- | ------------------------------------------- |
| `open`                    | Received and waiting for review.            |
| `uploaded_for_correction` | Accepted and queued for a correction.       |
| `in_progress`             | Actively being worked on.                   |
| `resolved`                | Fixed.                                      |
| `rejected`                | Not actionable. Requires `rejectionReason`. |

Setting `state` to `rejected` without a `rejectionReason` returns `400`, as does any value outside the table above.

```json theme={null}
{
  "state": "rejected",
  "rejectionReason": "not reproducible"
}
```


## OpenAPI

````yaml patch /issues/{id}/state
openapi: 3.0.0
info:
  title: Deepdub API
  description: >-
    Deepdub's Text-to-Speech API enables high-quality, expressive speech
    generation with voice cloning, accent control, and real-time streaming
    capabilities.
  contact:
    email: support@deepdub.ai
  version: '1.0'
servers:
  - url: https://restapi.deepdub.ai/api/v1
    description: Production
security:
  - ApiKeyAuth: []
externalDocs:
  description: OpenAPI
  url: https://restapi.deepdub.ai/api/v1/swagger/index.html
paths:
  /issues/{id}/state:
    patch:
      tags:
        - Issues
      summary: Update an issue's state
      description: >-
        Move an issue through the review workflow. You can only change the state
        of issues your own API key created.
      operationId: updateIssueState
      parameters:
        - description: API Key
          name: x-api-key
          in: header
          required: true
          schema:
            type: string
            default: dd-00000000000000000000000065c9cbfe
          example: dd-00000000000000000000000065c9cbfe
        - description: Issue ID
          name: id
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/model.UpdateIssueStateRequest'
            example:
              state: resolved
      responses:
        '200':
          description: Updated issue
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.IssueResponse'
        '400':
          description: >-
            Unrecognized state, or `rejectionReason` omitted when setting state
            to `rejected`
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.IssueErrorResponse'
              example:
                message: rejectionReason is required when state is rejected
        '401':
          description: Unauthorized — invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.IssueErrorResponse'
              example:
                message: Unauthorized
        '404':
          description: Issue not found, or not owned by this API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.IssueErrorResponse'
              example:
                message: Issue not found
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/model.IssueErrorResponse'
              example:
                message: Failed to update issue state
components:
  schemas:
    model.UpdateIssueStateRequest:
      description: Payload for moving an issue to a new workflow state
      type: object
      required:
        - state
      properties:
        state:
          description: State to move the issue to.
          type: string
          enum:
            - open
            - uploaded_for_correction
            - in_progress
            - resolved
            - rejected
          example: resolved
        rejectionReason:
          description: >-
            Why the issue is being rejected. Required when `state` is
            `rejected`, ignored otherwise.
          type: string
          example: not reproducible
    model.IssueResponse:
      description: Issue details
      type: object
      properties:
        id:
          type: string
          example: iss_12345abcde
        state:
          description: Current state of the issue.
          type: string
          enum:
            - open
            - uploaded_for_correction
            - in_progress
            - resolved
            - rejected
          example: open
        rejectionReason:
          description: Why the issue was rejected. Present only when `state` is `rejected`.
          type: string
          example: duplicate report
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        generationId:
          type: string
        generatedText:
          type: string
        problemWord:
          type: string
        voicePromptId:
          type: string
        type:
          description: Category of problem being reported.
          type: string
          enum:
            - hallucinations
            - glossary
        locale:
          description: Locale of the reported generation, when known.
          type: string
          example: en-US
        additionalComments:
          type: string
        problemSeconds:
          type: number
        phoneticHeard:
          description: Phonetic transcription of how the word actually sounded
          type: string
        phoneticExpected:
          description: Phonetic transcription of how the word should sound
          type: string
    model.IssueErrorResponse:
      description: Error response from the issues endpoints
      type: object
      properties:
        message:
          type: string
          example: Issue not found
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Must start with `dd-` prefix.

````