API Reference v1

Integre o RankForge programaticamente

Precisa de uma chave? Gere em /api-keys

Autenticacao

Todas as requisicoes precisam do header X-API-Key ou Authorization: Bearer:

curl https://app.rankforge.com.br/api/v1/credits \
  -H "X-API-Key: rf_live_xxxxxxxxxxxxxxxx"

Chaves tem 3 escopos default:

ScopePermite
articles:writeGerar artigos (consome creditos)
jobs:readConsultar status de jobs
credits:readConsultar saldo de creditos

Rate Limits

EndpointLimite
POST /api/v1/articles60 requisicoes/min
GET /api/v1/jobs/{id}120 requisicoes/min
GET /api/v1/credits60 requisicoes/min

Creditos

Cada chamada que dispara geracao consome creditos do plano vinculado a chave:

OperacaoCusto
Criar artigo1 credito
Consultar status / saldo0 (gratis)

Saldo insuficiente retorna HTTP 402 insufficient_credits.

Endpoint: Criar Artigo

POST/api/v1/articles

Gera artigo SEO em modo standalone (sem publicar em CMS). Retorna job_id pra polling.

Body

CampoTipoDefaultDescricao
keywordstringObrigatorio. Palavra-chave principal (max 200 chars)
sizestringmediumshort (~800), medium (~1500), long (~2500), xl (~3500), xxl (~5000)
languagestringpt-BRpt-BR, en-US, es-ES
tonestringinformativotom de voz
h2_countint5Numero de subtitulos (3-15)
faqbooleanfalseIncluir secao FAQ com schema.org
summarybooleanfalseIncluir resumo no inicio
conclusionbooleantrueIncluir conclusao
image_bankstringiaia (Gemini) ou produto
subtitle_imagesstringintercaladotodos, intercalado, nenhuma
custom_promptstringInstrucoes adicionais (max 1000 chars)

Exemplo

curl -X POST https://app.rankforge.com.br/api/v1/articles \
  -H "X-API-Key: rf_live_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "como gerar leads B2B em 2026",
    "size": "long",
    "h2_count": 7,
    "faq": true,
    "language": "pt-BR"
  }'

Response 202 Accepted

{
  "success": true,
  "job_id": "abc12345-...",
  "status": "pending",
  "status_url": "https://app.rankforge.com.br/api/v1/jobs/abc12345-...",
  "estimated_seconds": 145,
  "credits_consumed": 1,
  "credits_remaining": 49
}

Endpoint: Status do Job

GET/api/v1/jobs/{id}

Consulta status. Faca polling a cada 10-15 segundos ate status === 'completed'.

Response (completed)

{
  "id": "abc12345-...",
  "keyword": "como gerar leads B2B em 2026",
  "status": "completed",
  "created_at": "2026-05-01T20:00:00Z",
  "completed_at": "2026-05-01T20:02:30Z",
  "output": {
    "title": "Como Gerar Leads B2B em 2026: Guia Completo",
    "slug": "como-gerar-leads-b2b-em-2026",
    "meta_description": "Descubra as 7 estrategias mais eficazes...",
    "html": "<h1>Como Gerar Leads B2B em 2026...</h1>...",
    "word_count": 2487,
    "images": [
      {"url": "https://app.rankforge.com.br/uploads/standalone/abc12345/featured.webp", "alt": "..."},
      {"url": "...", "alt": "..."}
    ],
    "preview_url": "https://app.rankforge.com.br/article-preview.php?job_id=abc12345-..."
  }
}

Status possiveis

StatusSignifica
pendingJob criado, aguardando processamento
processingEngine gerando o artigo
completedPronto, output disponivel
failedFalhou (ver error_message) — credito refundado

Endpoint: Saldo

GET/api/v1/credits

Retorna saldo de creditos do plano vinculado a chave.

Response

{
  "monthly_limit": 50,
  "monthly_used": 12,
  "monthly_available": 38,
  "extra_credits": 0,
  "total_available": 38,
  "plan": "professional",
  "subscription_status": "active",
  "renewal_date": "2026-06-01"
}

Codigos de Erro

HTTPCodigoSignifica
400invalid_keywordkeyword vazia ou > 200 chars
401invalid_api_keyChave invalida, expirada ou revogada
402insufficient_creditsSaldo insuficiente
403insufficient_scopeChave nao tem o scope necessario
429rate_limit_exceededExcedeu rate limit (ver tabela acima)
500internal_errorErro do servidor (refund automatico se aplicavel)

Exemplo Completo (Node.js)

const API_KEY = process.env.RANKFORGE_API_KEY;
const BASE = 'https://app.rankforge.com.br/api/v1';

async function generateArticle(keyword) {
  // 1. Cria job
  const create = await fetch(`${BASE}/articles`, {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ keyword, size: 'long', faq: true })
  });
  const { job_id } = await create.json();

  // 2. Polling ate completed
  while (true) {
    await new Promise(r => setTimeout(r, 10000));
    const status = await fetch(`${BASE}/jobs/${job_id}`, {
      headers: { 'X-API-Key': API_KEY }
    });
    const data = await status.json();
    if (data.status === 'completed') return data.output;
    if (data.status === 'failed') throw new Error(data.error_message);
  }
}

generateArticle('como criar funil B2B 2026').then(article => {
  console.log('Title:', article.title);
  console.log('HTML:', article.html.length, 'chars');
  console.log('Images:', article.images.length);
  // Salvar em arquivo, postar em CMS, etc
});

Suporte

Bug, duvida ou request de feature: chama no email contato@rankforge.com.br