Desarrolladores

Construye sobre AutoSeoPro.aiAPI REST y conector MCP

Lee tus sitios, artículos, enlaces externos, palabras clave, auditorías y estadísticas, edita artículos de forma segura y conecta asistentes de IA como Claude, Cursor y ChatGPT a tu espacio de trabajo.

  • Incluido en los planes Growth, Agency, Scale y Enterprise

Qué puedes hacer

  • Lee sitios, artículos con su HTML completo, enlaces externos, investigación de palabras clave, resúmenes de auditorías técnicas y estadísticas mensuales, incluidos los clics e impresiones de Search Console.
  • Actualiza el título o el contenido HTML de un artículo y reemplaza su imagen destacada. Cada cambio es una revisión restaurable y nada se publica automáticamente.
  • Conecta Claude, Cursor, ChatGPT y otros clientes MCP para que un asistente trabaje con tus datos SEO en la conversación.
  • Recibe webhooks firmados cuando se publican artículos, terminan auditorías, se consiguen enlaces externos y más.

Una clave o conexión solo ve los sitios del espacio de trabajo que la creó, o un único sitio si la limitas.

Autenticación

Crea una clave en Configuración → Desarrolladores y envíala en cada solicitud, como token Bearer o en la cabecera X-API-Key. La clave se muestra una sola vez, se guarda solo como hash, puede caducar y se puede revocar en cualquier momento.

URL base: https://autoseopro.ai/api/v1

Authorization: Bearer rk_…
# or
X-API-Key: rk_…

Cada clave tiene solo los permisos que elijas. Un permiso de lectura nunca permite un cambio.

PermisoPermite
sites:readListar sitios
articles:readLeer artículos y su HTML
articles:writeEditar títulos y contenido de artículos, reemplazar imágenes destacadas
audits:readLeer resúmenes de auditorías técnicas
keywords:readLeer palabras clave y clústeres
reports:readLeer estadísticas y resúmenes de Search Console
backlinks:readLeer enlaces externos
metadata:readLeer propuestas de título y descripción SEO
metadata:writeAprobar o rechazar propuestas de metadatos (siempre con confirmación previa)
approvals:writeAprobar artículos para publicar (siempre con confirmación previa)
generation:writeSolicitar artículos nuevos dentro del plan (siempre con confirmación previa)
sharing:writeCrear enlaces para compartir informes de cliente (siempre con confirmación previa)
notifications:readLeer notificaciones
social:readLeer el plan y los resultados de redes sociales

Puedes limitar una clave a un sitio. Los demás sitios responden entonces 403 con el código site_not_allowed.

La API nunca acepta una sesión del navegador. Una solicitud que solo lleva la cookie de inicio de sesión de AutoSeoPro.ai se rechaza con el código session_auth_not_supported.

Límites de uso

  • 60 solicitudes por minuto por clave de API, sumando REST y MCP.
  • 200 ediciones de artículos por espacio de trabajo y día UTC (cambios de título o contenido y reemplazos de imagen destacada).
  • Si superas un límite recibes 429 con una cabecera Retry-After. Espera esos segundos antes de volver a intentarlo.

Paginación

Los endpoints de listas aceptan page (desde 1) y per_page (por defecto 25, máximo 100) y devuelven un objeto pagination con el total.

{
  "data": [
    "…"
  ],
  "pagination": {
    "page": 2,
    "per_page": 25,
    "total": 61,
    "total_pages": 3,
    "has_more": true
  }
}

Errores

Todos los errores tienen la misma forma JSON. Decide según code, que es estable; message es una guía para desarrolladores y puede cambiar.

{
  "error": {
    "code": "insufficient_scope",
    "message": "The API key does not carry the scope this operation needs.",
    "status": 403,
    "request_id": "6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"
  }
}

Esta referencia se genera a partir del documento OpenAPI y se muestra en inglés.

CódigoHTTPSignificado
unauthorized401Send an API key as `Authorization: Bearer rk_…` or `X-API-Key: rk_…`.
invalid_token401The API key is not valid.
token_expired401The API key has expired. Create a new one in Settings → Developers.
token_revoked401The API key was revoked.
session_auth_not_supported401The API does not accept browser sessions. Use an API key.
insufficient_scope403The API key does not carry the scope this operation needs.
plan_upgrade_required403API access is not included in this workspace's plan.
subscription_inactive403The workspace subscription is not active.
site_not_allowed403The API key is limited to a different website.
actor_not_allowed403The person this connection acts for may not make this change (their role or website access does not allow it).
not_found404No such resource in this workspace.
method_not_allowed405That HTTP method is not supported on this path.
stale_article409The article changed since the content hash you sent. Fetch it again and retry.
article_busy409The article cannot be edited right now (it is publishing, queued or not eligible for an update).
not_decidable409This item is no longer waiting for a decision. Read it again to see its current state.
confirmation_stale409The item changed after the preview. Run the preview again and confirm the new result.
payload_too_large413The request body is too large.
unsupported_media_type415Unsupported Content-Type for this operation.
invalid_request422The request is not valid. See `details`.
nothing_to_update422Send at least one of `title` or `body_html`.
unsafe_html422The HTML contains elements or attributes the article editor does not allow.
protected_links_removed422The edit removes internal links that AutoSeoPro.ai placed. Keep them, or edit the article in AutoSeoPro.ai.
image_invalid422The image must be a JPEG, PNG, WebP, GIF or AVIF file within the size limit.
image_fetch_failed422The image URL could not be fetched (it must be a public https URL).
confirmation_invalid422The confirmation token is not valid for this action or this connection. Run the matching preview first.
confirmation_expired422The confirmation token has expired or was already used. Run the preview again.
rate_limited429Too many requests. Slow down and retry after the Retry-After interval.
edit_quota_exceeded429The daily article-edit allowance for this workspace is used up.
plan_limit_reached429The plan's allowance for this is used up for the current period.
internal_error500Something went wrong on our side. Quote the request id if you contact support.
image_hosting_unavailable503Image uploads are not available on this installation; send a public image URL instead.
service_unavailable503The service is temporarily unavailable. Retry shortly.

Endpoints

Esta referencia se genera a partir del documento OpenAPI y se muestra en inglés.

GET/sites

List websites

Websites in the workspace that owns the API key. A key limited to one website sees only that website.

Permiso: sites:read · Herramienta MCP: list_sites

