Entwicklerdokumentation

Alle Websites auf einmal

GET/portfolio
Berechtigung
sites:read
MCP-Tool
portfolio

Every website in one call, with scores and changes The Websites list of the app as data, sorted by name. A website key sees only its website. `search` (28 days against the 28 before) is only there for keys with search:read.

Die Beschreibungen kommen aus dem OpenAPI-Dokument und sind auf Englisch.

Parameter

NameOrtDetails
pageQueryintegerdefault 1, min 1Page number, from 1.
perQueryintegerdefault 50, min 1, max 200Rows per page, 1 to 200.

Antwort

200 · application/json

FeldDetails
totalinteger · required; Rows that match, over all pages
pageinteger · required; This page, from 1
perinteger · required; Rows per page
hasMoretrue or false · required; More rows after this page
websiteslist of object · required
websites[].idstring · required; Website id
websites[].namestring · required; Website name
websites[].hoststring · required; Host name, without www.
websites[].urladdress (URL) · required; Home page address
websites[].platformwordpress | astro | shopify | webflow | other | unknown · required; What the website runs on
websites[].statusnew | auditing | ready | paused · required; Website state; a paused website gets no scheduled audits
websites[].scoreobject or null · required; Latest score; null before the first audit
websites[].score.siteinteger or null · required; Site score, 0 to 100; null until enough is measured
websites[].score.healthinteger or null · required; Health score, 0 to 100; null until enough is measured
websites[].score.aeointeger or null · required; AEO readiness, 0 to 100; null until enough is measured
websites[].score.coveragenumber · required; Share of the website that could be measured, 0 to 1
websites[].score.confidencehigh | medium | low · required; How sure the score is
websites[].score.versionstring · required; Score formula version
websites[].score.computedAtstring · required; When it was computed
websites[].score.categoriesobject · required; Score per category (Technical, On-page, Internal linking and Performance); null where too little was measured
websites[].score.categories.Technicalnumber
websites[].score.categories.On-pagenumber
websites[].score.categories.Internal linkingnumber
websites[].score.categories.Performancenumber
websites[].previousAuditobject · required; Score the full audit before the latest one computed
websites[].previousAudit.sitenumber
websites[].previousAudit.healthnumber
websites[].previousAudit.aeonumber
websites[].previousAudit.computedAtstring
websites[].lastWeekobject · required; Latest score at least 7 days old
websites[].lastWeek.sitenumber
websites[].lastWeek.healthnumber
websites[].lastWeek.aeonumber
websites[].lastWeek.computedAtstring
websites[].changeobject · required; Differences in points
websites[].change.sincePreviousAuditobject · required
websites[].change.sincePreviousAudit.sitenumber
websites[].change.sincePreviousAudit.healthnumber
websites[].change.sincePreviousAudit.aeonumber
websites[].change.sincePreviousAudit.sincestring
websites[].change.sinceLastWeekobject · required
websites[].change.sinceLastWeek.sitenumber
websites[].change.sinceLastWeek.healthnumber
websites[].change.sinceLastWeek.aeonumber
websites[].change.sinceLastWeek.sincestring
websites[].issuesobject · required
websites[].issues.openinteger · required; Open audit findings
websites[].issues.criticalinteger · required; Open critical findings
websites[].issues.newThisWeekinteger · required; Found in the last 7 days
websites[].actionsobject · required
websites[].actions.openinteger · required; Open actions, keyword tasks included
websites[].actions.waitinginteger · required; Open 14 days or more
websites[].lastAuditobject or null · required; Last finished full audit
websites[].lastAudit.idstring · required; Audit id
websites[].lastAudit.finishedAtstring or null · required
websites[].lastAudit.pagesCrawledinteger · required; Pages read
websites[].lastAudit.partialReasonstring or null · required; Why the audit stopped early (page or time budget, cancelled); null when complete
websites[].lastAudit.coverageobject or null · required; Sitemap coverage; null without a sitemap
websites[].lastAudit.coverage.sitemapUrlsinteger · required; Addresses in the sitemap
websites[].lastAudit.coverage.sitemapCrawledinteger · required; Of those, read
websites[].lastAudit.coverage.percentinteger · required; Share read, 0 to 100
websites[].runningobject or null · required; A crawl queued or running now
websites[].nextScheduledAuditAtstring or null · required; Next weekly audit; null for a paused website
websites[].searchobject · search:read keys only. { connected: false } without Search Console.
websites[].search.connectedtrue or false · required; Search Console is connected
websites[].search.staletrue or false · Search Console data stopped updating
websites[].search.clicksinteger · Clicks, last 28 days
websites[].search.impressionsinteger · Impressions, last 28 days
websites[].search.previousClicksinteger · Clicks, the 28 days before
websites[].search.previousImpressionsinteger · Impressions, the 28 days before
websites[].search.clicksChangePctnumber or null · Change in percent; null when the period before had none
websites[].search.impressionsChangePctnumber or null · Change in percent; null when the period before had none
websites[].linkaddress (URL) · required; The website in the app
searchPeriodobject · The days `search` covers (search:read keys only)
searchPeriod.daysinteger · required; Days in the period (28)
searchPeriod.fromdate (YYYY-MM-DD) · required
searchPeriod.todate (YYYY-MM-DD) · required
searchPeriod.previousFromdate (YYYY-MM-DD) · required
searchPeriod.previousTodate (YYYY-MM-DD) · required
notestring · required; How to read the numbers

