Get activity feed
curl --request GET \
--url https://api.snowseo.com/v3/activity-feed \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/activity-feed"
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/activity-feed', 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/activity-feed",
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/activity-feed"
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/activity-feed")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/activity-feed")
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{
"items": [
{
"id": "<string>",
"type": "article-generated",
"title": "<string>",
"description": "<string>",
"timestamp": "<string>",
"metadata": {}
}
],
"nextCursor": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Dashboard
Activity Feed
Get a timeline of recent events for your team - audits, articles, and changes.
GET
/
v3
/
activity-feed
Get activity feed
curl --request GET \
--url https://api.snowseo.com/v3/activity-feed \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/activity-feed"
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/activity-feed', 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/activity-feed",
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/activity-feed"
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/activity-feed")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/activity-feed")
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{
"items": [
{
"id": "<string>",
"type": "article-generated",
"title": "<string>",
"description": "<string>",
"timestamp": "<string>",
"metadata": {}
}
],
"nextCursor": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Get a timeline of recent activity for your team. This is the same feed that powers the dashboard overview - showing when audits were completed, articles were published, and other key events.
Other event types may appear as new features ship, so don’t treat this list as closed.
Billing-only entries (credit charges for Ask Snowy, SEO audit auto-fix, auto optimize, internal link analysis, backlink outreach, and knowledge base storage) are not part of this feed. They appear in Usage History instead.
Event Types
| Type | Meaning |
|---|---|
article-generated | An article finished generating |
article-scheduled | An article was scheduled for publishing |
article-published | An article was published to your CMS |
article-updated | An existing article was updated |
keyword-tracked | A keyword was added to rank tracking |
keyword-untracked | A keyword was removed from rank tracking |
prompt-tracked | A prompt was added to AI Visibility tracking |
audit-completed | A website audit finished running |
onboarding-step | An onboarding step was completed |
onboarding-complete | Onboarding was fully completed |
Response
Returns{ "items": [...], "nextCursor": "..." }, newest first. Each item has id, type, title, description, timestamp, and an optional metadata object.
To load the next page, pass nextCursor back as the cursor parameter. nextCursor is null at the end. limit defaults to 15 and is capped at 50.Authorizations
bearerAuthapiKey
Your SnowSEO API key (sk_...).
Query Parameters
Team ID
Max number of items (default 15, max 50)
Required range:
1 <= x <= 50Opaque nextCursor from the previous page
Was this page helpful?

