Outreach-Ziel hinzufügen
/sites/{siteId}/outreach- Berechtigung
actions:apply- MCP-Tool
add_outreach_target
Add a page to the outreach list Like "Add a page" on the Outreach screen (source manual). A few minutes later MonoRanks measures it like a link gap target (reason.pageKind, reason.domainRank, reason.ourRank, reason.spamScore, inside the spending limits; reason.measureData says why some are missing; reason.measuredAt says when), then checks the page; measured again weekly. Answers 201 when added, 200 when the page was already listed: that target is returned with the given status, note and tags (tags replace its tags). Recorded in Activity as the key owner.
Die Beschreibungen kommen aus dem OpenAPI-Dokument und sind auf Englisch.
Parameter
| Name | Ort | Details |
|---|---|---|
siteIdPflicht | Pfad | stringWebsite id, from GET /sites. |
Anfrage (Body)
| Feld | Details |
|---|---|
url | address (URL) · required; at most 2048 characters; Full http or https page address, not on the website itself and not a reserved test address |
note | string · at most 2000 characters; Your note, at most 2,000 characters |
status | to_contact | contacted | added | declined · Starting status (default to_contact) |
tags | list of string · at most 10 items; Labels for the target |
{
"url": "https://trailmag.example/gear/best-bike-shops/",
"note": "Editor asked for shop tips.",
"tags": [
"gear-review"
]
}Antwort
200 · application/json
| Feld | Details |
|---|---|
created | true or false · required; True when the page was added now; false when it was already listed |
target | object · required |
target.id | string |
target.source | string |
target.url | string |
target.domain | string |
target.title | |
target.score | number |
target.class | string |
target.reason | object |
target.status | string |
target.statusAt | string |
target.statusAuto | true or false |
target.note | string |
target.tags | list of strings |
target.firstSeen | string |
target.lastSeen | string |
target.gone | true or false |
target.check | |
target.link | string |
Hinweise
GET /sites/{siteId}/outreach listet Seiten und Websites, die Sie um einen Link oder eine Erwähnung bitten können, sortiert: offene Ziele zuerst nach score (0 bis 100), dann kontaktierte, aufgenommene und abgelehnte. Ziele, die ihre Quelle nicht mehr findet (gone), kommen zuletzt. MonoRanks sendet keine E-Mails und sucht keine Kontaktdaten heraus: Es listet die Ziele, Sie übernehmen die Ansprache und halten fest, was passiert ist.
| Was | Details |
|---|---|
source |
ai_source (KI-Antworten auf Ihre beobachteten Fragen zitieren die Seite, nennen Sie aber nicht), best_list (eine „Beste X“-Liste, die Ihre Mitbewerber nennt, Sie aber nicht), link_gap (eine Website, die auf zwei oder mehr Ihrer Mitbewerber verlinkt, nicht auf Sie), lost_link (eine starke Website, die nicht mehr auf Sie verlinkt und bei der die Bitte um eine Aktualisierung des Links die Lösung ist) oder manual (von Hand hinzugefügt). |
reason |
sagt warum, mit den Feldern, die die Quelle kennt: zum Beispiel questions, models und timesCited; keyword und position; competitors, domainRank, spamScore und outOf; oder lostAt. |
status |
to_contact, contacted, added oder declined. Filtern Sie mit status und source. counts enthält die Summen pro Status und Quelle. |
| Spam | Ziele mit einem Spam-Score über 60 fehlen, außer Sie übergeben spam=1; counts.spamHidden sagt, wie viele. |
| Schreiben | POST /sites nimmt status und/oder note (höchstens 2.000 Zeichen; eine leere Notiz löscht sie). Die Änderung wird in der Activity der Website unter dem Besitzer des Schlüssels protokolliert. Status und Notiz bleiben, wenn die Quelle das Ziel aktualisiert. |
| Von selbst aufgenommen | Einmal pro Woche liest MonoRanks jede offene Zielseite erneut, kostenlos. Verlinkt die Seite jetzt auf die Website oder nennt sie, wechselt das Ziel zu added und statusAuto ist true. |
Fehler
| Status | Bedeutung |
|---|---|
400 | Bad request. Codes: bad_url, own_site, test_domain, bad_status, bad_note, note_too_long, bad_tags. |
401 | Missing, unknown or revoked key. Codes: missing_key, invalid_key. |
403 | The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden. |
404 | Not found. Codes: not_found. |
429 | Too many requests this hour for this key. Codes: rate_limited. |
Beispielanfrage
curl -X POST \
-H "Authorization: Bearer mr_ws_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://trailmag.example/gear/best-bike-shops/","note":"Editor asked for shop tips.","tags":["gear-review"]}' \
"https://app.monoranks.com/api/v1/sites/SITE_ID/outreach"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/outreach", {
method: "POST",
headers: { Authorization: "Bearer mr_ws_…", "Content-Type": "application/json" },
body: JSON.stringify({
"url": "https://trailmag.example/gear/best-bike-shops/",
"note": "Editor asked for shop tips.",
"tags": [
"gear-review"
]
}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();import requests
res = requests.post(
"https://app.monoranks.com/api/v1/sites/SITE_ID/outreach",
headers={"Authorization": "Bearer mr_ws_…"},
json={
"url": "https://trailmag.example/gear/best-bike-shops/",
"note": "Editor asked for shop tips.",
"tags": [
"gear-review",
],
},
)
res.raise_for_status()
data = res.json()<?php
$ch = curl_init("https://app.monoranks.com/api/v1/sites/SITE_ID/outreach");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => '{"url":"https://trailmag.example/gear/best-bike-shops/","note":"Editor asked for shop tips.","tags":["gear-review"]}',
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);import axios from "axios";
const { data } = await axios.post(
"https://app.monoranks.com/api/v1/sites/SITE_ID/outreach",
{
"url": "https://trailmag.example/gear/best-bike-shops/",
"note": "Editor asked for shop tips.",
"tags": [
"gear-review"
]
},
{ headers: { Authorization: "Bearer mr_ws_…" } },
);Beispielantwort
{
"created": false,
"target": {
"id": "0b2d4f6a-8c0e-4a2c-9e4a-8c0e2a4c6e8a",
"source": "manual",
"url": "https://trailmag.example/gear/best-bike-shops/",
"domain": "trailmag.example",
"title": null,
"score": 50,
"class": "unknown",
"reason": {},
"status": "contacted",
"statusAt": "2026-10-06T10:20:00.000Z",
"statusAuto": false,
"note": "Editor asked for shop tips.",
"tags": [
"gear-review"
],
"firstSeen": "2026-10-06T10:15:00.000Z",
"lastSeen": "2026-10-06T10:15:00.000Z",
"gone": false,
"check": null,
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/outreach?open=0b2d4f6a-8c0e-4a2c-9e4a-8c0e2a4c6e8a"
}
}{
"error": {
"code": "bad_url",
"message": "url must be a full http or https page address, like https://example.com/partners/."
}
}{
"error": {
"code": "missing_key",
"message": "Send the key as Authorization: Bearer mr_site_…"
}
}{
"error": {
"code": "missing_scope",
"message": "This key does not have the scope this call needs."
}
}{
"error": {
"code": "not_found",
"message": "Website not found."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}Der MCP-Server macht dasselbe mit dem Tool add_outreach_target.