# List Conversations — Dify

> List a Dify Chatflow, Chatbot, Agent, or Legacy Agent app's conversations, most recently active first. Conversations are scoped by User, so pass the same value used to create those conversations to see that end user's threads. Example…

- Key: `dify-list-conversations`
- Type: Action (Read-only)
- Version: 0.0.1
- App: Dify (`dify`) — https://pipedream.com/apps/dify.md
- This page (HTML): https://pipedream.com/apps/dify/actions/list-conversations
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/dify/actions/list-conversations/list-conversations.mjs

## Description

List a Dify Chatflow, Chatbot, Agent, or Legacy Agent app's conversations, most recently active first. Conversations are scoped by `User`, so pass the same value used to create those conversations to see that end user's threads. Example: `User` `user-123`, `Limit` `20` → `{ data: [{ id, name: "iPhone Specs Chat", inputs, status: "normal", created_at, updated_at }], has_more: true, limit: 20 }`. If `has_more` is `true`, call again with `Last Conversation ID` set to the `id` of the last conversation in `data`. Pass a conversation's `id` to **List Messages** to read it. [See the documentation](https://docs.dify.ai/en/api-reference/conversations/list-conversations)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `user` | `string` | Yes | A unique identifier for the end user, defined by you (e.g. an internal user ID or session ID) — not a Dify account. Dify scopes conversations, messages, and files to this value, so reuse the same User across requests for the same end user. When reading conversations or messages, this must match the User value used when they were created — Dify returns an empty page, not an error, for a mismatched value. For List Conversations and List Messages, Dify has no endpoint to list end users: use the User value from the user's request, or ask for it. See the documentation |
| `lastId` | `string` | No | Pagination cursor: the id of the last conversation from the previous page's results. Omit to fetch the first page. |
| `limit` | `integer` | No | Number of results to return per page, between 1 and 100. Defaults to 20. |
| `sortBy` | `string` | No | Field to sort results by. Defaults to -updated_at (most recently updated first). |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "dify",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "dify-list-conversations",
  arguments: {
    user: "User",
    lastId: "Last Conversation ID",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "dify-list-conversations",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    dify: { authProvisionId: "apn_xxxxxxx" },
    user: "User",
    lastId: "Last Conversation ID",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "dify-list-conversations",
    "configured_props": {
      "dify": { "authProvisionId": "apn_xxxxxxx" },
      "user": "User",
      "lastId": "Last Conversation ID"
    }
  }'
```

---

- App: https://pipedream.com/apps/dify.md · All apps: https://pipedream.com/apps
