# Import past conversations

> Start review before connecting anything live: upload a file, or pull from Langfuse or LangSmith.

Admins import from the **Connect** page. Keys you enter are used for that one import and never stored. Importing the same conversation again refreshes it and keeps its review.

## Files

| Format | Shape |
| --- | --- |
| JSONL or JSON | `{"id", "messages": [...]}` with OpenAI or Anthropic messages, including tool calls |
| JSONL or JSON | `{"input": "...", "output": "..."}`, one exchange per record |
| JSONL or JSON | Our conversation format: `{"id", "channel", "events": [...]}` |
| CSV | `conversation_id, role, content` columns, one message per row |
| CSV | `input, output` columns, one exchange per row |

```json
{"id": "conv-123", "messages": [{"role": "user", "content": "Can I still change my delivery address?"}, {"role": "assistant", "content": "Yes, it has not shipped yet. What is the new address?"}]}
```

Up to 200 conversations and 3.5 MB per upload. A record that cannot be read is listed with the reason, and the rest are imported.

## Langfuse

Your project's public and secret keys. Cloud by default; a self-hosted deployment needs a public https address. Generations are grouped by session, else by trace.

## LangSmith

An API key and the project name. LLM runs are grouped by `thread_id`, `session_id` or `conversation_id` metadata, else by trace.
