---
title: "Load an older page of a conversation's messages"
method: GET
path: "/api/conversations/{id}/messages"
tags: ["Conversations"]
---

# Load an older page of a conversation's messages

`GET /api/conversations/{id}/messages`

## Request

- Base URL: `https://api.setluca.com`
- URL: `https://api.setluca.com/api/conversations/{id}/messages`
- Auth: one of:
  - API key in cookie `luca.session_token`
  - API key in header `x-api-key`
  - HTTP bearer

Pages backward through a thread's history, for threads longer than the window the detail endpoint returns.

**API key scopes:** `conversations:read`.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `before` string
- `limit` integer

## Headers

- `Luca-API-Version` '1'

## Response `200`

ok

- ConversationMessagesResponse
  - `messages` object[], required
    - `id` string, uuid, required
    - `conversationId` string, uuid, required
    - `coachId` string, uuid, required
    - `leadId` string, uuid, required
    - `channel` 'telegram' | 'instagram' | 'messenger' | 'whatsapp', required
    - `providerMessageId` string, required
    - `direction` 'inbound' | 'outbound', required
    - `sourceType` 'dm' | 'comment' | 'story_reply' | 'story_mention'
    - `body` string, required
    - `mediaUrls` string[], required
    - `media` object[]
      - `id` string, required
      - `mediaType` 'audio' | 'image' | 'file', required
      - `url` string, required
      - `status` 'pending' | 'completed' | 'failed' | 'skipped' | 'blocked' | 'cancelled', required
      - `safetyStatus` 'safe' | 'needs_review' | 'blocked', required
      - `transcript` string, nullable
      - `processingReason` string, nullable
      - `retry` object, nullable
        - `eligible` boolean, required
        - `active` boolean, required
        - `attemptsUsed` integer, required
        - `attemptsRemaining` integer, required
        - `unavailableReason` 'retry_active' | 'retry_exhausted' | 'original_missing' | 'cancelled' | 'not_retryable' | 'null', nullable, required
    - `rawPayload` unknown, required
    - `reviewQueueId` string, uuid, nullable, required
    - `replyAuthor` 'coach' | 'luca' | 'null', nullable
    - `outboundContentId` string, uuid, nullable, required
    - `outboundContentPosition` integer, nullable, required
    - `status` 'queued' | 'sent' | 'delivered' | 'read' | 'failed' | 'blocked_freeform_window' | 'blocked_instagram_messaging_window' | 'blocked_instagram_comment_reply_window' | 'blocked_messenger_messaging_window' | 'blocked_public_reply_link' | 'blocked_rate_limit' | 'blocked_channel_account_paused' | 'blocked_channel_account_suspended' | 'blocked_channel_account_disconnected' | 'blocked_channel_account_reconnect_required' | 'blocked_channel_account_health_red' | 'blocked_channel_account_status_unknown' | 'partially_sent', required
    - `failedReason` string, nullable, required
    - `delivery` object, nullable, required
      - `state` 'sending' | 'sent' | 'delivered' | 'read' | 'failed_retryable' | 'failed_not_retryable' | 'failed_account_blocked' | 'delivery_unknown', required
      - `accountIssue` 'paused' | 'suspended' | 'disconnected' | 'reconnect_required' | 'health_red' | 'status_unknown' | 'null', nullable, required
    - `sentParts` integer, nullable, required
    - `partialRetry` 'available' | 'queued' | 'unsafe' | 'unavailable' | 'null', nullable, required
    - `receivedAt` string, nullable, required
    - `sentAt` string, nullable, required
    - `deliveredAt` string, nullable, required
    - `readAt` string, nullable, required
  - `nextCursor` string, nullable, required

## Other responses

- `401`: unauthorized
- `404`: not found
- `429`: rate limited
- `500`: internal error
- `503`: service unavailable

---

[API](https://skmtc.dev/setluca/apis/luca-api.md) · [All operations](https://skmtc.dev/setluca/apis/luca-api/llms.txt) · [OpenAPI document](https://skmtc.dev/setluca/apis/luca-api/revisions/90a200e4100b?raw)
