Contents

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.

Quickstart

  1. Get an API key from your manifest dashboard.

  1. Send a URL, get back a manifest.

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.