Skip to content

Commit e8b808d

Browse files
release: 3.20.0
1 parent 3e21a5b commit e8b808d

39 files changed

Lines changed: 484 additions & 194 deletions

.env.example

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
BROWSERBASE_API_KEY=bb_live_your_api_key_here
2-
BROWSERBASE_PROJECT_ID=your-bb-project-uuid-here
3-
MODEL_API_KEY=sk-proj-your-llm-api-key-here
2+
MODEL_API_KEY=sk-proj-your-llm-api-key-here

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "3.19.5"
2+
".": "3.20.0"
33
}

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 8
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase%2Fstagehand-b969ce378479c79ee64c05127c0ed6c6ce2edbee017ecd037242fb618a5ebc9f.yml
3-
openapi_spec_hash: a24aabaa5214effb679808b7f2be0ad4
4-
config_hash: 0cc516caf1432087f40654336e0fa8cd
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/browserbase/stagehand-6f6bfb81d092f30a5e2005328c97d61b9ea36132bb19e9e79e55294b9534ce20.yml
3+
openapi_spec_hash: f3fc1e3688a38dc2c28f7178f7d534e5
4+
config_hash: 1fb12ae9b478488bc1e56bfbdc210b01

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# Changelog
22

3+
## 3.20.0 (2026-05-06)
4+
5+
Full Changelog: [v3.19.5...v3.20.0](https://github.com/browserbase/stagehand-python/compare/v3.19.5...v3.20.0)
6+
7+
### Features
8+
9+
* [feat]: add `ignoreSelectors` to `extract()` ([f11a102](https://github.com/browserbase/stagehand-python/commit/f11a102884344ddefd2dd0b98f22fea687a12e6e))
10+
* [STG-1798] feat: support Browserbase verified sessions ([078ab5c](https://github.com/browserbase/stagehand-python/commit/078ab5c76f13beee16e44d7eed5e3018f1cc5bd8))
11+
* [STG-1808] Deprecate Browserbase project ID ([bfe505c](https://github.com/browserbase/stagehand-python/commit/bfe505cb1c3c1c6a85d7873ee05860476d71a9d6))
12+
* Bedrock auth passthrough ([9463fa4](https://github.com/browserbase/stagehand-python/commit/9463fa49cb839abbb2c6a1adb0d053e5006216a7))
13+
* remove experimental requirement on agent variables ([#2079](https://github.com/browserbase/stagehand-python/issues/2079)) ([92ed1e1](https://github.com/browserbase/stagehand-python/commit/92ed1e1d43e89d92ffc4c3aa30c7f1a521f5d0e6))
14+
* Revert "[STG-1573] Add providerOptions for extensible model auth ([#1822](https://github.com/browserbase/stagehand-python/issues/1822))" ([3c04086](https://github.com/browserbase/stagehand-python/commit/3c0408675154c9f7d241c4e92e9cb82f0419d6b3))
15+
* support setting headers via env ([b1c6127](https://github.com/browserbase/stagehand-python/commit/b1c61276ff9cecf89c078e1d97a6b927d8d308e1))
16+
17+
18+
### Bug Fixes
19+
20+
* **client:** preserve hardcoded query params when merging with user params ([feac39d](https://github.com/browserbase/stagehand-python/commit/feac39d88a841ff710d672b622f3280037589f66))
21+
* ensure file data are only sent as 1 parameter ([b870657](https://github.com/browserbase/stagehand-python/commit/b8706575ab0f95b9e6781ee3685f9b79e0fe6036))
22+
* use correct field name format for multipart file arrays ([852600a](https://github.com/browserbase/stagehand-python/commit/852600a4c6169df6497fc4d77a06abae8812e375))
23+
24+
25+
### Performance Improvements
26+
27+
* **client:** optimize file structure copying in multipart requests ([69d396f](https://github.com/browserbase/stagehand-python/commit/69d396fa404d0ad3905786dcf6f56be8be7ab9b2))
28+
29+
30+
### Chores
31+
32+
* **internal:** more robust bootstrap script ([9bc61e1](https://github.com/browserbase/stagehand-python/commit/9bc61e12f1599b14dd8b2a0c38a50c089512e9c7))
33+
* **internal:** reformat pyproject.toml ([03f4dbe](https://github.com/browserbase/stagehand-python/commit/03f4dbe5ef6e230f3e96302ba8e5f4064edda10f))
34+
335
## 3.19.5 (2026-04-03)
436

537
Full Changelog: [v3.19.4...v3.19.5](https://github.com/browserbase/stagehand-python/compare/v3.19.4...v3.19.5)

README.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,8 @@ Python 3.9 or higher.
8787

8888
Set your environment variables (from `examples/.env.example`):
8989

90-
- `STAGEHAND_API_URL`
9190
- `MODEL_API_KEY`
9291
- `BROWSERBASE_API_KEY`
93-
- `BROWSERBASE_PROJECT_ID`
9492

9593
```bash
9694
cp examples/.env.example examples/.env
@@ -139,7 +137,6 @@ def main() -> None:
139137
with Stagehand(
140138
server="remote",
141139
browserbase_api_key=os.environ.get("BROWSERBASE_API_KEY"),
142-
browserbase_project_id=os.environ.get("BROWSERBASE_PROJECT_ID"),
143140
model_api_key=os.environ.get("MODEL_API_KEY"),
144141
) as client:
145142
session = client.sessions.start(
@@ -234,7 +231,6 @@ from stagehand import AsyncStagehand
234231

235232
client = AsyncStagehand(
236233
browserbase_api_key="My Browserbase API Key",
237-
browserbase_project_id="My Browserbase Project ID",
238234
model_api_key="My Model API Key",
239235
)
240236
```
@@ -255,9 +251,11 @@ See this table for the available options:
255251
| Keyword argument | Environment variable | Required | Default value |
256252
| ------------------------ | ------------------------ | -------- | ----------------------------------------- |
257253
| `browserbase_api_key` | `BROWSERBASE_API_KEY` | true | - |
258-
| `browserbase_project_id` | `BROWSERBASE_PROJECT_ID` | true | - |
254+
| `browserbase_project_id` | - | false | - |
259255
| `model_api_key` | `MODEL_API_KEY` | true | - |
260-
| `base_url` | `STAGEHAND_BASE_URL` | false | `"https://api.stagehand.browserbase.com"` |
256+
| `base_url` | `STAGEHAND_API_URL` | false | `"https://api.stagehand.browserbase.com"` |
257+
258+
`browserbase_project_id` is deprecated, accepted for backwards compatibility, and ignored. `STAGEHAND_BASE_URL` remains supported as a deprecated fallback when `STAGEHAND_API_URL` is unset.
261259

262260
Keyword arguments take precedence over environment variables.
263261

@@ -662,7 +660,7 @@ import httpx
662660
from stagehand import Stagehand, DefaultHttpxClient
663661

664662
client = Stagehand(
665-
# Or use the `STAGEHAND_BASE_URL` env var
663+
# Or use the `STAGEHAND_API_URL` env var, with `STAGEHAND_BASE_URL` as a fallback
666664
base_url="http://my.test.server.example.com:8083",
667665
http_client=DefaultHttpxClient(
668666
proxy="http://my.test.proxy.example.com",

examples/.env.example

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
1-
STAGEHAND_API_URL=https://api.stagehand.browserbase.com
21
MODEL_API_KEY=sk-proj-your-llm-api-key-here
32
BROWSERBASE_API_KEY=bb_live_your_api_key_here
4-
BROWSERBASE_PROJECT_ID=your-bb-project-uuid-here

examples/act_example.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
1111
Required environment variables:
1212
- BROWSERBASE_API_KEY: Your Browserbase API key
13-
- BROWSERBASE_PROJECT_ID: Your Browserbase project ID
1413
- MODEL_API_KEY: Your OpenAI API key
1514
"""
1615

@@ -45,10 +44,9 @@ async def main() -> None:
4544
load_example_env()
4645
load_example_env()
4746
# Create client using environment variables
48-
# BROWSERBASE_API_KEY, BROWSERBASE_PROJECT_ID, MODEL_API_KEY
47+
# BROWSERBASE_API_KEY and MODEL_API_KEY
4948
async with AsyncStagehand(
5049
browserbase_api_key=os.environ.get("BROWSERBASE_API_KEY"),
51-
browserbase_project_id=os.environ.get("BROWSERBASE_PROJECT_ID"),
5250
model_api_key=os.environ.get("MODEL_API_KEY"),
5351
) as client:
5452
# Start a new browser session

examples/agent_execute.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
44
Required environment variables:
55
- BROWSERBASE_API_KEY
6-
- BROWSERBASE_PROJECT_ID
76
- MODEL_API_KEY
87
98
Optional:

examples/byob_example.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
77
Required environment variables:
88
- BROWSERBASE_API_KEY
9-
- BROWSERBASE_PROJECT_ID
109
- MODEL_API_KEY
1110
1211
Usage:
@@ -52,7 +51,6 @@ async def main() -> None:
5251
load_example_env()
5352
async with AsyncStagehand(
5453
browserbase_api_key=os.environ.get("BROWSERBASE_API_KEY"),
55-
browserbase_project_id=os.environ.get("BROWSERBASE_PROJECT_ID"),
5654
model_api_key=os.environ.get("MODEL_API_KEY"),
5755
) as client, async_playwright() as playwright:
5856
browser = await playwright.chromium.launch(headless=True)

examples/env.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
from pathlib import Path
55

66
REQUIRED_KEYS = {
7-
"STAGEHAND_API_URL",
87
"MODEL_API_KEY",
98
"BROWSERBASE_API_KEY",
10-
"BROWSERBASE_PROJECT_ID",
119
}
1210

1311

@@ -44,9 +42,6 @@ def load_example_env() -> None:
4442
+ " (from examples/.env)"
4543
)
4644

47-
# Normalize for SDKs that expect STAGEHAND_BASE_URL
48-
os.environ.setdefault("STAGEHAND_BASE_URL", os.environ["STAGEHAND_API_URL"])
49-
5045
# Use the repo-local SEA binary when available (avoid global installs).
5146
sea_binary = env_path.parent.parent / "bin" / "sea" / "stagehand-darwin-arm64"
5247
if sea_binary.exists():

0 commit comments

Comments
 (0)