API Reference

Articles, pages & authors

Every site has a blog for SEO content, free-form static pages, author profiles with credentials, and comment moderation.

Articles

The blog engine every site gets. Articles support drafts, scheduling-ready statuses, author bylines, and full SEO control.

MethodEndpointDescription
GET/sites/:id/articlesList articles (all statuses)
POST/sites/:id/articlesCreate article
GET/articles/:aidArticle detail
PATCH/articles/:aidUpdate — publish by setting status: "published"
DELETE/articles/:aidDelete

Article payload

FieldTypeDescription
title requiredstringArticle title.
slugstringEmpty → generated from title. Public URL: /blog/:slug/.
h1stringH1 override (defaults to title).
subtitlestringStandfirst under the title.
contentstring (HTML)Article body.
imagestring|nullFeatured image URL (media library, kind article_image).
author_iduuidByline — see Authors below.
offer_iduuidLink a reviewed offer — adds its CTA card inside the article.
category_iduuidGroup the article under a site category.
statusstringdraft (default) | published. Only published render publicly.
meta_title / meta_descriptionstringSEO overrides.
focus_keywordstringTarget keyword — shown in the panel's content list for SEO tracking.
Publish an article
curl -X POST $API/sites/$SITE_ID/articles \
  -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
  -d '{
    "title": "How we test password managers",
    "subtitle": "Our lab setup, scoring rubric and what we refuse to rank",
    "content": "<p>Every product in our toplists goes through…</p>",
    "status": "published",
    "focus_keyword": "password manager testing",
    "meta_description": "Our full testing methodology for password managers."
  }'

Static pages

Free-form pages (privacy policy, contact, about) that render in the footer or header navigation.

MethodEndpointDescription
GET/sites/:id/pagesList pages
POST/sites/:id/pagesCreate page
PATCH/pages/:pidUpdate
DELETE/pages/:pidDelete
FieldTypeDescription
title requiredstringPage title.
slugstringEmpty → generated from title. Public URL: /page/:slug/ — legacy permalinks keep working.
contentstring (HTML)Page body.
placementstringfooter (default) | header — which navigation shows the link.
sort_orderintOrder within the nav group.

Authors

Bylines with credibility — author pages list their reviews and articles with bio and credentials (an E-E-A-T signal Google looks for on review sites).

MethodEndpointDescription
GET/sites/:id/authorsList authors
POST/sites/:id/authorsAdd author
PATCH/authors/:aidUpdate
DELETE/authors/:aidDelete
FieldTypeDescription
name requiredstringDisplay name.
biostringCredentials and background — shown on the author page.
avatarstring|nullAvatar image URL (media library).
emailstringContact, not published unless your template does so.

Categories

Categories group offers and drive category pages, navigation and "top rated in this category" modules.

MethodEndpointDescription
GET/sites/:id/categoriesList categories with offer counts
POST/sites/:id/categoriesCreate — {"name"}, slug generated if empty
PATCH/categories/:cidUpdate name / slug / description
DELETE/categories/:cidDelete (offers keep living, uncategorized)
FieldTypeDescription
name requiredstringCategory name, e.g. "VPN Services".
slugstringPublic URL: /category/:slug/.
descriptionstring (HTML)SEO intro copy at the top of the category page.
sort_orderintPosition in navigation and category lists.

Article comments

Visitors can comment under articles; comments queue for moderation like reviews. Comments can also be added directly via the API (operator/automation), publishing immediately or queuing.

MethodEndpointDescription
POST/article-commentsAdd comment — {"site_id": "…", "article_id": "…", "author_name": "…", "content": "…", "status": "approved"} (author_email optional); approved publishes, pending queues
GET/article-comments?site_id=…&status=pendingComment queue (filter by site/status)
POST/article-comments/:cid/approveApprove → goes live
POST/article-comments/:cid/rejectReject
DELETE/article-comments/:cidDelete