# Add a note to a ticket

> Leaves context on a ticket.

Source: https://www.hey.support/docs/api/tickets/add-ticket-note

---

<ApiEndpoint method="POST" path="/tickets/{id}/notes" />

A note never leaves the building — not to the customer, not to their status page, not to a GET of this ticket. Pass `kind: "reply"` to write to the customer instead, which emails them exactly as a reply from the desk would; it has to be asked for by name so nobody reaches it by accident.

## Path parameters

<TypeTable
  type={{
  "id": { type: "string (uuid)", description: "", required: true }
}}
/>

## Request body

<TypeTable
  type={{
  "body": { type: "string", description: "", required: true },
  "kind": { type: "\"note\" | \"reply\"", description: "", required: false }
}}
/>

## Response `201`

<TypeTable
  type={{
  "id": { type: "integer", description: "", required: true },
  "role": { type: "\"customer\" | \"agent\" | \"system\"", description: "Internal notes are never returned, so `note` cannot appear here.", required: true },
  "body": { type: "string", description: "", required: true },
  "channel": { type: "string", description: "", required: false },
  "created_at": { type: "string (date-time)", description: "", required: true }
}}
/>

### Errors

* `400` — Invalid body
* `401` — Missing or invalid API key
* `404` — Not found
* `429` — Rate limit exceeded

Every error shares [one envelope](/docs/api/errors).

## Example

```bash
curl -X POST \
  https://www.hey.support/api/v1/tickets/<id>/notes \
  -H 'Authorization: Bearer hs_live_…' \
  -H 'Content-Type: application/json' \
  -d '{"body":"<body>"}'
```
