The manifest is the source of truth for the OpenAPI spec served at
/api/sites/:slug/openapi.json. Any change to the manifest is immediately reflected in the spec.Sections
A manifest is organized into six top-level sections. Each section is described below.entities
entities
Entities are the domain objects BrowserWire identifies on the page — things like a login form, a product card, a navigation menu, or a search bar. Each entity groups related actions and views together.An entity carries observable signals (role, text content, URL patterns, element attributes) that BrowserWire uses to reliably re-identify it across page loads. A vision LLM assigns a human-readable
semanticName so the entity is meaningful to your agent.actions
actions
Actions are callable operations bound to a specific entity — clicking a button, filling a field, submitting a form, selecting an option. Each action has:
- Inputs — typed parameters the operation accepts (
string,number,boolean, orenum) - Preconditions — guard checks that must pass before the action can run
- Postconditions — checks that verify the action succeeded
- Locator set — multiple targeting strategies (CSS, XPath, ARIA role, test ID) ranked by confidence, so the runtime can find the right element even if the page changes slightly
views
views
Views are structured data extraction definitions. A view describes how to read information off the page — a list of search results, a table of transactions, a product’s price and title — and maps each field to a typed value (
string, number, boolean, or date).Views can be static (the data is always present) or dynamic (the data depends on prior actions or inputs).workflows
workflows
Workflows are task-level APIs synthesized from discovered actions. A workflow chains multiple actions into a single callable operation — for example, navigating to a login page, filling in credentials, and submitting the form. See Workflows for a full explanation.
pages
pages
Pages group entities, actions, and views by route. Each page definition records the URL pattern it matches, along with the IDs of the views and actions that live on that route. This lets your agent reason about which operations are available at a given URL.
errors
errors
Errors are typed failure definitions with stable codes. Each error carries a message template and a classification:
| Classification | Meaning |
|---|---|
recoverable | The operation can be retried or handled gracefully |
fatal | The operation cannot proceed; user intervention is needed |
security | A security boundary was encountered (e.g. CAPTCHA, auth wall) |
Versioning
Every manifest carries two version fields, both following semver:| Field | Purpose |
|---|---|
contractVersion | The version of the BrowserWire contract schema itself. Increments when the manifest format changes in a breaking way. |
manifestVersion | The version of this site’s manifest. Increments automatically when BrowserWire detects changes to entities, actions, or views after re-discovery. |
manifestVersion to detect when a site’s API has changed and decide whether to re-fetch the OpenAPI spec.
Example
Here is a minimal manifest for a site with a single login form:Relationship to the OpenAPI spec
BrowserWire generates an OpenAPI 3.0 spec directly from the manifest. Every workflow becomes aPOST endpoint, every view becomes a GET endpoint, and every action schema maps to a request body or query parameter definition.
You can fetch the spec at any time: