Outreach-Ziel ändern
/sites/{siteId}/outreach/{targetId}- Berechtigung
actions:apply- MCP-Tool
update_outreach_target
Set an outreach target's status, note or tags The status date moves when the status changes; status and note stay through later refreshes. Send status, note, tags or a mix; an empty or null note clears it, and tags replaces the target's tags ([] clears them). 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. |
targetIdPflicht | Pfad | stringOutreach target id, from GET /outreach. |
Anfrage (Body)
| Feld | Details |
|---|---|
status | to_contact | contacted | added | declined · New status |
note | string or null · at most 2000 characters; Your note, at most 2,000 characters; empty or null clears it |
tags | list of string · at most 10 items; Replaces the target's tags; [] clears them |
{
"status": "contacted",
"note": "Emailed the editor on Oct 2.",
"tags": [
"gear-review"
]
}Antwort
200 · application/json
| Feld | Details |
|---|---|
target | object · required |
target.id | string |
target.source | string |
target.url | string |
target.domain | string |
target.title | string |
target.score | number |
target.class | string |
target.reason | object |
target.reason.competitors | list of strings |
target.reason.domainRank | number |
target.reason.ourRank | number |
target.reason.spamScore | number |
target.reason.outOf | number |
target.reason.backlinks | number |
target.reason.pages | list of objects |
target.reason.pages[].competitor | string |
target.reason.pages[].url | string |
target.reason.pages[].anchor | string |
target.reason.pages[].title | string |
target.reason.pageKind | string |
target.reason.pageKindBy | string |
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 | object |
target.check.at | string |
target.check.ok | true or false |
target.check.status | number |
target.check.linksUs | true or false |
target.check.mentionsUs | true or false |
target.check.matched | list of strings |
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: nothing_to_change, 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 '{"status":"contacted","note":"Emailed the editor on Oct 2.","tags":["gear-review"]}' \
"https://app.monoranks.com/api/v1/sites/SITE_ID/outreach/TARGET_ID"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/outreach/TARGET_ID", {
method: "POST",
headers: { Authorization: "Bearer mr_ws_…", "Content-Type": "application/json" },
body: JSON.stringify({
"status": "contacted",
"note": "Emailed the editor on Oct 2.",
"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/TARGET_ID",
headers={"Authorization": "Bearer mr_ws_…"},
json={
"status": "contacted",
"note": "Emailed the editor on Oct 2.",
"tags": [
"gear-review",
],
},
)
res.raise_for_status()
data = res.json()<?php
$ch = curl_init("https://app.monoranks.com/api/v1/sites/SITE_ID/outreach/TARGET_ID");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => '{"status":"contacted","note":"Emailed the editor on Oct 2.","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/TARGET_ID",
{
"status": "contacted",
"note": "Emailed the editor on Oct 2.",
"tags": [
"gear-review"
]
},
{ headers: { Authorization: "Bearer mr_ws_…" } },
);Beispielantwort
{
"target": {
"id": "0b2d4f6a-8c0e-4a2c-9e4a-8c0e2a4c6e8a",
"source": "link_gap",
"url": "https://rideguide.example/best-bike-shops/",
"domain": "rideguide.example",
"title": "The best online bike shops",
"score": 82,
"class": "editorial",
"reason": {
"competitors": [
"bikeworld.example",
"cyclehub.example"
],
"domainRank": 47,
"ourRank": 33,
"spamScore": 4,
"outOf": 2,
"backlinks": 5,
"pages": [
{
"competitor": "bikeworld.example",
"url": "https://rideguide.example/best-bike-shops/",
"anchor": "Bike World",
"title": "The best online bike shops"
}
],
"pageKind": "review",
"pageKindBy": "ai"
},
"status": "contacted",
"statusAt": "2026-10-02T09:30:00.000Z",
"statusAuto": false,
"note": "Emailed the editor on Oct 2.",
"tags": [
"gear-review"
],
"firstSeen": "2026-09-14T03:00:00.000Z",
"lastSeen": "2026-10-05T03:00:00.000Z",
"gone": false,
"check": {
"at": "2026-10-05T03:10:00.000Z",
"ok": true,
"status": 200,
"linksUs": false,
"mentionsUs": false,
"matched": []
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/outreach?open=0b2d4f6a-8c0e-4a2c-9e4a-8c0e2a4c6e8a"
}
}{
"error": {
"code": "nothing_to_change",
"message": "Send status, note, tags or a mix of them."
}
}{
"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": "Outreach target not found."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}Der MCP-Server macht dasselbe mit dem Tool update_outreach_target.