Parámetros
pagequery · opcionalPage number, from 1.
per_pagequery · opcionalItems per page (max 100).
Solicitud
curl "https://autoseopro.ai/api/v1/sites?per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "name": "Acme Plumbing",
      "domain": "acmeplumbing.com",
      "platform": "wordpress",
      "article_language": "en",
      "created_at": "2026-08-14T09:12:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/articles

List articles

Articles for one website, newest first, without their bodies. `from`/`to` filter on the publication date, or the creation date for unpublished articles.

Permiso: articles:read · Herramienta MCP: list_articles

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
pagequery · opcionalPage number, from 1.
per_pagequery · opcionalItems per page (max 100).
statusquery · opcionalOnly articles in this status. (draft, in_review, scheduled, queued, publishing, published, failed)
fromquery · opcionalEarliest date to include: YYYY-MM-DD (UTC, start of day) or an ISO-8601 timestamp.
toquery · opcionalLatest date to include: YYYY-MM-DD (UTC, inclusive of the whole day) or an ISO-8601 timestamp.
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/articles?from=2026-09-01&to=2026-09-30&per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "id": "9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f",
      "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "title": "How to Fix a Leaking Tap",
      "status": "published",
      "target_keyword": "fix leaking tap",
      "word_count": 1640,
      "featured_image_url": "https://acmeplumbing.com/wp-content/uploads/tap.jpg",
      "external_url": "https://acmeplumbing.com/fix-leaking-tap/",
      "published_at": "2026-09-12T08:00:00.000Z",
      "scheduled_for": "2026-09-12T08:00:00.000Z",
      "created_at": "2026-09-10T15:41:00.000Z",
      "content_hash": "3f6c1d0a9b8e7f6d5c4b3a2918f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/articles/{article_id}

Get an article

One article with its full HTML body, SEO title and meta description, and the content hash to send back with an edit.

Permiso: articles:read · Herramienta MCP: get_article

Parámetros
article_idpath · obligatorioArticle id.
Solicitud
curl "https://autoseopro.ai/api/v1/articles/9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "id": "9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f",
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "title": "How to Fix a Leaking Tap",
    "status": "published",
    "target_keyword": "fix leaking tap",
    "word_count": 1640,
    "featured_image_url": "https://acmeplumbing.com/wp-content/uploads/tap.jpg",
    "external_url": "https://acmeplumbing.com/fix-leaking-tap/",
    "published_at": "2026-09-12T08:00:00.000Z",
    "scheduled_for": "2026-09-12T08:00:00.000Z",
    "created_at": "2026-09-10T15:41:00.000Z",
    "content_hash": "3f6c1d0a9b8e7f6d5c4b3a2918f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5",
    "meta_title": "How to Fix a Leaking Tap (Step by Step)",
    "meta_description": "A plumber's guide to stopping a dripping tap in 20 minutes.",
    "body_html": "<h2>What you need</h2><p>An adjustable spanner and a new washer.</p>",
    "revision": 4
  }
}
PUT/articles/{article_id}

Update an article's title or body

Edit the working copy of an article exactly as the AutoSeoPro.ai editor saves it: the HTML is normalised to the editor's allowed subset, unsafe markup is refused, the website's external-link policy is applied, and quality checks are recomputed. Every change is stored as a new revision (source `api`, or `mcp` from the connector) that can be restored from the article page. This never publishes, unpublishes, schedules or changes settings. A published article's working copy can be edited when it is eligible for an update; push it live from AutoSeoPro.ai. Edits that remove internal links AutoSeoPro.ai placed (the related-resources block or tracked contextual links) are refused with `protected_links_removed`. Send `expected_content_hash` (from a read) to refuse the edit with `stale_article` if the article changed in the meantime.

Permiso: articles:write · Herramienta MCP: update_article

Parámetros
article_idpath · obligatorioArticle id.
titlebody · opcionalNew display title.
body_htmlbody · opcionalNew article body (HTML).
reasonbody · opcionalWhy the change was made; kept in the activity log.
expected_content_hashbody · opcionalcontent_hash from your last read.
Solicitud
curl -X PUT "https://autoseopro.ai/api/v1/articles/9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"How to Fix a Leaking Tap in 20 Minutes","body_html":"<h2>What you need</h2><p>An adjustable spanner, a new washer and 20 minutes.</p>","reason":"Refresh intro","expected_content_hash":"3f6c1d0a9b8e7f6d5c4b3a2918f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5"}'
Respuesta
{
  "data": {
    "changed": true,
    "revision": 5,
    "article": {
      "id": "9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f",
      "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "title": "How to Fix a Leaking Tap",
      "status": "published",
      "target_keyword": "fix leaking tap",
      "word_count": 1640,
      "featured_image_url": "https://acmeplumbing.com/wp-content/uploads/tap.jpg",
      "external_url": "https://acmeplumbing.com/fix-leaking-tap/",
      "published_at": "2026-09-12T08:00:00.000Z",
      "scheduled_for": "2026-09-12T08:00:00.000Z",
      "created_at": "2026-09-10T15:41:00.000Z",
      "content_hash": "3f6c1d0a9b8e7f6d5c4b3a2918f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5",
      "meta_title": "How to Fix a Leaking Tap (Step by Step)",
      "meta_description": "A plumber's guide to stopping a dripping tap in 20 minutes.",
      "body_html": "<h2>What you need</h2><p>An adjustable spanner and a new washer.</p>",
      "revision": 5
    }
  }
}
POST/articles/{article_id}/featured-image

Replace the featured image

Set a new featured image from a public https URL (JSON body), or upload the image bytes directly with an image Content-Type. JPEG, PNG, WebP, GIF or AVIF up to 5 MB. The URL is fetched once from AutoSeoPro.ai's servers (private and internal addresses are refused) and checked to be a real image. Uploaded images are hosted by AutoSeoPro.ai. The change is stored as a restorable revision and never publishes.

Permiso: articles:write · Herramienta MCP: replace_featured_image

