Turning Playwright's aria_snapshot() into a JSON manifest

Maxnordstrom1 pts0 comments

omfang Digital Marketing Tool

Particles Swarm Export

">

Contents

Getting started

Authentication

Endpoints

POST /manifest

GET /health

GET /session-status

Response Schema

Rate-Limits

Caching

Contents

Getting started

Authentication

Endpoints

POST /manifest

GET /health

GET /session-status

Response Schema

Rate-Limits

Caching

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

Get an API key from your manifest dashboard.

Send a URL, get back a manifest.

cURL

Python

Node

curl -X POST https://manifest.omfang.io/manifest \<br>-H "X-API-Key: your-key-here" \<br>-H "Content-Type: application/json" \<br>-d '{"url": "https://omfang.io/contact"}'

CopyCopyCopied!

Response:

"url": "https://omfang.io/contact",<br>"authenticated_user": null,<br>"current_page_state": "Contact page with a form for name, email, and message",<br>"actions": [<br>"id": "name-input",<br>"label": "Name",<br>"type": "input",<br>"description": "Text field for the sender's name",<br>"required": true<br>},<br>"id": "email-input",<br>"label": "Email",<br>"type": "input",<br>"description": "Email field for the sender's contact address",<br>"required": true<br>},<br>"id": "message-input",<br>"label": "Message",<br>"type": "textarea",<br>"description": "Free text field for the inquiry message",<br>"required": true<br>},<br>"id": "submit-contact-form",<br>"label": "Send message",<br>"type": "button",<br>"description": "Submits the contact form",<br>"required": false<br>],<br>"navigation": [<br>{ "label": "Home", "url": "/" },<br>{ "label": "Manifest", "url": "/manifest" }

cURL

Python

Node

curl -X POST https://manifest.omfang.io/manifest \<br>-H "X-API-Key: your-key-here" \<br>-H "Content-Type: application/json" \<br>-d '{"url": "https://omfang.io/contact"}'

CopyCopyCopied!

Response:

"url": "https://omfang.io/contact",<br>"authenticated_user": null,<br>"current_page_state": "Contact page with a form for name, email, and message",<br>"actions": [<br>"id": "name-input",<br>"label": "Name",<br>"type": "input",<br>"description": "Text field for the sender's name",<br>"required": true<br>},<br>"id": "email-input",<br>"label": "Email",<br>"type": "input",<br>"description": "Email field for the sender's contact address",<br>"required": true<br>},<br>"id": "message-input",<br>"label": "Message",<br>"type": "textarea",<br>"description": "Free text field for the inquiry message",<br>"required": true<br>},<br>"id": "submit-contact-form",<br>"label": "Send message",<br>"type": "button",<br>"description": "Submits the contact form",<br>"required": false<br>],<br>"navigation": [<br>{ "label": "Home", "url": "/" },<br>{ "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",<br>"authenticated_user": "string | null",<br>"current_page_state": "string",<br>"actions": [<br>"id": "string",<br>"label": "string",<br>"type": "button | input | textarea | select | checkbox | radio | other",<br>"description": "string",<br>"required": "boolean"<br>],<br>"navigation": [<br>{ "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.

Get your API key

manifest label string type description required

Related Articles