curl --request GET \
--url https://app.sideshift.app/api/v1/analytics/overview \
--header 'x-api-key: <api-key>'import requests
url = "https://app.sideshift.app/api/v1/analytics/overview"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://app.sideshift.app/api/v1/analytics/overview', 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://app.sideshift.app/api/v1/analytics/overview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://app.sideshift.app/api/v1/analytics/overview"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.sideshift.app/api/v1/analytics/overview")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/v1/analytics/overview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"summary": {
"totalPosts": 123,
"totalViews": 123,
"totalLikes": 123,
"totalComments": 123,
"totalShares": 123,
"totalBookmarks": 123,
"totalEarnings": 123,
"engagementRate": 123,
"totalContracts": 123,
"activeContracts": 123,
"uniqueCreators": 123
},
"snapshotSummary": {
"totalPosts": 123,
"totalViews": 123,
"totalLikes": 123,
"totalComments": 123,
"totalShares": 123,
"totalBookmarks": 123,
"totalEarnings": 123,
"engagementRate": 123,
"uniqueCreators": 123
},
"topPosts": [
{}
],
"topCreators": [
{}
],
"platformBreakdown": {}
}
}General analytics overview
Get comprehensive analytics with filtering capabilities.
Similar to the /overall page in the web app, this endpoint provides:
- Summary metrics
- Top performing posts
- Top performing creators
- Platform breakdown
When fromDate and/or toDate are provided, summary uses the same
activity attribution model as the dashboard Performance Overview chart:
- daily deltas from post
dailystats - first-stat totals attributed back to the upload date
- posts without daily stats attributed to their upload date
snapshotSummary, topPosts, topCreators, and platformBreakdown
remain upload-date snapshot views, matching the /overall page tables.
Agency accounts can pass scope=agency to compute the overview across
the parent agency and every subaccount.
curl --request GET \
--url https://app.sideshift.app/api/v1/analytics/overview \
--header 'x-api-key: <api-key>'import requests
url = "https://app.sideshift.app/api/v1/analytics/overview"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://app.sideshift.app/api/v1/analytics/overview', 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://app.sideshift.app/api/v1/analytics/overview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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://app.sideshift.app/api/v1/analytics/overview"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.sideshift.app/api/v1/analytics/overview")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/v1/analytics/overview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"summary": {
"totalPosts": 123,
"totalViews": 123,
"totalLikes": 123,
"totalComments": 123,
"totalShares": 123,
"totalBookmarks": 123,
"totalEarnings": 123,
"engagementRate": 123,
"totalContracts": 123,
"activeContracts": 123,
"uniqueCreators": 123
},
"snapshotSummary": {
"totalPosts": 123,
"totalViews": 123,
"totalLikes": 123,
"totalComments": 123,
"totalShares": 123,
"totalBookmarks": 123,
"totalEarnings": 123,
"engagementRate": 123,
"uniqueCreators": 123
},
"topPosts": [
{}
],
"topCreators": [
{}
],
"platformBreakdown": {}
}
}Authorizations
API key for authentication. Get yours from Settings → Integrations. A key created by a team member acts as that member and follows their current team permissions; a request outside those permissions returns 403 { "error": "insufficient_scope", "scope": "<required>" }.
Query Parameters
Data scope. company (default) returns only the authenticated
company's own data. agency returns the union of the parent agency
plus every subaccount — use this to pull analytics across all brands.
scope=agency requires an API key belonging to a parent agency
account (an account with isAgency=true and no parent). Passing it with
a non-agency or subaccount key returns 403.
company, agency Filter analytics by specific program
Filter analytics by specific creator
Filter analytics by platform. Use twitter rather than x, which is only the display name - this filter matches the stored value literally and does not resolve aliases. An unrecognised platform is not rejected; it simply matches nothing.
tiktok, instagram, youtube, snapchat, facebook, twitter, linkedin Response
Successfully retrieved analytics overview
Show child attributes
Show child attributes