> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cognee.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Ingestion

> Endpoints for uploading and updating data in Cognee Cloud

These endpoints add data to your Cognee Cloud tenant. All require authentication via API key.

For the underlying concepts, see [Remember](/core-concepts/main-operations/remember) and [Add](/core-concepts/main-operations/legacy-operations/add).

## Remember

**`POST /api/v1/remember`** — Ingest data and build the knowledge graph in a single call.

Combines the add and cognify steps. Equivalent to calling `cognee.remember()` in the Python SDK. Accepts multipart form data. For most workflows, `remember` is the simplest entry point; use the lower-level `add` + `cognify` operations separately when you need to upload multiple files before triggering processing.

```bash theme={null}
curl -X POST https://your-tenant.aws.cognee.ai/api/v1/remember \
  -H "X-Api-Key: your-key" \
  -F "data=@document.pdf" \
  -F "datasetName=my_dataset"
```

| Parameter           | Type      | Required | Description                                                                                                                                            |
| ------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `data`              | file(s)   | yes      | One or more files to upload                                                                                                                            |
| `datasetName`       | string    | no       | Target dataset name                                                                                                                                    |
| `datasetId`         | UUID      | no       | Existing dataset UUID                                                                                                                                  |
| `session_id`        | string    | no       | Session identifier for grouping operations                                                                                                             |
| `node_set`          | string\[] | no       | Node identifiers                                                                                                                                       |
| `run_in_background` | boolean   | no       | Run asynchronously (default: `false`)                                                                                                                  |
| `custom_prompt`     | string    | no       | Custom extraction prompt                                                                                                                               |
| `chunks_per_batch`  | integer   | no       | Chunks per batch (default: `10`)                                                                                                                       |
| `graph_model`       | string    | no       | JSON-serialised graph model schema (same format as cognify), including a top-level `title` key. Leave empty to use the default `KnowledgeGraph` model. |
| `content_type`      | string    | no       | Set to `skills` to ingest SKILL.md files as Skill nodes. Only `skills` is supported; leave empty for normal ingestion.                                 |

On a completed run, the response includes `items_processed` — the count of successfully ingested items (entries whose pipeline run did not error).

### Error responses

| Status | When                                                                                                                                                                                                                                           |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | Neither `datasetName` nor `datasetId` was provided, an unsupported `content_type` was sent (anything other than empty or `skills`), or `graph_model` was not valid JSON or could not be converted to a graph model schema.                     |
| `402`  | The configured LLM provider (or LiteLLM proxy) reported that its token budget is exhausted. The response body is `{"error": "Token budget exhausted", "detail": "..."}`. Handle 402 by surfacing a top-up / billing flow rather than retrying. |
| `409`  | The remember run failed during processing, or a blocking (non-background) run finished in an `errored` state. The response body carries the underlying pipeline or validation error message.                                                   |

<Note>
  A `graph_model` that is invalid JSON or cannot be converted to a schema is now rejected with `400` rather than being silently ignored. Empty optional fields (`content_type`, `graph_model`, `session_id`, `node_set` entries) are treated as omitted.
</Note>

## Lower-level operations

The following endpoints provide more granular control over data ingestion. Most users should prefer `remember` above.

### Add

**`POST /api/v1/add`** — Upload files to a dataset without processing.

Accepts multipart form data. Files are stored in the dataset but not yet processed into the knowledge graph — call [cognify](/cognee-cloud/functionality/knowledge-processing#cognify) separately.

```bash theme={null}
curl -X POST https://your-tenant.aws.cognee.ai/api/v1/add \
  -H "X-Api-Key: your-key" \
  -F "data=@document.pdf" \
  -F "datasetName=my_dataset"
```

Supported file types:

* **Documents** — PDF, TXT, Markdown, CSV, JSON, DOCX, PPTX
* **Images** — PNG, JPG, JPEG, GIF, WEBP, TIFF, BMP, and more, extracted via the tenant's configured vision model
* **Audio** — MP3, WAV, M4A, OGG, FLAC, and more, transcribed to text

Images and audio are converted to text using the tenant's configured LLM before the knowledge graph is built, so they are ingested the same way as text documents. The same file types apply to `POST /api/v1/remember`.

### Update

**`PATCH /api/v1/update`** — Replace an existing document in a dataset.

Accepts multipart form data. Requires both the data item ID and dataset ID as query parameters.

```bash theme={null}
curl -X PATCH "https://your-tenant.aws.cognee.ai/api/v1/update?data_id=<uuid>&dataset_id=<uuid>" \
  -H "X-Api-Key: your-key" \
  -F "data=@updated_document.pdf"
```

| Parameter    | Location | Type      | Required | Description                               |
| ------------ | -------- | --------- | -------- | ----------------------------------------- |
| `data_id`    | query    | UUID      | yes      | ID of the document to replace             |
| `dataset_id` | query    | UUID      | yes      | ID of the dataset containing the document |
| `data`       | form     | file(s)   | yes      | Replacement file(s)                       |
| `node_set`   | form     | string\[] | no       | Node identifiers                          |
