curl --request GET \
--url https://app.sideshift.app/api/v1/programs \
--header 'x-api-key: <api-key>'import requests
url = "https://app.sideshift.app/api/v1/programs"
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/programs', 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/programs",
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/programs"
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/programs")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/v1/programs")
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>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"createdAt": 123,
"updatedAt": 123,
"stats": {
"totalCreators": 123,
"activeCreators": 123,
"pendingCreators": 123,
"totalContracts": 123,
"activeContracts": 123,
"totalPosts": 123,
"totalViews": 123,
"totalSpend": 123,
"avgCPM": 123
}
}
],
"page": 123,
"total": 123,
"totalPages": 123
}List programs
Retrieve all programs for your company with pagination and filtering.
Programs represent campaigns or marketing initiatives that creators participate in.
The stats object
Each program item may include a stats object with live campaign totals
derived from the underlying contracts, posts, and wallet ledger. Use it
to render campaign roll-ups (post counts, views, spend, roster size)
without a second call.
A few behaviours to be aware of when consuming stats:
statsis only present when derivation succeeds. If the live derivation fails for a given campaign, the field is omitted from that item rather than returned as stale data. Treatstatsas optional and fall back accordingly.- Zeros are meaningful. For campaigns with no activity yet (for
example inactive or newly created ones),
statsis still returned with every numeric field set to0. Astatsobject is not itself a signal that a campaign is active. If you previously relied onif (program.stats)to detect active campaigns, switch to checkingstatusor a specific field such asstats.totalPosts > 0. creatorsandhandlesare not reconciled withstats. Thecreatorsandhandlesfields (when present) come from a separate cache and can lag reality. In particular,stats.totalCreatorsis derived live from contracts and can disagree with the length ofcreators.approvedon the same item. Do not use one to validate the other.
curl --request GET \
--url https://app.sideshift.app/api/v1/programs \
--header 'x-api-key: <api-key>'import requests
url = "https://app.sideshift.app/api/v1/programs"
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/programs', 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/programs",
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/programs"
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/programs")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/v1/programs")
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>",
"name": "<string>",
"description": "<string>",
"status": "<string>",
"createdAt": 123,
"updatedAt": 123,
"stats": {
"totalCreators": 123,
"activeCreators": 123,
"pendingCreators": 123,
"totalContracts": 123,
"activeContracts": 123,
"totalPosts": 123,
"totalViews": 123,
"totalSpend": 123,
"avgCPM": 123
}
}
],
"page": 123,
"total": 123,
"totalPages": 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
Page number for pagination
x >= 1Number of items per page
1 <= x <= 100Filter programs by status
draft, active, paused, completed, archived Search programs by name