Switching clouds? Get up to $10K in credits + hands-on help.
Apply nowWhy deploy graphiti render on Render?
Graphiti is a temporal knowledge-graph API that turns streams of conversations or events into a queryable graph, tracking when each fact was true. It solves the problem of giving AI agents persistent memory that evolves over time: instead of overwriting outdated facts, it invalidates them and records new ones, so an agent can query both current and historical state. This template deploys the backend (a REST API backed by a FalkorDB graph store) as a hosted service with no web UI.
This template wires Graphiti's FastAPI service to a FalkorDB graph store as a Render private service—meaning the database has no public address and only accepts traffic from your API over Render's private network, so you skip the manual work of network isolation, firewall rules, and connection wiring. The render.yaml provisions both services as a single project with the Redis-protocol connection between them pre-configured and a 10 GB append-only disk attached to FalkorDB, so the only thing you supply is your OPENAI_API_KEY. Instead of standing up a graph database, containerizing the API, and securing the link between them yourself, you get a live HTTPS endpoint your agents can write to in one click.
Architecture
What you can build
After deploying, you'll have a live HTTPS API at a Render URL that your agent code, scripts, or frameworks like LangGraph can call to store conversations and events as a temporal knowledge graph. You POST episodes to /messages, and Graphiti extracts entities and facts in the background, tracking when each fact became true and invalidating old ones as things change rather than overwriting them. This lets you query both what's true now and what was true at any past point in time—asking who led a team last quarter versus today and getting distinct, timestamped answers. Note that the API ships without authentication, so you'll need to put it behind your own auth before sending real traffic.
Key features
- Bitemporal fact tracking: Facts are versioned with valid_at/invalid_at timestamps so old facts are invalidated rather than overwritten, letting you query state at any point in time.
- Two-service private architecture: Deploys a public FastAPI service plus a FalkorDB private service reachable only over Render's internal network on port 6379, with no public database exposure.
- Asynchronous ingestion queue: The /messages endpoint queues episodes and returns immediately while entity and fact extraction runs in the background via LLM calls.
- Pinned graphiti-core version: The library version is pinned via the GRAPHITI_VERSION build arg in the Dockerfile so forks and local docker compose builds match Render exactly, overridable per-service through an env var.
- Configurable LLM concurrency: SEMAPHORE_LIMIT caps concurrent OpenAI calls during ingestion (default 10) to avoid tripping rate limits on fresh API keys, and MODEL_NAME lets you swap the OpenAI model id.
Use cases
- AI agent developer giving a chatbot persistent, searchable long-term memory
- Support engineer tracking who owned an account across team reassignments
- LangGraph builder adding temporal fact recall to autonomous research agents
- CRM integrator querying what was true about clients last quarter
What's included
Service | Type | Purpose |
|---|---|---|
falkordb-data | Private Service | Application service |
graphiti-api | Web Service | Handles API requests and business logic |
Prerequisites
- OpenAI API Key: Authorizes Graphiti to call OpenAI for extracting entities and facts from each episode and embedding them for search.
Next steps
- Curl $GRAPHITI_URL/healthcheck against your live graphiti-api URL — You should get back {"status":"healthy"}, confirming the API and its FalkorDB private service are wired up and reachable
- Ingest the sample episode with curl -X POST $GRAPHITI_URL/messages -d @examples/render/sample-episode.json, then wait 10–30 seconds — You should get {"message":"Messages added to processing queue","success":true} immediately, and curl "$GRAPHITI_URL/episodes/demo?last_n=5" should then list the Alex/Priya handover episodes
- Search the extracted facts with curl -X POST $GRAPHITI_URL/search -d '{"group_ids":["demo"],"query":"who leads the payments team?","max_facts":10}' — You should see both 'Alex leads the payments team' (valid_at 2026-05-04) and 'Priya now leads the payments team' (valid_at 2026-07-13), proving the temporal graph kept both facts instead of overwriting
Resources
Repository
Stack
Tags
For AI agents
Drop into your coding agent to explore and deploy this template.