---
title: "Get a direct message conversation"
method: GET
path: "/v1/inbox/conversations/{conversationId}"
tags: ["Inbox"]
---

# Get a direct message conversation

`GET /v1/inbox/conversations/{conversationId}`

## Request

- Base URL: `https://api.postzen.dev`
- URL: `https://api.postzen.dev/v1/inbox/conversations/{conversationId}`
- Auth: HTTP bearer

Returns one thread, refreshing PostZen’s stored copy from the platform first. Read-only and read-write API keys are accepted.

## Query parameters

- `accountId` string, required

## Response `200`

Conversation returned.

- InboxConversationResponse
  - `data` InboxConversation, required
    - `id` string, required: The platform's own conversation (thread) id. This is the `conversationId` every other conversation endpoint takes, not a PostZen document id.
    - `platform` 'instagram', required: Platform the thread lives on.
    - `accountId` string, required: PostZen account id the thread belongs to.
    - `accountUsername` string, required: Username of that connected account, so a multi-account list needs no second lookup.
    - `participantId` string: The other party's platform id (the IGSID on Instagram). Absent when the platform did not name the participant.
    - `participantName` string
    - `participantUsername` string
    - `participantPicture` string, uri
    - `participants` object[]: Every party on the thread, including the connected account itself. Present when the platform returned the participant edge.
      - `id` string, required
      - `name` string
      - `username` string
    - `lastMessage` string: Text of the most recent message PostZen has synced, when the platform reported one cheaply.
    - `lastMessageAt` string, date-time
    - `updatedTime` string, date-time, required: The platform's own last-activity time for the thread. This is the list sort key.
    - `status` 'active' | 'archived', required: PostZen-local state. Meta has no archive API, so archiving affects PostZen only and is never overwritten by a sync.
    - `unreadCount` integer, required: Incoming messages newer than the local read watermark. Marking the thread read sets it to 0 and a later sync cannot resurrect a stale count.
    - `url` string, uri: Deep link into the platform's own inbox, when the platform reports one. Instagram has no equivalent, so it is currently always absent.

## Other responses

- `400`: A parameter is missing or malformed — a plain `{ error }` body — or the account is not on a platform direct messages support (`platformUnsupported`).
- `401`: Missing or invalid API key.
- `403`: The account is outside the API key's profile access (`forbidden`), or the connection is missing the messaging scope this call needs (`platformCapabilityMissing`). Reconnect the account to grant it.
- `404`: No such account (`accountNotFound`) or no such conversation for that account (`conversationNotFound`).
- `424`: The connection needs to be reauthorized before its messages can be read (`connectionDead`).
- `429`: Rate limit exceeded. Retry after the interval indicated by the `Retry-After` header.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/postzen/apis/postzen-public-api.md) · [All operations](https://skmtc.dev/postzen/apis/postzen-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/postzen/apis/postzen-public-api/revisions/40863e3710ec?raw)
