Data Formats
HAEVN uses a canonical internal format called HAEVN.Chat to represent conversations from all platforms. This is the format used in JSON exports.
HAEVN.Chat structure
Section titled “HAEVN.Chat structure”{ "id": "uuid-v4", "source": "chatgpt", "sourceId": "original-platform-id", "title": "Conversation title", "createdAt": "2024-01-15T14:23:00.000Z", "modifiedAt": "2024-01-15T15:47:00.000Z", "messages": { "message-id-1": { "id": "message-id-1", "parentId": null, "timestamp": "2024-01-15T14:23:00.000Z", "request": { "kind": "request", "parts": [ { "type": "text", "text": "Hello, can you help me with..." } ] }, "responses": [ { "kind": "response", "parts": [ { "type": "text", "text": "Of course! I'd be happy to help..." } ] } ] } }}Content part types
Section titled “Content part types”Each message part has a type field:
| Type | Description |
|---|---|
text | Plain or Markdown text content |
code | Code block with optional language field |
image | Image — either url (external) or data (base64) |
document | File attachment with name, mimeType, and optionally data |
audio | Audio file or URL |
video | Video file or URL |
thinking | Model thinking/reasoning block |
tool_call | Tool invocation with name and input |
tool_result | Tool output with name and output |
ZIP export structure
Section titled “ZIP export structure”When exporting multiple conversations, HAEVN creates a ZIP with this layout:
export.zip├── chats/│ ├── {chat-id}.json (or .md for Markdown export)│ └── ...└── attachments/ ├── {chat-id}/ │ ├── image-filename.png │ └── document-filename.pdf └── ...HAEVN Markdown import format
Section titled “HAEVN Markdown import format”HAEVN Markdown imports use YAML frontmatter followed by role-delimited message sections.
---title: Example Chatsource: Geminiconversation_id: optional-stable-idcreated_at: 2026-03-26T16:05:00.000Zmodified_at: 2026-03-26T16:10:00.000Zsystem: optional-system-messagemodels_used: - gemini-2.5-pro---
<!-- HAEVN: role="user" -->User message text
<!-- HAEVN: role="assistant" -->Assistant message textFrontmatter fields
Section titled “Frontmatter fields”title(required): chat titlesource(recommended): provider nameconversation_id(optional): stable source identifier; when omitted, HAEVN computes an ID from file contentcreated_at(optional): chat creation timestamp (ISO 8601 string, milliseconds, or numeric string)modified_at(optional): source/provider last-modified timestamp (same accepted formats ascreated_at)system(optional): system prompt/contextmodels_used(optional): list of model names; defaults tounknownwhen omitted
Message section rules
Section titled “Message section rules”- Each section starts with exactly one role marker:
<!-- HAEVN: role="user" --><!-- HAEVN: role="assistant" --><!-- HAEVN: role="system" -->(optional, captured as system context)
- A new section starts at each role marker (
<!-- HAEVN: role="..." -->) - Role marker must be the first non-whitespace line of that message block
---separators between messages are optional (legacy style still tolerated)- Keep body content as valid Markdown