افزودن مورد جذب لینک
/sites/{siteId}/outreach- Scope
actions:apply- ابزار MCP
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.
توضیح ها از سند OpenAPI می آیند و انگلیسی اند.
پارامترها
| نام | محل | توضیح |
|---|---|---|
siteIdاجباری | path | stringWebsite id, from GET /sites. |
بدنه درخواست
| فیلد | توضیح |
|---|---|
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"
]
}پاسخ
200 · application/json
| فیلد | توضیح |
|---|---|
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 |
نکته ها
GET /sites/{siteId}/outreach صفحه ها و سایت هایی را لیست می کند که ارزش دارد از آن ها لینک یا منشن بخواهید، به ترتیب: اول موردهای باز بر اساس score (از 0 تا 100)، بعد پیام داده شده ها، اضافه شده ها و ردشده ها. موردهایی که منبعشان دیگر پیدایشان نمی کند (gone) آخر می آیند. MonoRanks ایمیل نمی فرستد و دنبال اطلاعات تماس هم نمی گردد: موردها را لیست می کند، شما سراغشان می روید و نتیجه را ثبت می کنید.
| مورد | توضیح |
|---|---|
source |
ai_source (پاسخ های هوش مصنوعی به سؤال های شما به صفحه ارجاع می دهند ولی اسم شما را نمی آورند)، best_list (فهرست «بهترین X» که اسم رقبای شما را آورده ولی شما را نه)، link_gap (سایتی که به دو رقیب یا بیشتر لینک داده ولی به شما نه)، lost_link (سایت قوی ای که لینکش به شما را برداشته و راه حل این است که از آن ها بخواهید لینک را به روز کنند) یا manual (دستی اضافه شده). |
reason |
دلیل را می گوید، با فیلدهایی که منبعش می داند: مثلاً questions، models و timesCited؛ keyword و position؛ competitors، domainRank، spamScore و outOf؛ یا lostAt. |
status |
to_contact، contacted، added یا declined. با status و source فیلتر کنید. counts جمع هر وضعیت و هر منبع را دارد. |
| اسپم | موردهایی که امتیاز اسپمشان بالای 60 است کنار گذاشته می شوند، مگر اینکه spam=1 بفرستید؛ counts.spamHidden می گوید چندتا کنار رفته اند. |
| نوشتن | POST /sites مقدار status و/یا note را می گیرد (حداکثر 2,000 کاراکتر؛ یادداشت خالی آن را پاک می کند). تغییر به نام صاحب کلید در Activity سایت ثبت می شود. وقتی منبع، مورد را به روز می کند، وضعیت و یادداشت سر جایشان می مانند. |
| اضافه شدن خودکار | MonoRanks هفته ای یک بار هر صفحه باز را دوباره و رایگان می خواند. اگر صفحه حالا به سایت لینک بدهد یا اسمش را بیاورد، مورد added می شود و statusAuto برابر true است. |
خطاها
| کد | معنی |
|---|---|
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. |
نمونه درخواست
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_…" } },
);نمونه پاسخ
{
"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."
}
}سرور MCP همین کار را با ابزار add_outreach_target انجام می دهد.