AVAILABLE

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_LARGE
HTTP request
POST /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 (bash)
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
}'
Representative response
{
  "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."
}
Caller-supplied URLs onlyThe API parses bounded HTTP(S) URLs and never fetches a destination, resolves DNS, follows redirects, or shortens a URL.
Attribution is case-sensitiveNormalization returns an exact change map because Google Analytics can split differently cased campaign values into separate reporting rows.
No reporting or privacy guaranteeThe service never queries analytics or verifies reporting outcomes; sensitive-value detection is deliberately pattern-based and non-exhaustive.

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.