Parámetros
article_idpath · obligatorioArticle id.
urlbody · obligatorioPublic https URL of the image.
altbody · opcionalAlt text. Defaults to the current alt text or the article title.
expected_content_hashbody · opcionalcontent_hash from your last read.
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/articles/9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f/featured-image" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://images.example.com/leaking-tap.jpg","alt":"Dripping kitchen tap"}'
Respuesta
{
  "data": {
    "changed": true,
    "revision": 6,
    "article": {
      "id": "9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f",
      "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "title": "How to Fix a Leaking Tap",
      "status": "published",
      "target_keyword": "fix leaking tap",
      "word_count": 1640,
      "featured_image_url": "https://images.example.com/leaking-tap.jpg",
      "external_url": "https://acmeplumbing.com/fix-leaking-tap/",
      "published_at": "2026-09-12T08:00:00.000Z",
      "scheduled_for": "2026-09-12T08:00:00.000Z",
      "created_at": "2026-09-10T15:41:00.000Z",
      "content_hash": "3f6c1d0a9b8e7f6d5c4b3a2918f7e6d5c4b3a29180f7e6d5c4b3a29180f7e6d5",
      "meta_title": "How to Fix a Leaking Tap (Step by Step)",
      "meta_description": "A plumber's guide to stopping a dripping tap in 20 minutes.",
      "body_html": "<h2>What you need</h2><p>An adjustable spanner and a new washer.</p>",
      "revision": 6
    }
  }
}
O sube directamente el archivo de imagen
curl -X POST "https://autoseopro.ai/api/v1/articles/9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f/featured-image" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: image/jpeg" \
  --data-binary @featured.jpg
GET/sites/{site_id}/stats

Get website stats

Counts for a reporting period (articles created and published, backlinks verified, keywords tracked) plus the Search Console summary for published articles when Search Console is connected.

Permiso: reports:read · Herramienta MCP: get_stats

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
periodquery · opcionalthis_month, last_month, last_30_days or a calendar month YYYY-MM (UTC). Defaults to this_month.
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/stats?period=last_month" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "period": {
      "key": "last_month",
      "start": "2026-08-01T00:00:00.000Z",
      "end": "2026-09-01T00:00:00.000Z"
    },
    "articles": {
      "created": 12,
      "published": 10
    },
    "backlinks": {
      "verified": 3,
      "live_total": 17
    },
    "keywords": {
      "tracked": 84
    },
    "search_console": {
      "connected": true,
      "clicks": 1520,
      "impressions": 48210,
      "tracked_articles": 31,
      "window_start": "2026-08-31",
      "window_end": "2026-09-27"
    }
  }
}
GET/sites/{site_id}/keywords

List keywords

The website's keywords with research metrics, cluster and, when observed, their own Search Console figures. Read-only.

Permiso: keywords:read · Herramienta MCP: get_keywords

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
pagequery · opcionalPage number, from 1.
per_pagequery · opcionalItems per page (max 100).
statusquery · opcionaladded = tracked, candidate = suggested. (candidate, added, rejected, archived)
cluster_idquery · opcionalOnly keywords in this cluster.
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/keywords?per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
      "keyword": "emergency plumber",
      "status": "added",
      "cluster": {
        "id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
        "name": "Emergency services"
      },
      "is_primary": true,
      "search_volume": 2400,
      "difficulty": 38,
      "intent": "transactional",
      "potential": 71.5,
      "priority": null,
      "target_url": null,
      "search_console": {
        "impressions": 3100,
        "clicks": 140,
        "ctr": 0.045,
        "position": 8.2,
        "window_days": 28,
        "observed_at": "2026-09-27T04:00:00.000Z"
      },
      "created_at": "2026-08-15T11:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/keyword-clusters

List keyword clusters

Topic clusters with their pillar page and keyword count. Read-only.

Permiso: keywords:read

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
pagequery · opcionalPage number, from 1.
per_pagequery · opcionalItems per page (max 100).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/keyword-clusters?per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
      "name": "Emergency services",
      "status": "active",
      "is_primary": true,
      "pillar_url": "https://acmeplumbing.com/emergency/",
      "keyword_count": 14,
      "created_at": "2026-08-15T11:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/audit

Get the audit summary

Scores and check counts from the latest technical SEO/GEO audit, plus the problems of the latest full-site audit in fix-plan order. Read-only; audits are run from AutoSeoPro.ai. For the full plan, trend and example URLs use the full-site audit endpoints.

Permiso: audits:read · Herramienta MCP: get_audit_summary

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/audit" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "audit": {
      "id": "7c8d9e0f-1a2b-4c3d-9e4f-5a6b7c8d9e0f",
      "created_at": "2026-09-25T02:10:00.000Z",
      "scores": {
        "seo": 78,
        "geo": 64,
        "combined": 72
      },
      "findings": {
        "seo": {
          "optimized": 31,
          "quick_win": 4,
          "big_opportunity": 2,
          "needs_api": 1
        },
        "geo": {
          "optimized": 12,
          "quick_win": 3,
          "big_opportunity": 1,
          "needs_api": 0
        }
      }
    },
    "issues": [
      {
        "id": "8d9e0f1a-2b3c-4d4e-8f5a-6b7c8d9e0f1a",
        "category": "performance",
        "rule_id": "lcp_slow",
        "severity": "high",
        "title": "Largest Contentful Paint is slow on mobile",
        "fix_summary": "Compress the hero image."
      }
    ]
  }
}
GET/sites/{site_id}/growth

Get growth history

The website's month-by-month growth record (up to 24 months): Search Console clicks, impressions, CTR, average position, pages with impressions and queries in the top 3/10/100; indexed pages; GA4 sessions; AI visibility. Includes month-over-month and since-start changes. Read-only.

Permiso: reports:read

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/growth" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "starting_month": "2026-06",
    "starting_month_source": "first_snapshot",
    "latest_complete_month": "2026-09",
    "months": [
      {
        "month": "2026-09",
        "complete": true,
        "search_console": {
          "state": "ok",
          "data_through": "2026-09-30",
          "clicks": 1520,
          "impressions": 48210,
          "ctr": 0.0315,
          "position": 14.2,
          "pages_with_impressions": 212,
          "queries_top3": 18,
          "queries_top10": 96,
          "queries_top100": 1240,
          "rows_truncated": false
        },
        "index": {
          "state": "no_data",
          "indexed_pages": null,
          "checked_pages": null
        },
        "analytics": {
          "state": "ok",
          "sessions": 4100,
          "users": 3300,
          "organic_sessions": 2050,
          "ai_referral_sessions": 37
        },
        "ai_visibility": {
          "state": "ok",
          "score": 42.5,
          "citation_share": 30
        }
      }
    ],
    "month_over_month": {
      "gsc_clicks": {
        "from": 1310,
        "to": 1520,
        "delta": 210,
        "percent": 16.03
      }
    },
    "since_start": {
      "gsc_clicks": {
        "from": 980,
        "to": 1520,
        "delta": 540,
        "percent": 55.1
      }
    }
  }
}
GET/sites/{site_id}/performance

