Navigate
curl --request POST \
--url https://api.example.com/browser/sessions/{id}/navigate \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"waitUntil": "<string>",
"timeout": 123,
"referer": "<string>"
}
'import requests
url = "https://api.example.com/browser/sessions/{id}/navigate"
payload = {
"url": "<string>",
"waitUntil": "<string>",
"timeout": 123,
"referer": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>', waitUntil: '<string>', timeout: 123, referer: '<string>'})
};
fetch('https://api.example.com/browser/sessions/{id}/navigate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/browser/sessions/{id}/navigate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>',
'waitUntil' => '<string>',
'timeout' => 123,
'referer' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/browser/sessions/{id}/navigate"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"waitUntil\": \"<string>\",\n \"timeout\": 123,\n \"referer\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/browser/sessions/{id}/navigate")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"waitUntil\": \"<string>\",\n \"timeout\": 123,\n \"referer\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/browser/sessions/{id}/navigate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"waitUntil\": \"<string>\",\n \"timeout\": 123,\n \"referer\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>",
"pageId": "<string>"
}Browser Sessions
Navigate
Navigate the active tab to a URL with configurable wait strategy and timeout.
POST
/
browser
/
sessions
/
{id}
/
navigate
Navigate
curl --request POST \
--url https://api.example.com/browser/sessions/{id}/navigate \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"waitUntil": "<string>",
"timeout": 123,
"referer": "<string>"
}
'import requests
url = "https://api.example.com/browser/sessions/{id}/navigate"
payload = {
"url": "<string>",
"waitUntil": "<string>",
"timeout": 123,
"referer": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>', waitUntil: '<string>', timeout: 123, referer: '<string>'})
};
fetch('https://api.example.com/browser/sessions/{id}/navigate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/browser/sessions/{id}/navigate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>',
'waitUntil' => '<string>',
'timeout' => 123,
'referer' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/browser/sessions/{id}/navigate"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"waitUntil\": \"<string>\",\n \"timeout\": 123,\n \"referer\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/browser/sessions/{id}/navigate")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"waitUntil\": \"<string>\",\n \"timeout\": 123,\n \"referer\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/browser/sessions/{id}/navigate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"waitUntil\": \"<string>\",\n \"timeout\": 123,\n \"referer\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>",
"pageId": "<string>"
}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
string
required
Browser session ID (UUID). Create via
POST /browser/sessions.Body
string
required
Absolute URL to navigate to. Must use the
http or https scheme.string
default:"load"
When to consider the navigation finished. One of
load, domcontentloaded, networkidle.integer
default:"30000"
Maximum time (ms) to wait for navigation. Range
0–120000.string
Optional
Referer header sent with this navigation request only. Does not persist to subsequent navigations.Example Request
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"
}'
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
}'
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/"
}'
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();
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()
Response
Success Response (200)
string
Effective URL of the active tab after all redirects.
string
CDP target identifier of the tab the navigation applied to.
{
"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=loadwaits fordocument.readyState === "complete".domcontentloadedreturns once the DOM parser finishes.networkidlewaits for 500ms of no network activity (best-effort, capped at 10s).refereris per-request and does not persist to subsequent navigations.
Was this page helpful?