curl --request GET \
--url https://api.adspo.co/v1/creatives/{creative_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.adspo.co/v1/creatives/{creative_id}"
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://api.adspo.co/v1/creatives/{creative_id}', 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/creatives/{creative_id}",
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://api.adspo.co/v1/creatives/{creative_id}"
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://api.adspo.co/v1/creatives/{creative_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.adspo.co/v1/creatives/{creative_id}")
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{
"creative_id": "f930d886d0fb9e86b9dd6c1200dab7ef",
"brand_id": "857986847394146",
"brand_name": "DRMTLGY",
"format": "IMAGE",
"hd_url": "https://r2.adspo.co/creatives/images/original/f930d886d0fb9e86b9dd6c1200dab7ef.jpg",
"sd_url": "https://r2.adspo.co/creatives/images/resized/f930d886d0fb9e86b9dd6c1200dab7ef.jpg",
"is_active": false,
"start_date": "2026-03-16T07:00:00Z",
"end_date": "2026-04-24T07:00:00Z",
"runtime_days": 39,
"ad_count": 10,
"landing_pages": [
"https://www.example.com"
],
"countries": [
"AU",
"GB",
"NZ",
"US"
],
"languages": [
"en"
],
"impression_order": 11,
"variants": [],
"hook": null,
"visual_formats": [
"High Production",
"Demo"
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Get creative
Returns a single creative by ID, including its visual formats and, optionally, the individual ads running it.
The transcript is deliberately not included — fetch it separately from
/v1/creatives/{creative_id}/transcript.
curl --request GET \
--url https://api.adspo.co/v1/creatives/{creative_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.adspo.co/v1/creatives/{creative_id}"
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://api.adspo.co/v1/creatives/{creative_id}', 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/creatives/{creative_id}",
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://api.adspo.co/v1/creatives/{creative_id}"
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://api.adspo.co/v1/creatives/{creative_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.adspo.co/v1/creatives/{creative_id}")
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{
"creative_id": "f930d886d0fb9e86b9dd6c1200dab7ef",
"brand_id": "857986847394146",
"brand_name": "DRMTLGY",
"format": "IMAGE",
"hd_url": "https://r2.adspo.co/creatives/images/original/f930d886d0fb9e86b9dd6c1200dab7ef.jpg",
"sd_url": "https://r2.adspo.co/creatives/images/resized/f930d886d0fb9e86b9dd6c1200dab7ef.jpg",
"is_active": false,
"start_date": "2026-03-16T07:00:00Z",
"end_date": "2026-04-24T07:00:00Z",
"runtime_days": 39,
"ad_count": 10,
"landing_pages": [
"https://www.example.com"
],
"countries": [
"AU",
"GB",
"NZ",
"US"
],
"languages": [
"en"
],
"impression_order": 11,
"variants": [],
"hook": null,
"visual_formats": [
"High Production",
"Demo"
]
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Your Adspo API key.
Path Parameters
The creative ID.
Query Parameters
Include the individual ads running this creative.
Response
The creative.
Unique identifier for this creative.
Facebook Ad Library page ID of the brand running this creative.
Display name of the brand. null only when the brand record is missing.
Whether the creative uses a static image or video.
IMAGE, VIDEO High-resolution media URL. For videos the HD stream, for images the original.
Lower-resolution media URL. For videos the SD stream, for images the resized version.
Whether the creative is currently running as an active ad.
Date the creative was first observed in the Ad Library.
Date the creative was last observed. null if the creative is still active.
Number of days between first_seen and last_seen (or today if still active).
Number of individual ad variants using this creative.
Destination URLs this creative links to.
Country codes where this creative has been shown.
Languages this creative has been served in.
Estimated impression rank among active ads for this brand (lower = more impressions).
Alternate copies of this creative.
Show child attributes
Show child attributes
Opening line of the video transcript. null if unavailable or not a video creative.
Visual styles detected in this creative, such as "Customer Testimonial", "Demo", "High Production" or "Model / Try-on". Empty when the creative has not been classified.
Individual ad variants for this creative. Only present when include_ads=true.
Show child attributes
Show child attributes