Get Search Console + GA4 performance

Search Console clicks, impressions, CTR and position (last 28 days vs the 28 before, and last 7 days vs the 7 before), top pages and queries, plus GA4 sessions, AI-assistant referral sessions and top landing pages. Read from AutoSeoPro.ai's stored readings; sections carry a state such as not_connected.

Permiso: reports:read · Herramienta MCP: get_performance

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/performance" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "search_console": {
      "state": "ok",
      "fetched_at": "2026-10-03T06:00:00.000Z",
      "stale": false,
      "window": {
        "start": "2026-09-05",
        "end": "2026-10-02"
      },
      "current": {
        "clicks": 1520,
        "impressions": 48210,
        "ctr": 0.0315,
        "position": 14.2
      },
      "previous": {
        "clicks": 1610,
        "impressions": 47100,
        "ctr": 0.0342,
        "position": 13.8
      },
      "last_7_days": {
        "clicks": 310,
        "impressions": 11200
      },
      "previous_7_days": {
        "clicks": 402,
        "impressions": 11900
      },
      "top_pages": [
        {
          "key": "https://acmeplumbing.com/emergency/",
          "clicks": 220,
          "impressions": 5100,
          "ctr": 0.043,
          "position": 6.1
        }
      ],
      "top_queries": [
        {
          "key": "emergency plumber",
          "clicks": 140,
          "impressions": 3100,
          "ctr": 0.045,
          "position": 8.2
        }
      ]
    },
    "analytics": {
      "state": "connected",
      "fetched_at": "2026-10-03T06:00:00.000Z",
      "current": {
        "sessions": 4100,
        "engaged_sessions": 2600,
        "key_events": 41
      },
      "previous": {
        "sessions": 4300,
        "engaged_sessions": 2700,
        "key_events": 44
      },
      "ai_referral_sessions": {
        "current": 37,
        "previous": 29
      },
      "top_landing_pages": [
        {
          "path": "/emergency/",
          "sessions": 820
        }
      ]
    }
  }
}
GET/sites/{site_id}/geo-visibility

Get AI visibility (GEO) and AI visits

The latest and previous completed AI visibility runs (score 0-100, prompts tested, answers citing the website, engines) and AI crawler / AI assistant visits over the last 28 days vs the 28 before, as measured by the WordPress plugin, Cloudflare or the tracking snippet.

Permiso: reports:read · Herramienta MCP: get_geo_visibility

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/geo-visibility" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "latest_run": {
      "id": "1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
      "run_date": "2026-09-28T03:00:00.000Z",
      "score": 42.5,
      "prompts_tested": 24,
      "cited_answers": 7,
      "failed_prompts": 0,
      "engines": [
        "chatgpt",
        "perplexity",
        "gemini"
      ]
    },
    "previous_run": null,
    "ai_visits": {
      "window_days": 28,
      "sources": [
        "wordpress"
      ],
      "crawler_hits": {
        "current": 410,
        "previous": 350,
        "change_pct": 17
      },
      "assistant_referrals": {
        "current": 37,
        "previous": 29,
        "change_pct": 28
      },
      "top_pages": [
        {
          "path": "/emergency/",
          "hits": 51
        }
      ]
    }
  }
}
GET/sites/{site_id}/metadata-proposals

List metadata proposals

SEO title and meta description proposals for the website's pages, newest first, with what the page served at the time. `state=proposed` lists the ones waiting for a decision.

Permiso: metadata:read · Herramienta MCP: list_metadata_proposals

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
pagequery · opcionalPage number, from 1.
per_pagequery · opcionalItems per page (max 100).
statequery · opcionalOnly proposals in this state. (proposed, approved, rejected, applied, partially_applied, refused, rolled_back, superseded, assessed)
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/metadata-proposals?state=proposed&per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "id": "2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d",
      "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "page_url": "https://acmeplumbing.com/rigid-boxes/",
      "state": "proposed",
      "current": {
        "title": "Rigid boxes",
        "description": null
      },
      "proposed": {
        "title": "Rigid Boxes | Custom Sizes, Fast UK Delivery",
        "description": "Custom rigid boxes made to your size."
      },
      "approved_fields": [],
      "created_at": "2026-10-01T09:00:00.000Z",
      "updated_at": "2026-10-01T09:00:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/backlink-report

Get the backlink report

Links verified live now, lost links, referring domains and, per link where measured, the growth proof: Search Console clicks before vs after the link went live and GA4 referral sessions.

Permiso: backlinks:read · Herramienta MCP: get_backlink_report

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/backlink-report" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "summary": {
      "live": 17,
      "lost": 1,
      "referring_domains": 14,
      "growth_available": 6,
      "clicks_delta": 85,
      "referral_sessions": 40
    },
    "links": [
      {
        "linking_page": "https://homeguide.example/best-plumbers",
        "target_url": "https://acmeplumbing.com/",
        "status": "live",
        "first_live_at": "2026-09-03T10:00:00.000Z",
        "growth": {
          "gsc_state": "ok",
          "clicks_before": 120,
          "clicks_after": 160,
          "referral_sessions": 12
        }
      }
    ]
  }
}
GET/notifications

List notifications

Notifications of the person the connection acts for (the API key's creator), newest first; a website-limited key sees only that website's.

Permiso: notifications:read · Herramienta MCP: list_notifications

Parámetros
filterquery · opcionalall (default) or unread. (all, unread)
limitquery · opcionalHow many (max 50).
Solicitud
curl "https://autoseopro.ai/api/v1/notifications?filter=unread&per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
      "type": "content.published",
      "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "title": "Article published",
      "body": "How to Fix a Leaking Tap is live.",
      "read": false,
      "created_at": "2026-10-02T09:30:00.000Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/health

Get site health

Latest usable technical audit scores and the ten highest-priority problems of the latest full-site audit, plus real-user Core Web Vitals (p75 LCP, INP, CLS, TTFB over 28 days, mobile and desktop) for the whole site and for AutoSeoPro.ai article pages vs the rest of the site.

Permiso: audits:read · Herramienta MCP: get_site_health

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/health" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "audit": {
      "id": "7c8d9e0f-1a2b-4c3d-9e4f-5a6b7c8d9e0f",
      "created_at": "2026-09-25T02:10:00.000Z",
      "scores": {
        "seo": 78,
        "geo": 64,
        "combined": 72
      }
    },
    "top_issues": [
      {
        "severity": "high",
        "title": "Largest Contentful Paint is slow on mobile",
        "fix_summary": "Compress the hero image."
      }
    ],
    "web_vitals": {
      "enabled": true,
      "days": 28,
      "site": {
        "mobile": {
          "lcp": {
            "p75": 2900,
            "rating": "needs-improvement",
            "samples": 410
          }
        }
      },
      "articles_vs_site": {
        "has_article_data": true,
        "slower": [
          {
            "device": "mobile",
            "metric": "lcp"
          }
        ]
      }
    }
  }
}
GET/sites/{site_id}/crawl

