Skip to Content
📘 New: connect any website to SEObox with a signed webhook — see Connect Your Site.
API ReferenceSites & Articles

Sites & Articles

List sites

GET /v1/api/sites

Returns every site on your account (up to 500), except deleted ones.

curl https://api.seobox.tech/v1/api/sites -H "x-api-key: $SEOBOX_API_KEY"
{ "success": true, "data": [ { "_id": "66f1c2a9e4b0a1b2c3d4e5f7", "uid": "3f2b8c1e-7d4a-4f6b-9c2e-1a5d8e9f0b3c", "domain": "example.com", "name": "Example Blog", "cms_type": "wordpress", "gsc_connected": true, "status": "active" } ] }

cms_type is one of wordpress, webflow, shopify, headless, or none.

List articles

GET /v1/api/blogs?limit=20&cursor=<_id>

Requires x-workspace-id. Articles are returned newest first.

QueryDefaultNotes
limit201–100
cursorThe nextCursor from the previous page
{ "success": true, "data": [ { "_id": "66f1d0b2e4b0a1b2c3d4e600", "uid": "9a7c2e4f-1b3d-4c5e-8f6a-2b4d6e8f0a1c", "title": "How to Choose a Standing Desk in 2026", "slug": "how-to-choose-a-standing-desk", "status": "published", "target_keyword": "how to choose a standing desk", "seo_score": 91, "published_url": "https://example.com/blog/how-to-choose-a-standing-desk", "published_at": "2026-09-18T10:42:11.000Z" } ], "nextCursor": "66f1d0b2e4b0a1b2c3d4e600", "hasMore": true }

Keep requesting with cursor=<nextCursor> until hasMore is false.

Statuses: draft, generating, review, approved, rejected, scheduled, published, failed, archived.

Get an article

GET /v1/api/blogs/{uid}

Requires x-workspace-id. Returns the full article: the fields above plus the content (content_markdown, content_html), meta_title, meta_description, faq, and scores.

curl https://api.seobox.tech/v1/api/blogs/9a7c2e4f-1b3d-4c5e-8f6a-2b4d6e8f0a1c \ -H "x-api-key: $SEOBOX_API_KEY" \ -H "x-workspace-id: $SEOBOX_WORKSPACE_ID"

This is also how a custom site can pull content instead of receiving webhook pushes: list published articles and fetch each one by uid.

Last updated on