Get Campaign Optimization History
curl --request POST \
--url https://public.plai.io/optimize_me/get_campaign_optimization_history \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"userId": "<string>",
"campaignId": "<string>"
}
'import requests
url = "https://public.plai.io/optimize_me/get_campaign_optimization_history"
payload = {
"userId": "<string>",
"campaignId": "<string>"
}
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({userId: '<string>', campaignId: '<string>'})
};
fetch('https://public.plai.io/optimize_me/get_campaign_optimization_history', 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://public.plai.io/optimize_me/get_campaign_optimization_history",
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([
'userId' => '<string>',
'campaignId' => '<string>'
]),
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://public.plai.io/optimize_me/get_campaign_optimization_history"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"campaignId\": \"<string>\"\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://public.plai.io/optimize_me/get_campaign_optimization_history")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"campaignId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public.plai.io/optimize_me/get_campaign_optimization_history")
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 \"userId\": \"<string>\",\n \"campaignId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"results": {
"success": true,
"campaign": {
"campaignId": "<string>",
"campaignName": "<string>",
"startDate": 123,
"timestamp": 123,
"optimizationStatus": "<string>",
"platform": "<string>",
"history": [
{
"adId": "<string>",
"headlines": [
{
"newText": "<string>",
"oldText": "<string>"
}
],
"primaryTexts": [
{
"newText": "<string>",
"oldText": "<string>"
}
],
"images": [
{
"url": "<string>",
"width": 123,
"height": 123,
"id": "<string>"
}
],
"adSetId": "<string>",
"timestamp": 123,
"lastUpdate": {
"_seconds": 123,
"_nanoseconds": 123
}
}
]
},
"error": "<string>"
}
}Campaign Optimization
Get Campaign Optimization History
This endpoint retrieves the full optimization history of a campaign. It includes detailed logs of changes made during both audience and creative optimizations — such as which segments were paused, what assets were updated, and when these changes occurred.
POST
/
optimize_me
/
get_campaign_optimization_history
Get Campaign Optimization History
curl --request POST \
--url https://public.plai.io/optimize_me/get_campaign_optimization_history \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"userId": "<string>",
"campaignId": "<string>"
}
'import requests
url = "https://public.plai.io/optimize_me/get_campaign_optimization_history"
payload = {
"userId": "<string>",
"campaignId": "<string>"
}
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({userId: '<string>', campaignId: '<string>'})
};
fetch('https://public.plai.io/optimize_me/get_campaign_optimization_history', 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://public.plai.io/optimize_me/get_campaign_optimization_history",
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([
'userId' => '<string>',
'campaignId' => '<string>'
]),
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://public.plai.io/optimize_me/get_campaign_optimization_history"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"campaignId\": \"<string>\"\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://public.plai.io/optimize_me/get_campaign_optimization_history")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"campaignId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public.plai.io/optimize_me/get_campaign_optimization_history")
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 \"userId\": \"<string>\",\n \"campaignId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"results": {
"success": true,
"campaign": {
"campaignId": "<string>",
"campaignName": "<string>",
"startDate": 123,
"timestamp": 123,
"optimizationStatus": "<string>",
"platform": "<string>",
"history": [
{
"adId": "<string>",
"headlines": [
{
"newText": "<string>",
"oldText": "<string>"
}
],
"primaryTexts": [
{
"newText": "<string>",
"oldText": "<string>"
}
],
"images": [
{
"url": "<string>",
"width": 123,
"height": 123,
"id": "<string>"
}
],
"adSetId": "<string>",
"timestamp": 123,
"lastUpdate": {
"_seconds": 123,
"_nanoseconds": 123
}
}
]
},
"error": "<string>"
}
}Request Body
string
required
User ID, If not already created, make a user on create user
page first. If already created,
retrieve the user ID from get profile
page.
string
required
Campaign ID
Response
boolean
Indicates that the HTTP response was successful (status code 200 OK).
object
Show Results Object
Show Results Object
boolean
Indicates whether the specific operation or API action was successful.
object
Show Campaign Object
Show Campaign Object
string
The unique identifier for the campaign.
string
The name of the campaign.
number
The start date of the campaign.
number
Timestamp of the optimization.
string
Optimization status of the campaign.
string
The platform of the campaign.
object[]
Show History Object
Show History Object
string
The ad ID.Example:
"1234567890"object[]
string
The ad set id.
number
The timestamp of the optimization.
string
Error string if something went wrong