Get the full-site audit and the fix plan

The latest completed full-site audit: site health, what was covered, the prioritised fix plan (fix these 5 first, quick wins, bigger projects, each with why, how, affected pages and example URLs), the health-score history of the stored audits, what is new, fixed or worse since the previous audit, and checks that could not measure something. Read-only; audits are run from AutoSeoPro.ai.

Permiso: audits:read · Herramienta MCP: get_crawl_summary

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/crawl" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "crawl": {
      "id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
      "finished_at": "2026-10-14T03:12:00.000Z",
      "health_score": 74,
      "pages_crawled": 312,
      "pages_discovered": 340,
      "images_checked": 120,
      "page_budget": 500,
      "budget_reached": false,
      "totals": {
        "errors": 9,
        "warnings": 41,
        "notices": 22
      },
      "issue_types": 11,
      "comparison": {
        "fixed": 6,
        "new": 3,
        "remaining": 28,
        "not_rechecked": 0,
        "previous_finished_at": "2026-09-14T03:10:00.000Z"
      }
    },
    "active_crawl": null,
    "fix_plan": {
      "fix_first": [
        {
          "code": "canonical_to_non_200",
          "title": "Canonical points to a page that does not work",
          "why": "Search engines may ignore the page you want ranked.",
          "how": "Point the canonical tag at the live, final address of the page.",
          "severity": "warning",
          "category": "indexability",
          "impact": "high",
          "effort": "low",
          "group": "fix_first",
          "rank": 1,
          "priority": 12.8,
          "affected_pages": 12,
          "share_of_pages": 0.0385,
          "examples": [
            "https://acmeplumbing.com/emergency/"
          ]
        }
      ],
      "quick_wins": [],
      "bigger_projects": []
    },
    "trend": {
      "verdict": "improved",
      "sample": "similar",
      "score_change": 4,
      "points": [
        {
          "crawl_id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
          "finished_at": "2026-10-14T03:12:00.000Z",
          "health_score": 74,
          "pages_crawled": 312,
          "errors": 9,
          "warnings": 41,
          "notices": 22
        }
      ],
      "new_issues": [],
      "fixed_issues": [
        "h1_missing"
      ],
      "regressed_issues": [],
      "improved_issues": []
    },
    "not_measured": []
  }
}
GET/sites/{site_id}/crawl/issues

List full-site audit issues

Every kind of problem the latest completed full-site audit found, highest priority first, each with why, how, affected-page count and example URLs. Filter by severity, impact or area. Read-only.

Permiso: audits:read · Herramienta MCP: list_crawl_issues

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
severityquery · opcionalOnly this severity. (error, warning, notice)
impactquery · opcionalOnly issues of this impact (what fixing them is worth). (high, medium, low)
categoryquery · opcionalOnly this area of the site. (crawlability, indexability, links, metadata, content, images, structured_data, international, performance, security, accessibility, mobile, ai_readiness)
pagequery · opcionalPage number, from 1.
per_pagequery · opcionalItems per page (max 100).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/crawl/issues?severity=error&impact=high&category=indexability&per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "code": "canonical_to_non_200",
      "title": "Canonical points to a page that does not work",
      "why": "Search engines may ignore the page you want ranked.",
      "how": "Point the canonical tag at the live, final address of the page.",
      "severity": "warning",
      "category": "indexability",
      "impact": "high",
      "effort": "low",
      "group": "fix_first",
      "rank": 1,
      "priority": 12.8,
      "affected_pages": 12,
      "share_of_pages": 0.0385,
      "examples": [
        "https://acmeplumbing.com/emergency/"
      ]
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 25,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/crawl/issues/{issue_code}/urls

List the URLs affected by one issue

The URLs the latest completed full-site audit found with one issue (50 per page, most linked-to first), optionally one page type. Only the latest audit keeps its per-URL results. Read-only.

Permiso: audits:read · Herramienta MCP: list_crawl_issue_urls

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
issue_codepath · obligatorioIssue code (from list full-site audit issues).
page_typequery · opcionalOnly URLs of this page type. (home, product, category, service, location, blog_post, blog_index, page, custom, tag, pagination, filtered, utility)
pagequery · opcionalPage number, from 1.
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/crawl/issues/title_missing/urls?page_type=product&per_page=25" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": [
    {
      "url": "https://acmeplumbing.com/emergency/",
      "page_type": "service",
      "http_status": 200,
      "final_status": 200,
      "final_url": null,
      "title": "Emergency plumbing",
      "internal_links_in": 14,
      "linked_from": [
        "https://acmeplumbing.com/"
      ],
      "crawl_depth": 1,
      "words": 540
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 1,
    "total_pages": 1,
    "has_more": false
  }
}
GET/sites/{site_id}/social/plan

Get the social media plan

The Social Media Autopilot add-on tier in force for the website and its Social AI Manager plan for the coming days (default 7, max 31): the brief's content pillars and cadence, and the rolling plan board — one idea per card with its posts on each platform (time, status, caption excerpt), whether it is approved, awaiting approval, locked (inside the 24-hour lock) or being regenerated. Read-only.

