---
title: "List direct-message conversations"
method: GET
path: "/api/v1/messages"
tags: ["Messages"]
---

# List direct-message conversations

`GET /api/v1/messages`

## Request

- Base URL: `https://app.tryadeli.com`
- URL: `https://app.tryadeli.com/api/v1/messages`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/adeli/apis/adeli-api/docs/api/v1/messages/get.ts> (a function with typed inputs; its response is checked against the schema)

Without conversationKey, every message for the profile, account or platform, oldest first. With conversationKey (which requires accountId; 400 invalid_request otherwise), one conversation read from the history Adeli stores: the newest `limit` messages (default 50, at most 100) before `cursor`, oldest first within the page, and `nextCursor` toward older messages (null at the start of the conversation). Each message carries its conversationKey.

## Query parameters

- `platform` 'instagram' | 'tiktok' | 'tiktok_ads' | 'facebook' | 'meta_ads' | 'whatsapp' | 'youtube' | 'x' | 'bluesky' | 'linkedin' | 'linkedin_ads'
- `accountId` string, uuid
- `profileId` string, uuid
- `conversationKey` string
- `cursor` string
- `limit` integer

## Response `200`

Success

- object
  - `status` 'complete' | 'partial', required
  - `messages` object[], required
    - `id` string, required
    - `providerId` string, nullable, required
    - `platform` 'instagram' | 'facebook' | 'whatsapp', required
    - `accountId` string, uuid, required
    - `profileId` string, uuid, required
    - `direction` 'inbound' | 'outbound', required
    - `type` 'text' | 'template' | 'unsupported', required
    - `recipient` string, nullable, required
    - `sender` string, nullable, required
    - `body` string, required
    - `status` string, required
    - `occurredAt` string, date-time, required
    - `createdAt` string, date-time, required
    - `conversationKey` string, nullable: `<platform>:<counterparty id>` (an IGSID, a PSID, or a WhatsApp wa_id in digits), scoped to accountId: with accountId it identifies one conversation. Pass it to listMessages to read that conversation. Null when the counterparty is unknown; optional so clients built before it existed still type-check.
  - `errors` object[], required
    - `platform` 'instagram' | 'tiktok' | 'tiktok_ads' | 'facebook' | 'meta_ads' | 'whatsapp' | 'youtube' | 'x' | 'bluesky' | 'linkedin' | 'linkedin_ads', required
    - `accountId` string, required
    - `code` string, required
    - `message` string, required
    - `details` unknown
  - `nextCursor` string, nullable: Present only when conversationKey is given: pass it as cursor for the next, older page; null when there are no older messages.

## Other responses

- `207`: Success
- `400`: Invalid request or provider failure
- `401`: Missing or invalid API key
- `403`: The connection lacks a permission or provider-confirmed resource
- `404`: Profile, account, or object not found
- `422`: The connected account cannot perform this operation
- `502`: Invalid request or provider failure

---

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