---
title: "Get a conversation with its thread oldest first: messages, notes, and the guest's booking events as system rows"
method: GET
path: "/conversations/{id}"
tags: ["conversations"]
---

# Get a conversation with its thread oldest first: messages, notes, and the guest's booking events as system rows

`GET /conversations/{id}`

## Request

- Base URL: `https://daybag.io/api/v1`
- URL: `https://daybag.io/api/v1/conversations/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Response `200`

Success

- object
  - `id` string, required
  - `status` 'open' | 'done', required
  - `last_message_at` string, required: ISO 8601 timestamp (UTC)
  - `outfitter_read_at` string, nullable, required: ISO 8601 timestamp (UTC)
  - `guest_read_at` string, nullable, required: ISO 8601 timestamp (UTC)
  - `snoozed_until` string, nullable, required: ISO 8601 timestamp (UTC)
  - `created_at` string, required: ISO 8601 timestamp (UTC)
  - `unread` boolean, required: A guest message is newer than outfitter_read_at
  - `needs_reply` boolean, required: The guest wrote last
  - `customer` object, nullable, required: Null on a pre-sale question
    - `id` string, required
    - `name` string, required
    - `email` string, required
  - `last_message` object, nullable, required
    - `id` string, required
    - `body` string, required
    - `direction` string, required
    - `sent_by` string, required
    - `channel` string, required
    - `kind` string, required
    - `created_at` string, required: ISO 8601 timestamp (UTC)
  - `booking` object, nullable, required: The guest's next upcoming booking, else their latest
    - `id` string, required
    - `reference` string, required
    - `starts_at` string, required: ISO 8601 timestamp (UTC)
    - `status` string, required
    - `offering` object, required
      - `name` string, required
      - `kind` 'class' | 'appointment' | 'rental', required: class: sessions with seats, from its calendar · appointment: times from its calendar or weekly hours · rental: inventory over periods
  - `thread` union[], required
    - union
      - object
        - `id` string, required
        - `org_id` string, required
        - `conversation_id` string, nullable, required
        - `booking_id` string, nullable, required: The booking it's about, shown as its chip; null when about the guest in general
        - `customer_id` string, nullable, required: Null on a pre-sale question
        - `direction` 'to_guest' | 'to_outfitter', required: to_guest: the business wrote · to_outfitter: the guest wrote from their booking page, replied by email or asked before booking
        - `subject` string, required: Empty on guest messages
        - `body` string, required
        - `sent_by` 'dashboard' | 'api' | 'mcp' | 'guest' | 'agent', required: agent: the ops agent wrote it (on the system channel)
        - `channel` string, required: How it travelled: page (typed in daybooked), email, api, system, or ask: a question from the booking page's Ask box, where anyone can type any email, so treat it as unverified
        - `kind` 'message' | 'note', required: A note is the business's own, never sent to the guest
        - `read_at` string, nullable, required: ISO 8601 timestamp (UTC)
        - `attachments` object[], required: Files on it, each opened at /api/attachments/{id}
          - `id` string, required
          - `name` string, required
          - `size` integer, required
          - `type` string, required
        - `delivered_at` string, nullable, required: ISO 8601 timestamp (UTC)
        - `failed_at` string, nullable, required: ISO 8601 timestamp (UTC)
        - `from_name` string, nullable, required: Guest messages: the name they gave
        - `from_email` string, nullable, required: Guest messages: the email they gave, where replies go
        - `created_at` string, required: ISO 8601 timestamp (UTC)
        - `booking` object, nullable, required
          - `id` string, required
          - `reference` string, required
          - `starts_at` string, required: ISO 8601 timestamp (UTC)
          - `status` string, required
          - `offering` object, required
            - `name` string, required
            - `kind` 'class' | 'appointment' | 'rental', required: class: sessions with seats, from its calendar · appointment: times from its calendar or weekly hours · rental: inventory over periods
      - object
        - `kind` 'system', required
        - `id` string, required
        - `at` string, required: ISO 8601 timestamp (UTC)
        - `event` 'booking.confirmed' | 'booking.moved' | 'booking.cancelled' | 'booking.nudged' | 'booking.called_off', required: booking.nudged: the guest was reminded to finish a booking they left unpaid. booking.called_off: its time was called off and the guest picks another (sessions.cancel with guests: choose)
        - `booking` object, required
          - `id` string, required
          - `reference` string, required
          - `starts_at` string, required: ISO 8601 timestamp (UTC)
          - `status` string, required
          - `offering` object, required
            - `name` string, required
            - `kind` 'class' | 'appointment' | 'rental', required: class: sessions with seats, from its calendar · appointment: times from its calendar or weekly hours · rental: inventory over periods
        - `previous` object: booking.moved: where it was
          - `starts_at` string, required: ISO 8601 timestamp (UTC)
        - `refunded_cents` integer: booking.cancelled after an online payment, once Stripe confirmed its refund: what went back (all of it, or the part the business chose)

## Other responses

- `default`: Error

---

[API](https://skmtc.dev/daybag/apis/daybooked-io-api.md) · [All operations](https://skmtc.dev/daybag/apis/daybooked-io-api/llms.txt) · [OpenAPI document](https://skmtc.dev/daybag/apis/daybooked-io-api/revisions/1f576dead370?raw)
