Cancel a queued or running run
Ads not yet started become cancelled. An ad with a Meta write in flight becomes uncertain: Meta may have applied it. Ads already tagged stay tagged. Cancellation prevents subsequent swaps but cannot recall writes already sent to Meta. The account reservation is retained until the worker quiesces and releases it, or its lease expires plus a 30-second grace period. A replacement run can still get run_in_progress meanwhile. Works on every plan.
curl -X POST "https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000/cancel?location_id=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/cancel?location_id=example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.post(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/cancel?location_id=example_string", {
method: "POST",
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("POST", "https://mythic-analytics.gulp.workers.dev/client/v1/ad-tagging/meta/runs/123e4567-e89b-12d3-a456-426614174000/cancel?location_id=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/cancel?location_id=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"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"
}
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
{
"error": "Conflict",
"message": "The request conflicts with the current state of the resource",
"code": 409,
"details": "Resource already exists"
}
/client/v1/ad-tagging/meta/runs/{id}/cancelTarget 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_.
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_.