Marketing Operations
UTM Campaign URL & Attribution Guard
Inspect, build, normalize, compare, batch-check, and policy-check caller-supplied campaign URLs with explicit Google Analytics field, casing, ambiguity, and sensitive-value boundaries.
CONTRACT
Predictable for agents. Legible for reviewers.
- REST
POST /v1/utm/policy-check- MCP tool
check_campaign_url_policy- Inputs
- One bounded absolute HTTP(S) URL; comparisons accept two URLs, builds accept documented UTM values, and batches accept up to 1,000 URLs with a 2 MiB result ceiling.
- Returns
- CLEAR, REVIEW_REQUIRED, or BLOCKED with documented campaign fields, exact findings, attribution differences, duplicate and casing groups, ruleset version, and an agent-readable next action.
- Latency
- Synchronous
- Usage unit
- Campaign URL operation
The suite also exposes /v1/utm/inspect, /v1/utm/build, /v1/utm/normalize, /v1/utm/compare, and /v1/utm/batch-check plus /mcp/utm. It processes caller-supplied URLs only and never fetches a destination, follows redirects, shortens a URL, queries analytics, verifies reporting outcomes, claims exhaustive sensitive-data detection, or stores the payload. Its fully configured private RapidAPI project is release-queued behind the provider's twenty-public-API cap; direct workspace access remains available.
AGENT-READABLE EXCEPTIONS
UTM_URL_UNSUPPORTEDUTM_URL_CREDENTIALS_BLOCKEDUTM_PERCENT_ENCODING_INVALIDUTM_PARAMETER_DUPLICATEUTM_POTENTIAL_SENSITIVE_VALUEUTM_EXISTING_PARAMETERS_CONFLICTUTM_DESTINATION_HOST_NOT_ALLOWEDUTM_REQUIRED_FIELD_MISSINGUTM_NAMING_STYLE_MISMATCHUTM_OUTPUT_TOO_LARGEPOST /v1/utm/policy-check
Authorization: Bearer apc_...
Content-Type: application/json
{
"url": "https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale&utm_content=hero",
"required_fields": [
"utm_source",
"utm_medium",
"utm_campaign"
],
"require_https": true,
"allowed_destination_hosts": [
"example.com"
],
"allowed_sources": [
"newsletter"
],
"allowed_media": [
"email"
],
"naming_style": "LOWER_SNAKE",
"disallow_unknown_utm": true,
"block_potential_sensitive_values": true
}curl --request POST \
--url 'https://api-production-9502.up.railway.app/v1/utm/policy-check' \
--header 'Authorization: Bearer ${AP_CONTROL_API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
"url": "https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=summer_sale&utm_content=hero",
"required_fields": [
"utm_source",
"utm_medium",
"utm_campaign"
],
"require_https": true,
"allowed_destination_hosts": [
"example.com"
],
"allowed_sources": [
"newsletter"
],
"allowed_media": [
"email"
],
"naming_style": "LOWER_SNAKE",
"disallow_unknown_utm": true,
"block_potential_sensitive_values": true
}'{
"status": "COMPLETED",
"decision": "CLEAR",
"allowed": true,
"campaign": {
"utm_source": "newsletter",
"utm_medium": "email",
"utm_campaign": "summer_sale",
"utm_content": "hero"
},
"destination_host": "example.com",
"findings": [],
"ruleset_version": "GA4_CAMPAIGN_URL_2026",
"scope": "CALLER_SUPPLIED_URLS_ONLY",
"network_queried": false,
"url_fetched": false,
"redirect_followed": false,
"analytics_queried": false,
"url_shortened": false,
"reporting_outcome_verified": false,
"sensitive_value_scan_exhaustive": false,
"payload_stored": false,
"next_action": "The supplied URL satisfies the static caller policy; verify the live destination and reporting configuration separately."
}Try UTM Campaign URL & Attribution Guard with your own workflow.
Start with the workspace, inspect the typed result, then integrate with REST or the focused MCP server.