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

# Quickstart

By the end of this page you'll have a brain holding one compiled page, read back through
the SDK. It takes about five minutes.

### Get an API key

API keys are scoped to an organization and carry the role of the member they were issued to.
Ask an owner, admin, or developer on your org to issue one from the dashboard — keys look
like `lbk_...`.

> **Info**
>
> You also need a **subject id**: a stable identifier for the end user you're acting on
> behalf of. Brains are owned by subjects, so this determines which brains you can see.
> See [Authentication](/docs/authentication).

### Install an SDK

**`TypeScript`**

```bash TypeScript
npm install @livingbrain/sdk
```

**`Python`**

```bash Python
pip install livingbrain
```

### Create a brain

**`TypeScript`**

```typescript TypeScript
import { LivingBrainClient } from "@livingbrain/sdk";

const client = new LivingBrainClient({
  apiKey: process.env.LIVING_BRAIN_API_KEY!,
  subjectId: "3f2b8c1e-7a4d-4e9b-9c2a-5d6e7f8a9b0c",
});

const brain = await client.brains.create({
  name: "Research",
  description: "Papers and notes",
});

console.log(brain.id);
```

**`Python`**

```python Python
import os
from livingbrain import LivingBrain

client = LivingBrain(
    api_key=os.environ["LIVING_BRAIN_API_KEY"],
    subject_id="3f2b8c1e-7a4d-4e9b-9c2a-5d6e7f8a9b0c",
)

brain = client.brains.create(name="Research", description="Papers and notes")
print(brain.id)
```

### Push a capture

Captures are asynchronous. You get back an **ingest source** whose `status` tells you where
it is in the pipeline; Living Brain compiles it into one or more pages in the background.

**`TypeScript`**

```typescript TypeScript
const source = await client.captures.capture({
  brainId: brain.id,
  body: {
    kind: "url",
    fetchUrl: "https://arxiv.org/abs/1706.03762",
    label: "Attention Is All You Need",
  },
});

console.log(source.status); // "pending"
```

**`Python`**

```python Python
source = client.captures.capture(
    brain_id=brain.id,
    kind="url",
    fetch_url="https://arxiv.org/abs/1706.03762",
    label="Attention Is All You Need",
)

print(source.status)  # "pending"
```

> **Tip**
>
> Rather than polling, register a [webhook](/docs/changes#webhooks) and let Living Brain tell you
> when compilation finishes.

### Read the pages back

Once compilation completes, the brain has pages. List them — the SDKs paginate for you:

**`TypeScript`**

```typescript TypeScript
for await (const page of await client.workspace.listPages({ brainId: brain.id })) {
  console.log(page.title, "→", page.summary);
}
```

**`Python`**

```python Python
for page in client.workspace.list_pages(brain_id=brain.id):
    print(page.title, "→", page.summary)
```

## Next steps

#### [Core concepts](/docs/concepts)

What a page actually is, and how buckets and connections work.

#### [Search and prompt context](/docs/search)

Feed the right slice of a brain into your LLM calls.