5-minute setup
One environment variable and one fetch helper.
SEO built in
Meta title, description, JSON-LD, canonical URL and a sitemap endpoint.
Your design
Ready-rendered HTML and markdown — style it however you like.
How it works
- You connect the Headless API and get a blog key (
ss_blog_…). - You publish an article to Headless API (Next.js) — manually, on a schedule, or with auto-publish.
- We save a snapshot of the article. It is in the API immediately.
- Your site fetches
GET /api/v1/content/articlesandGET /api/v1/content/articles/{slug}and renders them.
Step 1 — Get your blog key
Project Settings → Integrations → Headless API (Next.js) → Connect.string
Optional. Where your blog is served. Defaults to your project’s website. We use it, plus the
content path from Project Settings (
/blog by default), to build each article’s live url.The key is read-only: it can only list articles you have already published — content that is
public on your site anyway. Still, keep it server-side and out of client bundles. Regenerate key
invalidates the old one immediately.
Step 2 — Add the key to your site
.env.local
Step 3 — Fetch articles
- Next.js (App Router)
- Astro
- Any language (cURL)
lib/seosorted.ts
app/blog/page.tsx
app/blog/[slug]/page.tsx
app/blog/sitemap.xml/route.ts
Let an AI assistant build it
The setup panel’s AI prompt tab contains a complete brief — endpoints, types, and the pages to build — with your API URL filled in. Paste it into Cursor, Claude Code, v0 or Lovable and it will add a full blog (index, article, category and tag pages, sitemap) to your project.Step 4 — Publish
Open any finished article → Publish → Headless API (Next.js). Or set it as the destination for scheduled and auto-published articles. The article is in the API as soon as the publish job finishes; withrevalidate: 300 your site shows it within five minutes.
API reference
Base URL:https://seosorted.ai/api/v1/content. Every response is wrapped as { "data": … };
errors are { "error": { "code", "message" } }.
Authentication
Send the key as a bearer token:X-Api-Key: ss_blog_… and ?key=ss_blog_… also work, for tools that can’t set an
Authorization header.
Endpoints
Interactive reference with every schema: seosorted.ai/api/v1/reference.
Fields
object
ArticleIndex +
Limits and caching
- 600 requests per minute per key. Over that you get
429withretryAfterSeconds. - Responses carry
Cache-Control: private, max-age=60. Cache on your side — Next.jsrevalidate, ISR or a CDN — rather than calling the API on every page view. - CORS is open, so the API works from the browser too. Prefer server-side fetching so the key stays out of your bundle.
Moving from SEObot
The response shapes match SEObot’sIArticle / IArticleIndex, so your templates keep working.
Swap the client calls:
Troubleshooting
401 Invalid blog key
401 Invalid blog key
The key was regenerated, or copied with a missing character. Copy it again from View key &
setup and redeploy so your host picks up the new environment variable.
The list is empty
The list is empty
Only articles published to Headless API appear — not drafts, and not articles published to
another connector. Publish one and check again.
I edited an article but the site shows the old version
I edited an article but the site shows the old version
The API serves what you last published. Click Republish on the article. If it is
republished, your site’s cache (
revalidate) may still be holding the old copy.Images or links look unstyled
Images or links look unstyled
The HTML is unstyled on purpose. Add Tailwind’s
prose class or your own CSS for article h2,
article img, article table and so on.