Permiso: social:read · Herramienta MCP: get_social_plan

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
daysquery · opcionalHow many days ahead (1-31).
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/social/plan?days=7" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "add_on": {
      "tier": "pro",
      "state": "active",
      "grace_ends_at": null
    },
    "approval_mode": "approve_first",
    "lock_hours": 24,
    "brief": {
      "status": "confirmed",
      "confirmed": true,
      "pillars": [
        {
          "pillar": "educate",
          "share": 40
        },
        {
          "pillar": "promote",
          "share": 30
        }
      ],
      "cadence": {
        "perWeek": 3
      },
      "goals": [
        "leads"
      ],
      "learned_adjusted": false
    },
    "window": {
      "from": "2026-10-04T00:00:00.000Z",
      "to": "2026-10-11T00:00:00.000Z",
      "days": 7
    },
    "ideas": [
      {
        "id": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
        "at": "2026-10-06T09:00:00.000Z",
        "title": "Fix a dripping tap in 20 minutes",
        "pillar": "educate",
        "locked": false,
        "approved": false,
        "awaiting_approval": true,
        "regenerating": false,
        "posts": [
          {
            "id": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
            "platform": "facebook",
            "format": "image",
            "scheduled_at": "2026-10-06T09:00:00.000Z",
            "status": "scheduled",
            "approved": false,
            "locked": false,
            "caption_excerpt": "Dripping tap? Here is the 20-minute fix.",
            "link": "https://acmeplumbing.com/fix-leaking-tap/",
            "image_mode": "template",
            "ai_generated": true
          }
        ]
      }
    ],
    "posts": [
      {
        "id": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
        "platform": "facebook",
        "format": "image",
        "scheduled_at": "2026-10-06T09:00:00.000Z",
        "status": "scheduled",
        "approved": false,
        "locked": false,
        "pillar": "educate",
        "caption_excerpt": "Dripping tap? Here is the 20-minute fix.",
        "link": "https://acmeplumbing.com/fix-leaking-tap/"
      }
    ]
  }
}
GET/sites/{site_id}/social/results

Get social media results

Totals for posts published in the period (default the last 30 days): impressions, reach, engagements, clicks and video views by platform, ideas per content pillar, plus the latest published posts with their links.

Permiso: social:read · Herramienta MCP: list_social_results

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
fromquery · opcionalEarliest publication date to include: YYYY-MM-DD (UTC, start of day) or an ISO-8601 timestamp.
toquery · opcionalLatest publication date to include: YYYY-MM-DD (UTC, inclusive of the whole day) or an ISO-8601 timestamp.
Solicitud
curl "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/social/results?from=2026-09-01&to=2026-09-30" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "period": {
      "from": "2026-09-04T00:00:00.000Z",
      "to": "2026-10-04T00:00:00.000Z"
    },
    "totals": {
      "posts": 12,
      "impressions": 8400,
      "reach": 6100,
      "engagements": 390,
      "clicks": 75,
      "video_views": 0
    },
    "by_platform": [
      {
        "platform": "facebook",
        "posts": 6,
        "impressions": 5100,
        "engagements": 240,
        "clicks": 41
      }
    ],
    "ideas_by_pillar": [
      {
        "pillar": "educate",
        "ideas": 5
      }
    ],
    "recent_posts": [
      {
        "platform": "facebook",
        "published_at": "2026-10-02T09:00:00.000Z",
        "external_url": "https://facebook.example/post/1"
      }
    ]
  }
}
POST/metadata-proposals/{proposal_id}/preview-decision

Preview approving or rejecting a metadata proposal

Shows exactly which title/description would be approved (or that the proposal would be rejected) and returns a confirmation token valid for 10 minutes. Changes nothing. Approval does not by itself change the live page: AutoSeoPro.ai applies approved metadata through the website connection as configured.

Permiso: metadata:write · Herramienta MCP: preview_metadata_proposal_decision

Parámetros
proposal_idpath · obligatorioMetadata proposal id (from list metadata proposals).
decisionbody · obligatorio (approve, reject)
fieldsbody · opcionalFields to approve (default every proposed field).
notebody · opcionalWhy it is rejected (kept with the proposal).
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/metadata-proposals/2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d/preview-decision" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"decision":"approve","fields":["title","description"]}'
Respuesta
{
  "data": {
    "action": "metadata_proposal_decision",
    "will_change": true,
    "summary": {
      "proposal_id": "2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d",
      "page_url": "https://acmeplumbing.com/rigid-boxes/",
      "decision": "approve",
      "fields": [
        "title"
      ],
      "from": {
        "title": "Rigid boxes"
      },
      "to": {
        "title": "Rigid Boxes | Custom Sizes, Fast UK Delivery"
      }
    },
    "blocked_reason": null,
    "confirmation_token": "rkcf_example",
    "expires_at": "2026-10-04T10:10:00.000Z"
  }
}
POST/metadata-proposals/{proposal_id}/apply-decision

Apply a previewed metadata decision

Records the approval or rejection exactly as previewed. CHANGES DATA. Requires the confirmation token from the preview (same connection, within 10 minutes, single use); refused with confirmation_stale if the proposal changed meanwhile.

Permiso: metadata:write · Herramienta MCP: apply_metadata_proposal_decision

Parámetros
proposal_idpath · obligatorioMetadata proposal id (from list metadata proposals).
confirmation_tokenbody · obligatorioToken returned by the matching preview (valid 10 minutes, single use, only for the connection that previewed).
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/metadata-proposals/2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d/apply-decision" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"confirmation_token":"rkcf_AbCdEf0123456789…"}'
Respuesta
{
  "data": {
    "action": "metadata_proposal_decision",
    "applied": true,
    "result": {
      "proposal_id": "2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d",
      "state": "approved"
    }
  }
}
POST/articles/{article_id}/preview-approval

Preview approving an article for publishing

Shows the article, its current status and what approval would do (scheduled articles keep their date; others become ready to publish), plus the latest human fact-check status. Returns a confirmation token. Changes nothing. Fact-checks are recorded by a person in AutoSeoPro.ai, never through the API.

Permiso: approvals:write · Herramienta MCP: preview_article_approval

Parámetros
article_idpath · obligatorioArticle id.
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/articles/9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f/preview-approval" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY"
Respuesta
{
  "data": {
    "action": "article_approval",
    "will_change": true,
    "summary": {
      "article_id": "9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f",
      "title": "How to Fix a Leaking Tap",
      "status": "draft",
      "status_after": "in_review",
      "scheduled_for": null,
      "fact_check": "verified"
    },
    "blocked_reason": null,
    "confirmation_token": "rkcf_example",
    "expires_at": "2026-10-04T10:10:00.000Z"
  }
}
POST/articles/{article_id}/apply-approval

Approve an article for publishing (confirmed)

Records the approval previewed by preview approval, as the person the connection acts for. CHANGES DATA and lets AutoSeoPro.ai publish the article on its schedule. Requires the preview's confirmation token; refused if the article changed after the preview.

Permiso: approvals:write · Herramienta MCP: apply_article_approval

