← Voltar ao RankBloom

API de Publicação

O RankBloom escreve conteúdo de blog otimizado para SEO nos sites que você conecta a ele. A API de Publicação é o caminho pelo qual esse conteúdo pronto sai do RankBloom e chega aonde você quiser — um site WordPress, um CMS, uma plataforma de automação ou o seu próprio código.

É a mesma API por trás do plugin oficial para WordPress e das integrações com Zapier e Make.

URL base

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

Autenticação

Toda requisição leva um token de conexão. Crie um no RankBloom em Conexões: selecione o site, escolha a plataforma e clique em Criar conexão. O token aparece uma única vez e fica guardado apenas como hash, então guarde uma cópia na hora de criá-lo.

Cada token vale para um único site. Envie-o em qualquer um destes cabeçalhos:

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

Os três são aceitos porque hospedagens compartilhadas e gerenciadas costumam remover o Authorization, e algumas plataformas de automação enviam o cabeçalho X-API-KEY por padrão.

Nunca coloque o token na query string. Ele ficaria registrado nos logs de acesso e em todos os proxies do caminho. A API não lê o token de lá.

Revogar uma conexão tem efeito imediato. Tokens revogados e desconhecidos devolvem a mesma resposta, então ninguém consegue usar a diferença para descobrir tokens válidos.

Endpoints

GET /v1/ping

Verifica um token e informa a que ele está vinculado. Use como teste de conexão.

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 é um nome simples e legível para a conexão. As plataformas de automação usam esse valor para identificar a conta conectada.

GET /v1/posts

Posts recentes do site conectado, do mais novo para o mais antigo. Somente leitura — nunca altera o estado, então dá para consultar em intervalos regulares sem risco.

ParâmetroTipoPadrãoObservações
limitinteger25Máximo de 100
offsetinteger0Pula essa quantidade de posts
sinceISO 8601Somente posts criados nesse momento ou depois
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": [ … ]
}

Paginação. Aumente o offset em limit para recuar pelo arquivo. Não existe contagem total: uma página menor que limit significa que você chegou ao fim. Os resultados são ordenados por data de criação e depois por id, então a paginação continua estável mesmo quando dois posts têm o mesmo horário.

POST /v1/status

Diga ao RankBloom o que aconteceu com um post. É isso que transforma “entregamos” em “está no ar” e impede que o post seja oferecido de novo.

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"
  }'
CampoObrigatórioObservações
post_idsimO id de /v1/posts
statussimdelivered, failed ou skipped
external_urlnãoOnde foi publicado
external_idnãoO id do próprio sistema remoto
errornãoPor que falhou, se falhou

Um token só pode reportar posts do próprio site.

O payload do post

Um único formato canônico, versionado por contract_version.

CampoTipoObservações
idstringEstável. Use como chave de idempotência
title, slug, excerptstringslug é o valor final, já sem duplicatas
content_html, content_mdstringO corpo do post, nos dois formatos
meta_title, meta_descriptionstringMetadados de SEO
primary_keyword, keywords, category, tagsstring / arrayTaxonomia
canonical_urlstringCanônica, quando definida
schema_json_ldobjectJá convertido, nunca uma string JSON
featured_image_urlstringImagem hospedada, pronta para usar
audio_urlstringNarração, quando o post tem
audio_duration_seconds, audio_voicenumber / stringDetalhes da narração
statusstringpublished ou draft
author, author_title, author_urlstringAssinatura do autor
created_at, published_atISO 8601Datas e horários

Todas as chaves estão sempre presentes. Um valor que não se aplica volta como null — ele nunca é omitido. Um post sem narração simplesmente traz audio_url: null; esse é o caso normal, não um erro. Escreva a sua integração esperando nulls, e não chaves ausentes.

O contrato é somente aditivo. Os campos nunca são renomeados, nem mudam de tipo, nem são removidos, porque integrações já em produção continuam pedindo a versão 1 indefinidamente. Uma mudança incompatível sairia como uma versão nova, servida ao lado desta.

Erros

Os erros retornam o status HTTP correspondente e um corpo JSON com uma mensagem legível.

{ "ok": false, "error": "Invalid or revoked connection token." }
StatusSignificado
400Falta um campo obrigatório ou ele está malformado
401Token ausente, desconhecido ou revogado
404O post não pertence a esta conexão

Integrações prontas

Você não precisa escrever código. A mesma API já vem pronta para:

Suporte

Dúvidas sobre a API ou algo funcionando diferente do documentado — escreva para support@getrankbloom.com.