curl --request POST \
--url https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"account_id": "<string>",
"campaign_ids": [
"<string>"
],
"intended_statuses": [],
"creative_ids": [
"<string>"
],
"page_size": 100,
"page_token": "<string>"
}
'import requests
url = "https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list"
payload = {
"account_id": "<string>",
"campaign_ids": ["<string>"],
"intended_statuses": [],
"creative_ids": ["<string>"],
"page_size": 100,
"page_token": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
account_id: '<string>',
campaign_ids: ['<string>'],
intended_statuses: [],
creative_ids: ['<string>'],
page_size: 100,
page_token: '<string>'
})
};
fetch('https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list', 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.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list",
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([
'account_id' => '<string>',
'campaign_ids' => [
'<string>'
],
'intended_statuses' => [
],
'creative_ids' => [
'<string>'
],
'page_size' => 100,
'page_token' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"campaign_ids\": [\n \"<string>\"\n ],\n \"intended_statuses\": [],\n \"creative_ids\": [\n \"<string>\"\n ],\n \"page_size\": 100,\n \"page_token\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"campaign_ids\": [\n \"<string>\"\n ],\n \"intended_statuses\": [],\n \"creative_ids\": [\n \"<string>\"\n ],\n \"page_size\": 100,\n \"page_token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account_id\": \"<string>\",\n \"campaign_ids\": [\n \"<string>\"\n ],\n \"intended_statuses\": [],\n \"creative_ids\": [\n \"<string>\"\n ],\n \"page_size\": 100,\n \"page_token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyCreatives list
Search and list creatives for a LinkedIn Ad Account. Filter by campaign, status, or creative IDs. Uses q=criteria finder with cursor-based pagination (max 100 per page). VOCABULARY: the API’s creative is what Campaign Manager shows as “Ad” (campaignGroup=“Campaign”, campaign=“Ad set”, creative=“Ad”). Say both names when reporting to a user, or they will look in the wrong tab and think nothing happened.
CLI: adside linkedin creatives list
curl --request POST \
--url https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"account_id": "<string>",
"campaign_ids": [
"<string>"
],
"intended_statuses": [],
"creative_ids": [
"<string>"
],
"page_size": 100,
"page_token": "<string>"
}
'import requests
url = "https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list"
payload = {
"account_id": "<string>",
"campaign_ids": ["<string>"],
"intended_statuses": [],
"creative_ids": ["<string>"],
"page_size": 100,
"page_token": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
account_id: '<string>',
campaign_ids: ['<string>'],
intended_statuses: [],
creative_ids: ['<string>'],
page_size: 100,
page_token: '<string>'
})
};
fetch('https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list', 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.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list",
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([
'account_id' => '<string>',
'campaign_ids' => [
'<string>'
],
'intended_statuses' => [
],
'creative_ids' => [
'<string>'
],
'page_size' => 100,
'page_token' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"campaign_ids\": [\n \"<string>\"\n ],\n \"intended_statuses\": [],\n \"creative_ids\": [\n \"<string>\"\n ],\n \"page_size\": 100,\n \"page_token\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"campaign_ids\": [\n \"<string>\"\n ],\n \"intended_statuses\": [],\n \"creative_ids\": [\n \"<string>\"\n ],\n \"page_size\": 100,\n \"page_token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.adside.ai/v1/workspaces/{workspaceId}/linkedin/creatives/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account_id\": \"<string>\",\n \"campaign_ids\": [\n \"<string>\"\n ],\n \"intended_statuses\": [],\n \"creative_ids\": [\n \"<string>\"\n ],\n \"page_size\": 100,\n \"page_token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
A personal API key (adside_pat_…) or a token from adside login. Either carries the permissions of the person it belongs to.
Path Parameters
1Body
LinkedIn Ad Account ID. Omit it: it defaults to the account this workspace is connected to, and any other account is refused.
Filter by campaign URNs or IDs
Filter by intended statuses
ACTIVE, PAUSED, DRAFT, ARCHIVED, CANCELED, PENDING_DELETION, REMOVED Filter by specific creative URNs
Sort order by creative ID (default: ASCENDING)
ASCENDING, DESCENDING Number of results per page (max 100)
1 <= x <= 100Cursor token for next page of results
Response
Success