Agent quickstart
Install the client, export a key issued by [email protected], and create a task. The client reads MUNTINA_API_KEY from the environment.
pip install muntina
import os
from muntina import Client
client = Client(api_key=os.environ["MUNTINA_API_KEY"])
task = client.tasks.create(
goal="Open the public pricing page and return the three plan names with monthly prices.",
start_url="https://muntina.com/pricing",
schema={
"type": "object",
"required": ["plans"],
"properties": {
"plans": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "monthly_usd"],
"properties": {
"name": {"type": "string"},
"monthly_usd": {"type": "string"}
}
}
}
}
},
)
print(task.wait().output)
Browser quickstart
Create a managed Chromium and attach Playwright over CDP. Minutes bill at $0.07 per hour.
from playwright.sync_api import sync_playwright
from muntina import Client
import os
client = Client(api_key=os.environ["MUNTINA_API_KEY"])
browser = client.browsers.create(stealth=True, profile_id="prof_vendor_01")
with sync_playwright() as p:
chromium = p.chromium.connect_over_cdp(browser.cdp_url)
page = chromium.contexts[0].pages[0]
page.goto("https://sellercentral.amazon.com/orders")
page.screenshot(path="orders.png")
browser.stop()
Open-source quickstart
The library runs the same tree-first loop against a local Chromium. MIT license. Hosted sessions still need a key.
from muntina import LocalAgent
agent = LocalAgent(executable_path="/usr/bin/chromium")
result = agent.run(
goal="List the invoice rows in the open tab.",
schema={"type": "object", "properties": {"invoices": {"type": "array"}}},
)
print(result.output)
Auth
Hosted calls send Authorization: Bearer with the live key. Keys are workspace-scoped. Rotate a key from the dashboard; the previous secret stops on the next request. Human takeover pauses a task at an auth wall. Resume with POST /v1/tasks/{id}/resume after the profile holds the session cookie.
Profiles
A profile stores cookies, local storage, and fonts for one workspace. Attach profile_id on task or browser create. Isolation stays per session when you omit the profile. Delete a profile with DELETE /v1/profiles/{id}. Recordings never include proxy passwords stored on the profile.
Stealth
Stealth builds ship on Pane and Wall. They keep navigator.webdriver unset, match common Chrome TLS, and load the profile’s fonts. Combine stealth with residential proxies or your own. Sash runs the standard build.
Webhooks
Register an HTTPS endpoint on the workspace. Muntina POSTs task.succeeded, task.failed, and browser.stopped. The header Muntina-Signature is hex HMAC-SHA256 of the raw body with your workspace webhook secret. Retry policy: 3 attempts, 30 seconds apart. Respond 2xx to stop retries.
API
Base URL: https://api.muntina.xyz/v1. REST plus SDK. Resources: sessions, tasks, browsers, files. OpenAPI is served at https://api.muntina.xyz/v1/openapi.json to authenticated keys.
- POST /v1/tasks
- GET /v1/tasks/{id}
- POST /v1/tasks/{id}/resume
- POST /v1/browsers
- GET /v1/browsers/{id}
- POST /v1/browsers/{id}/stop
- GET /v1/files/{id}
Task-run JSON
Completed run task_0f8c2a91b7e34c55, recorded 13 August 2026. Goal: sign in with the saved profile, open billing, return the last three invoices.
{
"id": "task_0f8c2a91b7e34c55",
"object": "task",
"status": "succeeded",
"created_at": "2026-08-13T10:14:02Z",
"completed_at": "2026-08-13T10:16:41Z",
"session_id": "ses_9c41d2aa",
"profile_id": "prof_rahul_vendor_01",
"browser_minutes": 2.65,
"credits_used": 28.02,
"meter": {
"browser_usd": 0.00309,
"model_input_tokens": 40000,
"model_output_tokens": 1200
},
"input": {
"goal": "Sign in with the saved profile, open the billing page, and return the last three invoices.",
"start_url": "https://sellercentral.amazon.com/orders",
"schema": {
"type": "object",
"required": ["invoices"],
"properties": {
"invoices": {
"type": "array",
"items": {
"type": "object",
"required": ["invoice_id", "amount_usd", "due_date"],
"properties": {
"invoice_id": {"type": "string"},
"amount_usd": {"type": "string"},
"due_date": {"type": "string"}
}
}
}
}
}
},
"output": {
"invoices": [
{"invoice_id": "INV-10482", "amount_usd": "1840.00", "due_date": "2026-08-30"},
{"invoice_id": "INV-10451", "amount_usd": "920.50", "due_date": "2026-08-15"},
{"invoice_id": "INV-10419", "amount_usd": "220.00", "due_date": "2026-07-31"}
]
},
"recording_url": "https://files.muntina.xyz/rec/task_0f8c2a91b7e34c55.webm"
}
Benchmarks
Method first. Freeze a suite of vendor-portal tasks before a run. Each task has a start URL, a JSON Schema, and an exact-match oracle on named fields. The agent may use the accessibility tree and cleaned DOM. Screenshots are allowed only when the tree has zero named controls. Publish the receipt: suite hash, seed, model id, browser build, credit draw, and per-task pass or fail.
Command: muntina bench pane-v1 17. The receipt writes to stdout as JSON. We publish our frozen receipts in the dashboard after each suite freeze. Suite scores live in the receipt. Re-run pane-v1 against your key and compare receipts field by field.
Status
All systems clear as of 13 August 2026, 16:00 Asia/Kolkata. Hosted agents, managed Chromium, files, and webhooks are up. Open incidents appear in this pane with start time, impact, and a close note. Historical incidents stay listed. Mail [email protected] for a Wall status page on your domain.