Manifest – The action layer for AI agents | omfang
The internet, readable by agents.
Manifest turns any URL into a structured map of what an AI agent can actually do on a page - every button, form, and input, with the fields it needs to fill and what's required before it can move on.
Get your API key
Read the docs
Try it live
The problem
Give an AI agent a browser, and it can see a webpage. Give it a scraper, and it can read one. Neither tells it what it's allowed to do there.<br>Today, agents either take a screenshot and guess, or a developer hand-writes selectors that break the next time the page ships a redesign. There's no layer that tells an agent: here are the actions on this page, here's what each one needs, here's what's required.<br>That's the gap Manifest fills.
How it works
Manifest visits a URL, reads its accessibility tree the same way a screen reader would, and cross-references it against the page's actual DOM for the details accessibility trees miss — required fields, input types, placeholders, disabled states. That combined picture is translated into a clean JSON action manifest: every button, form, and input on the page, described in terms an agent can reason about and act on.
Manifest visits a URL, reads its accessibility tree the same way a screen reader would, and cross-references it against the page's actual DOM for the details accessibility trees miss — required fields, input types, placeholders, disabled states. That combined picture is translated into a clean JSON action manifest: every button, form, and input on the page, described in terms an agent can reason about and act on.
URL → accessibility tree → DOM extractors → structured JSON manifest
URL → accessibility tree → DOM extractors → structured JSON manifest
No screenshots. No hand-maintained selectors. No fragile CSS paths that snap the moment a page redesigns.
No screenshots. No hand-maintained selectors. No fragile CSS paths that snap the moment a page redesigns.
What you get back
POST /manifest<br>{ "url": "https://example.com" }
POST /manifest<br>{ "url": "https://example.com" }
"url": "https://example.com",<br>"current_page_state": "Contact page with a message form",<br>"actions": [<br>"id": "submit-form",<br>"label": "Submit",<br>"type": "button",<br>"description": "Submits the contact form",<br>"required": false<br>},<br>"id": "email-input",<br>"label": "Email",<br>"type": "input",<br>"description": "Email address field",<br>"required": true<br>],<br>"navigation": [<br>{ "label": "Home", "url": "/" }
"url": "https://example.com",<br>"current_page_state": "Contact page with a message form",<br>"actions": [<br>"id": "submit-form",<br>"label": "Submit",<br>"type": "button",<br>"description": "Submits the contact form",<br>"required": false<br>},<br>"id": "email-input",<br>"label": "Email",<br>"type": "input",<br>"description": "Email address field",<br>"required": true<br>],<br>"navigation": [<br>{ "label": "Home", "url": "/" }
Why not just use a browser tool or a scraper?
Browser access
Browser access
Content extraction
Content extraction
Manifest
Manifest
Gives an agent a browser
Gives an agent a browser
Returns page content
Returns page content
Returns available actions
Returns available actions
Agent can reason about the output
Agent can reason about the output
Partially
Survives UI redesigns
Survives UI redesigns
Required fields & input types
Required fields & input types
Browser tools get an agent onto the page. Content tools get it the text. Manifest is the layer that tells it what to click, fill, and submit — and what's mandatory before it can move on.
Browser tools get an agent onto the page. Content tools get it the text. Manifest is the layer that tells it what to click, fill, and submit — and what's mandatory before it can move on.
Pricing
Pricing
Plan
Plan
Price
Price
Calls/ Month
Calls/ Month
Overage
Overage
Free
Free
$0
$0
50
50
Starter
Starter
$29/ mo
$29/ mo
1,000
1,000
$0.08/ call
$0.08/ call
Pro
Pro
$79/ mo
$79/ mo
5,000
5,000
$0.05/ call
$0.05/ call
Enterprice
Enterprice
Custom
Custom
Custom
Custom
Custom
Custom
Cached responses are always fast and never count against your rate limit the same way a cold request does — most agents hit the same handful of URLs repeatedly, so cache hits keep costs predictable.
Cached responses are always fast and never count against your rate limit the same way a cold request does — most agents hit the same handful of URLs repeatedly, so cache hits keep costs predictable.
Start free
Read the docs
Follow us on social media
Contact us
Contact us
Learn more about omfang
About us
How it works
Legal
Privacy
Terms of Service
Follow us on social media
Contact us
Contact us
Learn more about omfang
About us
How it works
Legal
Privacy
Terms of Service
Follow us on social media
Contact us
Contact us
Learn more about omfang
About us
How it works
Legal
Privacy
Terms of Service