Developer docs

Add an outreach target

POST/sites/{siteId}/outreach
Scope
actions:apply

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.

Parameters

NameInDetails
siteIdRequiredpathstringWebsite id, from GET /sites.

Request body

FieldDetails
urladdress (URL) · required; at most 2048 characters; Full http or https page address, not on the website itself and not a reserved test address
notestring · at most 2000 characters; Your note, at most 2,000 characters
statusto_contact | contacted | added | declined · Starting status (default to_contact)
tagslist 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"
  ]
}

Response

200 · application/json

FieldDetails
createdtrue or false · required; True when the page was added now; false when it was already listed
targetobject · required
target.idstring
target.sourcestring
target.urlstring
target.domainstring
target.title
target.scorenumber
target.classstring
target.reasonobject
target.statusstring
target.statusAtstring
target.statusAutotrue or false
target.notestring
target.tagslist of strings
target.firstSeenstring
target.lastSeenstring
target.gonetrue or false
target.check
target.linkstring

Notes

GET /sites/{siteId}/outreach lists pages and sites worth asking for a link or a mention, ranked: open targets first by score (0 to 100), then contacted, added and declined. Targets their source no longer finds (gone) come last. MonoRanks does not send email and does not look up contact details: it lists the targets, you do the outreach and record what happened.

What Details
source ai_source (AI answers to your tracked questions quote the page but do not name you), best_list (a “best X” list that names your competitors but not you), link_gap (a site that links to two or more of your competitors, not to you), lost_link (a strong site that stopped linking to you, where asking them to update the link is the fix) or manual (added by hand).
reason says why, with the fields its source knows: for example questions, models and timesCited; keyword and position; competitors, domainRank, spamScore and outOf; or lostAt.
status to_contact, contacted, added or declined. Filter with status and source. counts has the totals per status and source.
Spam Targets with a spam score above 60 are left out unless you pass spam=1; counts.spamHidden says how many.
Writing POST /sites/{siteId}/outreach/{targetId} takes status and/or note (at most 2,000 characters; an empty note clears it). The change is recorded in the website’s Activity as the key owner. Status and note stay when the source refreshes the target.
Added on its own Once a week MonoRanks reads each open target page again, for free. When the page now links to the website or names it, the target turns added and statusAuto is true.

Errors

StatusMeaning
400Bad request. Codes: bad_url, own_site, test_domain, bad_status, bad_note, note_too_long, bad_tags.
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.
404Not found. Codes: not_found.
429Too many requests this hour for this key. Codes: rate_limited.

Example request

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"

Example response

{
  "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"
  }
}

The MCP server does the same with the tool add_outreach_target.