--- title: "Memory infrastructure for AI agents" description: "Ingest timestamped text and query its current state, with source evidence." canonical: https://past.dev last-updated: 2026-09-06 --- # Memory infrastructure for AI agents > Send timestamped emails, documents, transcripts, tickets, and chats. past.dev identifies the people, companies, and projects, tracks facts as they change, and returns the current answer with its history and dated sources. **#1 on BEAM at 100K, 1M, and 10M tokens.** [View the methodology.](https://past.dev/benchmarks) **20x cheaper per question than sending 1M tokens of history.** Backed by General Catalyst and Varsity. SOC 2 Type II, ISO 27001, ISO 27701: https://past.dev/security ## Benchmark results - 91.5%: BEAM accuracy at 100K tokens, ranked #1 - 86.2%: BEAM accuracy at 1M tokens, ranked #1 - 82.6%: BEAM accuracy at 10M tokens, ranked #1 - 20.0%: cheaper per question than sending 1M tokens of history ### What this means - **Higher accuracy than a plain LLM and than every published memory system.** [BEAM](https://arxiv.org/abs/2510.27246) is the benchmark for long-term memory in AI agents. On it, past.dev answers more questions correctly than every memory system that has published a result, at every history size from 100K to 10M tokens. A model given the whole history and no memory system scores under 30% at 128K tokens and under 14% at 10M in the benchmark's own paper; past.dev scores 91.5% and 82.6% at those sizes. [The comparison](https://past.dev/benchmarks) - **Lower token costs.** A question through past.dev costs 20x less than sending 1M tokens of history to the model. Your agent answers from memory instead of paying to re-read everything on every call. ### Published BEAM results | System | 100K | 500K | 1M | 10M | Source | | --- | --- | --- | --- | --- | --- | | past.dev | 91.5% | 88.0% | 86.2% | 82.6% | [past.dev](/benchmarks) | | Exabase M-1 | 76.9% | not published | 75.0% | 68.0% | [exabase.io](https://exabase.io/blog/exabase-m1-achieves-state-of-the-art-on-beam-benchmark) | | Hindsight | 73.4% | 71.1% | 73.9% | 64.1% | [hindsight.vectorize.io](https://hindsight.vectorize.io/blog/2026/04/02/beam-sota) | | Honcho | 63.0% | 64.9% | 63.1% | 40.6% | [plasticlabs.ai](https://plasticlabs.ai/blog/research/Benchmarking-Honcho) | | mem0 | not published | not published | 64.1% | 48.6% | [mem0.ai](https://mem0.ai/blog/ai-memory-benchmarks-in-2026) | Each competitor figure is that vendor's own published number, linked above. These are separately published runs rather than one harness. [How to reproduce this](https://past.dev/benchmarks/methodology) Source: https://past.dev/ ## The API - `POST /api/v1/ingest`: raw text plus its original timestamp - `GET /api/v1/ingest/{id}`: check ingestion status and wait for `settled: true` - `DELETE /api/v1/ingest/{id}`: delete a source and facts supported only by that source - `POST /api/v1/recall`: return ranked evidence for your application or model ```bash curl -X POST https://api.past.dev/api/v1/ingest \ -H "Authorization: Bearer $PAST_API_KEY" \ -d '{ "content": "Nadia confirmed the pilot ships March 14. Budget is 32k.", "label": "Account review call", "timestamp": "2026-02-03T09:00:00Z", "units": [{ "kind": "project", "key": "acme-pilot" }], "audience": [12] }' curl -X POST https://api.past.dev/api/v1/ingest \ -H "Authorization: Bearer $PAST_API_KEY" \ -d '{ "content": "Budget for the Acme pilot moved to 40k.", "label": "Email from Nadia", "timestamp": "2026-07-28T16:00:00Z", "units": [{ "kind": "project", "key": "acme-pilot" }], "audience": [12] }' ``` ```bash curl -X POST https://api.past.dev/api/v1/recall \ -H "Authorization: Bearer $PAST_API_KEY" \ -d '{ "query": "what is the Acme pilot budget?" }' ``` ```json { "status": "Supported", "evidence": [ { "content": "Budget for the Acme pilot moved to 40k.", "occurredAt": "2026-07-28T16:00:00Z", "citations": [ { "dataPointId": "call-8821", "dataPointRevision": 2 } ], "export": "[2026-07-28] Budget for the Acme pilot moved to 40k." } ], "arms": { "framework.search": "Completed" } } ``` ## Quickstart past.dev determines which values are current, keeps previous values, cites dated sources, and filters results by audience. 1. **Get a key**: Request access and tell us what you are building. Access is approved manually during early access. After approval, create a project key in the console. 2. **Ingest data**: POST text and its original timestamp to `/api/v1/ingest`. Backfilled data keeps its original date. 3. **Query the data**: POST a question to `/api/v1/recall`. The response contains ranked evidence, sources, and a `status` for supported, conflicted, insufficient, or degraded evidence. ## Included capabilities - **Backdatable ingestion**: Backfill existing data using its original timestamps. - **Audience filtering**: Each data point can include an audience list. Recall filters results by audience. - **Dated evidence**: Every recall result includes dated source evidence. - **Per-call usage**: The console dashboard records each ingest and recall. - **Insufficient-evidence status**: If evidence is insufficient, `/recall` returns `NoKnownSupport` in `status`. - **MCP access**: Connect an MCP client to your past.dev account. Product developers can also call `/recall` from their own MCP server. MCP: The address below is the admin MCP server. It manages your past.dev account from Claude, Claude Code or Cursor. It does not serve memory. Admin endpoint: https://api.past.dev/mcp. For your end users to reach memory over MCP, see the docs. https://past.dev/docs/mcp/overview ## Managed and self-hosted | Component | Managed | Self-hosted | | --- | --- | --- | | API and console | api.past.dev | the past Docker image | | Graph and storage | Operated by past.dev. You run no vector store. | Postgres + pgvector, yours | | Background jobs | Temporal, ours | Temporal, optional profile | | Sign-in | WorkOS AuthKit | Local accounts, your database | Managed and self-hosted deployments use the same API and container images. You can export your data at any time. Self-hosted deployments store memory in your Postgres database. The interfaces are identical in both deployment modes: POST /api/v1/*, api.past.dev/mcp, past.dev/mcp, openapi.json. For self-hosting: Run `docker compose up -d` with pinned public images and your model-provider credentials. Docs: https://past.dev/docs/memory-api/self-hosting ## Why it is different ### Current-state tracking past.dev tracks current and previous values, including their dates and sources. ### Entity resolution past.dev resolves people and organizations during ingestion, then updates those identities as it receives more data. Recall uses the stored identities. ### Published benchmarks The harness runs LoCoMo on corrected keys and BEAM at every size, with baselines and judges in the same table. ## Plans ### Free: $0 For evaluating the API with your own data. - 10,000 credits per month - 1,000 recall calls per month - 1 project - 500 requests per minute ### Flex: $299 / month For an application in production. Credits meter ingestion. Recall calls are unlimited. - 120,000 credits per month - Unlimited recall calls - 5 projects - 750 requests per minute ### Enterprise: Custom Unlimited use of the whole engine, priced against your deployment and your terms rather than against a meter. - Unlimited credits - Unlimited recall calls - Unlimited projects - Unlimited storage and retention Full pricing: https://past.dev/pricing ## Frequently asked questions ### What do I send? Text plus a timestamp: emails, meeting transcripts, Slack messages, support threads, CRM notes, documents. There is no schema to define, no embedding model to choose and no chunking pipeline to build. ### What comes back? `/recall` returns ranked, sourced evidence for your model, each entry rendered in `export`, plus a `status` value: `Supported`, `Conflicted`, `NoKnownSupport` or `UnknownBecauseDegraded`. Insufficient evidence is reported as `NoKnownSupport`. ### How is this different from search or RAG? Search returns text that resembles the question. past.dev returns the current fact and includes dated sources for current and prior values. It resolves identity, time, state and evidence before returning results to your model. ### Whose memory is it? Each project has one connected graph. The same person found in email, a transcript, and Slack resolves to one entity. Each data point can name an audience, and the engine filters retrieval by audience. Audiences are created in the console: a fixed list of user ids, or a rule over the traits on your identities. Use separate projects for separate authorization domains. ### How much does it cost? The Free plan includes 10,000 ingestions and 1,000 recalls per month. The console dashboard shows usage against those limits. Paid tiers are listed on the pricing page. ### How do I get access? The Memory API is in early access with a small group of design partners. Request access and tell us what you are building. ### Is past.dev the same as Past AI? Yes. The name is written past.dev; people also write Past AI, pastdev or past dev. One company, one product: memory infrastructure for AI agents.