---
title: "Quickstart"
description: "Five calls, about five minutes: push a fact, push its update, wait for the feed to settle, ask two questions."
canonical: https://past.dev/docs/memory-api/quickstart
last-updated: 2026-08-26
---
# Quickstart

> Five calls, about five minutes: push a fact, push its update, wait for the feed to settle, ask two questions.

Product: past.dev Memory API. Source: https://past.dev/docs/memory-api/quickstart

- **Base URL**: `https://api.past.dev/api/v1`
- **Auth header**: `Authorization: Bearer $PAST_API_KEY`

There is no SDK to install, no schema to design and nothing to host: the whole integration is five HTTP calls against one bearer token. The token comes from [authentication](/docs/memory-api/authentication), and every failure shape is in [errors](/docs/memory-api/errors). The quickstart takes about five minutes.

**cURL**

```curl
# 1. Push a fact. Timestamps are backdatable, so history lands on its real dates.
curl -X POST https://api.past.dev/api/v1/ingest \
  -H "Authorization: Bearer $PAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "Nadia confirmed the pilot ships March 14. Budget is 32k.",
        "label": "Account review call",
        "timestamp": "2026-02-03T09:00:00Z",
        "group": "acme-pilot" }'

# 2. Push its update, five months later.
curl -X POST https://api.past.dev/api/v1/ingest \
  -H "Authorization: Bearer $PAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "Budget for the Acme pilot moved to 40k.",
        "label": "Email from Nadia",
        "timestamp": "2026-07-28T16:00:00Z",
        "group": "acme-pilot" }'

# 3. Poll the second ingestionId. The queue is FIFO, so once the last id
#    is settled the whole feed is applied.
curl https://api.past.dev/api/v1/ingest/7d9f2b6a-4c1e-4f8a-9b3d-2e5c8a1f6d40 \
  -H "Authorization: Bearer $PAST_API_KEY"

# 4. Ask in natural language.
curl -X POST https://api.past.dev/api/v1/answer \
  -H "Authorization: Bearer $PAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "when does the Acme pilot ship?" }'

# 5. Ask about the fact that changed. Expect: "40k. It moved from 32k on
#    July 28; Nadia confirmed the original 32k on the February 3 account
#    review call."
curl -X POST https://api.past.dev/api/v1/answer \
  -H "Authorization: Bearer $PAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "what is the Acme pilot budget?" }'
```

**HTTP**

```http
### 1. Push a fact. Timestamps are backdatable, so history lands on its real dates.
POST https://api.past.dev/api/v1/ingest
Authorization: Bearer {{PAST_API_KEY}}
Content-Type: application/json

{
  "content": "Nadia confirmed the pilot ships March 14. Budget is 32k.",
  "label": "Account review call",
  "timestamp": "2026-02-03T09:00:00Z",
  "group": "acme-pilot"
}

### 2. Push its update, five months later.
POST https://api.past.dev/api/v1/ingest
Authorization: Bearer {{PAST_API_KEY}}
Content-Type: application/json

{
  "content": "Budget for the Acme pilot moved to 40k.",
  "label": "Email from Nadia",
  "timestamp": "2026-07-28T16:00:00Z",
  "group": "acme-pilot"
}

### 3. Poll the second ingestionId. The queue is FIFO, so once the last id is settled the whole feed is applied.
GET https://api.past.dev/api/v1/ingest/7d9f2b6a-4c1e-4f8a-9b3d-2e5c8a1f6d40
Authorization: Bearer {{PAST_API_KEY}}

### 4. Ask in natural language.
POST https://api.past.dev/api/v1/answer
Authorization: Bearer {{PAST_API_KEY}}
Content-Type: application/json

{ "query": "when does the Acme pilot ship?" }

### 5. Ask about the fact that changed. Expect: "40k. It moved from 32k on July 28; Nadia confirmed the original 32k on the February 3 account review call."
POST https://api.past.dev/api/v1/answer
Authorization: Bearer {{PAST_API_KEY}}
Content-Type: application/json

{ "query": "what is the Acme pilot budget?" }
```

**HTTPie**

```httpie
# 1. Push a fact. Timestamps are backdatable, so history lands on its real dates.
http POST api.past.dev/api/v1/ingest \
  Authorization:"Bearer $PAST_API_KEY" \
  content="Nadia confirmed the pilot ships March 14. Budget is 32k." \
  label="Account review call" \
  timestamp=2026-02-03T09:00:00Z \
  group=acme-pilot

# 2. Push its update, five months later.
http POST api.past.dev/api/v1/ingest \
  Authorization:"Bearer $PAST_API_KEY" \
  content="Budget for the Acme pilot moved to 40k." \
  label="Email from Nadia" \
  timestamp=2026-07-28T16:00:00Z \
  group=acme-pilot

# 3. Poll the second ingestionId. The queue is FIFO, so once the last id
#    is settled the whole feed is applied.
http api.past.dev/api/v1/ingest/7d9f2b6a-4c1e-4f8a-9b3d-2e5c8a1f6d40 \
  Authorization:"Bearer $PAST_API_KEY"

# 4. Ask in natural language.
http POST api.past.dev/api/v1/answer \
  Authorization:"Bearer $PAST_API_KEY" \
  query="when does the Acme pilot ship?"

# 5. Ask about the fact that changed. Expect: "40k. It moved from 32k on
#    July 28; Nadia confirmed the original 32k on the February 3 account
#    review call."
http POST api.past.dev/api/v1/answer \
  Authorization:"Bearer $PAST_API_KEY" \
  query="what is the Acme pilot budget?"
```

**Python**: There is no Python client yet. Call the endpoints directly with `httpx` or `requests` in the meantime: the shapes are in the API reference, and the polling loop is a `GET /api/v1/ingest/{ingestionId}` until `settled` is true.

**C#**: There is no C# client yet. Call the endpoints directly with `HttpClient` in the meantime: the shapes are in the API reference, and the polling loop is a `GET /api/v1/ingest/{ingestionId}` until `settled` is true.