curl --request GET \
--url https://api.snowseo.com/v3/cms/articles \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/cms/articles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/cms/articles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snowseo.com/v3/cms/articles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/cms/articles"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.snowseo.com/v3/cms/articles")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/cms/articles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"articles": [
{
"slug": "<string>",
"topicId": "<string>",
"title": "<string>",
"status": "draft",
"type": "listicle",
"keywords": [
{
"keyword": "<string>",
"type": "primary"
}
],
"prompts": [
{
"prompt": "<string>",
"type": "primary",
"topic": "<string>"
}
],
"auditScore": 123,
"url": "<string>",
"cmsArticleId": "<string>",
"provider": [
"wordpress"
],
"publishedAt": "<string>",
"scheduledAt": "<string>",
"lastRefreshedAt": "<string>",
"cmsPostStatus": "draft",
"createdAt": "<string>",
"updatedAt": "<string>",
"metaData": {},
"isPublic": true,
"isPillar": true,
"generating": true,
"generationKind": "<string>",
"finalizing": true,
"categories": [
"<string>"
],
"tags": [
"<string>"
]
}
],
"pagination": {
"page": 123,
"perPage": 123,
"total": 123,
"totalPages": 123,
"hasMore": true
}
}{
"error": "<string>"
}Articles
List all articles for your team with status, SEO scores, and metadata.
curl --request GET \
--url https://api.snowseo.com/v3/cms/articles \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/cms/articles"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/cms/articles', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snowseo.com/v3/cms/articles",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/cms/articles"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.snowseo.com/v3/cms/articles")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/cms/articles")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"articles": [
{
"slug": "<string>",
"topicId": "<string>",
"title": "<string>",
"status": "draft",
"type": "listicle",
"keywords": [
{
"keyword": "<string>",
"type": "primary"
}
],
"prompts": [
{
"prompt": "<string>",
"type": "primary",
"topic": "<string>"
}
],
"auditScore": 123,
"url": "<string>",
"cmsArticleId": "<string>",
"provider": [
"wordpress"
],
"publishedAt": "<string>",
"scheduledAt": "<string>",
"lastRefreshedAt": "<string>",
"cmsPostStatus": "draft",
"createdAt": "<string>",
"updatedAt": "<string>",
"metaData": {},
"isPublic": true,
"isPillar": true,
"generating": true,
"generationKind": "<string>",
"finalizing": true,
"categories": [
"<string>"
],
"tags": [
"<string>"
]
}
],
"pagination": {
"page": 123,
"perPage": 123,
"total": 123,
"totalPages": 123,
"hasMore": true
}
}{
"error": "<string>"
}Fields
| Field | Description |
|---|---|
status | Current status: draft, processing, generated, scheduled, published, failed |
type | Article type: news, blog, guide, review, comparison, technical, case-study, listicle |
auditScore | SEO audit score (0–100), from the article’s latest audit |
isPublic | Whether the article is publicly accessible via your brand feed |
isPillar | Whether this is a pillar (cornerstone) article |
keywords | Target keywords with type (primary / secondary) |
provider | CMS provider(s) if published (wordpress, shopify, webflow, ghost, webhook, framer) |
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Team ID
Page number (default: 1)
Items per page (default: 20, or "all")
Filter by status (draft, processing, generated, scheduled, published, failed, manual) or "all"
draft, processing, generated, scheduled, published, failed, manual, all Filter to articles belonging to a topic cluster
ISO date — only articles whose scheduledAt or publishedAt is on/after this (calendar-window scoping)
ISO date — only articles whose scheduledAt or publishedAt is on/before this (calendar-window scoping)
Case-insensitive search across title, slug, keywords, prompts, providers, and topic name
Sort column
name, status, seo, topic, created Sort direction
asc, desc Filter to articles carrying this category name
Filter to articles carrying this tag name
Was this page helpful?

