curl --request GET \
--url https://app.sideshift.app/api/v1/posts \
--header 'x-api-key: <api-key>'import requests
url = "https://app.sideshift.app/api/v1/posts"
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/posts', 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/posts",
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/posts"
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/posts")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/v1/posts")
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": [
{
"id": "<string>",
"title": "<string>",
"platform": "<string>",
"views": 123,
"likes": 123,
"comments": 123,
"shares": 123,
"earnings": 123,
"paid": true,
"contractorName": "<string>",
"uploadedAt": 123
}
],
"page": 123,
"total": 123
}List posts
Retrieve social media posts with comprehensive filtering options.
Posts can be filtered by program, platform, creator, date range, and more. Results include engagement metrics (views, likes, comments, etc.)
Agency accounts can pass scope=agency to list posts across the parent
agency and every subaccount in one call.
curl --request GET \
--url https://app.sideshift.app/api/v1/posts \
--header 'x-api-key: <api-key>'import requests
url = "https://app.sideshift.app/api/v1/posts"
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/posts', 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/posts",
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/posts"
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/posts")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/v1/posts")
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": [
{
"id": "<string>",
"title": "<string>",
"platform": "<string>",
"views": 123,
"likes": 123,
"comments": 123,
"shares": 123,
"earnings": 123,
"paid": true,
"contractorName": "<string>",
"uploadedAt": 123
}
],
"page": 123,
"total": 123
}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 x <= 100Filter by program IDs (multiple allowed)
Filter by platforms. Repeat the parameter for several. 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 Filter by creator IDs (multiple allowed)
Filter posts from this date (YYYY-MM-DD)
Filter posts until this date (YYYY-MM-DD)