Getting started
Manifest API makes any webpage agent-readable. Pass a URL, get back a structured JSON manifest describing what the page contains and what actions are available.
cURL
Python
Node
curl -X POST https://manifest.omfang.io/manifest \
-H "X-API-Key: your-key-here" \
-H "Content-Type: application/json" \
-d '{"url": "https://omfang.io/contact"}'
Response:
{
"url": "https://omfang.io/contact",
"authenticated_user": null,
"current_page_state": "Contact page with a form for name, email, and message",
"actions": [
{
"id": "name-input",
"label": "Name",
"type": "input",
"description": "Text field for the sender's name",
"required": true
},
{
"id": "email-input",
"label": "Email",
"type": "input",
"description": "Email field for the sender's contact address",
"required": true
},
{
"id": "message-input",
"label": "Message",
"type": "textarea",
"description": "Free text field for the inquiry message",
"required": true
},
{
"id": "submit-contact-form",
"label": "Send message",
"type": "button",
"description": "Submits the contact form",
"required": false
}
],
"navigation": [
{ "label": "Home", "url": "/" },
{ "label": "Manifest", "url": "/manifest" }
]
}
Authentication
All requests require an API key passed in the X-API-Key header. Keys are issued from your dashboard and can be rotated or revoked at any time.
X-API-Key: your-key-here
Requests without a valid key return
401 Unauthorized.
Endpoints
POST/manifest
Returns a structured action manifest for any URL.
Request:
JSON
{
"url": "https://example.com"
}
Response:
JSON
{
"url": "string",
"authenticated_user": "string | null",
"current_page_state": "string",
"actions": [
{
"id": "string",
"label": "string",
"type": "button | input | textarea | select | checkbox | radio | other",
"description": "string",
"required": "boolean"
}
],
"navigation": [
{ "label": "string", "url": "string" }
]
}
GET/health
Returns the API health status. No authentication required.
JSON
{ "status": "ok" }
GET/session-status
Returns whether the current browser session is valid. No authentication required
JSON
{ "valid": true }
or
JSON
{ "valid": false, "message": "Session expired" }
Response fields:
Field
Type
Description
url
string
The url that was requested
authenticated_user
string or null
Detected logged-in user, if any
current_page_state
string
Brief description of the page
actions
array
Interactive elements on the page
navigation
array
Primary navigation links
Action fields:
Field
Type
Description
id
string
Unique identifier for the action
label
string
Human-readable label
type
string
button, input, textarea, select, checkbox, radio, other
description
string
What the action does
required
boolean
Whether the field is required
Rate limits
Plans
Calls/month
Per-minute limit
Free
50
10/min
Starter
1,000
10/min
Pro
5,000
10/min
Exceeding the per-minute limits returns
429 Too Many Requests
Error codes
Code
Meaning
401
Missing or invalid API key
429
Rate limit exceeded
503
Browser session unavailable — retry later
Caching
Manifests are cached for 6 hours by default. Repeated requests for the same URL within that window are served instantly from cache at no extra cost to your call limit.