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

# Navigate

> Navigate the active tab to a URL with configurable wait strategy and timeout.

## Overview

The `/browser/sessions/{id}/navigate` endpoint navigates the currently active tab of a browser session to the given URL and blocks until the configured wait condition is met or the timeout elapses.

Only `http` and `https` URLs are accepted. The navigation is scoped to the active tab — use `POST /pages/{pageId}/activate` to switch active tabs first.

## Path Parameters

<ParamField path="id" type="string" required={true}>
  Browser session ID (UUID). Create via `POST /browser/sessions`.
</ParamField>

## Body

<ParamField body="url" type="string" required={true}>
  Absolute URL to navigate to. Must use the `http` or `https` scheme.
</ParamField>

<ParamField body="waitUntil" type="string" default="load">
  When to consider the navigation finished. One of `load`, `domcontentloaded`, `networkidle`.
</ParamField>

<ParamField body="timeout" type="integer" default="30000">
  Maximum time (ms) to wait for navigation. Range `0`–`120000`.
</ParamField>

<ParamField body="referer" type="string">
  Optional `Referer` header sent with this navigation request only. Does not persist to subsequent navigations.
</ParamField>

## Example Request

<CodeGroup>
  ```bash cURL (minimal) theme={null}
  curl -X POST "https://api.scrapengine.io/api/v1/browser/sessions/0f2b1f6a-88ac-4d25-bc58-67a6f4b4a001/navigate" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://example.com"
    }'
  ```

  ```bash cURL (networkidle) theme={null}
  curl -X POST "https://api.scrapengine.io/api/v1/browser/sessions/0f2b1f6a-88ac-4d25-bc58-67a6f4b4a001/navigate" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://example.com",
      "waitUntil": "networkidle",
      "timeout": 60000
    }'
  ```

  ```bash cURL (with referer) theme={null}
  curl -X POST "https://api.scrapengine.io/api/v1/browser/sessions/0f2b1f6a-88ac-4d25-bc58-67a6f4b4a001/navigate" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "url": "https://example.com/product/42",
      "referer": "https://www.google.com/"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://api.scrapengine.io/api/v1/browser/sessions/0f2b1f6a-88ac-4d25-bc58-67a6f4b4a001/navigate",
    {
      method: "POST",
      headers: {
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        url: "https://example.com",
        waitUntil: "networkidle",
      }),
    },
  );
  const data = await response.json();
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.scrapengine.io/api/v1/browser/sessions/0f2b1f6a-88ac-4d25-bc58-67a6f4b4a001/navigate"
  headers = {
      "Authorization": "Bearer YOUR_API_KEY",
      "Content-Type": "application/json",
  }
  payload = {
      "url": "https://example.com",
      "waitUntil": "networkidle",
  }

  response = requests.post(url, headers=headers, json=payload)
  data = response.json()
  ```
</CodeGroup>

## Response

### Success Response (200)

<ResponseField name="url" type="string">
  Effective URL of the active tab after all redirects.
</ResponseField>

<ResponseField name="pageId" type="string">
  CDP target identifier of the tab the navigation applied to.
</ResponseField>

**Example Response:**

```json theme={null}
{
  "url": "https://example.com/",
  "pageId": "EA5E9AA71C7A91C467F8CDBB266EE5E0"
}
```

### Error Responses

| Status | Description                                                                     |
| ------ | ------------------------------------------------------------------------------- |
| `400`  | Invalid body — malformed URL, non-http(s) scheme, or unknown `waitUntil` value. |
| `401`  | Unauthorized — invalid or missing API key.                                      |
| `404`  | Session not found or not owned by the caller.                                   |
| `408`  | Navigation did not complete before `timeout` elapsed.                           |
| `503`  | The browser session is temporarily unreachable.                                 |

## Notes

* `waitUntil=load` waits for `document.readyState === "complete"`. `domcontentloaded` returns once the DOM parser finishes. `networkidle` waits for 500ms of no network activity (best-effort, capped at 10s).
* `referer` is per-request and does not persist to subsequent navigations.
