Exporting Data

Export channels and users to retrieve messages, metadata, and associated data. All exports run asynchronously and return a task ID for tracking status.

Note:

All export endpoints require server-side authentication.

Exporting Channels

// Export a single channel
const response = await client.chat.exportChannels({
  channels: [
    {
      type: "livestream",
      id: "white-room",
      messages_since: new Date("2020-11-10T09:30:00.000Z"),
      messages_until: new Date("2020-11-10T11:30:00.000Z"),
    },
  ],
  include_truncated_messages: true,
  include_soft_deleted_channels: true,
});

const taskId = response.task_id;

// Export multiple channels
const multiResponse = await client.chat.exportChannels({
  channels: [
    {
      type: "livestream",
      id: "white-room",
      messages_since: new Date("2020-11-10T09:30:00.000Z"),
      messages_until: new Date("2020-11-10T11:30:00.000Z"),
    },
    {
      type: "livestream",
      id: "white-room2",
    },
  ],
  include_truncated_messages: true,
  include_soft_deleted_channels: true,
});
const multiTaskId = multiResponse.task_id;

Channel Export Options

Parameter Description
type Channel type (required)
id Channel ID (required)
messages_since Export messages after this timestamp (RFC3339 format)
messages_until Export messages before this timestamp (RFC3339 format)
include_truncated_messages Include messages that were truncated (default: false)
include_soft_deleted_channels Include soft-deleted channels (default: false)
version Export format: v1 (default) or v2 (line-separated JSON)
Info:

A single request can export up to 25 channels.

Export Format (v2)

Add version: "v2" for line-separated JSON output, where each entity appears on its own line.

const response = await client.chat.exportChannels({
  channels: [{ type: "livestream", id: "white-room" }],
  version: "v2",
});

Checking Export Status

Poll the task status using the returned task ID. When the task completes, the response includes a URL to download the JSON export file.

const response = await client.getTask({ id: taskId });

console.log(response.status); // Task status
console.log(response.result); // Result object (when completed)
console.log(response.result?.url); // Download URL (when completed)
console.log(response.error); // Error description (if failed)
Info:
  • Download URLs expire after 24 hours but are regenerated on each status request
  • Export files remain available for 60 days
  • Timestamps use UTC in RFC3339 format (e.g., 2021-02-17T08:17:49.745857Z)

Exporting Users

Export user data including messages, reactions, calls, and custom data. The export uses line-separated JSON format (same as channel export v2).

const response = await client.exportUsers({
  user_ids: [user1.id, user2.id],
});
const taskId = response.task_id;
Info:

A single request can export up to 25 users with a maximum of 10,000 messages per user. Contact support to export users with more than 10,000 messages.

Checking Export Status

const response = await client.getTask({ id: taskId });

if (response.status === "completed") {
  console.log(response.result?.url);
}