Documentación para desarrolladores

Elegir, descartar o añadir un competidor

POST/sites/{siteId}/competitors
Permiso
actions:apply
Herramienta MCP
update_competitors

Pick, dismiss or add a competitor pick: a suggestion becomes a picked competitor; dismiss: a suggestion or picked competitor is left out from now on; add: any domain becomes a picked competitor. Picking or adding fetches its keyword gaps (a paid lookup inside the spending limits). Recorded in Activity as the key owner. Answers with the new competitor set.

Las descripciones vienen del documento OpenAPI y están en inglés.

Parámetros

NombreDóndeDetalles
siteIdObligatoriorutastringWebsite id, from GET /sites.

Cuerpo de la petición

CampoDetalles
actionpick | dismiss | add · required; What to do
domainstring · required; The competitor domain, like example.com (scheme, www. and path are stripped)
{
  "action": "add",
  "domain": "cyclehub.example"
}

Respuesta

200 · application/json

CampoDetalles
actionpick | dismiss | add · required; What was done
domainstring · required; The domain, cleaned
competitorslist of values · required; Picked first, then suggestions the AI confirmed, then ones not reviewed yet
competitors[].domainstring
competitors[].kindstring
competitors[].scorenumber
competitors[].reviewobject
competitors[].review.statusstring
competitors[].review.sameKind
competitors[].review.kind
competitors[].review.reason
competitors[].drivesGapstrue or false
competitors[].sharedKeywordsnumber
competitors[].brandKeywordsnumber
competitors[].theirKeywordsnumber
competitors[].ourKeywordsnumber
competitors[].aboveUsnumber
competitors[].domainRanknumber
competitors[].categorystring
competitors[].visibilitylist of numbers
competitors[].visibilityMonthslist of strings
competitors[].dataUpdatedAtstring
ourVisibilitylist of number · required; The website's own estimated monthly search traffic, oldest first
ourVisibilityMonthslist of string · required; Month (YYYY-MM) of each ourVisibility value
drivinglist of string · required; The competitors gaps, link gap and "best X" lists use: picked, else the three strongest confirmed suggestions
hiddeninteger · required; Suggestions left out: weak, or turned down by the AI
notestring · required; How to read the numbers
linkaddress (URL) · required; The Competitors screen in the app

Notas

GET /sites/{siteId}/competitors lista los sitios con los que compites: primero los que elegiste y luego los que MonoRanks sugiere porque posicionan por las mismas búsquedas. Una sugerencia sigue siendo sugerencia hasta que alguien la elige.

Qué Detalles
score (de 0 a 100) dice cuánto encaja una sugerencia. Las palabras clave compartidas se miden frente al tamaño de las dos listas, así que un sitio gigante que comparte unos cientos de sus millones de palabras clave puntúa bajo. Las palabras clave compartidas que se explican por un nombre de marca no cuentan (brandKeywords).
review es la revisión con IA de una sugerencia frente a lo que trata tu sitio web: status (reviewed o not_reviewed), sameKind (¿es el mismo tipo de negocio o producto?) y un reason breve. Las sugerencias que la IA rechaza se ocultan; hidden las cuenta junto con las débiles. Sin IA, status es not_reviewed y decide la puntuación.
driving (y drivesGaps en cada fila) son los competidores que usan las brechas de palabras clave, la brecha de enlaces y las listas de “los mejores”: los que elegiste; si no elegiste ninguno, las tres sugerencias más fuertes que la IA confirmó; antes de que se revise ninguna, las tres más fuertes por puntuación.

POST /sites/{siteId}/competitors cambia el conjunto. action es pick (convertir una sugerencia en competidor elegido), dismiss (ocultar desde ahora una sugerencia o un competidor elegido) o add (añadir cualquier dominio como competidor elegido). Elegir o añadir consulta las brechas de palabras clave de ese competidor, una consulta de pago dentro del límite de datos de tu espacio de trabajo. El cambio queda registrado en Activity a nombre del dueño de la clave, y la respuesta es el conjunto actualizado. Errores: bad_action, bad_domain (también para tu propio sitio web, una dirección de prueba reservada o más de 10 competidores elegidos) y not_found cuando pick o dismiss nombra un dominio que no está en el conjunto.

Errores

EstadoSignificado
400Bad request. Codes: bad_action, bad_domain.
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.

Petición de ejemplo

curl -X POST \
  -H "Authorization: Bearer mr_ws_…" \
  -H "Content-Type: application/json" \
  -d '{"action":"add","domain":"cyclehub.example"}' \
  "https://app.monoranks.com/api/v1/sites/SITE_ID/competitors"

Respuesta de ejemplo

{
  "action": "add",
  "domain": "cyclehub.example",
  "competitors": [
    {
      "domain": "bikeworld.example",
      "kind": "picked",
      "score": 78,
      "review": {
        "status": "not_reviewed",
        "sameKind": null,
        "kind": null,
        "reason": null
      },
      "drivesGaps": true,
      "sharedKeywords": 412,
      "brandKeywords": 6,
      "theirKeywords": 5810,
      "ourKeywords": 1240,
      "aboveUs": 188,
      "domainRank": 41,
      "category": "Shop",
      "visibility": [
        32800,
        35600,
        37900,
        41600
      ],
      "visibilityMonths": [
        "2026-06",
        "2026-07",
        "2026-08",
        "2026-09"
      ],
      "dataUpdatedAt": "2026-10-01T04:20:00.000Z"
    },
    {
      "domain": "cyclehub.example",
      "kind": "suggested",
      "score": 64,
      "review": {
        "status": "reviewed",
        "sameKind": true,
        "kind": "Online bike shop",
        "reason": "Sells bikes and parts to riders, like Acme Bikes."
      },
      "drivesGaps": true,
      "sharedKeywords": 412,
      "brandKeywords": 6,
      "theirKeywords": 5810,
      "ourKeywords": 1240,
      "aboveUs": 188,
      "domainRank": 41,
      "category": "Shop",
      "visibility": [
        32800,
        35600,
        37900,
        41600
      ],
      "visibilityMonths": [
        "2026-06",
        "2026-07",
        "2026-08",
        "2026-09"
      ],
      "dataUpdatedAt": "2026-10-01T04:20:00.000Z"
    }
  ],
  "ourVisibility": [
    12400,
    13900,
    14800,
    15700
  ],
  "ourVisibilityMonths": [
    "2026-06",
    "2026-07",
    "2026-08",
    "2026-09"
  ],
  "driving": [
    "bikeworld.example"
  ],
  "hidden": 3,
  "note": "kind: picked (chosen by a person) or suggested. Suggestions stay suggestions until picked.",
  "link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/competitors"
}

El servidor MCP hace lo mismo con la herramienta update_competitors.