Parámetros
article_idpath · obligatorioArticle id.
confirmation_tokenbody · obligatorioToken returned by the matching preview (valid 10 minutes, single use, only for the connection that previewed).
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/articles/9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f/apply-approval" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"confirmation_token":"rkcf_AbCdEf0123456789…"}'
Respuesta
{
  "data": {
    "action": "article_approval",
    "applied": true,
    "result": {
      "article_id": "9b8e7d6c-5a4b-4c3d-8e2f-1a0b9c8d7e6f",
      "status": "in_review"
    }
  }
}
POST/sites/{site_id}/article-requests/preview

Preview requesting a new article

Checks a tracked keyword (by id or exact text) and the plan's article allowance, and returns a confirmation token. Changes nothing. Keywords must already be tracked in AutoSeoPro.ai.

Permiso: generation:write · Herramienta MCP: preview_article_request

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
keyword_idbody · opcionalTracked keyword id (from get_keywords).
keywordbody · opcionalExact keyword text, when no id is given.
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/article-requests/preview" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"emergency plumber"}'
Respuesta
{
  "data": {
    "action": "article_request",
    "will_change": true,
    "summary": {
      "site_id": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
      "keyword_id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
      "keyword": "emergency plumber",
      "monthly_limit": 90,
      "monthly_used": 41,
      "monthly_remaining": 49,
      "pack_credits": 0
    },
    "blocked_reason": null,
    "confirmation_token": "rkcf_example",
    "expires_at": "2026-10-04T10:10:00.000Z"
  }
}
POST/sites/{site_id}/article-requests/apply

Request a new article (confirmed)

Queues article generation for the previewed keyword, using one article from the plan allowance. CHANGES DATA. The article arrives as a draft for review; it is never published without approval. Requires the preview's confirmation token.

Permiso: generation:write · Herramienta MCP: apply_article_request

Parámetros
site_idpath · obligatorioWebsite id (from list sites).
confirmation_tokenbody · obligatorioToken returned by the matching preview (valid 10 minutes, single use, only for the connection that previewed).
Solicitud
curl -X POST "https://autoseopro.ai/api/v1/sites/4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a/article-requests/apply" \
  -H "Authorization: Bearer $AUTOSEOPRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"confirmation_token":"rkcf_AbCdEf0123456789…"}'
Respuesta
{
  "data": {
    "action": "article_request",
    "applied": true,
    "result": {
      "job_id": "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c",
      "state": "queued"
    }
  }
}

Ediciones seguras y revisiones

  • El HTML del artículo pasa por el mismo proceso que el editor de AutoSeoPro.ai: se normaliza a los elementos permitidos por el editor, el marcado inseguro se rechaza (unsafe_html) y se aplica la política de enlaces externos de tu sitio.
  • Las ediciones que eliminan enlaces internos colocados por AutoSeoPro.ai, ya sea el bloque de contenido relacionado o enlaces seguidos por el enlazado interno, se rechazan con protected_links_removed. Moverlos o cambiar su texto de anclaje está permitido.
  • Envía expected_content_hash de tu última lectura para que una edición nunca sobrescriba el cambio de otra persona (stale_article).
  • Cada cambio se guarda como una revisión marcada como API o Conector MCP. Abre el artículo en AutoSeoPro.ai para ver su historial y restaurar cualquier versión anterior.
  • La API nunca publica, despublica, programa ni elimina artículos, y nunca cambia la configuración.
  • Cada llamada queda registrada en el registro de actividad del espacio de trabajo con la clave, la operación, el sitio y el resultado.
  • Los demás cambios (aprobar metadatos o artículos, solicitar artículos, crear enlaces de informe de cliente) van en dos pasos: una vista previa no cambia nada y devuelve un token de confirmación válido 10 minutos; la llamada apply correspondiente hace el cambio una vez, para la misma clave.

Webhooks

Añade endpoints en Configuración → Desarrolladores y elige los eventos que quieras. AutoSeoPro.ai envía un POST JSON firmado a tu endpoint HTTPS, reintenta los fallos con espera creciente y pausa un endpoint que falla de forma continua.

Eventos

article.publishedarticle.generation_failedaudit.completedgeo.run_completedbacklink.placedreport.deliveredbilling.subscription_changed

Cada envío incluye las cabeceras rankora-signature, rankora-timestamp (milisegundos), rankora-event y rankora-event-id.

El cuerpo indica el evento y el sitio; nunca contiene el texto del artículo. Usa la API para obtener los detalles.

{
  "id": "3f9c0b1e7a2d4c5b8e6f1a2b3c4d5e6f",
  "type": "article.published",
  "occurredAt": "2026-10-02T09:30:00.000Z",
  "data": {
    "siteId": "4f1c2a9e-7b1d-4c55-9a51-1f2e3d4c5b6a",
    "notificationType": "content.published"
  }
}

Verifica cada envío: calcula HMAC-SHA256 sobre "marca de tiempo.cuerpo sin procesar" con tu secreto de firma, compáralo en tiempo constante con la cabecera hexadecimal rankora-signature y rechaza marcas de tiempo de más de cinco minutos.

Node.js
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the exact request body string, before JSON.parse
export function verifyAutoSeoProWebhook(rawBody, headers, secret) {
  const timestamp = Number(headers["rankora-timestamp"]);
  if (!Number.isFinite(timestamp) || Math.abs(Date.now() - timestamp) > 5 * 60_000) return false;
  const expected = createHmac("sha256", secret).update(`${timestamp}.${rawBody}`).digest();
  const given = Buffer.from(String(headers["rankora-signature"] ?? ""), "hex");
  return given.length === expected.length && timingSafeEqual(given, expected);
}

Conector MCP

El servidor MCP de AutoSeoPro.ai permite que los asistentes de IA usen la API como herramientas. Una conexión solo ve los sitios del espacio de trabajo que la autorizó.

Guía de conectores paso a paso

URL del servidor: https://autoseopro.ai/api/mcp

