curl --request GET \
--url https://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft"
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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft', 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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft",
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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft"
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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft")
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{
"status": "success",
"message": "<string>",
"data": {
"campaignId": 123,
"appUrl": "<string>",
"campaignName": "<string>",
"status": "DRAFT",
"isValid": true,
"errors": [
"<string>"
],
"warnings": [
"<string>"
]
}
}Validate campaign draft
Validate the stored editor draft graph for an already-created campaign by campaignId and return blocking errors plus non-blocking warnings. Use this to inspect an existing saved draft, including incomplete or complex internal drafts. This does not validate an arbitrary request payload.
This endpoint validates a campaign that already exists in Enginy. It reconstructs the stored draft graph for the requested campaignId and does not validate a newly submitted campaign payload. Saved manual template content is included. This validates stored content, including dynamic template bodies, but does not certify eligibility for a steps PATCH.
Responses include direct Enginy app URLs when available. Responses include an appUrl that opens the campaign in Enginy. MCP agents should return those URLs to users whenever they are present in the response.
Required scope:
CAMPAIGNS_READRate limit: 100 requests per minute
curl --request GET \
--url https://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft"
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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft', 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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft",
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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft"
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://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/campaign/{campaignId}/validate-draft")
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{
"status": "success",
"message": "<string>",
"data": {
"campaignId": 123,
"appUrl": "<string>",
"campaignName": "<string>",
"status": "DRAFT",
"isValid": true,
"errors": [
"<string>"
],
"warnings": [
"<string>"
]
}
}