Skip to content
Back to PageAudit

Card snapshot

pageaudit.online · 2026-10-15 16:45:55 UTC · 7d5c64b7f8fd35c490b3d266bbaf5b2810d8f40eb17dddee323bc3ef245a9eb1

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 website issues, DNS changes and domain or HTTPS certificate expiry. Get alerts with evidence and suggested fixes.",
  "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": "connection_review",
      "name": "connection_review",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Read today's private TLS review without starting a scan. One review per account, organization, origin and UTC day. Starting requires current domain monitoring rights. The account has three starts per UTC day. Retries return the same review. The scanner samples one public IP, with three stages and a 170-second deadline. Partial results do not establish safety. GET never starts a scan. The shared realtime channel reports stage changes. Reports expire after 26 hours.",
      "endpoint": "GET /api/tabs/:id/domain/tls"
    },
    {
      "id": "review_connection",
      "name": "review_connection",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Start a TLS review of the saved HTTPS origin using current domain monitoring rights. At most three starts per account and UTC day, one per site. A repeated request reuses today's review. Do not claim complete safety from a partial result. One review per account, organization, origin and UTC day. Starting requires current domain monitoring rights. The account has three starts per UTC day. Retries return the same review. The scanner samples one public IP, with three stages and a 170-second deadline. Partial results do not establish safety. GET never starts a scan. The shared realtime channel reports stage changes. Reports expire after 26 hours.",
      "endpoint": "POST /api/tabs/:id/domain/tls"
    },
    {
      "id": "cancel_connection_review",
      "name": "cancel_connection_review",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Cancel the current TLS review and preserve completed evidence. One review per account, organization, origin and UTC day. Starting requires current domain monitoring rights. The account has three starts per UTC day. Retries return the same review. The scanner samples one public IP, with three stages and a 170-second deadline. Partial results do not establish safety. GET never starts a scan. The shared realtime channel reports stage changes. Reports expire after 26 hours.",
      "endpoint": "DELETE /api/tabs/:id/domain/tls"
    },
    {
      "id": "domain_portfolio",
      "name": "domain_portfolio",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Read cached domain monitoring and deadlines for selected saved pages. Does not start external collection or activate monitoring. Every tab must belong to the current account and organization. Reads by primary key without collection, activation or billing. Repeat with the next group of IDs for a larger workspace.",
      "endpoint": "POST /api/tabs/domain-portfolio"
    },
    {
      "id": "preview_domain_alerts",
      "name": "preview_domain_alerts",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Review the exact selected domains before changing renewal notices. Does not activate monitors, purchase access or change certificate notice timing. Select up to 25 saved pages. Repeated registrable domains count once. The server checks the account, organization and current revisions again. A stale preview changes nothing. This does not activate monitoring or purchase access.",
      "endpoint": "POST /api/tabs/domain-portfolio/alerts"
    },
    {
      "id": "apply_domain_alerts",
      "name": "apply_domain_alerts",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Apply the reviewed selection. Requires the preview from preview_domain_alerts. A stale preview changes nothing. Does not activate monitors, purchase access or change certificate notice timing. Select up to 25 saved pages. Repeated registrable domains count once. The server checks the account, organization and current revisions again. A stale preview changes nothing. This does not activate monitoring or purchase access.",
      "endpoint": "PATCH /api/tabs/domain-portfolio/alerts"
    },
    {
      "id": "domain_status",
      "name": "domain_status",
      "description": "Read registration, contact visibility, TLS, DNS, CAA, mail policies, certificate issuance and a limited server comparison. Read source dates and collection gaps. Private options require the account session. A discovered name never starts monitoring automatically. Pages share public observations by registry domain and HTTPS origin. Private settings and history stay with the account and organization. Missing data is not a healthy result.",
      "endpoint": "GET /api/tabs/:id/domain"
    },
    {
      "id": "check_domain",
      "name": "check_domain",
      "description": "Refresh due registration, contacts, TLS, DNS, mail policies, certificate issuance and a limited DNS/TLS sample. Reuses fresh public data. Does not enable monitoring or make a purchase. Reuse fresh observations. A failed or partial query preserves the last complete observation and its date. Up to 100 cold page reads per owner and UTC day. This call does not enable a monitor or buy access.",
      "endpoint": "POST /api/tabs/:id/domain"
    },
    {
      "id": "set_domain_expiry",
      "name": "set_domain_expiry",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Set or remove the private manual expiry. It does not change the registry data or confirm renewal payment. Send manual_expires_on, dns, or both. Omitted settings are preserved. DNS requires both selectors and rotating_addresses. A manual date does not change registry data or confirm renewal payment. An identical retry is idempotent. A conflicting revision returns 409.",
      "endpoint": "PATCH /api/tabs/:id/domain"
    },
    {
      "id": "configure_domain_dns",
      "name": "configure_domain_dns",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Set up to three known DKIM selectors and choose whether IP rotation is expected. Expected rotation keeps history without notices; alias changes still notify. Does not discover selectors, enable monitoring or authenticate sent messages. Send manual_expires_on, dns, or both. Omitted settings are preserved. DNS requires both selectors and rotating_addresses. A manual date does not change registry data or confirm renewal payment. An identical retry is idempotent. A conflicting revision returns 409.",
      "endpoint": "PATCH /api/tabs/:id/domain"
    },
    {
      "id": "configure_domain_monitor",
      "name": "configure_domain_monitor",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Enable or stop domain monitoring, or pause notices for maintenance. Uses existing rights; 402 supplies checkout instructions and never buys automatically. Stopping a monitor does not cancel a subscription. Activation requires a current domain benefit, a preserved prepaid watch benefit or the account trial. Count a registry domain once per account, including its organization copies. Add only the tab's origin. HTTP receives DNS checks only. Stopping monitoring keeps history and does not cancel a subscription. Maintenance pauses notices while collection continues. Confirm enabled, no suspension and next_check_at after saving.",
      "endpoint": "PUT /api/tabs/:id/domain/monitor"
    },
    {
      "id": "domain_history",
      "name": "domain_history",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Read up to 50 private incidents with notice delivery. Send the last event number as before for the next page. A first observed risk is an initial incident, not evidence of an external change. The first DNS and certificate-issuance snapshots are silent baselines. DNS changes, incompatible server samples and connection failures need two distinct observations. Expected IP rotation is silent. Repeated observations do not duplicate a notice. Contact changes expose field states only. Issuance does not prove installation. DNS records do not prove authentication of sent mail.",
      "endpoint": "GET /api/tabs/:id/domain/history"
    },
    {
      "id": "acknowledge_domain_event",
      "name": "acknowledge_domain_event",
      "description": "Requires the account session, current X-Organization-Id and CSRF for writes. Acknowledge an expected event. Suppress its notice only if sending has not started. Preserve the event and its evidence. Preserve the event and observation. Acknowledgement does not erase a confirmed risk or retract a sent notice. Repetition is idempotent.",
      "endpoint": "POST /api/tabs/:id/domain/history/:number/ack"
    },
    {
      "id": "audit_site",
      "name": "audit_site",
      "description": "Check the first 20 URLs of a site's sitemap: status, redirects, robots.txt, noindex, canonical, titles and descriptions. It also flags a plan with different prices on different pages. Free, without an account. The same site within one hour returns the stored sample. URLs of another host are counted, never requested. The free sample of the SEO audit. It reads `/sitemap.xml` (an index opens up to 5 sitemaps), checks the first 20 URLs of the same host and reports: not 200, redirects (to the home page or to a broken page), robots.txt blocks, `noindex`, a missing or foreign canonical, HTML without content, a title that is missing, generic or outside 40\u201360 characters, a missing description, repeated titles and descriptions, and the same plan with different prices (pages, JSON-LD and llms.txt). URLs of another host are counted, never requested. The same site within one hour returns the stored sample (`cached_at`) without requesting the site again and without spending the allowance. A new sample spends one audit of the daily allowance; past it, **402 with `accepts[]`**, as in `POST /api/audit`.",
      "endpoint": "POST /api/site-audit"
    },
    {
      "id": "api_index",
      "name": "api_index",
      "description": "Discovers the whole PageAudit API (self-describing index).",
      "endpoint": "GET /api/"
    }
  ],
  "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-15"
}