Herramientas

  • list_sitesList the websites this AutoSeoPro.ai connection can see. Call this first to get site ids for the other tools.
  • list_articlesList a website's articles (id, title, status, dates, live URL), newest first. Filter by status or date range.
  • get_articleGet one article with its full HTML body, SEO title, meta description and content_hash.
  • update_articleChange an article's title and/or HTML body. Saved as a restorable revision; never publishes. Refused if it removes internal links AutoSeoPro.ai placed. Pass expected_content_hash from get_article to avoid overwriting someone else's change.
  • replace_featured_imageReplace an article's featured image with a public https image URL. Saved as a restorable revision; never publishes.
  • list_backlinksList backlinks AutoSeoPro.ai earned or recorded for a website, with live verification state. Filter by state or date range.
  • get_statsGet a website's numbers for a period (this_month, last_month, last_30_days or YYYY-MM): articles, backlinks, keywords and the Search Console clicks/impressions summary.
  • get_keywordsList a website's keywords with volume, difficulty, intent, cluster and Search Console position/clicks. Filter by status or cluster.
  • get_audit_summaryGet the latest technical SEO/GEO audit scores, check counts and open issues for a website.
  • get_performanceGet a website's Google Search Console and GA4 numbers: last 28 days vs the 28 before, last 7 days vs the 7 before, top pages and queries, sessions and AI-assistant referrals. Use it to explain traffic changes; it never estimates.
  • get_geo_visibilityGet a website's latest AI visibility (GEO) run score and citations, and AI crawler / AI assistant visits for the last 28 days.
  • list_metadata_proposalsList a website's SEO title / meta description proposals (page URL, current vs proposed, state). Filter state=proposed for the ones awaiting a decision.
  • get_backlink_reportGet verified live backlinks, lost links, referring domains and the measured growth each link brought (Search Console before/after, GA4 referrals).
  • get_client_report_linkCheck whether a website has an active client report share link and when it expires. To create a new link, use preview_client_report_link then apply_client_report_link.
  • list_notificationsList recent AutoSeoPro.ai notifications (published articles, audits, alerts) for the connected person; filter unread.
  • get_site_healthGet a website's latest technical audit scores and top issues plus real-user Core Web Vitals, including whether AutoSeoPro.ai article pages are slower than the rest of the site. Use it for 'what should I fix first?'.
  • get_crawl_summaryGet the latest full-site audit of a website: site health, the prioritised fix plan (fix these first, quick wins, bigger projects), the trend since the previous audits and what could not be measured. Use it for 'what should I fix first?'.
  • list_crawl_issuesList the problems found by a website's latest full-site audit, highest priority first, with why, how, affected pages and example URLs. Filter by severity, impact or area.
  • list_crawl_issue_urlsList the URLs affected by one full-site audit issue (use an issue code from list_crawl_issues), 50 per page, most linked-to first; optionally one page type.
  • get_social_planShow a website's Social AI Manager plan (next 7 days by default): ideas with their pillar, posts per platform, time, caption excerpt and approval/lock state, plus the brief's pillar mix and cadence. Read-only.
  • list_social_resultsGet a website's social media results for a period (default last 30 days): posts, impressions, reach, engagements and clicks by platform. Read-only.
  • preview_metadata_proposal_decisionStep 1 of 2 to approve or reject a metadata proposal: shows what would change and returns a confirmation_token. Changes nothing. Show the preview to the user and only call apply_metadata_proposal_decision after they explicitly confirm.
  • apply_metadata_proposal_decisionStep 2 of 2. CHANGES DATA: records the approval/rejection previewed by preview_metadata_proposal_decision. Requires its confirmation_token. Only call after the user explicitly confirmed the preview.
  • preview_article_approvalStep 1 of 2 to approve an article for publishing: shows the article and what approval would do, returns a confirmation_token. Changes nothing. Fact-checking cannot be done here (people do it in AutoSeoPro.ai).
  • apply_article_approvalStep 2 of 2. CHANGES DATA: approves the article previewed by preview_article_approval so it can be published. Requires its confirmation_token. Only call after the user explicitly confirmed.
  • preview_article_requestStep 1 of 2 to have AutoSeoPro.ai write a new article for a tracked keyword: checks the keyword and the plan allowance, returns a confirmation_token. Changes nothing.
  • apply_article_requestStep 2 of 2. CHANGES DATA and uses plan allowance: queues the article previewed by preview_article_request. Requires its confirmation_token. Only call after the user explicitly confirmed.
  • preview_client_report_linkStep 1 of 2 to create a shareable client report link (anyone with the link can view the report for 30 days): shows the sections, returns a confirmation_token. Changes nothing; no e-mail is sent.
  • apply_client_report_linkStep 2 of 2. CHANGES DATA: creates the shareable client report link previewed by preview_client_report_link and returns its URL. Requires its confirmation_token. Only call after the user explicitly confirmed.

Claude (claude.ai y Claude Desktop)

Abre Configuración → Conectores → Añadir conector personalizado, pega la URL del servidor, inicia sesión en AutoSeoPro.ai y haz clic en Permitir.

https://autoseopro.ai/api/mcp

ChatGPT

Abre Configuración → Aplicaciones y conectores → Configuración avanzada y activa el modo desarrollador. Después crea un conector, pega la URL del servidor, elige OAuth, inicia sesión en AutoSeoPro.ai y haz clic en Permitir.

https://autoseopro.ai/api/mcp

Claude Code

Ejecuta esto en tu terminal con una clave de API de Configuración → Desarrolladores:

claude mcp add --transport http autoseopro https://autoseopro.ai/api/mcp \
  --header "Authorization: Bearer $AUTOSEOPRO_API_KEY"

Cursor

Añade esto a ~/.cursor/mcp.json (o a .cursor/mcp.json en un proyecto). Sin la entrada headers, Cursor inicia sesión con OAuth.

{
  "mcpServers": {
    "autoseopro": {
      "url": "https://autoseopro.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer rk_your_api_key"
      }
    }
  }
}

Cualquier cliente compatible con Streamable HTTP funciona con una cabecera Authorization: Bearer que lleve una clave de API. Los clientes compatibles con OAuth descubren el inicio de sesión automáticamente.

Una conexión OAuth crea una clave de API de 30 días con el nombre de la aplicación. Aparece en Configuración → Desarrolladores, donde puedes revocarla en cualquier momento.

Publicar en tu propio sitio

¿No usas WordPress ni Webflow? Crea un receptor pequeño y AutoSeoPro.ai publica, actualiza y elimina artículos en tu sitio mediante una API firmada e idempotente. La guía cubre los cinco pasos de configuración, las cabeceras, la firma, las respuestas exactas y kits para copiar en Node.js, PHP y Python.

Leer la guía de publicación

OpenAPI

La descripción completa legible por máquina, generada desde la misma fuente que la propia API. Impórtala en Postman, Insomnia o un generador de código.

Descargar openapi.json