# Quickstart

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

Product: Revo Memory API. Source: https://www.revo.ai/docs/memory-api/quickstart

- **Base URL**: `https://api.revo.ai`
- **Auth header**: `Authorization: Bearer $REVO_API_KEY`

There is no SDK to install, no schema to design and nothing to host, so the whole integration is five HTTP calls against one bearer token. Most people are through this page in five minutes, and it is small enough to hand to a coding agent as a single task: point it at this page and it can wire all five.

**cURL**

```curl
# 1. Push a fact. Timestamps are backdatable, so history lands on its real dates.
curl -X POST https://api.revo.ai/ingest \
  -H "Authorization: Bearer $REVO_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.revo.ai/ingest \
  -H "Authorization: Bearer $REVO_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.revo.ai/ingest/f8a2d5c0b7e94d21a6c4 \
  -H "Authorization: Bearer $REVO_API_KEY"

# 4. Ask in natural language.
curl -X POST https://api.revo.ai/answer \
  -H "Authorization: Bearer $REVO_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.revo.ai/answer \
  -H "Authorization: Bearer $REVO_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.revo.ai/ingest
Authorization: Bearer {{REVO_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.revo.ai/ingest
Authorization: Bearer {{REVO_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.revo.ai/ingest/f8a2d5c0b7e94d21a6c4
Authorization: Bearer {{REVO_API_KEY}}

### 4. Ask in natural language.
POST https://api.revo.ai/answer
Authorization: Bearer {{REVO_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.revo.ai/answer
Authorization: Bearer {{REVO_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.revo.ai/ingest \
  Authorization:"Bearer $REVO_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.revo.ai/ingest \
  Authorization:"Bearer $REVO_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.revo.ai/ingest/f8a2d5c0b7e94d21a6c4 \
  Authorization:"Bearer $REVO_API_KEY"

# 4. Ask in natural language.
http POST api.revo.ai/answer \
  Authorization:"Bearer $REVO_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.revo.ai/answer \
  Authorization:"Bearer $REVO_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 /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 /ingest/{ingestionId}` until `settled` is true.