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

# Create a Session

> Create a cloud browser session and connect with Playwright or Puppeteer over CDP.

Create a browser session, then connect over CDP to automate. For an overview of session outputs, create APIs, and configuration options, see [Browser Sessions](/quickstart/browser-sessions).

<Steps>
  <Step title="Get your API key">
    Copy your key from [Anchor UI](https://app.anchorbrowser.io/api-keys).
  </Step>

  <Step title="Install dependencies">
    <CodeGroup>
      ```bash Node.js theme={null}
      npm install anchorbrowser playwright-core
      ```

      ```bash Python theme={null}
      pip install anchorbrowser playwright
      ```
    </CodeGroup>
  </Step>

  <Step title="Create a session">
    <CodeGroup>
      ```javascript node.js theme={null}
      import Anchorbrowser from 'anchorbrowser';

      const anchorClient = new Anchorbrowser({
        apiKey: process.env.ANCHOR_API_KEY,
      });

      const session = await anchorClient.sessions.create();
      console.log('Session ID:', session.data.id);
      ```

      ```python python theme={null}
      import os
      from anchorbrowser import Anchorbrowser

      anchor_client = Anchorbrowser(api_key=os.getenv('ANCHOR_API_KEY'))

      session = anchor_client.sessions.create()
      print('Session ID:', session.data.id)
      print('CDP URL:', session.data.cdp_url)
      print('Live view:', session.data.live_view_url)
      ```
    </CodeGroup>

    The response includes `id`, `cdp_url`, and `live_view_url`. Use `live_view_url` to [embed the browser](/advanced/browser-live-view) in your app. Pass `identities` or `browser.profile` in the request body to start authenticated — see [Browser Sessions](/quickstart/browser-sessions#configure-at-create).
  </Step>

  <Step title="Connect and automate">
    <CodeGroup>
      ```javascript Playwright theme={null}
      import { chromium } from 'playwright-core';

      const browser = await chromium.connectOverCDP(session.data.cdp_url);
      const page = browser.contexts()[0].pages()[0] ?? await browser.newPage();
      await page.goto('https://example.com');
      console.log('Title:', await page.title());
      await browser.close();
      ```

      ```javascript Puppeteer theme={null}
      import puppeteer from 'puppeteer-core';

      const browser = await puppeteer.connect({
        browserWSEndpoint: session.data.cdp_url,
      });
      const pages = await browser.pages();
      const page = pages[0] ?? await browser.newPage();
      await page.goto('https://example.com');
      console.log('Title:', await page.title());
      await browser.close();
      ```

      ```python Playwright theme={null}
      from playwright.sync_api import sync_playwright

      with sync_playwright() as p:
          browser = p.chromium.connect_over_cdp(session.data.cdp_url)
          page = browser.contexts[0].pages[0] if browser.contexts[0].pages else browser.new_page()
          page.goto('https://example.com')
          print('Title:', page.title())
          browser.close()
      ```
    </CodeGroup>
  </Step>
</Steps>

<Check>
  You should see a session ID, CDP URL, and the page title printed in your terminal.
</Check>

## Next steps

* [Browser Sessions](/quickstart/browser-sessions) — sync vs async vs batch, configuration links
* [Async sessions](/essentials/async-session) — create without blocking on provisioning
* [Embedded Browser Live UI](/advanced/browser-live-view) — use `live_view_url` in your product
* [API Reference](/api-reference/browser-sessions/start-browser-session) — full create request schema
