npx skills add ...
npx skills add forcedotcom/sf-skills --skill integration-eventing-subscription-configure
Create, read, update, and delete ManagedEventSubscription metadata in Salesforce. Use this skill for any work involving managed event subscriptions, platform event subscriptions, event channel subscribers, or .managedEventSubscription-meta.xml files. TRIGGER when: user asks to subscribe to a platform event, create a managed subscription, set up event replay, configure an event channel subscriber, update replay preset, activate or deactivate a subscription, delete a subscription, or manage ManagedEventSubscription metadata. SKIP when: user needs to create the platform event channel itself (use platform-custom-object-generate skill) or needs Flow-based event subscriptions (use automation-flow-generate skill).
npx skills add forcedotcom/sf-skills --skill integration-eventing-subscription-configure
Create, read, update, and delete ManagedEventSubscription metadata — the Salesforce construct for durably subscribing to platform event channels with managed replay tracking.
.managedEventSubscription-meta.xml files for create, read, update, and delete operations__e) channel itself; Flow-based or Apex-based event subscriptions; deploying metadata to an org.managedEventSubscription-meta.xml file. Do NOT generate the referenced platform event object or any other metadata type.Before generating, confirm if not already clear:
references/topic-name-formats.md)Id is known)LATEST (default) or EARLIEST?LATEST (default) or EARLIEST?RUN (active) or STOP (inactive)? (default: RUN)Gather or infer before proceeding:
Id is provided insteadreferences/topic-name-formats.md for valid formats (platform events, change events, custom channels)LATEST or EARLIEST (default: LATEST)LATEST or EARLIEST (default: LATEST)RUN or STOP (default: RUN) — PAUSE is reserved for internal platform use and will be rejected with INVALID_INPUT67.0)platform-custom-object-generate skill, then return here.assets/managed-event-subscription-template.xml as the starting structure.managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xml filled with user-provided values.ManagedSubscribe RPC calls using either the DeveloperName or the record Id. To retrieve the Id, run: SELECT Id, DeveloperName FROM ManagedEventSubscription WHERE DeveloperName='<DeveloperName>' via the Tooling API.Id or DeveloperName; prefer Id if provided.managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xml (if DeveloperName known).Id or DeveloperName; prefer Id if provided.references/update-constraints.md for fields that cannot be changed after creation.Id or DeveloperName; confirm with the user before proceeding.destructiveChanges.xml.references/delete-guide.md for the destructive deployment procedure.| Constraint | Rationale |
|---|---|
<topicName> must use a valid path prefix | Platform events use /event/Name__e; change events use /data/Name; see references/topic-name-formats.md for all formats |
<defaultReplay> and <errorRecoveryReplay> must be LATEST or EARLIEST | These are the only valid enum values; any other value fails metadata validation |
<state> must be RUN or STOP | PAUSE is reserved for internal platform use — the API rejects it with INVALID_INPUT: You can create a managed event subscription state field only to RUN or STOP |
| All six required elements must be present | topicName, defaultReplay, errorRecoveryReplay, label, state, version are all required; omitting any causes a deploy error |
| DeveloperName must be unique within the org | Duplicate names cause DUPLICATE_DEVELOPER_NAME errors |
Do not include <namespacePrefix>, <id>, or <createdDate> | Read-only platform fields; including them causes deployment failures in unpackaged orgs |
| Issue | Resolution |
|---|---|
The topicName field is invalid on deploy | Wrong format or the event doesn't exist in the org — read references/topic-name-formats.md for correct path |
| Replay state lost after delete + recreate | Deleting discards stored replay position; recreating starts from defaultReplay — avoid reusing the same DeveloperName after delete |
INVALID_TYPE on SOQL query | ManagedEventSubscription is only queryable via Tooling API, not standard SOQL |
EARLIEST replay on high-volume channels | Can trigger up to 72 hours of backlog replay on activation; always confirm with the user |
| Metadata not supported in older orgs | ManagedEventSubscription requires API v60.0+; check org API version |
eventChannel or isActive in generated XML | These are wrong field names — use topicName and state (RUN/STOP) instead |
PAUSE state in generated XML | PAUSE is reserved for internal platform use and will be rejected with INVALID_INPUT — only use RUN or STOP |
| User unsure how to identify subscription for Pub/Sub API | Both DeveloperName and record Id can be used with ManagedSubscribe RPC — retrieve the Id via Tooling API if needed: SELECT Id FROM ManagedEventSubscription WHERE DeveloperName='<name>' |
| Changes not reflected immediately in Pub/Sub API | After create/update/delete, the Pub/Sub API can take up to ~2 minutes to reflect the new config; if ManagedSubscribe returns NOT_FOUND, wait and retry |
Before presenting any generated XML:
<topicName> follow a valid path format per references/topic-name-formats.md? (/event/Name__e, /data/NameChangeEvent, /data/ChangeEvents, /event/Name__chn, /data/Name__chn)<defaultReplay> exactly LATEST or EARLIEST?<errorRecoveryReplay> exactly LATEST or EARLIEST?<state> exactly RUN or STOP? (PAUSE is invalid for user-created subscriptions)<label> populated?<version> present (e.g. 67.0)?<id>, <createdDate>, <namespacePrefix>) absent?managedEventSubscriptions/<DeveloperName>.managedEventSubscription-meta.xml — this is the only file to generatedestructiveChanges.xml| Need | Delegate to |
|---|---|
Create the platform event channel (__e) being subscribed to | platform-custom-object-generate skill |
| Subscribe via Flow (Process Automation) | automation-flow-generate skill |
| Deploy metadata to org | platform-metadata-deploy skill |
| File | When to read |
|---|---|
assets/managed-event-subscription-template.xml | Before generating any new subscription — use as starting structure |
references/topic-name-formats.md | When setting <topicName> — covers platform events, change events, and custom channels |
references/update-constraints.md | During Update workflow — to check which fields are immutable post-creation |
references/delete-guide.md | During Delete workflow — for destructive change deployment procedure |