Managing ManagedEventSubscription
Create, read, update, and delete ManagedEventSubscription metadata — the Salesforce construct for durably subscribing to platform event channels with managed replay tracking.
Scope
- In scope: Generating and modifying
.managedEventSubscription-meta.xmlfiles for create, read, update, and delete operations - Out of scope: Creating the underlying platform event (
__e) channel itself; Flow-based or Apex-based event subscriptions; deploying metadata to an org - Only generate one file — the
.managedEventSubscription-meta.xmlfile. Do NOT generate the referenced platform event object or any other metadata type.
Clarifying Questions
Before generating, confirm if not already clear:
- What is the topic name? (see format table in
references/topic-name-formats.md) - What is the developer name? (required for Create — alphanumeric and underscores only, no spaces; optional for Read/Update/Delete if
Idis known) - What is the label (human-readable name)?
- What default replay preset —
LATEST(default) orEARLIEST? - What error recovery replay preset —
LATEST(default) orEARLIEST? - What should the initial state be —
RUN(active) orSTOP(inactive)? (default:RUN)
Required Inputs
Gather or infer before proceeding:
- Operation: create, read, update, or delete
- DeveloperName: required for Create (becomes the filename); optional for Read/Update/Delete if
Idis provided instead - Id: Tooling API record Id — can be used to identify the subscription for Read/Update/Delete instead of DeveloperName
- label: human-readable label (can include spaces)
- topicName: event channel path — read
references/topic-name-formats.mdfor valid formats (platform events, change events, custom channels) - defaultReplay:
LATESTorEARLIEST(default:LATEST) - errorRecoveryReplay:
LATESTorEARLIEST(default:LATEST) - state:
RUNorSTOP(default:RUN) —PAUSEis reserved for internal platform use and will be rejected withINVALID_INPUT - version: Metadata API version (default: match org API version, e.g.
67.0)
Workflow
Create
- Gather inputs — confirm DeveloperName, label, topicName, defaultReplay, errorRecoveryReplay, state, version. Apply defaults for any omitted fields. If DeveloperName is not provided, ask the user — do not derive it from the label.
- Confirm the topic exists — ask the user to confirm the event channel already exists in the org before proceeding. Do NOT generate the platform event object yourself — that is out of scope for this skill. If the user says it doesn't exist yet, stop and direct them to create it first using the
platform-custom-object-generateskill, then return here. - Read the template — load
assets/managed-event-subscription-template.xmlas the starting structure. - Generate the file — produce
managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xmlfilled with user-provided values. - Verify — run the checklist below before presenting output.
- Guide the user on subscribing — after deployment, the subscription can be identified for Pub/Sub API
ManagedSubscribeRPC calls using either theDeveloperNameor the recordId. To retrieve theId, run:SELECT Id, DeveloperName FROM ManagedEventSubscription WHERE DeveloperName='<DeveloperName>'via the Tooling API.
Read
- Identify the subscription — accept either
IdorDeveloperName; preferIdif provided. - Show the file path —
managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xml(if DeveloperName known). - Retrieve and display — read and present the current XML content.
Update
- Identify the subscription — accept either
IdorDeveloperName; preferIdif provided. - Read the existing file — load current content before modifying.
- Apply changes — update only the specified fields; preserve all others.
- Read
references/update-constraints.mdfor fields that cannot be changed after creation. - Verify — run the checklist below before presenting output.
Delete
- Identify the subscription — accept either
IdorDeveloperName; confirm with the user before proceeding. - Warn — deleting a ManagedEventSubscription permanently removes replay tracking state.
- Produce deletion instructions — explain how to remove the file and deploy the destructive change using
destructiveChanges.xml. - Read
references/delete-guide.mdfor the destructive deployment procedure.
Rules / Constraints
Gotchas
Verification Checklist
Before presenting any generated XML:
- Does
<topicName>follow a valid path format perreferences/topic-name-formats.md? (/event/Name__e,/data/NameChangeEvent,/data/ChangeEvents,/event/Name__chn,/data/Name__chn) - Is
<defaultReplay>exactlyLATESTorEARLIEST? - Is
<errorRecoveryReplay>exactlyLATESTorEARLIEST? - Is
<state>exactlyRUNorSTOP? (PAUSEis invalid for user-created subscriptions) - Is
<label>populated? - Is
<version>present (e.g.67.0)? - Are read-only fields (
<id>,<createdDate>,<namespacePrefix>) absent? - Does the filename match the DeveloperName exactly?
Output Expectations
- Create / Update:
managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xml— this is the only file to generate - Delete: instructions to remove the file and deploy via
destructiveChanges.xml - Read: display of existing file contents


