REST-API

Eine Basis-URL, ein Bearer-Schlüssel, JSON rein und raus. Alles, was die App für eine Website zeigt, gibt es auch hier.

Basis-URL und Anmeldung

https://app.monoranks.com/api/v1
Authorization: Bearer mr_ws_… (or mr_site_…)

Maschinenlesbare Beschreibung jedes Endpunkts und jedes Webhook-Ereignisses: https://app.monoranks.com/api/v1/openapi.json (OpenAPI 3.1). Fügen Sie sie in Postman, Insomnia, Bruno oder einen Client-Generator ein.

Einen Workspace-Schlüssel erstellen Sie in der App unter Settings → API and MCP → New credential. Er gilt für alle Websites oder nur für die, die Sie anhaken. Ein Website-Schlüssel (mr_site_…) entsteht, wenn sich das WordPress-Plugin oder die Shopify-App verbindet, und gilt für eine Website. Schlüssel werden nur einmal angezeigt. Siehe API-Schlüssel und Berechtigungen.

Endpunkte

Alle Pfade unten beginnen mit der Basis-URL.

Websites und Werte

Methode und Pfad Was zurückkommt Scope
GET /sites Websites, die dieser Schlüssel lesen darf, mit ihren IDs sites:read
GET /portfolio Alle Websites des Schlüssels in einem Aufruf, wie die Websites-Liste: Werte, Änderung seit dem letzten Audit und seit letzter Woche, offene Probleme, wartende Aktionen, letztes Audit, nächstes Audit und Search-Console-Klicks (mit search:read) sites:read
GET /sites/{siteId} Übersicht: Werte, letztes Audit, offene Probleme, WordPress-Zugriff und wie aktuell die Daten jeder Verbindung sind sites:read
GET /sites/{siteId}/scores Aktueller Wert und 13 Wochen Verlauf mit Wertversionen sites:read
GET /sites/{siteId}/performance Geschwindigkeit pro getesteter Seite: der Labortest neben echten Besucherdaten von Chrome-Nutzern, und welche der beiden Zahlen jeder Geschwindigkeitsbefund nutzt sites:read

Probleme und Aktionen

Methode und Pfad Was zurückkommt Scope
GET /sites/{siteId}/issues Probleme, dieselbe Liste wie auf dem Issues-Bildschirm (Standard: offen, wieder geöffnet, in Arbeit, Prüfung geplant; status= nimmt eine kommagetrennte Liste) issues:read
GET /sites/{siteId}/issues/{issueId} Ein Problem mit betroffenen Seiten, Belegen, der KI-Erklärung, den vorgeschlagenen neuen Werten und der letzten genehmigten Änderung issues:read
POST /sites/{siteId}/issues/{issueId}/recheck Eine erneute Prüfung einplanen; das Problem gilt erst als gelöst, wenn die Prüfung es nicht mehr findet issues:recheck
GET /sites/{siteId}/actions Aktionen nach Priorität, mit geschätztem Wertgewinn und wie lange jede schon offen ist (limit, Standard 25, höchstens 100) issues:read
POST /sites/{siteId}/actions/{issueId}/apply Neue SEO-Titel, Beschreibungen, Canonicals oder noindex genehmigen und über den WordPress-Connector schreiben actions:apply

Seiten

Methode und Pfad Was zurückkommt Scope
GET /sites/{siteId}/pages Gecrawlte Seiten (q zum Suchen, page, per bis 200) pages:read
GET /sites/{siteId}/pages/{pageId} Seitendaten, Werte und Befunde pages:read
GET /sites/{siteId}/pages/findings?url= Dasselbe, gesucht über die Adresse pages:read

Search Console

Methode und Pfad Was zurückkommt Scope
GET /sites/{siteId}/search/summary Summen für 7, 28 oder 90 Tage (days=) im Vergleich zum Zeitraum davor, Top-Seiten und Top-Suchanfragen search:read
GET /sites/{siteId}/search/rows Zeilen für einen Zeitraum, nach Suchanfrage, Seite, Suchanfrage und Seite oder Tag; seitenweise oder mit format=csv als eine CSV-Datei search:read

KI-Sichtbarkeit und KI-Bereitschaft

Methode und Pfad Was zurückkommt Scope
GET /sites/{siteId}/ai-visibility Was KI-Assistenten auf die beobachteten Fragen der Website geantwortet haben, pro Woche ai:read
GET /sites/{siteId}/ai-visibility/gaps Fragen, bei denen KI-Antworten andere Websites nennen, aber nie diese ai:read
GET /sites/{siteId}/geo Zugriff von KI-Crawlern laut robots.txt, llms.txt und Signale zur Organisation aus dem letzten Audit ai:read
GET /sites/{siteId}/geo/llms-txt Die live /llms.txt, jetzt gelesen, und ein veröffentlichungsfertiger Entwurf aus Ihren Seiten ai:read
POST /sites/{siteId}/geo/llms-txt Eine neue /llms.txt genehmigen und über den WordPress-Connector schreiben actions:apply
GET /sites/{siteId}/geo/ai-crawlers Was die robots.txt, jetzt gelesen, jedem KI-Crawler sagt, und die Regeln, die MonoRanks zuletzt geschrieben hat ai:read
POST /sites/{siteId}/geo/ai-crawlers Erlauben- oder Sperren-Regeln pro KI-Crawler genehmigen und in die robots.txt schreiben actions:apply
GET /sites/{siteId}/agentic Ergebnisse von Agentic Browsing (kann ein KI-Agent die Seite nutzen), pro getesteter Seite und Gerät, mit dem, was zu beheben ist ai:read
POST /sites/{siteId}/agentic/run Die Agentic-Browsing-Prüfung für eine Seite neu ausführen; antwortet 202 mit einer Job-ID issues:recheck
GET /sites/{siteId}/agentic/runs/{jobId} Status und Ergebnis eines Neulaufs ai:read

