# Edit a comment

```http
PUT https://secure.yoprint.com/v1/api/store/{team_slug}/comment/{id}
```

- API version: v1
- Operation ID: `v1_public_comment_update_put`
- Section: Sales › [Comments](https://developer.yoprint.com/reference/comments.md)
- Web page: https://developer.yoprint.com/reference/comments/v1-comment-update-put/
- Authentication: `Authorization: Bearer YOUR_API_KEY`

Replaces a comment's text. Send the whole new text as HTML in `comment`. Returns the comment; `is_edited` becomes true when the text changed. Sending the same text changes nothing.

Editing does not notify anyone by email; people with the order open see the change live.

## Permission

Any member of the team, for any comment on the team. It does not check who wrote the comment or whether you can see its order.

## Business rules

- With `PUT`, `comment` is required and must be text.
- Only `comment` can change. The author and what it is on stay the same.

## Side effects

- People with the order, job or purchase order open see the edit live. No email.

## Path parameters

- `team_slug` (string, required): Your team slug, shown as Team ID next to your API key in Profile. Example `your-team`.
- `id` (string, required): The comment's `id`. A hash id; unique keys and document numbers are refused with 404. Example `JiDNJJ08el0QrD`.

## Request body

Content type `application/json`, required.

Fields:

- `comment` (string, required): The new text, as HTML. It replaces the old text.

### Example request

```bash
curl -X PUT 'https://secure.yoprint.com/v1/api/store/your-team/comment/JiDNJJ08el0QrD' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: application/json' \
  -H 'X-Yoprint-Decimal-Format: exact-v1' \
  -H 'Content-Type: application/json' \
  -d '{
    "comment": "<p>Customer approved the navy ink instead.</p>"
  }'
```

## Response

`200` Successful response.

Fields:

- `data` (object, required)
  - `comment` (string, optional): The comment as HTML.
  - `created_at` (string (date-time), optional)
  - `id` (string, optional)
  - `is_edited` (boolean, optional): True once the comment changed after it was written. Deleting and restoring also count.
  - `job_id` (string | null, optional): Set for comments on a job.
  - `job_name` (string | null, optional)
  - `job_scoped_id` (string | null, optional)
  - `order_id` (string | null, optional): Set for comments on a sales order, a quote or one of their jobs.
  - `purchase_order_id` (string | null, optional)
  - `trashed` (boolean, optional): True when the comment is deleted.
  - `type` (string, optional): `user_comment` for a comment written in YoPrint. `user` for one a team member sent by replying to a YoPrint email.
  - `updated_at` (string (date-time), optional)
  - `user_id` (string, optional): The hash id of the team member who wrote it.
- `status` (integer, required)
- `success` (boolean, required)

Example response:

```json
{
  "data": {
    "comment": "<p>Customer approved the navy ink instead.</p>",
    "created_at": "2026-11-03T09:30:00+00:00",
    "id": "JiDNJJ08el0QrD",
    "is_edited": true,
    "job_id": null,
    "job_name": null,
    "job_scoped_id": null,
    "order_id": "V4keXwwxMQyXw7",
    "purchase_order_id": null,
    "trashed": false,
    "type": "user_comment",
    "updated_at": "2026-11-03T10:05:00+00:00",
    "user_id": "VG7s3tFzyQbO2N"
  },
  "status": 200,
  "success": true
}
```

## Errors

- `401` The API key is missing or wrong (`unauthenticated`).
- `403` You are not allowed to do this. `api_access_not_in_plan`: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only `{"message": "Insufficient Permission"}`. Other refusals use the error envelope, with `unauthorized` or `user_is_not_authorized`.
- `404` Not found. `page_not_found`: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's. `code: null`, with a message that starts "No query results for": there is no record with that id.
  - When: No comment of this team has this id. Fix: Use a comment `id` from the order's comment list.
- `422` The request was refused and changed nothing. `validation_failed` lists what to fix in `error.fields`; other codes name a business rule, explained in `error.message`. A few checks answer with only `{"message": "..."}`. An operation that calls another service (a payment provider, a carrier, an accounting app) can answer `connect_timeout` ("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.
  - When: `comment` is missing or not text (`PUT`) (`validation_failed`; `error.fields` names the field). Fix: Send the full new text in `comment`.

## Notes

- The HTML is stored as sent. Escape anything that came from untrusted input before you send it.

## Related

- [Get a comment](https://developer.yoprint.com/reference/comments/v1-comment-show.md): `GET /v1/api/store/{team_slug}/comment/{id}`
