curl --request POST \
--url https://api.adspo.co/v1/following \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"brand_id": "15087023444"
}
'import requests
url = "https://api.adspo.co/v1/following"
payload = { "brand_id": "15087023444" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({brand_id: '15087023444'})
};
fetch('https://api.adspo.co/v1/following', 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.adspo.co/v1/following",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'brand_id' => '15087023444'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.adspo.co/v1/following"
payload := strings.NewReader("{\n \"brand_id\": \"15087023444\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.adspo.co/v1/following")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"brand_id\": \"15087023444\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.adspo.co/v1/following")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brand_id\": \"15087023444\"\n}"
response = http.request(request)
puts response.read_body{
"brand_id": "<string>",
"brand_name": "<string>",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"followed_at": "2023-11-07T05:31:56Z",
"already_followed": true
}{
"brand_id": "15087023444",
"brand_name": "Nike",
"workspace_id": null,
"followed_at": "2026-11-02T14:05:11Z",
"already_followed": false
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Follow limit reached: at most 30 follows per minute."
}{
"error": "<string>"
}Follow brand
Follows a brand in workspace_id, or your default workspace if that’s left out, like the follow button in the app. Its ads then show in Get followed brands’ creatives.
Only brands already in Adspo can be followed: find them with Search brands.
The follow is yours: the key’s owner, or through the MCP, the person who connected it. A brand you or your team already follow in that workspace isn’t followed again: that returns 200 with already_followed: true and is free, as are requests that fail. A new follow returns 201 and costs 1 credit. Follows are limited to 30 a minute per person.
curl --request POST \
--url https://api.adspo.co/v1/following \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"brand_id": "15087023444"
}
'import requests
url = "https://api.adspo.co/v1/following"
payload = { "brand_id": "15087023444" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({brand_id: '15087023444'})
};
fetch('https://api.adspo.co/v1/following', 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.adspo.co/v1/following",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'brand_id' => '15087023444'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.adspo.co/v1/following"
payload := strings.NewReader("{\n \"brand_id\": \"15087023444\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.adspo.co/v1/following")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"brand_id\": \"15087023444\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.adspo.co/v1/following")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brand_id\": \"15087023444\"\n}"
response = http.request(request)
puts response.read_body{
"brand_id": "<string>",
"brand_name": "<string>",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"followed_at": "2023-11-07T05:31:56Z",
"already_followed": true
}{
"brand_id": "15087023444",
"brand_name": "Nike",
"workspace_id": null,
"followed_at": "2026-11-02T14:05:11Z",
"already_followed": false
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Follow limit reached: at most 30 follows per minute."
}{
"error": "<string>"
}Authorizations
Your Adspo API key.
Body
The brand's Facebook Ad Library page ID, from Search brands.
The workspace to follow it in (from Get workspaces), or default. Defaults to the default workspace.
Response
Already followed in that workspace. Nothing changed, and no credit was used.
Facebook Ad Library page ID.
The workspace it's followed in. null for the default workspace.
When it was followed. For a brand already followed, when that was.
Whether it was already followed in that workspace, by you or your team.