Audits

Methode und Pfad Was zurückkommt Scope
GET /sites/{siteId}/audits Die letzten Audits, das gerade laufende, das nächste wöchentliche Audit, die Seitenbudgets und die heute noch möglichen Starts sites:read
POST /sites/{siteId}/audits Jetzt ein vollständiges Audit starten, optional mit pageBudget; antwortet 202 mit einer Audit-ID audits:run
GET /sites/{siteId}/audits/{auditId} Ein Audit: Status, bisher gecrawlte Seiten, Sitemap-Abdeckung, warum es früher endete sites:read

Öffentlich, ohne Schlüssel

Methode und Pfad Was zurückkommt
GET /openapi.json Das OpenAPI-3.1-Dokument für alles oben
GET /plans Tarife und Preise
GET /changelog Versionshinweise als Markdown

Blättern

Jede Liste blättert auf ihre eigene Art; die Details stehen im OpenAPI-Dokument:

  • GET /portfolio, GET /sites/{siteId}/pages und GET /sites/{siteId}/agentic nehmen page (ab 1) und per (Standard 50, höchstens 200).
  • GET /sites/{siteId}/search/rows gibt nextCursor zurück; senden Sie ihn als cursor zurück, bis er null ist. limit ist 1 bis 10.000 (Standard 1.000).
  • Vorschläge zu einem Problem kommen zu je 100; siehe unten.
  • GET /sites/{siteId}/actions nimmt limit; GET /sites/{siteId}/audits nimmt limit (Standard 5, höchstens 25).

Vorgeschlagene Werte zu einem Problem

Für ein Problem, das MonoRanks beheben kann (SEO-Titel, Meta-Beschreibung, Canonical oder Weiterleitung), gibt GET /sites/{siteId}/issues/{issueId} auch suggestions zurück: für jede betroffene Seite den aktuellen Wert und den Wert, den MonoRanks vorschlägt. Es sind dieselben Werte, die die App zeigt, bevor Sie auf Apply drücken.

"suggestions": [
  { "url": "https://example.com/pricing/", "pageId": "…", "current": "Pricing", "suggested": "Pricing | Example", "writable": true }
],
"suggestionsTotal": 240,
"suggestionsOffset": 0,
"suggestionsLimit": 100,
"suggestionsNextOffset": 100,
"suggestionsTruncated": true
  • Blättern. Jeder Aufruf liefert bis zu 100. Für die nächsten rufen Sie erneut auf, mit ?suggestions_offset= gleich suggestionsNextOffset; nach der letzten Seite ist es null. suggestions_limit (1 bis 100) legt die Seitengröße fest. Die Schreibweisen suggestionsOffset und suggestionsLimit funktionieren auch.
  • suggested ist null, wenn MonoRanks für diese Seite keinen guten neuen Wert hat. Ein zu langer Titel wird nach festen Regeln gekürzt, die das Thema der Seite behalten und nie einen Ausdruck mittendrin abschneiden; wenn kein kürzerer Titel passt, ist suggested null und Sie können in der App einen entwerfen.
  • suggestionsNote (nur Titel) ist gesetzt, wenn die Website die Groß- und Kleinschreibung von Titeln auf der Seite ändert, zum Beispiel mit der Einstellung Capitalize Titles von Rank Math.
  • writable ist false, mit notWritableReason, wenn apply diese Seite nicht schreiben kann, zum Beispiel ein Kategoriearchiv, das kein WordPress-Beitrag und keine Seite ist. Senden Sie diese nicht an apply.
  • advice (nur Meta-Beschreibungen) sagt, wann eine Seite vielleicht keine Beschreibung braucht: eine Rechtsseite oder ein Archiv (leer lassen oder noindex setzen), ein leeres Archiv (Beiträge hinzufügen oder noindex setzen) oder eine Login-, Konto-, Warenkorb- oder Kassenseite (noindex setzen; es wird keine Beschreibung vorgeschlagen).
  • titleTemplate (zu lange Titel) ist gesetzt, wenn eine gemeinsame Endung aus der Titelvorlage des SEO-Plugins die meisten Titel zu lang macht; dann behebt eine Änderung an der Vorlage alle.
  • lastRecheck sagt, was die letzte erneute Prüfung gefunden hat. Eine Prüfung liest jede gelistete Seite frisch neu, sodass bereits behobene Seiten aus der Liste fallen. Eine Seite, die nicht geantwortet hat, bleibt gelistet und wird in lastRecheck.notRechecked gezählt.
  • lastChange ist der letzte genehmigte Stapel, mit dem Status jeder Änderung. not_live heißt: geschrieben, aber die Seite zeigt noch einen anderen Wert; notLiveReason sagt warum, auch ob der Seiten-Cache der Website nach dem Schreiben geleert wurde. Eine erneute Prüfung schaut sich solche Änderungen noch einmal an. Titel und Beschreibungen gelten als live, wenn sich nur Groß- und Kleinschreibung, Leerzeichen, Anführungszeichen oder Bindestriche unterscheiden; liveNote sagt dann, was sie geändert hat.

