# List facts

> Every fact in a scope, newest first. This is the bookkeeping view — to actually recall something, use POST /v1/memory/search, which ranks by meaning.

`GET https://api.zavu.dev/v1/memory`

Every fact in a scope, newest first. This is the bookkeeping view — to actually recall something, use `POST /v1/memory/search`, which ranks by meaning.

## Parameters

- `scope` (query, string): Which scope to address: `contact:<contactId>`, `conversation:<conversationId>`, or omitted for the project scope. Note the asymmetry with `POST /v1/memory` and `POST /v1/memory/search`, which take the scope in the request BODY as `scope` plus `contactId`/`conversationId`. Every other Memory endpoint takes it here.
- `limit` (query, integer)
- `cursor` (query, string): Opaque cursor from a previous response's `nextCursor`. Do not construct it.

## Responses

### 200

Facts in the scope.

- `items` (object[], required)
  - `id` (string, required)
  - `text` (string): The remembered text.
  - `metadata` (object)
    - `{key}` (string)
  - `score` (number): Cosine similarity to the query, 0 to 1, higher being closer. Present on search results only — a list or a single read has no query to score against.
  - `createdAt` (string<date-time>, required)
  - `expiresAt` (string<date-time>)
- `nextCursor` (string, nullable)

### 400

Invalid scope or query parameters.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

### 401

Unauthorized.

- `code` (string, required)
- `message` (string, required)
- `details` (object)

## Example

```bash
curl -X GET "https://api.zavu.dev/v1/memory" \
  -H "Authorization: Bearer $ZAVUDEV_API_KEY"
```

```typescript
import Zavudev from "@zavudev/sdk";

const zavu = new Zavudev({ apiKey: process.env.ZAVUDEV_API_KEY });

const result = await zavu.memory.list();

console.log(result);
```
