RankScore API

Pull RankScore-generated articles into Lovable, Replit, Bolt, or any custom CMS. WordPress and Shopify use dashboard push integrations; this API is for everything else.

Get your API key

  1. Open your project in RankScore.
  2. Go to Integrations → API → Manage.
  3. Click Generate API key and copy it immediately (shown once).

Authentication

All requests use API key authentication:

  • X-API-Key: <your-api-key>
  • Content-Type: application/json

Base URL: https://dashboard.rankscore.co/api/integrations/v1  (replace with your RankScore deployment origin).

List recent articles

curl -X GET "https://dashboard.rankscore.co/api/integrations/v1/articles?limit=5&offset=0" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json"

Returns an array of article summaries (no content_html  or content_markdown ). Use GET /articles/:id  for full content.

Query parameters: limit  (default 100, max 500), offset  (default 0). Articles are sorted newest first. Only completed articles with content are included.

Fetch one article

curl -X GET "https://dashboard.rankscore.co/api/integrations/v1/articles/YOUR_ARTICLE_UUID" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json"

Returns content_htmlcontent_markdownmeta_descriptionhero_image_urlslugkeywordkeywords , and more.

Publish to your CMS

  1. Fetch an article from RankScore.
  2. Map fields: titlecontent_html  (or content_markdown ), meta_descriptionslughero_image_url .
  3. Create or upsert the post in your CMS API.

Node.js example

const BASE = process.env.RANKSCORE_API_BASE;
const KEY = process.env.RANKSCORE_API_KEY;

async function syncArticle(articleId) {
  const res = await fetch(`${BASE}/articles/${articleId}`, {
    headers: { "X-API-Key": KEY },
  });
  if (!res.ok) throw new Error(`API error: ${res.status}`);
  const article = await res.json();

  await fetch("https://your-cms.example.com/posts", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      slug: article.slug,
      title: article.title,
      html: article.content_html,
      description: article.meta_description,
      image: article.hero_image_url,
    }),
  });
}

Pagination (Node.js)

async function fetchAllArticles() {
  const all = [];
  let offset = 0;
  const limit = 50;
  while (true) {
    const res = await fetch(
      `${BASE}/articles?limit=${limit}&offset=${offset}`,
      { headers: { "X-API-Key": KEY } }
    );
    if (!res.ok) throw new Error(`API error: ${res.status}`);
    const batch = await res.json();
    if (batch.length === 0) break;
    all.push(...batch);
    if (batch.length < limit) break;
    offset += limit;
  }
  return all;
}

Troubleshooting

  • 401 Unauthorized — Check the X-API-Key  header and that the key was not revoked.
  • 404 Not found — Article may still be generating, or the ID does not belong to this project's key.
  • 429 Rate limit — Back off and retry; limit is 60 requests per minute per API key.

HTML vs Markdown

Use content_html  for most CMS platforms. Use content_markdown  if your stack prefers Markdown. Styling on the live site is controlled by your theme/CSS; RankScore delivers semantic content.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.