Skip to content
Back to PageAudit

Card snapshot

pageaudit.online · 2026-10-14 05:23:07 UTC · c389f1b8cd106409cd22fed29d37a04953546a366124e726328fe91b52392a14

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "name": "PageAudit",
  "description": "Monitor search visibility and page delivery. Measure actions and conversion paths with a small script. Get evidence and suggested changes.",
  "url": "https://pageaudit.online",
  "provider": {
    "organization": "PageAudit",
    "url": "https://pageaudit.online",
    "email": "contato@pageaudit.online"
  },
  "documentationUrl": "https://pageaudit.online/llms.txt",
  "protocol": "mcp",
  "protocolUrl": "https://modelcontextprotocol.io",
  "interfaces": [
    {
      "transport": "streamable-http",
      "url": "https://pageaudit.online/mcp"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "authentication": "none"
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/markdown"
  ],
  "skills": [
    {
      "id": "list_sites",
      "name": "list_sites",
      "description": "Read up to 50 sites owned by the signed-in account. Follow next_cursor.",
      "endpoint": "GET /api/sites"
    },
    {
      "id": "add_site",
      "name": "add_site",
      "description": "Add a site to the account. No site count limit. This creates no subscription or payment. An account holds up to 1,000 sites (409 site_limit). Adding a site creates no subscription or payment. The existing guest audit workspace stays separate.",
      "endpoint": "POST /api/sites"
    },
    {
      "id": "get_site",
      "name": "get_site",
      "description": "Read one site owned by the signed-in account.",
      "endpoint": "GET /api/sites/:id"
    },
    {
      "id": "search_console",
      "name": "search_console",
      "description": "Read the site's last good 28-day sample, partial coverage, dates and collection failure. The sample covers 28 days, at most 50 queries and 50 pages. Coverage is partial. It is not a traffic total or a ranking promise. Credentials and raw provider responses are not returned.",
      "endpoint": "GET /api/sites/:id/search-console"
    },
    {
      "id": "connect_search_console",
      "name": "connect_search_console",
      "description": "Start read-only Google consent. The account owner must follow redirect in their browser. Follow redirect in the account's browser. Consent expires after five minutes. The callback is single-use and bound to the account and site. The property must match the site and Google must authorize it before the connection is saved.",
      "endpoint": "POST /api/sites/:id/search-console/connect"
    },
    {
      "id": "sync_search_console",
      "name": "sync_search_console",
      "description": "Collect a due sample. Repeated calls cannot bypass the daily reservation. The hourly schedule uses the same durable reservation. A failure preserves the last good sample and schedules the next attempt 24 hours later. This route cannot force an extra collection.",
      "endpoint": "POST /api/sites/:id/search-console/sync"
    },
    {
      "id": "disconnect_search_console",
      "name": "disconnect_search_console",
      "description": "Remove the local Google credential and stop collection. Keep the last good sample. The last good sample stays available. An in-flight callback or collection cannot reconnect the site.",
      "endpoint": "DELETE /api/sites/:id/search-console"
    },
    {
      "id": "journeys",
      "name": "journeys",
      "description": "Read the owned site's installation, actions, paths and ordered conversion funnel for the last seven days. Requires the account's browser session. Only this site's owner can read it. Data updates through the shared realtime transport. No user identity, typed text or screen recording.",
      "endpoint": "GET /api/sites/:id/journeys"
    },
    {
      "id": "configure_journeys",
      "name": "configure_journeys",
      "description": "Enable or pause an owned site's collection, or set up to eight ordered project_action steps. Activation requires an existing paid site package; this call never buys one. Configure optional Google credentials in the UI. Activation requires the existing site package or an operator-authorised internal benefit. A 402 opens the package offer when available. It never buys automatically. Keep Google secrets out of URLs and browser scripts.",
      "endpoint": "PUT /api/sites/:id/journeys"
    },
    {
      "id": "api_index",
      "name": "api_index",
      "description": "Discovers the whole PageAudit API (self-describing index).",
      "endpoint": "GET /api/"
    },
    {
      "id": "health",
      "name": "health",
      "description": "Liveness and the commit deployed right now \u2014 it is how the smoke waits for its own deploy.",
      "endpoint": "GET /api/health"
    },
    {
      "id": "list_tools",
      "name": "list_tools",
      "description": "Lists the micro-tools (title, meta, canonical, OG, JSON-LD\u2026).",
      "endpoint": "GET /api/tools"
    },
    {
      "id": "get_tool",
      "name": "get_tool",
      "description": "Copy and checks of one micro-tool by slug (e.g. title-tag-checker).",
      "endpoint": "GET /api/tools/:slug"
    },
    {
      "id": "audit_url",
      "name": "audit_url",
      "description": "Check a web page's search metadata, crawl access, structured data and selected discovery files. Return evidence, limits and suggested changes without creating a saved tab. A blocked target returns HTTP 502 with target_blocked. The report does not certify security or accessibility. This is the product for agents. Past the account or anonymous network's daily allowance the response is **402 with `accepts[]`** and `code: allowance_spent` \u2014 pay and repeat the same call. There is no captcha: people and agents pay the same way. The free alternative: a person signs in with an account to get the trial.",
      "endpoint": "POST /api/audit"
    },
    {
      "id": "create_guest",
      "name": "create_guest",
      "description": "Creates a guest token pa_\u2026 for the tab workspace. Keep the token: it is the identity of the tabs and of the audits tied to them.",
      "endpoint": "POST /api/guest"
    },
    {
      "id": "list_tabs",
      "name": "list_tabs",
      "description": "Lists the owner's saved pages (guest or session), with the active page's last report. Group pages by site to match the Projects table. One call loads the saved pages and the active page's last report. The UI groups pages by site in Projects and opens each site in a work tab. The introduction stays in Welcome. A signed-in account sends `X-Organization-Id`; a guest has one temporary workspace.",
      "endpoint": "GET /api/tabs"
    },
    {
      "id": "create_tab",
      "name": "create_tab",
      "description": "Opens a tab for a URL in the workspace. Past the free tab allowance it answers 402 with `accepts[]`: pay and repeat.",
      "endpoint": "POST /api/tabs"
    },
    {
      "id": "run_tab",
      "name": "run_tab",
      "description": "Re-audits the tab's URL. Consumes the same daily allowance as `POST /api/audit` \u2014 past it, 402 with `accepts[]`.",
      "endpoint": "POST /api/tabs/:id/run"
    },
    {
      "id": "tab_history",
      "name": "tab_history",
      "description": "The tab's previous runs and what changed between each one and the one before it (score delta, findings that appeared and that disappeared). Every run has always been kept; this is where you read the series. Each entry carries the score, the counts and a `change` with the point delta and the findings that appeared (`broke`) or disappeared (`fixed`) since the previous run \u2014 compared by finding code, never by message. Runs older than the watch feature are matched by URL.",
      "endpoint": "GET /api/tabs/:id/history"
    },
    {
      "id": "watch_tab",
      "name": "watch_tab",
      "description": "Turns the daily watch on or off for a tab: it re-audits the page once a day and e-mails when the score drops or a new error/warning appears. Needs the signed-in account (its browser session cookie); a guest token gets 403 `account_required`. With `monitor: true` the page is re-audited once a day and an e-mail goes out when the score drops or a new error/warning appears \u2014 never on an improvement. Watching needs an account (the alert has to reach someone) and each account watches a limited number of pages.",
      "endpoint": "PATCH /api/tabs/:id"
    },
    {
      "id": "lab_test",
      "name": "lab_test",
      "description": "Starts a lab test of an audit's page: Lighthouse run by Google PageSpeed Insights (performance, accessibility, best practices, SEO). Answers 202 at once; the test takes ~25 s to 2+ minutes \u2014 then read it with lab_result. Does not change the audit score. Answers **202** at once; the test runs for ~25 s to over 2 minutes and its summary is stored in the audit (`summary.lab.<strategy>`), so it comes back in `GET /api/audits/:id`, in the tab and in the shared report. It does not change the audit score. Calling again while the same strategy is running does not start a second test. Limits: 4 tests at a time on the server, 6 per network per hour and 500 per day for the whole product. Free: no x402 charge.",
      "endpoint": "POST /api/audits/:id/lab"
    },
    {
      "id": "lab_result",
      "name": "lab_result",
      "description": "The lab tests of an audit (mobile and desktop): running, finished with scores, metrics and biggest savings, or failed. With wait (up to 25) it answers as soon as a running test finishes. Long-poll: with `wait` the answer comes as soon as a running test finishes, or after `wait` seconds with `status: running`. Repeat until it is not running.",
      "endpoint": "GET /api/audits/:id/lab"
    },
    {
      "id": "get_audit",
      "name": "get_audit",
      "description": "Re-reads an audit already made, with `fixes` (the ready fix for each finding). Re-reading costs nothing and does not count against the allowance \u2014 the page's HTML is not kept, but the report is.",
      "endpoint": "GET /api/audits/:id"
    },
    {
      "id": "get_patch",
      "name": "get_patch",
      "description": "The consolidated patch of an audit: <head> block to paste, files to create and templates with placeholders. No model \u2014 only facts from the page. Each finding becomes a fix in one of three classes: `deterministico` (comes whole from what the page declares: final URL, title, description, OG), `molde` (a tag with a marked placeholder, like `{{TITULO}}`, and the suggested source) or `sem_patch` (a decision or infrastructure, with the instruction). Nothing is invented by a model.",
      "endpoint": "GET /api/audits/:id/patch"
    }
  ],
  "discovery": {
    "openapi": "https://pageaudit.online/openapi.json",
    "llms": "https://pageaudit.online/llms.txt",
    "okf": "https://pageaudit.online/okf/index.md",
    "numbers": "https://pageaudit.online/api/vitrine",
    "partnerships": "https://pageaudit.online/api/partners",
    "api_catalog": "https://pageaudit.online/.well-known/api-catalog",
    "agent_access": "https://pageaudit.online/.well-known/agent-access.json",
    "x402": "https://pageaudit.online/.well-known/x402",
    "pricing": "https://pageaudit.online/pricing",
    "docs": "https://pageaudit.online/docs"
  },
  "updated": "2026-10-14"
}