← Volver a RankBloom

API de publicación

RankBloom escribe contenido SEO para los sitios web que conectas. La API de publicación es la vía por la que ese contenido terminado sale de RankBloom y llega a donde tú quieras: un sitio WordPress, un CMS, una plataforma de automatización o tu propio código.

Es la misma API que hay detrás del plugin oficial de WordPress y de las integraciones con Zapier y Make.

URL base

https://app.getrankbloom.com/api/publish

Autenticación

Cada solicitud lleva un token de conexión. Créalo en RankBloom, en Conexiones: selecciona el sitio, elige la plataforma y haz clic en Crear conexión. El token se muestra una sola vez y se guarda solo como hash, así que guarda una copia al crearlo.

Cada token está limitado a un único sitio. Envíalo en cualquiera de estas cabeceras:

Authorization: Bearer rb_live_xxxxxxxx
X-RankBloom-Token: rb_live_xxxxxxxx
X-API-KEY: rb_live_xxxxxxxx

Se aceptan las tres porque los hostings compartidos y gestionados suelen eliminar Authorization, y algunas plataformas de automatización envían una cabecera X-API-KEY de forma predeterminada.

Nunca pongas el token en la cadena de consulta. Quedaría registrado en los logs de acceso y en todos los proxies del camino. La API no lo lee de ahí.

Revocar una conexión surte efecto de inmediato. Los tokens revocados y los desconocidos devuelven la misma respuesta, así que nadie puede usar la diferencia para sondear tokens válidos.

Endpoints

GET /v1/ping

Verifica un token e indica a qué está asociado. Úsalo como prueba de conexión.

curl https://app.getrankbloom.com/api/publish/v1/ping \
  -H "Authorization: Bearer rb_live_xxxxxxxx"
{
  "ok": true,
  "contract_version": 1,
  "label": "Example Site",
  "connection": { "id": "…", "name": "Make — Example Site", "platform": "make" },
  "site": { "id": "…", "name": "Example Site", "url": "https://example.com" }
}

label es un nombre sencillo y legible para la conexión. Las plataformas de automatización lo usan para etiquetar la cuenta conectada.

GET /v1/posts

Posts recientes del sitio conectado, del más nuevo al más antiguo. Solo lectura: nunca cambia el estado, así que es seguro consultarlo de forma periódica.

ParámetroTipoPor defectoNotas
limitinteger25Máximo 100
offsetinteger0Omite este número de posts
sinceISO 8601Solo posts creados en ese momento o después
curl "https://app.getrankbloom.com/api/publish/v1/posts?limit=100&offset=0" \
  -H "Authorization: Bearer rb_live_xxxxxxxx"
{
  "ok": true,
  "contract_version": 1,
  "count": 46,
  "limit": 100,
  "offset": 0,
  "posts": [ … ]
}

Paginación. Aumenta offset en limit para recorrer el archivo hacia atrás. No hay recuento total: una página más corta que limit significa que has llegado al final. Los resultados se ordenan por fecha de creación y luego por id, así que la paginación se mantiene estable aunque dos posts compartan la misma marca de tiempo.

POST /v1/status

Dile a RankBloom qué pasó con un post. Esto es lo que convierte «lo entregamos» en «está publicado» y evita que el post se vuelva a ofrecer.

curl -X POST https://app.getrankbloom.com/api/publish/v1/status \
  -H "Authorization: Bearer rb_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "post_id": "b86cbffe-…",
    "status": "delivered",
    "external_url": "https://example.com/my-post",
    "external_id": "123"
  }'
CampoObligatorioNotas
post_idEl id de /v1/posts
statusdelivered, failed o skipped
external_urlnoDónde se publicó
external_idnoEl id propio del sistema remoto
errornoPor qué falló, si falló

Un token solo puede informar sobre posts que pertenezcan a su propio sitio.

El payload del post

Un único formato canónico, versionado con contract_version.

CampoTipoNotas
idstringEstable. Úsalo como clave de idempotencia
title, slug, excerptstringslug es el definitivo, ya sin duplicados
content_html, content_mdstringEl cuerpo, en ambos formatos
meta_title, meta_descriptionstringMetadatos SEO
primary_keyword, keywords, category, tagsstring / arrayTaxonomía
canonical_urlstringCanonical, cuando está definida
schema_json_ldobjectYa parseado, nunca una cadena JSON
featured_image_urlstringImagen alojada, lista para usar
audio_urlstringNarración, cuando el post la tiene
audio_duration_seconds, audio_voicenumber / stringDetalle de la narración
statusstringpublished o draft
author, author_title, author_urlstringAutoría
created_at, published_atISO 8601Marcas de tiempo

Todas las claves están siempre presentes. Un valor que no aplica se devuelve como null — nunca se omite. Un post sin narración simplemente tiene audio_url: null; ese es el caso normal, no un error. Programa tu integración para esperar nulls en lugar de claves ausentes.

El contrato es solo aditivo. Los campos nunca se renombran, ni cambian de tipo, ni se eliminan, porque las integraciones ya en producción seguirán pidiendo la versión 1 indefinidamente. Un cambio incompatible se publicaría como una versión nueva, servida junto a esta.

Errores

Los errores devuelven el estado HTTP correspondiente y un cuerpo JSON con un mensaje legible.

{ "ok": false, "error": "Invalid or revoked connection token." }
EstadoSignificado
400Falta un campo obligatorio o tiene un formato incorrecto
401Token ausente, desconocido o revocado
404El post no pertenece a esta conexión

Integraciones listas para usar

No hace falta escribir código. La misma API ya está integrada en:

Soporte

¿Tienes dudas sobre la API o algo no se comporta como está documentado? Escribe a support@getrankbloom.com.