πΎ Import & Export
Open WebUI provides tools to backup your chat history and restore it later, or migrate conversations from other platforms.
Accessing Import & Exportβ
- Click on your profile name or avatar in the bottom-left corner of the sidebar.
- Select Settings from the menu.
- Navigate to the Data Controls tab.
- Use the Import Chats or Export Chats buttons.
Exporting Chatsβ
Click the Export Chats button to download all your conversations as a JSON file. This backup includes:
- All chat messages and their metadata
- Model information used in each conversation
- Timestamps and conversation structure
It's a good practice to periodically export your chats, especially before major updates or migrations.
Importing Chatsβ
Click the Import Chats button and select a JSON file to restore conversations. Open WebUI supports importing from:
- Open WebUI exports: Native JSON format from previous exports
- ChatGPT exports: Conversations exported from OpenAI's ChatGPT (auto-detected and converted)
- Custom JSON files: Any JSON file that follows the expected structure documented below
Import Behaviorβ
- Imported chats are added to your existing conversations (they don't replace them)
- Each imported chat receives a new unique ID, so re-importing the same file will create duplicates
- If using ChatGPT exports, the format is automatically detected and converted
Chat Import JSON Schemaβ
The import file must be a JSON array of chat objects. There are two accepted formats: the standard format (used by Open WebUI exports) and a legacy format.
Standard Format (Recommended)β
Each object in the array should have a chat key containing the conversation data:
[
{
"chat": {
"title": "My Conversation",
"models": ["llama3.2"],
"history": {
"currentId": "message-id-2",
"messages": {
"message-id-1": {
"id": "message-id-1",
"parentId": null,
"childrenIds": ["message-id-2"],
"role": "user",
"content": "Hello, how are you?",
"timestamp": 1700000000
},
"message-id-2": {
"id": "message-id-2",
"parentId": "message-id-1",
"childrenIds": [],
"role": "assistant",
"content": "I'm doing well, thank you!",
"model": "llama3.2",
"done": true,
"timestamp": 1700000005
}
}
}
},
"meta": {
"tags": ["greeting"]
},
"pinned": false,
"folder_id": null,
"created_at": 1700000000,
"updated_at": 1700000005
}
]Legacy Formatβ
If the objects in the array do not have a chat key, the entire object is treated as the chat data itself (i.e. the object is wrapped in { "chat": <object> } automatically):
[
{
"title": "My Conversation",
"models": ["llama3.2"],
"history": {
"currentId": "message-id-2",
"messages": {
"message-id-1": {
"id": "message-id-1",
"parentId": null,
"childrenIds": ["message-id-2"],
"role": "user",
"content": "Hello!"
},
"message-id-2": {
"id": "message-id-2",
"parentId": "message-id-1",
"childrenIds": [],
"role": "assistant",
"content": "Hi there!",
"model": "llama3.2",
"done": true
}
}
}
}
]Field Referenceβ
Top-Level Chat Object (Standard Format)β
| Field | Type | Required | Description |
|---|---|---|---|
chat | object | β | The conversation data (see Chat Data below) |
meta | object | β | Metadata such as tags (array of strings). Defaults to {} |
pinned | boolean | β | Whether the chat is pinned. Defaults to false |
folder_id | string | null | β | ID of the folder to place the chat in. Defaults to null |
created_at | integer | null | β | Unix timestamp (seconds) for when the chat was created |
updated_at | integer | null | β | Unix timestamp (seconds) for when the chat was last updated |
Chat Data Objectβ
| Field | Type | Required | Description |
|---|---|---|---|
title | string | β | The conversation title. Defaults to "New Chat" |
models | string[] | β | List of model identifiers used in the conversation |
history | object | β | Contains the message tree (see History below) |
options | object | β | Chat-level options/parameters |
History Objectβ
| Field | Type | Required | Description |
|---|---|---|---|
currentId | string | β | ID of the last message in the active conversation branch |
messages | object | β | A map of message ID β message object (see Message below) |
Message Objectβ
| Field | Type | Required | Description |
|---|---|---|---|
id | string | β | Unique identifier for the message |
parentId | string | null | β | ID of the parent message, or null for the first message |
childrenIds | string[] | β | Array of child message IDs. Empty array [] for the last message |
role | string | β | Either "user" or "assistant" |
content | string | β | The message text (supports Markdown) |
model | string | β | Model identifier (relevant for assistant messages) |
done | boolean | β | Whether the response is complete |
timestamp | integer |