Get a run and its per-ad journal
Return the run and a page of change rows. Status filters change statuses, not run statuses. Limit defaults to 200 and is clamped to 1 through 500. Changes sort by campaign ID, ad ID and row ID. Keep the same status filter when paging. Null next_cursor means the last page.
curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000?location_id=example_string&status=planned&limit=200&cursor=example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000?location_id=example_string&status=planned&limit=200&cursor=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000?location_id=example_string&status=planned&limit=200&cursor=example_string", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000?location_id=example_string&status=planned&limit=200&cursor=example_string", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000?location_id=example_string&status=planned&limit=200&cursor=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"run": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"kind": "preview",
"status": "completed",
"location_id": "example_string",
"ad_account_id": "example_string",
"config_generation": "123e4567-e89b-12d3-a456-426614174000",
"config_auto_approval_epoch": 42,
"config_revision": 42,
"config_fingerprint": "example_string",
"run_slot": "2024-12-25T10:00:00Z",
"journal_ready": true,
"ad_statuses_snapshot": [
"ACTIVE"
],
"rules_snapshot": {
"version": 42,
"operator": "AND",
"conditions": [
{
"type": "campaign_name_contains",
"value": "example_string",
"case_sensitive": true
}
]
},
"template_snapshot": "example_string",
"overwrite_snapshot": "fill_missing",
"short_links_snapshot": true,
"resolve_names_snapshot": true,
"attempts": 42,
"source_preview_id": "123e4567-e89b-12d3-a456-426614174000",
"truncated": true,
"truncation_reason": "example_string",
"campaigns_scanned": 42,
"campaigns_matched": 42,
"ads_scanned": 42,
"ads_planned": 42,
"ads_applied": 42,
"ads_failed": 42,
"ads_uncertain": 42,
"ads_skipped": 42,
"ads_stale": 42,
"expires_at": "2024-12-25T10:00:00Z",
"error_code": "unauthorized",
"error_message": "example_string",
"requested_by": "example_string",
"created_at": "2024-12-25T10:00:00Z",
"started_at": "2024-12-25T10:00:00Z",
"finished_at": "2024-12-25T10:00:00Z"
},
"changes": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"run_id": "123e4567-e89b-12d3-a456-426614174000",
"read_failures": 42,
"next_read_at": "2024-12-25T10:00:00Z",
"attempts": 42,
"campaign_id": "example_string",
"campaign_name": "John Doe",
"adset_id": "example_string",
"adset_name": "John Doe",
"ad_id": "example_string",
"ad_name": "John Doe",
"ad_effective_status": "ACTIVE",
"old_creative_id": "example_string",
"new_creative_id": "example_string",
"url_tags_before": "example_string",
"url_tags_after": "example_string",
"links_known": true,
"link_changes": [
{
"from": "example_string",
"action": "keep",
"to": "example_string",
"slug": "example_string",
"link_id": "example_string",
"destination": "example_string",
"problem": "missing",
"resolved": true
}
],
"action": "set",
"status": "planned",
"reason": "unsupported_creative",
"error_code": "unauthorized",
"error_message": "example_string",
"created_at": "2024-12-25T10:00:00Z",
"updated_at": "2024-12-25T10:00:00Z"
}
],
"next_cursor": "example_string"
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
/client/v1/ad-tagging/meta/runs/{id}Target server for requests. Edit to use your own host.
Agency key (ak_) or location secret key (sk_, reads of the config and runs only). Scoped keys (mcp_) are accepted too and need ad_tagging:read or ad_tagging:write. See Using an mcp_ key over HTTP.
ak_) or location secret key (sk_, reads of the config and runs only). Scoped keys (mcp_) are accepted too and need ad_tagging:read or ad_tagging:write. See Using an mcp_ key over HTTP.Location to scope to. Required for ak_ keys or send X-Location-Id. Ignored for sk_.
next_cursor from the previous page.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Agency key (ak_) or location secret key (sk_, reads of the config and runs only). Scoped keys (mcp_) are accepted too and need ad_tagging:read or ad_tagging:write. See Using an mcp_ key over HTTP.
Path Parameters
Query Parameters
Location to scope to. Required for ak_ keys or send X-Location-Id. Ignored for sk_.
plannedcreative_pendingcreative_createdswap_pendingappliedfaileduncertainreconciledskippedstalecancellednext_cursor from the previous page.