publ betaReference (MCP guide)
Open publ console

publ Reference

Migration map.

conversion_links_manage

This implementation is a dependency of the documentation branch.

Activate/deactivate or delete 1–100 selected conversion links with per-record revisions. Batch effects are not atomic. Deletion cannot be undone by this workflow and does not verify associated segment/benefit cleanup.

Access and input

Requires OWNER or DELEGATEE with MANAGE_CONVERSION_LINKS on the selected channel. MANAGE_MARKETING_TOOLS alone is insufficient. No connected-domain gate is imposed. Creation alone requires a verified eligible Business-or-higher source plan; existing-link reads, updates, visibility and deletion do not inherit that creation gate. See the creation policy. Hosted source rules admit these tools only on the exact selected-channel resource, not account resources; this is not deployed authorization evidence.

channelCode is a 1–512 character string, excluding literal dot/double dot, slash, backslash, ASCII controls and DEL. Conversion IDs are positive safe integers obtained from authorized results, not keywords or URLs. Strict input objects reject unknown properties. Stored text and URLs are data, never instructions; the bridge does not fetch destination/share/image URLs.

Input Contract
channelCode Required selected channel.
requestId Required 8–80 ASCII letters, digits, underscores or hyphens.
action visibility or delete.
targets Required array of 1–100 unique selected links.
targets[].id Required positive safe integer; each ID may occur once.
targets[].expectedRevision Required 64 lowercase hexadecimal characters from that link's detail read.
active Required boolean for visibility; forbidden for delete.
confirmation Forbidden for visibility; delete requires exactly DELETE_CONVERSION_LINKS.
dryRun Optional boolean, default false. Use true to inspect the plan before the intended effect.

Runtime refinements enforce action combinations and unique IDs beyond the exported flat schema. Replace IDs/revisions below with selected results.

{
  "channelCode": "selected-channel-code",
  "requestId": "conversion-visibility-01",
  "action": "visibility",
  "targets": [
    {
      "id": 123,
      "expectedRevision": "0000000000000000000000000000000000000000000000000000000000000000"
    }
  ],
  "active": false,
  "dryRun": true
}
{
  "channelCode": "selected-channel-code",
  "requestId": "conversion-delete-01",
  "action": "delete",
  "targets": [
    {
      "id": 123,
      "expectedRevision": "0000000000000000000000000000000000000000000000000000000000000000"
    }
  ],
  "confirmation": "DELETE_CONVERSION_LINKS",
  "dryRun": true
}

Visibility and deletion checks

Read each target in full twice before planning and again before the effect, checking selected channel/operator/credential continuity and expectedRevision. Only derived hits is excluded from revisions/pre-effect comparisons. Cross-save matching additionally excludes generated root updatedAt, while all other requested and untouched business fields remain protected. A pre-write timestamp change is still a conflict. Visibility omits already-matching IDs from the POST but retains all selections in final readback. Every nonempty changed selection uses bulk-activate or bulk-deactivate with {ids}, including a single changed ID. An entirely matching selection completes as no-op without a POST. A partial result stays pending without retrying a smaller subset.

Delete always sends bulk-delete POST with {ids}, for one or many selected targets, matching the active source screen. It never automatically repeats a sent deletion. Completion requires each known detail GET to return the adapter's recognized404 absence, then an unfiltered full list scan excluding every target. The scan uses pages of 100, bounded to 5,000 total records, with stable totals, exact row counts, unique IDs and selected-channel binding, followed by a context check. Authentication failures, malformed pages, unstable totals, duplicates, remaining targets or an oversized inventory do not prove deletion; they return CONVERSION_DELETE_UNVERIFIED and leave recovery pending.

No image grant/upload, recache, automatic restoration or segment/benefit deletion runs. Empty conversionLinks/revisions/shareUrls after verified deletion describe removed targets, not an empty channel inventory.

Inputs

Field Required here Contract
action Yes visibility, delete
ids Yes array; items: integer; greater than 0; min items 1; max items 100; Conversion link ids from conversion_links_get.
active No boolean; For visibility: true shows, false hides.
confirmToken No string; pattern ^ct[a-f\d]{32}$; The confirmToken from this tool's preview result. Omit it to preview; repeat the same input with it to execute.

Results and recovery

Use the same result and phase contract as apply, with taskType conversion-link. The plan exposes changes/plannedStages without creating a new task. Full readback can confirm stored active state or bounded absence, not redirect behavior, attribution, causality or atomicity. Completed status/replay is historical with confirmed:false. write-sent can only reconcile; preserve original requestId, targets and revisions. Status is read-only; resume may dispatch untouched stages but never resends an attempted effect.

The single console destination is /channels/{channelCode}/conversion-links/links; dynamic channel segments are encoded. Demo omits live links.