Campaigns
Get a campaign
Metric fields (spent, impressions, clicks, conversions, leads, purchase_value, ctr, cpa, roas) cover the last 28 days, on every platform. That is the window the ad networks give us daily figures for, so it is the longest total we can report without inventing the missing days - it is NOT the campaign’s lifetime. For any other date range, or a per-campaign breakdown of one, use GET /ads/analytics. Requires scope ads:read.
GET
/
ads
/
campaigns
/
{id}
Get a campaign
curl --request GET \
--url https://api.smartlyq.com/v1/ads/campaigns/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.smartlyq.com/v1/ads/campaigns/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.smartlyq.com/v1/ads/campaigns/{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.smartlyq.com/v1/ads/campaigns/{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 => [
"Authorization: Bearer <token>"
],
]);
$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.smartlyq.com/v1/ads/campaigns/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.smartlyq.com/v1/ads/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartlyq.com/v1/ads/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 5001,
"name": "Spring Sale - US",
"platform": "meta",
"objective": "traffic",
"status": "active",
"budget": 50,
"budget_type": "daily",
"spent": 128.4,
"impressions": 48213,
"clicks": 921,
"conversions": 34,
"ctr": 1.91,
"cpa": 3.78,
"roas": 4.2,
"purchase_value": 540,
"leads": 12,
"start_date": "2026-08-01",
"end_date": "<string>",
"last_sync_at": "2026-08-26T09:00:00Z",
"created_at": "2026-08-01T10:00:00Z"
},
"meta": {
"request_id": "req_9f3a2b1c-7d4e-4a08-b2c6-5e1f8a9d0c34",
"timestamp": "2026-07-26T09:41:22Z"
}
}{
"success": false,
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Post not found.",
"details": {}
},
"meta": {
"request_id": "req_9f3a2b1c-7d4e-4a08-b2c6-5e1f8a9d0c34",
"timestamp": "2026-07-26T09:41:22Z"
}
}⌘I
Get a campaign
curl --request GET \
--url https://api.smartlyq.com/v1/ads/campaigns/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.smartlyq.com/v1/ads/campaigns/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.smartlyq.com/v1/ads/campaigns/{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.smartlyq.com/v1/ads/campaigns/{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 => [
"Authorization: Bearer <token>"
],
]);
$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.smartlyq.com/v1/ads/campaigns/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.smartlyq.com/v1/ads/campaigns/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smartlyq.com/v1/ads/campaigns/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 5001,
"name": "Spring Sale - US",
"platform": "meta",
"objective": "traffic",
"status": "active",
"budget": 50,
"budget_type": "daily",
"spent": 128.4,
"impressions": 48213,
"clicks": 921,
"conversions": 34,
"ctr": 1.91,
"cpa": 3.78,
"roas": 4.2,
"purchase_value": 540,
"leads": 12,
"start_date": "2026-08-01",
"end_date": "<string>",
"last_sync_at": "2026-08-26T09:00:00Z",
"created_at": "2026-08-01T10:00:00Z"
},
"meta": {
"request_id": "req_9f3a2b1c-7d4e-4a08-b2c6-5e1f8a9d0c34",
"timestamp": "2026-07-26T09:41:22Z"
}
}{
"success": false,
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Post not found.",
"details": {}
},
"meta": {
"request_id": "req_9f3a2b1c-7d4e-4a08-b2c6-5e1f8a9d0c34",
"timestamp": "2026-07-26T09:41:22Z"
}
}
