Web browse
POST /v1/tools/browse fetches a public web page and returns its readable text, so a client can give its model a page that search results pointed at. It takes the same key and admission as the inference endpoints, and nothing is charged.
Request#
| Field | Type | Notes |
|---|---|---|
url | string | Required. The URL of a public https page |
Response#
content is the page's readable text, bounded at 24,000 characters; title and url are the page's own. notice and untrusted mark everything as text this platform did not write, exactly as search results are marked. Pass them to your model as data, never as instructions. The service also breaks the markers a page could use to look like a turn of the conversation (system:, <|im_start|>, [INST], <<SYS>>).
If the key has guard_injection on, the text is checked when it comes back as a tool result: warn reports the findings in x-token-notice, block refuses the next request with 400 injection_suspected. guard_credentials treats it like any other text in the request.
The page is fetched for the answer and never stored.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The body could not be read |
| 400 | invalid_url | No URL, or not a public https page |
| 403 | browse_blocked | The address is not one the service will reach |
| 429 | browse_capped | The daily cap for the account is spent |
| 503 | browse_failed | The page could not be fetched or had no readable text |
What it fetches#
Public https addresses only. Loopback, private networks, the metadata service and plain http are refused, and the check happens after DNS resolution, so neither a rebinding answer nor a redirect can reach a private address. A refused address is reported as refused; a name that resolves into a refused range answers the same generic failure as any other fetch, so the endpoint cannot be used to discover internal names. A fetch is bounded at 30 seconds.
Billing and the daily cap#
A browse is free: it is rate limited like every other call, and it still appears in the account's usage rows as web_browse, priced at nothing.
Each account is capped at 200 browse calls per UTC day by default, refused with 429 browse_capped once they are spent. The cap counts calls, not bytes, which is why the 24,000-character bound keeps one call from being arbitrarily expensive.