Official Python SDK for WebUplink — the whole web, as function calls.
Project description
The whole web, as function calls.
Official Python SDK for WebUplink.
Installation
pip install webuplink
Quickstart
from webuplink import WebUplink
client = WebUplink() # reads WEBUPLINK_API_KEY from env
# Browse a page — get back structured, callable tools
page = client.browse("https://example.com")
print(page.summary)
print(page.tools) # [Tool(name='...', description='...', params=[...]), ...]
# Execute a tool discovered on the page
tool = page.tools[0]
result = client.browse(
session_id=page.session_id,
tool=tool.name,
params={tool.params[0].name: "some value"},
)
# Clean up
client.close_session(page.session_id)
Async
from webuplink import AsyncWebUplink
async with AsyncWebUplink() as client:
page = await client.browse("https://example.com")
print(page.tools)
What you can build
- AI agents that act on the web — browse any site, get back named, callable tool definitions, execute actions
- No selectors, no scraping — WebUplink understands pages and generates callable tools automatically
- Multi-step workflows — sessions persist across navigations, so your agent can search → filter → select → checkout
- Any website, zero configuration — works on sites you've never seen before
Error handling
Every non-2xx response raises a typed WebUplinkError carrying the machine-readable code, HTTP status_code, and request_id (cite it in support tickets):
from webuplink import WebUplink, WebUplinkError
client = WebUplink()
try:
page = client.browse("https://example.com")
except WebUplinkError as err:
print(err.code) # e.g. 'QUOTA_EXCEEDED', 'SITE_BLOCKED'
print(err.status_code) # e.g. 429, 502
print(err.request_id) # 'req-abc-123'
Transient errors that carry retry_after (e.g. BROWSER_ERROR, AI_PROCESSING_ERROR) are retried automatically for observe-only requests. SITE_BLOCKED — the site served a bot-verification challenge or access-denied page; the request is not billed — carries no retry_after and is never auto-retried. Tool executions are never auto-retried (non-idempotent).
Full error reference at webuplink.ai/docs/errors.
Documentation
Full reference at webuplink.ai/docs.
Contributing
git clone https://github.com/webuplink-dev/webuplink-python.git
cd webuplink-python
pip install -e ".[dev]"
pytest
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file webuplink-0.1.1.tar.gz.
File metadata
- Download URL: webuplink-0.1.1.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9acbf62ee89369105f9d0cbfdbdb1ad41ee5360ccaa3010b07a9ac62663618e3
|
|
| MD5 |
82e5812d846445457233ccc47a987d2c
|
|
| BLAKE2b-256 |
57f484fef69794f9653990af04c58d6e81dd840d71ab925656af3a09e1e2ab5f
|
Provenance
The following attestation bundles were made for webuplink-0.1.1.tar.gz:
Publisher:
publish.yml on webuplink-dev/webuplink-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
webuplink-0.1.1.tar.gz -
Subject digest:
9acbf62ee89369105f9d0cbfdbdb1ad41ee5360ccaa3010b07a9ac62663618e3 - Sigstore transparency entry: 2048440399
- Sigstore integration time:
-
Permalink:
webuplink-dev/webuplink-python@ab0a51595c2fc32b916589a599f5ac061df31e82 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/webuplink-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ab0a51595c2fc32b916589a599f5ac061df31e82 -
Trigger Event:
release
-
Statement type:
File details
Details for the file webuplink-0.1.1-py3-none-any.whl.
File metadata
- Download URL: webuplink-0.1.1-py3-none-any.whl
- Upload date:
- Size: 13.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d964cff315179e7cf86e0690daa7803de43363948e60c402710572b4f373ced4
|
|
| MD5 |
357c104074fe0e83ea6015d68991129d
|
|
| BLAKE2b-256 |
33e43b9d495c9dc268e5e1d1e638a5392537593348616c190c967838184047b3
|
Provenance
The following attestation bundles were made for webuplink-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on webuplink-dev/webuplink-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
webuplink-0.1.1-py3-none-any.whl -
Subject digest:
d964cff315179e7cf86e0690daa7803de43363948e60c402710572b4f373ced4 - Sigstore transparency entry: 2048440432
- Sigstore integration time:
-
Permalink:
webuplink-dev/webuplink-python@ab0a51595c2fc32b916589a599f5ac061df31e82 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/webuplink-dev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ab0a51595c2fc32b916589a599f5ac061df31e82 -
Trigger Event:
release
-
Statement type: