> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.eyelevel.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.eyelevel.ai/_mcp/server.

# Ingesting Directories

Use **`ingest_directory`** in the [Python SDK](/sdks/ground-x-sd-ks) to upload a folder of local documents.

[Supported Document Types and Ingest Capacities](https://docs.eyelevel.ai/documentation/fundamentals/document-types-and-ingest-capacities)

## ingest_directory

**`bucket_id`** `integer` — required

The ID of the destination bucket.

---

**`path`** `string` — required

The local directory to upload.

---

**`batch_size`** `integer`

Files per ingest request. Default is 10. Paid subscriptions allow 1 to 50; free trials allow 1 to 25.

---

**`upload_api`** `string`

An endpoint that generates pre-signed requests for file uploads. Default is the EyeLevel.ai upload API.

---

#### ingest

**`Python`**

```python title="Python"
from groundx import GroundX

client = GroundX(
  api_key="YOUR_API_KEY",
)
client.ingest_directory(
  bucket_id=1234,
  path="/path/to/directory",
)
```

## Protected directory uploads

Use an SDK version that preserves each file's initial `fileAccess` policy through batching and splitting. It must use private upload before sending protected files. Older helpers that upload only through the public service cannot protect these uploads. See [File Access and Sharing](/documentation/fundamentals/file-access-and-sharing). The examples above remain valid for public content.