Fehler

StatusBedeutung
400Bad request. Codes: bad_page, bad_per.
401Missing, unknown or revoked key. Codes: missing_key, invalid_key.
403The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden.
429Too many requests this hour for this key. Codes: rate_limited.

Beispielanfrage

curl \
  -H "Authorization: Bearer mr_ws_…" \
  "https://app.monoranks.com/api/v1/portfolio"

Beispielantwort

{
  "total": 1,
  "page": 1,
  "per": 50,
  "hasMore": false,
  "websites": [
    {
      "id": "3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13",
      "name": "Acme Bikes",
      "host": "acmebikes.com",
      "url": "https://acmebikes.com/",
      "platform": "wordpress",
      "status": "ready",
      "score": {
        "site": 78,
        "health": 81,
        "aeo": 69,
        "coverage": 0.92,
        "confidence": "high",
        "version": "1.1.0",
        "computedAt": "2026-10-04T02:41:12.000Z",
        "categories": {
          "Technical": 84,
          "On-page": 76,
          "Internal linking": 88,
          "Performance": 71
        }
      },
      "previousAudit": {
        "site": 74,
        "health": 77,
        "aeo": 66,
        "computedAt": "2026-09-27T02:38:40.000Z"
      },
      "lastWeek": {
        "site": 74,
        "health": 77,
        "aeo": 66,
        "computedAt": "2026-09-27T02:38:40.000Z"
      },
      "change": {
        "sincePreviousAudit": {
          "site": 4,
          "health": 4,
          "aeo": 3,
          "since": "2026-09-27T02:38:40.000Z"
        },
        "sinceLastWeek": {
          "site": 4,
          "health": 4,
          "aeo": 3,
          "since": "2026-09-27T02:38:40.000Z"
        }
      },
      "issues": {
        "open": 14,
        "critical": 1,
        "newThisWeek": 2
      },
      "actions": {
        "open": 17,
        "waiting": 5
      },
      "lastAudit": {
        "id": "d4f6a8c0-2e4a-4c6e-8a0c-4e6a8c0e2a4b",
        "finishedAt": "2026-10-04T02:40:55.000Z",
        "pagesCrawled": 186,
        "partialReason": null,
        "coverage": {
          "sitemapUrls": 180,
          "sitemapCrawled": 176,
          "percent": 98
        }
      },
      "running": null,
      "nextScheduledAuditAt": "2026-10-11T02:00:00.000Z",
      "search": {
        "connected": true,
        "stale": false,
        "clicks": 4210,
        "impressions": 168300,
        "previousClicks": 3890,
        "previousImpressions": 151200,
        "clicksChangePct": 8.2,
        "impressionsChangePct": 11.3
      },
      "link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/overview"
    }
  ],
  "searchPeriod": {
    "days": 28,
    "from": "2026-09-06",
    "to": "2026-10-03",
    "previousFrom": "2026-08-09",
    "previousTo": "2026-09-05"
  },
  "note": "One row per website the key covers, sorted by name."
}

Der MCP-Server macht dasselbe mit dem Tool portfolio.