---
title: "GET /api/patient_messages/{id}"
method: GET
path: "/api/patient_messages/{id}"
tags: ["Clinical"]
---

# GET /api/patient_messages/{id}

`GET /api/patient_messages/{id}`

## Request

- Base URL: `https://app.drchrono.com`
- URL: `https://app.drchrono.com/api/patient_messages/{id}`
- Auth: OAuth 2
  - Authorization code: `https://app.drchrono.com/o/authorize/`
  - Token URL: `https://app.drchrono.com/o/token/` scopes: `patients:read`, `patients:write`, `messages:read`, `messages:write`

## Path parameters

- `id` string, required

## Query parameters

- `since` string
- `patient` integer
- `doctor` integer
- `thread` integer: Filter by thread ID to get messages in the same thread

## Response `200`

OK

- PatientMessage
  - `body` string
  - `patient` integer, required
  - `attachments` object[]
    - `updated_at` string
    - `created_at` string
    - `attachment` string
    - `doctor` integer
  - `thread` integer, nullable: ID of the DoctorMessageThread containing this message (OnPatient message threading)
  - `doctor` integer, required
  - `created_at` string
  - `updated_at` string
  - `message` string
  - `id` integer
  - `subject` string, required

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Permission Denied
- `404`: Not Found
- `405`: Method Not Allowed
- `500`: Internal Server Error

## Changes

- **2026-07-13** `1f92de898aec`: 2 info
  - added the new optional `query` request parameter `thread`
  - added the optional property `thread` to the response with the `200` status

[Operation history](https://skmtc.dev/drchrono/apis/drchrono-api/changes/api/patient_messages/:id/get.md)

---

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