Ingest
Zep builds Context Graphs from the data you provide. Choose a method by the kind of write: a live conversation turn, a bulk or historical import, or an individual write from your application.
This is the Ingest stage of Working with Context. Before designing any import, review Prepare Data for Ingestion to preserve entity identity, source context, and event time.
Choose an ingestion path
Live conversation turns: use the SDK
Add each message to Zep as your agent sends and receives it, using thread.add_messages. The SDK already runs inside the service handling the conversation, and a chat turn needs no preparation beyond the message itself. See Adding messages.
Backfills and bulk imports: use zep-ingest
zep-ingest is the recommended path for a one-time backfill of your history, or a recurring job that prepares records and then ingests them. You put the data in the form the package requires. Built-in loaders take a path or glob. The package prepares, previews, submits in order, and monitors.
Individual writes: use graph.add
When your application already holds the data — a webhook body, an API response, a single document — call graph.add directly. Built-in zep-ingest loaders do not accept in-memory payloads today, so routing those through the package means writing a custom loader yourself; for most event-driven paths the SDK call is simpler. See Adding business data.
When a chunk reads better against earlier chunks of the same source, most often to resolve a pronoun, pass a document_id so Zep groups those chunks for prior-episode context and summarization. Do not share an ID across independent records.
Available methods
Next: shape the graph
After ingesting data, Zep processes it to build Context Graphs. Customize extraction and summaries under Shape the Graph.