Senden Sie die Werte, die Sie genehmigen, an POST /sites/{siteId}/actions/{issueId}/apply als { "changes": [ { "url": "…", "value": "…" } ] } (höchstens 500). Über die API schreibt apply SEO-Titel, Meta-Beschreibungen, Canonicals und noindex; Alt-Texte von Bildern und Weiterleitungen wenden Sie in der App an.

Persönliche E-Mail-Adressen im Seitentext, den MonoRanks speichert, werden verborgen, zum Beispiel j•••@gmail.com.

Beispiel

curl -H "Authorization: Bearer mr_ws_…" \
  "https://app.monoranks.com/api/v1/sites/SITE_ID/actions?limit=5"
{
  "waiting": 1,
  "actions": [
    { "rank": 1, "issueId": "…", "title": "Missing meta description", "severity": "serious", "effort": "low",
      "priority": 8.4, "estimatedScoreGain": 3.2, "status": "open", "ageDays": 16, "waitingWeeks": 2,
      "writableField": "seo_description", "link": "https://app.monoranks.com/sites/SITE_ID/actions/…" }
  ]
}

Ein Audit starten

curl -X POST -H "Authorization: Bearer mr_ws_…" -H "Content-Type: application/json" \
  -d '{ "pageBudget": 1000 }' "https://app.monoranks.com/api/v1/sites/SITE_ID/audits"

Der Aufruf antwortet sofort mit 202, einer auditId und einer poll-Adresse; verfolgen Sie das Audit mit GET /sites/{siteId}/audits/{auditId} etwa einmal pro Minute. pageBudget ist optional und darf höchstens die Seiten pro Audit Ihres Tarifs betragen: Free 200, Starter 500, Agency 1.000, Enterprise 10.000. Pro Website läuft immer nur ein Crawl, und über API und MCP lassen sich höchstens 3 Audits pro Website und Tag starten. Das wöchentliche Audit läuft wie gewohnt.

Fehler und Grenzen

Fehler sehen so aus: { "error": { "code": "…", "message": "…" } }:

Status Bedeutung
400 ein falscher Parameter oder Inhalt, zum Beispiel ein falscher Zeitraum, ein Seitenbudget über dem Tarif oder eine Seite, die nicht geschrieben werden kann
401 Schlüssel fehlt, ist unbekannt oder widerrufen
403 Scope fehlt, die Website gehört nicht zum Schlüssel, oder die Person hinter dem Schlüssel hat keinen Zugriff mehr
404 keine solche Website, kein solches Problem, keine solche Seite, kein solches Audit oder kein solcher Pfad
409 etwas ist schon geplant oder läuft (eine erneute Prüfung, ein Audit, derselbe Agentic-Browsing-Lauf), oder die Website hat keinen WordPress-Connector, der schreiben kann
429 Stundengrenze erreicht (1.200 Anfragen pro Schlüssel und Stunde), das tägliche Budget für Geschwindigkeitstests ist aufgebraucht, oder heute wurden schon 3 Audits gestartet
503 die API oder diese Funktion ist gerade abgeschaltet

Ein Schlüssel handelt als die Person, die ihn erstellt hat. Verlässt diese Person den Workspace oder wird sie Kundenbetrachter, funktioniert der Schlüssel nicht mehr.

Häufige Fragen

Gibt es ein SDK?

Noch nicht. Das OpenAPI-Dokument unter /api/v1/openapi.json funktioniert mit den üblichen Generatoren (openapi-generator, Kiota, oazapfts), wenn Sie typisierte Clients möchten.

Kann ich über die API Daten schreiben?

Es gibt einige Schreibvorgänge, jeder mit eigenem Scope: eine erneute Prüfung starten oder die Agentic-Browsing-Prüfung neu ausführen (issues:recheck), ein vollständiges Audit starten (audits:run) und neue SEO-Titel, Beschreibungen, Canonicals, eine llms.txt-Datei oder Regeln für KI-Crawler genehmigen, die MonoRanks dann über den WordPress-Connector schreibt (actions:apply). Jeder genehmigte Schreibvorgang lässt sich in der App 30 Tage lang rückgängig machen. Alles andere ist nur lesend.

Was ist mit den öffentlichen Endpunkten?

GET /api/v1/plans und GET /api/v1/changelog brauchen keinen Schlüssel. Die Website nutzt sie, um Preise und Versionshinweise zu zeigen.