@salesforce/afv-skills 1.65.0 → 1.65.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/field-service-data-capture-form-deployer-configure/SKILL.md +2 -23
- package/skills/field-service-data-capture-form-designer-configure/SKILL.md +3 -13
- package/skills/field-service-mobile-branding-configure/SKILL.md +3 -17
- package/skills/field-service-objective-designer-configure/SKILL.md +379 -72
- package/skills/field-service-prework-brief-deployer-configure/SKILL.md +537 -10
- package/skills/field-service-scheduling-policy-designer-query/SKILL.md +1093 -65
- package/skills/field-service-sobject-create-configure/SKILL.md +213 -13
- package/skills/field-service-voice-to-form-configure/SKILL.md +11 -40
- package/skills/field-service-work-rule-designer-configure/SKILL.md +95 -121
- package/skills/agentforce-gpt-email-generation-configure/SKILL.md +0 -312
- package/skills/agentforce-wizard-ui-forecasting-analytics-components-configure/SKILL.md +0 -64
- package/skills/agentforce-wizard-ui-sales-einstein-components-configure/SKILL.md +0 -46
- package/skills/automation-company-profile-info-query/SKILL.md +0 -51
- package/skills/automation-digital-wallet-configure/SKILL.md +0 -689
- package/skills/automation-flow-coordinate/SKILL.md +0 -95
- package/skills/automation-flow-coordinate/references/elements/action-call/action-call.md +0 -1569
- package/skills/automation-flow-coordinate/references/elements/action-call/conversation-messaging.md +0 -96
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-sms-message.json +0 -23
- package/skills/automation-flow-coordinate/references/elements/action-call/examples/send-to-journey-no-fields.json +0 -31
- package/skills/automation-flow-coordinate/references/elements/action-call/send-to-journey.md +0 -179
- package/skills/automation-flow-coordinate/references/elements/exit-rule/examples/event-email-link-click.json +0 -13
- package/skills/automation-flow-coordinate/references/elements/exit-rule/exit-rule.md +0 -83
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/examples/forward-to-bot-or-agent.json +0 -69
- package/skills/automation-flow-coordinate/references/elements/forward-to-bot-or-agent/forward-to-bot-or-agent.md +0 -274
- package/skills/automation-flow-coordinate/references/elements/start/audience-common.md +0 -192
- package/skills/automation-flow-coordinate/references/elements/start/automation-event-triggered.md +0 -130
- package/skills/automation-flow-coordinate/references/elements/start/data-cloud-data-change-triggered.md +0 -92
- package/skills/automation-flow-coordinate/references/elements/start/form-submission-triggered.md +0 -88
- package/skills/automation-flow-coordinate/references/elements/start/segment-triggered.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/start/start.md +0 -539
- package/skills/automation-flow-coordinate/references/elements/subflow/subflow.md +0 -152
- package/skills/automation-flow-coordinate/references/elements/wait/wait.md +0 -497
- package/skills/automation-flow-coordinate/references/recipes/author/author.md +0 -868
- package/skills/automation-flow-coordinate/references/recipes/summarize/element-generic.md +0 -300
- package/skills/automation-flow-coordinate/references/recipes/summarize/reference-resolution.md +0 -292
- package/skills/automation-flow-coordinate/references/recipes/summarize/summarize.md +0 -323
- package/skills/automation-flow-coordinate/references/recipes/testing/examples/debug-output-template.md +0 -109
- package/skills/automation-flow-coordinate/references/recipes/testing/shape.md +0 -219
- package/skills/automation-flow-coordinate/references/recipes/testing/shared-stages/intent-analyzer.md +0 -180
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/debug.md +0 -175
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/promote.md +0 -255
- package/skills/automation-flow-coordinate/references/recipes/testing/workflows/save-debug.md +0 -212
- package/skills/automation-flow-coordinate/references/resources/variable/variable.md +0 -171
- package/skills/automation-flow-coordinate/references/shared/anti-patterns.md +0 -786
- package/skills/automation-flow-coordinate/references/shared/end/end.md +0 -267
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/README.md +0 -69
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/predictions.jsonl +0 -80
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/eval/prompts.jsonl +0 -116
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/flow-type-resolver.md +0 -321
- package/skills/automation-flow-coordinate/references/shared/flow-type-resolver/taxonomy.json +0 -320
- package/skills/automation-flow-coordinate/references/shared/server-functions.md +0 -597
- package/skills/automotive-cloud-appraisal-management-settings-configure/SKILL.md +0 -69
- package/skills/automotive-cloud-dealer-essentials-configure/SKILL.md +0 -78
- package/skills/automotive-cloud-ground-agent-data-pipelines-configure/SKILL.md +0 -373
- package/skills/automotive-cloud-ground-mfg-agent-data-pipelines-configure/SKILL.md +0 -273
- package/skills/automotive-cloud-mfg-agent-data-pipelines-configure/SKILL.md +0 -259
- package/skills/automotive-cloud-mfg-sales-concierge-agent-create/SKILL.md +0 -369
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-configure/SKILL.md +0 -542
- package/skills/automotive-cloud-mfg-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-agent-create/SKILL.md +0 -349
- package/skills/automotive-cloud-mfg-sales-concierge-orchestrator-configure/SKILL.md +0 -505
- package/skills/automotive-cloud-sales-concierge-agent-create/SKILL.md +0 -380
- package/skills/automotive-cloud-sales-concierge-foundation-configure/SKILL.md +0 -567
- package/skills/automotive-cloud-sales-concierge-foundation-coordinate/SKILL.md +0 -159
- package/skills/automotive-cloud-sales-concierge-orchestrator-agent-create/SKILL.md +0 -360
- package/skills/automotive-cloud-sales-concierge-orchestrator-configure/SKILL.md +0 -539
- package/skills/automotive-cloud-sales-concierge-search-grounding-configure/SKILL.md +0 -358
- package/skills/commerce-b2b-merchant-quote-configure/SKILL.md +0 -602
- package/skills/commerce-b2b-store-configure/SKILL.md +0 -251
- package/skills/commerce-credit-memo-create/SKILL.md +0 -139
- package/skills/commerce-delivery-business-hours-configure/SKILL.md +0 -277
- package/skills/commerce-delivery-estimation-apply/SKILL.md +0 -155
- package/skills/commerce-delivery-estimation-configure/SKILL.md +0 -377
- package/skills/commerce-delivery-routing-specs-integrate/SKILL.md +0 -174
- package/skills/commerce-estimate-bopis-query/SKILL.md +0 -279
- package/skills/commerce-estimate-delivery-date-query/SKILL.md +0 -349
- package/skills/commerce-fees-apply/SKILL.md +0 -227
- package/skills/commerce-fulfillment-routing-analyze/SKILL.md +0 -200
- package/skills/commerce-guest-buyer-create/SKILL.md +0 -173
- package/skills/commerce-location-bopis-configure/SKILL.md +0 -378
- package/skills/commerce-location-business-hours-configure/SKILL.md +0 -235
- package/skills/commerce-location-delivery-processing-time-configure/SKILL.md +0 -309
- package/skills/commerce-location-graph-integrate/SKILL.md +0 -131
- package/skills/commerce-location-shipping-carrier-method-configure/SKILL.md +0 -755
- package/skills/commerce-location-temporary-operating-hours-configure/SKILL.md +0 -331
- package/skills/commerce-merchant-buyer-groups-configure/SKILL.md +0 -579
- package/skills/commerce-merchant-buyer-user-onboarding-create/SKILL.md +0 -626
- package/skills/commerce-merchant-catalog-configure/SKILL.md +0 -614
- package/skills/commerce-merchant-extension-provider-configure/SKILL.md +0 -368
- package/skills/commerce-merchant-insights-account-health-churn-analyze/SKILL.md +0 -118
- package/skills/commerce-merchant-insights-inventory-returns-analyze/SKILL.md +0 -65
- package/skills/commerce-merchant-insights-order-shopper-get/SKILL.md +0 -90
- package/skills/commerce-merchant-insights-product-performance-analyze/SKILL.md +0 -72
- package/skills/commerce-merchant-insights-query/SKILL.md +0 -279
- package/skills/commerce-merchant-storefront-guest-access-configure/SKILL.md +0 -656
- package/skills/commerce-order-summary-change-apply/SKILL.md +0 -375
- package/skills/commerce-product-details-get/SKILL.md +0 -363
- package/skills/commerce-product-search/SKILL.md +0 -563
- package/skills/commerce-react-storefront-create/SKILL.md +0 -350
- package/skills/commerce-return-order-summary-create/SKILL.md +0 -513
- package/skills/commerce-search-relevance-analyze/SKILL.md +0 -757
- package/skills/commerce-temporary-processing-time-override-create/SKILL.md +0 -274
- package/skills/communications-initial-setup-configure/SKILL.md +0 -630
- package/skills/communications-multisite-configure/SKILL.md +0 -571
- package/skills/communications-revenue-cloud-settings-configure/SKILL.md +0 -74
- package/skills/communications-smb-fiber-catalog-create/SKILL.md +0 -413
- package/skills/communications-tmf-integrate/SKILL.md +0 -1368
- package/skills/consumer-goods-visit-activity-act4-questions-assign/SKILL.md +0 -448
- package/skills/consumer-goods-visit-activity-act5-standard-create/SKILL.md +0 -269
- package/skills/consumer-goods-visit-activity-act6-assortment-configure/SKILL.md +0 -271
- package/skills/consumer-goods-visit-activity-act7-account-scoping-create/SKILL.md +0 -382
- package/skills/consumer-goods-visit-activity-act8-plan-attach-create/SKILL.md +0 -373
- package/skills/consumer-goods-visit-activity-act9-proof-validate/SKILL.md +0 -389
- package/skills/consumer-goods-visit-and-activity-act1-specification-create/SKILL.md +0 -338
- package/skills/consumer-goods-visit-and-activity-act2-template-create/SKILL.md +0 -547
- package/skills/consumer-goods-visit-and-activity-act3-definition-create/SKILL.md +0 -346
- package/skills/consumer-goods-visit-and-activity-configure/SKILL.md +0 -1110
- package/skills/crm-analytics-adoption-insights-configure/SKILL.md +0 -224
- package/skills/crm-analytics-custom-report-type-lightning-configure/SKILL.md +0 -418
- package/skills/crm-analytics-dashboards-configure/SKILL.md +0 -731
- package/skills/crm-analytics-operational-analytics-metadata-bridge-migrate/SKILL.md +0 -233
- package/skills/crm-analytics-report-notifications-ui-configure/SKILL.md +0 -184
- package/skills/crm-analytics-sharing-inheritance-coverage-analyze/SKILL.md +0 -167
- package/skills/crm-analytics-sonic-getting-started-configure/SKILL.md +0 -55
- package/skills/crm-analytics-tableau-next-app-deploy/SKILL.md +0 -1350
- package/skills/crm-analytics-tableau-next-c360-basemodel-validate/SKILL.md +0 -1862
- package/skills/crm-analytics-tableau-next-datacloud-validate/SKILL.md +0 -83
- package/skills/crm-analytics-tableau-next-provisioning-validate/SKILL.md +0 -81
- package/skills/data360-activation-create/SKILL.md +0 -104
- package/skills/data360-activation-external-platform-get/SKILL.md +0 -49
- package/skills/data360-activation-target-create/SKILL.md +0 -93
- package/skills/data360-activation-v2-create/SKILL.md +0 -456
- package/skills/data360-audience-dmo-get/SKILL.md +0 -38
- package/skills/data360-calculated-affinity-create/SKILL.md +0 -82
- package/skills/data360-calculated-insight-create/SKILL.md +0 -148
- package/skills/data360-catalog-metadata-create/SKILL.md +0 -183
- package/skills/data360-code-extension-create/SKILL.md +0 -115
- package/skills/data360-communication-capping-create/SKILL.md +0 -227
- package/skills/data360-connection-create/SKILL.md +0 -491
- package/skills/data360-content-lens-create/SKILL.md +0 -181
- package/skills/data360-data-action-create/SKILL.md +0 -126
- package/skills/data360-data-action-target-create/SKILL.md +0 -181
- package/skills/data360-data-clean-room-create/SKILL.md +0 -238
- package/skills/data360-data-governance-create/SKILL.md +0 -746
- package/skills/data360-data-graph-create/SKILL.md +0 -82
- package/skills/data360-data-harmonized-model-object-reference-create/SKILL.md +0 -38
- package/skills/data360-data-lake-object-create/SKILL.md +0 -207
- package/skills/data360-data-model-object-catalog-get/SKILL.md +0 -49
- package/skills/data360-data-model-object-create/SKILL.md +0 -128
- package/skills/data360-data-model-object-mapping-create/SKILL.md +0 -106
- package/skills/data360-data-space-create/SKILL.md +0 -161
- package/skills/data360-data-streams-create/SKILL.md +0 -324
- package/skills/data360-engagement-signal-get/SKILL.md +0 -38
- package/skills/data360-experiment-create/SKILL.md +0 -82
- package/skills/data360-goal-based-campaign-create/SKILL.md +0 -192
- package/skills/data360-harmonization-process-history-get/SKILL.md +0 -38
- package/skills/data360-harmonized-unstructured-dmo-create/SKILL.md +0 -84
- package/skills/data360-identity-resolution-create/SKILL.md +0 -115
- package/skills/data360-intelligent-document-processing-create/SKILL.md +0 -148
- package/skills/data360-knowledge-graph-construction-create/SKILL.md +0 -93
- package/skills/data360-knowledge-graph-create/SKILL.md +0 -216
- package/skills/data360-knowledge-space-mcp-configure/SKILL.md +0 -475
- package/skills/data360-machine-learning-mcp-configure/SKILL.md +0 -697
- package/skills/data360-multi-org-mcp-configure/SKILL.md +0 -117
- package/skills/data360-secondary-index-mcp-configure/SKILL.md +0 -126
- package/skills/data360-segment-mcp-configure/SKILL.md +0 -159
- package/skills/data360-semantic-calculated-dimension-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-calculated-measurement-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-data-object-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-dimension-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-engine-mcp-configure/SKILL.md +0 -62
- package/skills/data360-semantic-measurement-mcp-configure/SKILL.md +0 -38
- package/skills/data360-semantic-metric-mcp-configure/SKILL.md +0 -93
- package/skills/data360-semantic-model-mcp-configure/SKILL.md +0 -115
- package/skills/data360-standard-mapping-mcp-configure/SKILL.md +0 -38
- package/skills/data360-tenant-lifecycle-mcp-configure/SKILL.md +0 -73
- package/skills/experience-afv-query/SKILL.md +0 -234
- package/skills/experience-agentforce-vibes-in-react-configure/SKILL.md +0 -63
- package/skills/experience-apex-components-configure/SKILL.md +0 -69
- package/skills/experience-apex-pages-configure/SKILL.md +0 -107
- package/skills/experience-app-home-configure/SKILL.md +0 -76
- package/skills/experience-aura-lightning-out-access-configure/SKILL.md +0 -58
- package/skills/experience-briefcase-configure/SKILL.md +0 -287
- package/skills/experience-community-flexi-page-list-create/SKILL.md +0 -74
- package/skills/experience-community-template-definition-list-query/SKILL.md +0 -48
- package/skills/experience-community-theme-definition-list-query/SKILL.md +0 -38
- package/skills/experience-content-assets-configure/SKILL.md +0 -86
- package/skills/experience-custom-domain-create/SKILL.md +0 -727
- package/skills/experience-defer-rendering-workspace-page-setup-configure/SKILL.md +0 -41
- package/skills/experience-field-service-app-builder-configure/SKILL.md +0 -187
- package/skills/experience-flow-category-configure/SKILL.md +0 -117
- package/skills/experience-formula-configure/SKILL.md +0 -358
- package/skills/experience-global-actions-configure/SKILL.md +0 -69
- package/skills/experience-global-publisher-layouts-configure/SKILL.md +0 -79
- package/skills/experience-instrumentation-configure/SKILL.md +0 -64
- package/skills/experience-lex-engagement-configure/SKILL.md +0 -50
- package/skills/experience-lightning-bolt-open/SKILL.md +0 -12
- package/skills/experience-lightning-out-configure/SKILL.md +0 -129
- package/skills/experience-lightning-preview-configure/SKILL.md +0 -67
- package/skills/experience-lightning-types-query/SKILL.md +0 -98
- package/skills/experience-malware-scan-configure/SKILL.md +0 -71
- package/skills/experience-my-salesforce-configure/SKILL.md +0 -126
- package/skills/experience-navigation-menus-configure/SKILL.md +0 -235
- package/skills/experience-notification-types-configure/SKILL.md +0 -206
- package/skills/experience-notifications-configure/SKILL.md +0 -75
- package/skills/experience-record-discovery-query/SKILL.md +0 -227
- package/skills/experience-regenerate-previews-open/SKILL.md +0 -94
- package/skills/experience-sales-cloud-mab-configure/SKILL.md +0 -254
- package/skills/experience-schema-builder-open/SKILL.md +0 -38
- package/skills/experience-simple-record-home-configure/SKILL.md +0 -110
- package/skills/experience-static-resources-configure/SKILL.md +0 -74
- package/skills/field-service-setup-coordinate/SKILL.md +0 -62
- package/skills/field-service-work-plan-configure/SKILL.md +0 -253
- package/skills/fsc-actionable-segmentation-settings-configure/SKILL.md +0 -180
- package/skills/fsc-digital-origination-bre-decision-matrix-foundation-create/SKILL.md +0 -196
- package/skills/fsc-digital-origination-bre-disclosures-consent-configure/SKILL.md +0 -106
- package/skills/fsc-digital-origination-bre-document-upload-configure/SKILL.md +0 -96
- package/skills/fsc-digital-origination-bre-permissions-assign/SKILL.md +0 -111
- package/skills/fsc-digital-origination-bre-setup-coordinate/SKILL.md +0 -250
- package/skills/fsc-digital-origination-bre-stp-eligibility-configure/SKILL.md +0 -122
- package/skills/fsc-digital-origination-coordinate/SKILL.md +0 -653
- package/skills/fsc-digital-origination-demo-run/SKILL.md +0 -225
- package/skills/fsc-digital-origination-execution-guardrails-validate/SKILL.md +0 -112
- package/skills/fsc-digital-origination-initial-setup-configure/SKILL.md +0 -396
- package/skills/fsc-digital-origination-pricing-setup-coordinate/SKILL.md +0 -336
- package/skills/fsc-digital-origination-pricing-setup-data-foundation-create/SKILL.md +0 -208
- package/skills/fsc-digital-origination-pricing-setup-procedure-create/SKILL.md +0 -375
- package/skills/fsc-digital-origination-product-setup-act1-permissions-assign/SKILL.md +0 -83
- package/skills/fsc-digital-origination-product-setup-coordinate/SKILL.md +0 -248
- package/skills/fsc-digital-origination-sample-data-create/SKILL.md +0 -206
- package/skills/fsc-document-checklist-settings-configure/SKILL.md +0 -57
- package/skills/fsc-flexible-hierarchy-configure/SKILL.md +0 -148
- package/skills/fsc-flexible-hierarchy-foundation-configure/SKILL.md +0 -1430
- package/skills/fsc-flexible-hierarchy-graph-config-create/SKILL.md +0 -471
- package/skills/fsc-flexible-hierarchy-rule-based-graph-deploy/SKILL.md +0 -429
- package/skills/fsc-pricing-product-configurator-configure/SKILL.md +0 -150
- package/skills/fsc-pricing-salesforce-omnistudio-switch/SKILL.md +0 -123
- package/skills/fsc-product-act2-catalog-categories-create/SKILL.md +0 -82
- package/skills/fsc-product-act3-attributes-create/SKILL.md +0 -249
- package/skills/fsc-product-act4-classification-assignment-create/SKILL.md +0 -196
- package/skills/fsc-product-act5-considerations-get/SKILL.md +0 -44
- package/skills/fsc-stage-management-apex-flow-deploy/SKILL.md +0 -384
- package/skills/fsc-stage-management-compliant-data-sharing-configure/SKILL.md +0 -144
- package/skills/fsc-stage-management-decision-matrices-create/SKILL.md +0 -107
- package/skills/fsc-stage-management-definition-assignments-create/SKILL.md +0 -189
- package/skills/fsc-stage-management-definition-create/SKILL.md +0 -108
- package/skills/fsc-stage-management-permissions-assign/SKILL.md +0 -143
- package/skills/fsc-stage-management-transitions-configure/SKILL.md +0 -139
- package/skills/health-cloud-appt-booking-config-configure/SKILL.md +0 -135
- package/skills/health-cloud-appt-booking-url-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-provider-affl-role-config-configure/SKILL.md +0 -136
- package/skills/health-cloud-care-provider-search-config-configure/SKILL.md +0 -134
- package/skills/health-cloud-care-requests-create/SKILL.md +0 -178
- package/skills/health-cloud-initial-configure/SKILL.md +0 -511
- package/skills/health-cloud-patient-appointment-scheduling-configure/SKILL.md +0 -1374
- package/skills/health-cloud-provider-search-settings-configure/SKILL.md +0 -924
- package/skills/health-cloud-referral-management-coordinate/SKILL.md +0 -513
- package/skills/health-cloud-timeline-configure/SKILL.md +0 -622
- package/skills/health-cloud-virtual-visit-config-configure/SKILL.md +0 -135
- package/skills/industries-account-score-settings-query/SKILL.md +0 -78
- package/skills/industries-actionable-list-data-sources-dmo-configure/SKILL.md +0 -177
- package/skills/industries-ad-product-availability-search/SKILL.md +0 -399
- package/skills/industries-advanced-account-forecast-settings-configure/SKILL.md +0 -628
- package/skills/industries-advanced-therapy-management-settings-configure/SKILL.md +0 -73
- package/skills/industries-atm-settings-starter-configure/SKILL.md +0 -76
- package/skills/industries-batch-document-ai-configure/SKILL.md +0 -196
- package/skills/industries-behavioral-health-app-settings-configure/SKILL.md +0 -71
- package/skills/industries-branch-management-settings-configure/SKILL.md +0 -89
- package/skills/industries-bre-decision-table-access-configure/SKILL.md +0 -367
- package/skills/industries-brokerage-settings-configure/SKILL.md +0 -41
- package/skills/industries-calendar-sync-settings-configure/SKILL.md +0 -89
- package/skills/industries-care-request-settings-configure/SKILL.md +0 -218
- package/skills/industries-case-management-intelligence-settings-configure/SKILL.md +0 -54
- package/skills/industries-catalog-process-attributes-products-configure/SKILL.md +0 -380
- package/skills/industries-catalog-process-fulfillment-configure/SKILL.md +0 -216
- package/skills/industries-catalog-process-intake-configure/SKILL.md +0 -219
- package/skills/industries-catalog-process-knowledge-configure/SKILL.md +0 -153
- package/skills/industries-catalog-process-preprocessor-configure/SKILL.md +0 -168
- package/skills/industries-cds-general-settings-configure/SKILL.md +0 -69
- package/skills/industries-claim-financial-settings-configure/SKILL.md +0 -169
- package/skills/industries-clinical-data-model-settings-configure/SKILL.md +0 -136
- package/skills/industries-clinical-data-model-settings-starter-configure/SKILL.md +0 -105
- package/skills/industries-collection-plan-settings-configure/SKILL.md +0 -132
- package/skills/industries-comms-service-console-settings-configure/SKILL.md +0 -159
- package/skills/industries-compliance-configure/SKILL.md +0 -102
- package/skills/industries-compliance-document-extraction-setup-configure/SKILL.md +0 -76
- package/skills/industries-contact-center-app-layout-configure/SKILL.md +0 -88
- package/skills/industries-contact-center-components-configure/SKILL.md +0 -96
- package/skills/industries-contact-center-path-knowledge-configure/SKILL.md +0 -95
- package/skills/industries-contact-center-user-access-assign/SKILL.md +0 -96
- package/skills/industries-course-waitlist-config-configure/SKILL.md +0 -162
- package/skills/industries-crisis-center-settings-configure/SKILL.md +0 -84
- package/skills/industries-custom-object-settings-configure/SKILL.md +0 -94
- package/skills/industries-data-cloud-integration-configure/SKILL.md +0 -88
- package/skills/industries-data-space-feature-mappings-configure/SKILL.md +0 -245
- package/skills/industries-decision-matrix-builder-configure/SKILL.md +0 -78
- package/skills/industries-decision-table-hbase-configure/SKILL.md +0 -87
- package/skills/industries-decision-table-version-configure/SKILL.md +0 -74
- package/skills/industries-decision-tables-builder-configure/SKILL.md +0 -253
- package/skills/industries-decision-tables-configure/SKILL.md +0 -439
- package/skills/industries-energy-utilities-configure/SKILL.md +0 -251
- package/skills/industries-eu-cloud-multisite-configure/SKILL.md +0 -1008
- package/skills/industries-eu-new-connections-configure/SKILL.md +0 -30
- package/skills/industries-explainability-msg-template-configure/SKILL.md +0 -135
- package/skills/industries-expression-set-message-token-configure/SKILL.md +0 -135
- package/skills/industries-field-service-settings-configure/SKILL.md +0 -82
- package/skills/industries-form-framework-settings-configure/SKILL.md +0 -30
- package/skills/industries-fsc-ai-settings-configure/SKILL.md +0 -57
- package/skills/industries-fsc-association-engine-settings-configure/SKILL.md +0 -172
- package/skills/industries-fsc-b2b-settings-configure/SKILL.md +0 -61
- package/skills/industries-fsc-insurance-settings-configure/SKILL.md +0 -58
- package/skills/industries-fsc-visa-fulfillment-setup-configure/SKILL.md +0 -103
- package/skills/industries-fsc-wealth-agent-settings-configure/SKILL.md +0 -117
- package/skills/industries-fsc-wealth-settings-configure/SKILL.md +0 -99
- package/skills/industries-fundraising-gift-entry-settings-configure/SKILL.md +0 -120
- package/skills/industries-fundraising-rfm-configure/SKILL.md +0 -128
- package/skills/industries-fundraising-settings-configure/SKILL.md +0 -145
- package/skills/industries-fundraising-source-code-gen-configure/SKILL.md +0 -299
- package/skills/industries-google-maps-api-key-settings-configure/SKILL.md +0 -87
- package/skills/industries-grantmaking-intelligence-settings-open/SKILL.md +0 -58
- package/skills/industries-hc-score-category-settings-configure/SKILL.md +0 -167
- package/skills/industries-health-engagement-settings-configure/SKILL.md +0 -218
- package/skills/industries-home-health-agentforce-setup-configure/SKILL.md +0 -131
- package/skills/industries-home-health-bundling-policy-create/SKILL.md +0 -50
- package/skills/industries-home-health-entity-labels-configure/SKILL.md +0 -29
- package/skills/industries-home-health-fsl-package-deploy/SKILL.md +0 -71
- package/skills/industries-home-health-fsl-settings-validate/SKILL.md +0 -27
- package/skills/industries-home-health-guided-setup-care-and-skill-get/SKILL.md +0 -80
- package/skills/industries-home-health-guided-setup-configure/SKILL.md +0 -836
- package/skills/industries-home-health-guided-setup-enable-org-fsl-get/SKILL.md +0 -55
- package/skills/industries-home-health-guided-setup-get-org-ready-get/SKILL.md +0 -61
- package/skills/industries-home-health-licenses-assign/SKILL.md +0 -27
- package/skills/industries-home-health-operating-hours-create/SKILL.md +0 -40
- package/skills/industries-home-health-scheduling-policy-create/SKILL.md +0 -41
- package/skills/industries-home-health-service-objective-create/SKILL.md +0 -22
- package/skills/industries-home-health-skills-create/SKILL.md +0 -31
- package/skills/industries-home-health-users-create/SKILL.md +0 -29
- package/skills/industries-icm-act3-toggles-configure/SKILL.md +0 -198
- package/skills/industries-icm-act5-genai-suggested-assessments-configure/SKILL.md +0 -361
- package/skills/industries-icm-act6-mcg-integration-configure/SKILL.md +0 -550
- package/skills/industries-integrated-care-management-configure/SKILL.md +0 -168
- package/skills/industries-object-enablement-configure/SKILL.md +0 -86
- package/skills/industries-tpm-system-processing-service-configure/SKILL.md +0 -64
- package/skills/integration-apex-settings-configure/SKILL.md +0 -61
- package/skills/marketing-e360-email-archiving-configure/SKILL.md +0 -73
- package/skills/platform-custom-permissions-configure/SKILL.md +0 -687
- package/skills/platform-label-workbench-import-create/SKILL.md +0 -67
- package/skills/platform-privacy-agent-settings-configure/SKILL.md +0 -752
|
@@ -1,687 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: platform-custom-permissions-configure
|
|
3
|
-
description: "Use this skill when users want to manage Custom Permission definitions and grants. Trigger when users mention custom, permissions, custom permissions."
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0"
|
|
6
|
-
accessCheck: "Old.notME,Admin.userCanViewCustomPermissions"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Managing Custom Permissions
|
|
10
|
-
|
|
11
|
-
## When to Use This Skill
|
|
12
|
-
|
|
13
|
-
Manage Custom Permission definitions and grants. READS use sObject REST
|
|
14
|
-
(describe + SOQL). WRITES (create/update/delete the permission definition
|
|
15
|
-
itself) MUST use Metadata API — sObject REST returns 400
|
|
16
|
-
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY. The primary admin workflow is
|
|
17
|
-
GRANTING a custom permission to a PermissionSet — that uses sObject CRUD
|
|
18
|
-
on SetupEntityAccess (POST with ParentId=PermissionSet, SetupEntityId=
|
|
19
|
-
CustomPermission). KeyPrefix is 0CP (not 0PR).
|
|
20
|
-
|
|
21
|
-
## Workflow
|
|
22
|
-
|
|
23
|
-
## API access mechanics (CustomPermission)
|
|
24
|
-
|
|
25
|
-
CustomPermission is a full Metadata API type, `minApiVersion` 190.
|
|
26
|
-
|
|
27
|
-
### Read path (works via sObject REST)
|
|
28
|
-
- **describe**: `GET /sobjects/CustomPermission/describe`.
|
|
29
|
-
- **list / get**: SOQL against the `CustomPermission` sObject (list, or filter by Id).
|
|
30
|
-
- `/describe` reports `createable=false`, `updateable=false`, `deletable=false` (already noted on the `describe` step).
|
|
31
|
-
|
|
32
|
-
### Write path (must use Metadata API)
|
|
33
|
-
- `POST` / `PATCH` / `DELETE` against `/sobjects/CustomPermission` are rejected — POST/PATCH return `400 CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY`, DELETE returns `INSUFFICIENT_ACCESS_OR_READONLY` (these specific error codes are already documented on the `create`/`update`/`delete` steps). Route create/update/delete through the Metadata API instead.
|
|
34
|
-
- Tooling API describe for CustomPermission returns `404` — do not attempt the Tooling API path.
|
|
35
|
-
|
|
36
|
-
## Critical Constraints
|
|
37
|
-
|
|
38
|
-
**Preconditions:**
|
|
39
|
-
|
|
40
|
-
- User needs access to manage CustomPermission (CRUD on the CustomPermission sObject). (check: `Old.notME,Admin.userCanViewCustomPermissions`)
|
|
41
|
-
|
|
42
|
-
**Destructive operations — require explicit user confirmation:**
|
|
43
|
-
|
|
44
|
-
- **`revoke_custom_permission`** — Revoke a CustomPermission grant from a PermissionSet by deleting the
|
|
45
|
-
SetupEntityAccess record. Resolve the Id via SOQL:
|
|
46
|
-
SELECT Id FROM SetupEntityAccess WHERE ParentId='<permSetId>'
|
|
47
|
-
AND SetupEntityId='<customPermId>'.
|
|
48
|
-
|
|
49
|
-
ORDERING CONSTRAINT: if perm A depends on perm B (CustomPermissionDependency),
|
|
50
|
-
both granted to the same PermissionSet, you cannot revoke B's grant while
|
|
51
|
-
A's grant is still active — server returns 400 DEPENDENCY_EXISTS. Revoke
|
|
52
|
-
dependent grants first (A), then the required-perm grant (B).
|
|
53
|
-
|
|
54
|
-
- Rollback: No automatic rollback.
|
|
55
|
-
- **`bulk_revoke_custom_permissions`** — Bulk-revoke CustomPermission grants via Composite sObjects DELETE.
|
|
56
|
-
Pass up to 200 SetupEntityAccess record Ids as a comma-separated list
|
|
57
|
-
in the ids query parameter. Use allOrNone=false for partial-success
|
|
58
|
-
semantics.
|
|
59
|
-
|
|
60
|
-
- Rollback: No automatic rollback.
|
|
61
|
-
|
|
62
|
-
## Operations Reference
|
|
63
|
-
|
|
64
|
-
Operations grouped by purpose. Use these as the building blocks for the workflows above.
|
|
65
|
-
|
|
66
|
-
### Summary
|
|
67
|
-
|
|
68
|
-
| Operation | Purpose | Status | Call | Depends on |
|
|
69
|
-
|-----------|---------|--------|------|------------|
|
|
70
|
-
| `describe` | read | — | `GET /services/data/v67.0/sobjects/CustomPermission/describe` | — |
|
|
71
|
-
| `list` | read | — | `GET /services/data/v67.0/query` | — |
|
|
72
|
-
| `get-by-id` | read | — | `GET /services/data/v67.0/sobjects/CustomPermission/{Id}` | `list` |
|
|
73
|
-
| `create` | write | — | `POST /headless/metadata` | `describe` |
|
|
74
|
-
| `update` | write | — | `PUT /headless/metadata` | `get-by-id` |
|
|
75
|
-
| `delete` | write | — | `DELETE /headless/metadata` | `get-by-id` |
|
|
76
|
-
| `query_user_effective_permissions` | read | — | `GET /services/data/v67.0/query` | — |
|
|
77
|
-
| `grant_custom_permission` | write | — | `POST /services/data/v67.0/sobjects/SetupEntityAccess` | — |
|
|
78
|
-
| `revoke_custom_permission` | delete | — | `DELETE /services/data/v67.0/sobjects/SetupEntityAccess/{id}` | `grant_custom_permission` |
|
|
79
|
-
| `query_grants` | read | — | `GET /services/data/v67.0/query` | — |
|
|
80
|
-
| `query_dependencies` | read | — | `GET /services/data/v67.0/query` | — |
|
|
81
|
-
| `add_required_permission` | write | — | `PUT /headless/metadata` | `create`, `query_dependencies` |
|
|
82
|
-
| `remove_required_permission` | write | — | `PUT /headless/metadata` | `add_required_permission`, `query_dependencies` |
|
|
83
|
-
| `bulk_grant_custom_permissions` | write | — | `POST /services/data/v67.0/composite/sobjects` | `grant_custom_permission` |
|
|
84
|
-
| `bulk_revoke_custom_permissions` | delete | — | `DELETE /services/data/v67.0/composite/sobjects` | `query_grants` |
|
|
85
|
-
| `clone_custom_permission` | write | — | `POST /headless/metadata` | `describe`, `list` |
|
|
86
|
-
|
|
87
|
-
### Dependency graph
|
|
88
|
-
|
|
89
|
-
```mermaid
|
|
90
|
-
graph TD
|
|
91
|
-
describe["describe (read)"]
|
|
92
|
-
list["list (read)"]
|
|
93
|
-
get_by_id["get-by-id (read)"]
|
|
94
|
-
create["create (write)"]
|
|
95
|
-
update["update (write)"]
|
|
96
|
-
delete["delete (write)"]
|
|
97
|
-
query_user_effective_permissions["query_user_effective_permissions (read)"]
|
|
98
|
-
grant_custom_permission["grant_custom_permission (write)"]
|
|
99
|
-
revoke_custom_permission["revoke_custom_permission (delete)"]
|
|
100
|
-
query_grants["query_grants (read)"]
|
|
101
|
-
query_dependencies["query_dependencies (read)"]
|
|
102
|
-
add_required_permission["add_required_permission (write)"]
|
|
103
|
-
remove_required_permission["remove_required_permission (write)"]
|
|
104
|
-
bulk_grant_custom_permissions["bulk_grant_custom_permissions (write)"]
|
|
105
|
-
bulk_revoke_custom_permissions["bulk_revoke_custom_permissions (delete)"]
|
|
106
|
-
clone_custom_permission["clone_custom_permission (write)"]
|
|
107
|
-
list --> get_by_id
|
|
108
|
-
describe --> create
|
|
109
|
-
get_by_id --> update
|
|
110
|
-
get_by_id --> delete
|
|
111
|
-
grant_custom_permission --> revoke_custom_permission
|
|
112
|
-
create --> add_required_permission
|
|
113
|
-
query_dependencies --> add_required_permission
|
|
114
|
-
add_required_permission --> remove_required_permission
|
|
115
|
-
query_dependencies --> remove_required_permission
|
|
116
|
-
grant_custom_permission --> bulk_grant_custom_permissions
|
|
117
|
-
query_grants --> bulk_revoke_custom_permissions
|
|
118
|
-
describe --> clone_custom_permission
|
|
119
|
-
list --> clone_custom_permission
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Read operations
|
|
123
|
-
|
|
124
|
-
#### `describe`
|
|
125
|
-
|
|
126
|
-
Retrieve the CustomPermission sObject describe — fields, picklist values,
|
|
127
|
-
FLS, createable/updateable flags. IMPORTANT: describe confirms
|
|
128
|
-
createable=false, updateable=false, deletable=false — writes MUST go
|
|
129
|
-
through Metadata API. KeyPrefix is 0CP (not 0PR as previously documented).
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
**Call:** `GET /services/data/v67.0/sobjects/CustomPermission/describe`
|
|
133
|
-
|
|
134
|
-
**Output:** DescribeSObjectResult for CustomPermission — use this to build the field list for list / create / update payloads.
|
|
135
|
-
|
|
136
|
-
#### `list`
|
|
137
|
-
|
|
138
|
-
List CustomPermission records. Pair this with /describe first to pick field names.
|
|
139
|
-
|
|
140
|
-
**Call:** `GET /services/data/v67.0/query`
|
|
141
|
-
|
|
142
|
-
**Inputs:**
|
|
143
|
-
|
|
144
|
-
- `where` *(`String`)* — Optional SOQL WHERE clause to filter Custom Permission records.
|
|
145
|
-
- `limit` *(`int`)* — Optional SOQL LIMIT value.
|
|
146
|
-
- `q` *(`string`)* — The full SOQL query string sent as the `q` query parameter. Defaults to
|
|
147
|
-
"SELECT Id FROM CustomPermission"; fold the optional where/limit guidance
|
|
148
|
-
above into this query — they describe how to shape `q`, they are not sent
|
|
149
|
-
as separate parameters.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
**Output:** Query response with records[] of CustomPermission — Id plus any SELECTed fields.
|
|
153
|
-
|
|
154
|
-
#### `get-by-id`
|
|
155
|
-
|
|
156
|
-
Retrieve a specific CustomPermission record by Id.
|
|
157
|
-
|
|
158
|
-
**Call:** `GET /services/data/v67.0/sobjects/CustomPermission/{Id}`
|
|
159
|
-
|
|
160
|
-
**Inputs:**
|
|
161
|
-
|
|
162
|
-
- `Id` *(`ID`)* — Id of the CustomPermission record to fetch.
|
|
163
|
-
|
|
164
|
-
**Depends on:** `list`
|
|
165
|
-
|
|
166
|
-
**Output:** Single CustomPermission record with all readable fields per user FLS.
|
|
167
|
-
|
|
168
|
-
#### `query_user_effective_permissions`
|
|
169
|
-
|
|
170
|
-
Discover which CustomPermissions a User effectively has via assigned
|
|
171
|
-
PermissionSets. Two-step pattern (single SOQL with sub-query is the
|
|
172
|
-
cleanest form):
|
|
173
|
-
(1) Find the user's assigned permsets:
|
|
174
|
-
SELECT PermissionSetId FROM PermissionSetAssignment
|
|
175
|
-
WHERE AssigneeId='<userId>'
|
|
176
|
-
(2) Find granted custom perms on those permsets:
|
|
177
|
-
SELECT SetupEntityId, Parent.Label,
|
|
178
|
-
SetupEntityId
|
|
179
|
-
FROM SetupEntityAccess
|
|
180
|
-
WHERE SetupEntityType='CustomPermission'
|
|
181
|
-
AND ParentId IN (<assigned permset ids>)
|
|
182
|
-
Or as a single nested SOQL using the IN-subquery form.
|
|
183
|
-
IMPORTANT: this only surfaces perms granted via PermissionSet
|
|
184
|
-
assignment — perms inherited via Profile assignment require a
|
|
185
|
-
different join (Profile → ParentId on Profile-derived PermissionSet
|
|
186
|
-
→ SetupEntityAccess). PermissionSetGroup membership requires
|
|
187
|
-
querying PermissionSetGroupComponent then descending to
|
|
188
|
-
SetupEntityAccess on each component permset.
|
|
189
|
-
|
|
190
|
-
**Call:** `GET /services/data/v67.0/query`
|
|
191
|
-
|
|
192
|
-
**Inputs:**
|
|
193
|
-
|
|
194
|
-
- `q` *(`String`)* — Example (single nested query):
|
|
195
|
-
SELECT SetupEntityId, Parent.Label FROM SetupEntityAccess
|
|
196
|
-
WHERE SetupEntityType='CustomPermission' AND ParentId IN
|
|
197
|
-
(SELECT PermissionSetId FROM PermissionSetAssignment
|
|
198
|
-
WHERE AssigneeId='005xx0000000001')
|
|
199
|
-
|
|
200
|
-
**Output:** {records[] with SetupEntityId (the CustomPermission Id),
|
|
201
|
-
Parent.Label (the granting PermissionSet's label)}.
|
|
202
|
-
Resolve SetupEntityId → DeveloperName via a follow-up
|
|
203
|
-
SELECT Id, DeveloperName FROM CustomPermission WHERE Id IN (...).
|
|
204
|
-
|
|
205
|
-
**Notes:** coverage_note: Profile-direct perm grants (rare — most orgs have moved to
|
|
206
|
-
PermissionSet-based assignment) require querying the user's
|
|
207
|
-
Profile-derived PermissionSet (the one with IsOwnedByProfile=true
|
|
208
|
-
tied to their Profile) and joining the same way.; psg_membership: PermissionSetGroup expands at runtime; to surface PSG-derived
|
|
209
|
-
perms, query PermissionSetGroupComponent.PermissionSetId for the
|
|
210
|
-
user's assigned PSGs, then descend to SetupEntityAccess on each
|
|
211
|
-
component permset.
|
|
212
|
-
|
|
213
|
-
#### `query_grants`
|
|
214
|
-
|
|
215
|
-
SOQL query against SetupEntityAccess to discover which PermissionSets
|
|
216
|
-
have a given CustomPermission granted. Two common patterns:
|
|
217
|
-
(a) "Which permsets have this perm?" — filter by SetupEntityId
|
|
218
|
-
(b) "Which custom perms does this permset grant?" — filter by ParentId
|
|
219
|
-
AND SetupEntityType='CustomPermission'
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
**Call:** `GET /services/data/v67.0/query`
|
|
223
|
-
|
|
224
|
-
**Inputs:**
|
|
225
|
-
|
|
226
|
-
- `q` *(`String`)* — Example (all grants for one perm):
|
|
227
|
-
SELECT Id, ParentId, Parent.Label FROM SetupEntityAccess
|
|
228
|
-
WHERE SetupEntityId='0CPxx000000001' AND SetupEntityType='CustomPermission'
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
**Output:** {records[] with Id (SetupEntityAccess — pass to revoke), ParentId
|
|
232
|
-
(PermissionSet), SetupEntityId (CustomPermission), SetupEntityType}.
|
|
233
|
-
|
|
234
|
-
#### `query_dependencies`
|
|
235
|
-
|
|
236
|
-
SOQL query against CustomPermissionDependency to discover required-perm
|
|
237
|
-
relationships. A CustomPermission can declare dependencies on other
|
|
238
|
-
CustomPermissions — Salesforce does NOT auto-cascade grant required
|
|
239
|
-
perms when you grant the dependent perm. Admins must manually ensure
|
|
240
|
-
all required perms are also granted. Use this query to surface what
|
|
241
|
-
needs to be co-granted.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
**Call:** `GET /services/data/v67.0/query`
|
|
245
|
-
|
|
246
|
-
**Inputs:**
|
|
247
|
-
|
|
248
|
-
- `q` *(`String`)* — Example (what does perm X require?):
|
|
249
|
-
SELECT Id, CustomPermissionId, RequiredCustomPermissionId,
|
|
250
|
-
RequiredCustomPermission.DeveloperName
|
|
251
|
-
FROM CustomPermissionDependency
|
|
252
|
-
WHERE CustomPermissionId='0CPxx000000001'
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
**Output:** {records[] with CustomPermissionId (the dependent), RequiredCustomPermissionId
|
|
256
|
-
(the dependency). SF does NOT auto-cascade — you must grant all
|
|
257
|
-
RequiredCustomPermissionId values to the same PermissionSet or the
|
|
258
|
-
grant is incomplete.}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
**Notes:** cascade_warning: Salesforce does NOT auto-cascade required permissions. If Perm A
|
|
262
|
-
requires Perm B, granting A without also granting B means the feature
|
|
263
|
-
gated by A+B will not function. Query this table before granting a
|
|
264
|
-
complex perm, and ensure all RequiredCustomPermissionIds are also
|
|
265
|
-
granted to the target PermissionSet.
|
|
266
|
-
|
|
267
|
-
### Write operations
|
|
268
|
-
|
|
269
|
-
#### `create`
|
|
270
|
-
|
|
271
|
-
⚠️ BROKEN via sObject REST — POST /sobjects/CustomPermission returns 400
|
|
272
|
-
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY. To CREATE a CustomPermission, use the
|
|
273
|
-
Metadata API via this step's endpoint: POST the {type, fullName, xmlRep}
|
|
274
|
-
deploy envelope to /headless/metadata (type=CustomPermission,
|
|
275
|
-
fullName=namespace__PermName, xmlRep=the serialized <CustomPermission>
|
|
276
|
-
document carrying <label> and optional <description>). A single-component
|
|
277
|
-
/headless/metadata deploy persists the definition in one call — not a
|
|
278
|
-
multi-component package deploy.
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
**Call:** `POST /headless/metadata`
|
|
282
|
-
|
|
283
|
-
**Inputs:**
|
|
284
|
-
|
|
285
|
-
- `type` *(`String`)* — The Metadata API type being created — always "CustomPermission" for
|
|
286
|
-
this step. Names the metadata type in the {type, fullName, xmlRep}
|
|
287
|
-
deploy envelope.
|
|
288
|
-
|
|
289
|
-
- `fullName` *(`String`)* — DeveloperName for the new CustomPermission (namespace__PermName format
|
|
290
|
-
for managed packages, or just PermName for unmanaged). Must be unique
|
|
291
|
-
in the org. Carried as the envelope's fullName (the component key).
|
|
292
|
-
|
|
293
|
-
- `xmlRep` *(`String`)* — Serialized CustomPermission metadata document — the full-record body the
|
|
294
|
-
Metadata API deploys. Carries the human-readable <label> and, optionally,
|
|
295
|
-
<description>:
|
|
296
|
-
<CustomPermission xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
297
|
-
<label>Manage Widgets</label>
|
|
298
|
-
<description>Grants access to the Widgets console</description>
|
|
299
|
-
</CustomPermission>
|
|
300
|
-
To also declare a required-permission dependency, add a
|
|
301
|
-
<requiredPermission> block (see add_required_permission).
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
**Depends on:** `describe`
|
|
305
|
-
|
|
306
|
-
**Rollback:** Call delete with type=CustomPermission and the same fullName to undo the create.
|
|
307
|
-
|
|
308
|
-
#### `update`
|
|
309
|
-
|
|
310
|
-
⚠️ BROKEN via sObject REST — PATCH /sobjects/CustomPermission/{Id} returns
|
|
311
|
-
400 CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY. To UPDATE a CustomPermission
|
|
312
|
-
(e.g. change its label or description), retrieve the existing metadata
|
|
313
|
-
component via MDAPI retrieve, modify the XML, and redeploy. The <fullName>
|
|
314
|
-
(developer name) is immutable — to rename, delete + recreate.
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
**Call:** `PUT /headless/metadata`
|
|
318
|
-
|
|
319
|
-
**Inputs:**
|
|
320
|
-
|
|
321
|
-
- `type` *(`String`)* — The Metadata API type being updated — always "CustomPermission" for
|
|
322
|
-
this step. Names the metadata type in the {type, fullName, xmlRep}
|
|
323
|
-
deploy envelope.
|
|
324
|
-
|
|
325
|
-
- `fullName` *(`String`)* — DeveloperName of the existing CustomPermission to update. Identifies the
|
|
326
|
-
component to retrieve, and is the envelope's fullName (the component key).
|
|
327
|
-
Discover via SOQL:
|
|
328
|
-
SELECT DeveloperName FROM CustomPermission WHERE Id='0CPxx...'
|
|
329
|
-
|
|
330
|
-
- `xmlRep` *(`String`)* — Serialized CustomPermission metadata document — the FULL-RECORD body the
|
|
331
|
-
update deploys (Metadata API update is a full PUT, not a partial patch).
|
|
332
|
-
Retrieve the existing component, change <label> and/or <description>, and
|
|
333
|
-
redeploy the whole document:
|
|
334
|
-
<CustomPermission xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
335
|
-
<label>Manage Widgets</label>
|
|
336
|
-
<description>Updated description</description>
|
|
337
|
-
</CustomPermission>
|
|
338
|
-
The <fullName> (DeveloperName) is immutable — to rename, delete + recreate.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
**Depends on:** `get-by-id`
|
|
342
|
-
|
|
343
|
-
#### `delete`
|
|
344
|
-
|
|
345
|
-
DELETE a CustomPermission directly via the hosted Metadata API:
|
|
346
|
-
DELETE /headless/metadata?type=CustomPermission&fullName={fullName}
|
|
347
|
-
(supply the CustomPermission's DeveloperName as {fullName})
|
|
348
|
-
→ 204 (record deleted). This requires the org permission
|
|
349
|
-
FileBasedMetadataDelete to be enabled; without it the call returns
|
|
350
|
-
403 INSUFFICIENT_ACCESS from the access check. The CustomPermission type is
|
|
351
|
-
allowlisted for CREATE/READ/UPDATE/DELETE on /headless/metadata via core
|
|
352
|
-
PR #110662.
|
|
353
|
-
|
|
354
|
-
Note: DELETE via sObject REST is NOT supported —
|
|
355
|
-
DELETE /sobjects/CustomPermission/{Id} returns INSUFFICIENT_ACCESS_OR_READONLY
|
|
356
|
-
and /describe reports deletable=false. The destructiveChanges.xml MDAPI deploy
|
|
357
|
-
is a legacy fallback that is no longer required and must not be reintroduced on
|
|
358
|
-
the hosted path — it needs a file-based metadata deploy that the hosted
|
|
359
|
-
/headless/metadata surface does not provide. Prefer the direct DELETE above.
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
**Call:** `DELETE /headless/metadata`
|
|
363
|
-
|
|
364
|
-
**Inputs:**
|
|
365
|
-
|
|
366
|
-
- `fullName` *(`String`)* — DeveloperName of the CustomPermission to delete. Passed as the fullName
|
|
367
|
-
query parameter alongside type=CustomPermission on the DELETE call:
|
|
368
|
-
DELETE /headless/metadata?type=CustomPermission&fullName={fullName}
|
|
369
|
-
(the value to supply is the DeveloperName).
|
|
370
|
-
Discover via SOQL:
|
|
371
|
-
SELECT DeveloperName FROM CustomPermission WHERE Id='0CPxx...'
|
|
372
|
-
(For the destructiveChanges fallback, the same fullName becomes a
|
|
373
|
-
<members> entry under <name>CustomPermission</name> in the manifest.)
|
|
374
|
-
|
|
375
|
-
- `type` *(`string`)* — The Metadata API type being deleted — always "CustomPermission" for
|
|
376
|
-
this step. Passed as the type query parameter on the DELETE call:
|
|
377
|
-
DELETE /headless/metadata?type=CustomPermission&fullName={fullName}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
**Depends on:** `get-by-id`
|
|
381
|
-
|
|
382
|
-
#### `grant_custom_permission`
|
|
383
|
-
|
|
384
|
-
Grant a CustomPermission to a PermissionSet by creating a SetupEntityAccess
|
|
385
|
-
junction record. This is the PRIMARY admin workflow — more common than
|
|
386
|
-
creating/editing the permission definition itself. Required fields:
|
|
387
|
-
ParentId (PermissionSet Id) + SetupEntityId (CustomPermission Id).
|
|
388
|
-
CONSTRAINTS:
|
|
389
|
-
- ParentId accepts ONLY non-managed user PermissionSets. Managed permsets
|
|
390
|
-
→ INVALID_CROSS_REFERENCE_KEY. PermissionSetGroups → FIELD_INTEGRITY_EXCEPTION.
|
|
391
|
-
Profile-derived permsets → FIELD_INTEGRITY_EXCEPTION.
|
|
392
|
-
Filter: WHERE IsOwnedByProfile=false AND IsCustom=true
|
|
393
|
-
- SetupEntityType is auto-derived from SetupEntityId's keyPrefix — do NOT
|
|
394
|
-
POST it (createable=false for that field).
|
|
395
|
-
- SetupEntityId is POLYMORPHIC across 11 entity types; for CustomPermission,
|
|
396
|
-
the keyPrefix is 0CP.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
**Call:** `POST /services/data/v67.0/sobjects/SetupEntityAccess`
|
|
400
|
-
|
|
401
|
-
**Inputs:**
|
|
402
|
-
|
|
403
|
-
- `ParentId` *(`String`)* — PermissionSet Id to grant the permission to. Must be a non-managed,
|
|
404
|
-
user-created PermissionSet (IsOwnedByProfile=false AND IsCustom=true).
|
|
405
|
-
Managed permsets, PermissionSetGroups, and Profile-derived permsets
|
|
406
|
-
are rejected. Discover eligible targets:
|
|
407
|
-
SELECT Id, Label FROM PermissionSet WHERE IsOwnedByProfile=false
|
|
408
|
-
AND IsCustom=true AND NamespacePrefix=null
|
|
409
|
-
|
|
410
|
-
- `SetupEntityId` *(`String`)* — CustomPermission Id (keyPrefix 0CP). The permission to grant.
|
|
411
|
-
Polymorphic across 11 entity types — SetupEntityType is auto-derived
|
|
412
|
-
from the keyPrefix and MUST NOT be included in the POST body
|
|
413
|
-
(createable=false).
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
**Output:** 201 {id, success, errors[]}.
|
|
417
|
-
|
|
418
|
-
**Rollback:** revoke_custom_permission
|
|
419
|
-
|
|
420
|
-
**Notes:** error_contracts: 400 INVALID_CROSS_REFERENCE_KEY — ParentId is a managed PermissionSet
|
|
421
|
-
(IsCustom=false) or a non-existent Id.
|
|
422
|
-
400 "id value of incorrect type" — ParentId is a PermissionSetGroup
|
|
423
|
-
(different entity type, wrong keyPrefix for the FK field).
|
|
424
|
-
400 DUPLICATE_VALUE — this grant already exists.
|
|
425
|
-
Note: Profile-derived PermissionSets (IsOwnedByProfile=true) may
|
|
426
|
-
ACCEPT the grant on some orgs — behavior is org/release-dependent.
|
|
427
|
-
Recommend filtering to IsOwnedByProfile=false for safety.
|
|
428
|
-
; polymorphic_note: SetupEntityId is polymorphic across 11 entity types (CustomPermission,
|
|
429
|
-
ConnectedApplication, ExternalDataSource, CustomObject, etc.).
|
|
430
|
-
SetupEntityType is derived from the keyPrefix — never POST it manually.
|
|
431
|
-
|
|
432
|
-
#### `add_required_permission`
|
|
433
|
-
|
|
434
|
-
Add a required-permission dependency to a CustomPermission. This is the
|
|
435
|
-
API equivalent of the "Edit" button on the Required Custom Permissions
|
|
436
|
-
section of the CustomPermission detail page.
|
|
437
|
-
|
|
438
|
-
PRECONDITION: Both the parent CustomPermission AND the target required
|
|
439
|
-
CustomPermission MUST already exist in the org. If either does not exist,
|
|
440
|
-
create it first (see the create step). You need at least two distinct
|
|
441
|
-
CustomPermission definitions to establish a dependency.
|
|
442
|
-
|
|
443
|
-
CustomPermissionDependency sObject is READ-ONLY (createable=false,
|
|
444
|
-
updateable=false, deletable=false) — the dependency is managed as a
|
|
445
|
-
<requiredPermission> child element in the CustomPermission metadata XML.
|
|
446
|
-
Steps (single-component /headless/metadata — no multi-component package
|
|
447
|
-
or sf CLI required, as of the 262/patch framework fix; see notes):
|
|
448
|
-
1. Ensure the target required CustomPermission already exists in the org
|
|
449
|
-
(create it via the create step first if it does not).
|
|
450
|
-
2. Send the PARENT's xmlRep carrying a <requiredPermission> block that
|
|
451
|
-
references the target by DeveloperName:
|
|
452
|
-
<requiredPermission>
|
|
453
|
-
<customPermission>{RequiredPerm_DeveloperName}</customPermission>
|
|
454
|
-
<dependency>true</dependency>
|
|
455
|
-
</requiredPermission>
|
|
456
|
-
Use PUT to amend an existing parent, or POST at parent create-time.
|
|
457
|
-
The referenced target does NOT need to be included in the request —
|
|
458
|
-
only the parent is sent; the framework resolves the reference against
|
|
459
|
-
the perm already present in the org.
|
|
460
|
-
After the call, CustomPermissionDependency sObject reflects the new
|
|
461
|
-
relationship (queryable via query_dependencies step).
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
**Call:** `PUT /headless/metadata`
|
|
465
|
-
|
|
466
|
-
**Inputs:**
|
|
467
|
-
|
|
468
|
-
- `parent_fullName` *(`String`)* — DeveloperName of the CustomPermission that will DEPEND on another.
|
|
469
|
-
Discover via SOQL: SELECT DeveloperName FROM CustomPermission
|
|
470
|
-
WHERE Id='0CPxx...'
|
|
471
|
-
|
|
472
|
-
- `required_fullName` *(`String`)* — DeveloperName of the CustomPermission being added as a requirement.
|
|
473
|
-
Must already exist in the org. After deploy, granting the parent perm
|
|
474
|
-
to a PermissionSet will REQUIRE this perm to also be granted (SF
|
|
475
|
-
enforces at grant time).
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
**Depends on:** `create`, `query_dependencies`
|
|
479
|
-
|
|
480
|
-
**Output:** Deploy Succeeded.
|
|
481
|
-
|
|
482
|
-
**Rollback:** remove_required_permission
|
|
483
|
-
|
|
484
|
-
**Notes:** single_component_supported: As of the 262/patch framework fix (W-23448962), single-component
|
|
485
|
-
/headless/metadata create/update/delete requests behave like the
|
|
486
|
-
synchronous create path, a SINGLE-COMPONENT request carrying only the
|
|
487
|
-
PARENT's xmlRep with a <requiredPermission> block now correctly persists
|
|
488
|
-
the dependency, provided the referenced target CustomPermission already
|
|
489
|
-
exists in the org.
|
|
490
|
-
HISTORICAL (pre-262/patch): the parent-only request returned 200 but the
|
|
491
|
-
<requiredPermission> element was SILENTLY DROPPED — callers had to deploy
|
|
492
|
-
both components in one multi-component package via sf CLI. That workaround
|
|
493
|
-
is NO LONGER required and must not be reintroduced (hosted-MCP agents have
|
|
494
|
-
no sf CLI). Re-verified on orgfarm-8b18a62938 (2026-07-27): single-component
|
|
495
|
-
POST → dependency row created; PUT <dependency>false</dependency> → row removed.
|
|
496
|
-
; xml_structure: The <requiredPermission> element lives inside the parent
|
|
497
|
-
CustomPermission's .customPermission-meta.xml:
|
|
498
|
-
<CustomPermission xmlns="http://soap.sforce.com/2006/04/metadata">
|
|
499
|
-
<isLicensed>false</isLicensed>
|
|
500
|
-
<label>...</label>
|
|
501
|
-
<requiredPermission>
|
|
502
|
-
<customPermission>Required_Perm_DeveloperName</customPermission>
|
|
503
|
-
<dependency>true</dependency>
|
|
504
|
-
</requiredPermission>
|
|
505
|
-
</CustomPermission>
|
|
506
|
-
Multiple <requiredPermission> blocks can exist (one per dependency).
|
|
507
|
-
; enforcement: After adding, Salesforce enforces the dependency at grant time:
|
|
508
|
-
attempting to grant the parent perm without the required perm already
|
|
509
|
-
granted on the same PermissionSet will fail with "Custom permission X
|
|
510
|
-
requires the following custom permission(s): Y".
|
|
511
|
-
|
|
512
|
-
#### `remove_required_permission`
|
|
513
|
-
|
|
514
|
-
Remove a required-permission dependency from a CustomPermission. This is
|
|
515
|
-
the API equivalent of unchecking a requirement in the "Edit" UI on the
|
|
516
|
-
Required Custom Permissions section.
|
|
517
|
-
|
|
518
|
-
PRECONDITION: A dependency between the parent and the target
|
|
519
|
-
CustomPermission MUST already exist (established via
|
|
520
|
-
add_required_permission). Query CustomPermissionDependency first to
|
|
521
|
-
confirm the relationship exists before attempting removal.
|
|
522
|
-
|
|
523
|
-
Steps (single-component /headless/metadata — same as add; see the
|
|
524
|
-
add_required_permission notes for the 262/patch fix that made this work):
|
|
525
|
-
1. Take the parent CustomPermission's xmlRep.
|
|
526
|
-
2. Set <dependency>false</dependency> on the target <requiredPermission>
|
|
527
|
-
block (the one where <customPermission> = the target DeveloperName).
|
|
528
|
-
NOTE: simply removing the element does NOT work (deploys are additive);
|
|
529
|
-
you must explicitly set <dependency>false</dependency>.
|
|
530
|
-
3. PUT the parent only. The referenced target does NOT need to be included
|
|
531
|
-
in the request (single-component request is sufficient post-262/patch).
|
|
532
|
-
After the call, the CustomPermissionDependency row disappears and
|
|
533
|
-
grant-time enforcement for that dependency is removed.
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
**Call:** `PUT /headless/metadata`
|
|
537
|
-
|
|
538
|
-
**Inputs:**
|
|
539
|
-
|
|
540
|
-
- `parent_fullName` *(`String`)* — DeveloperName of the CustomPermission that currently depends on
|
|
541
|
-
another (the one being edited).
|
|
542
|
-
|
|
543
|
-
- `required_fullName` *(`String`)* — DeveloperName of the CustomPermission being removed as a requirement.
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
**Depends on:** `add_required_permission`, `query_dependencies`
|
|
547
|
-
|
|
548
|
-
**Output:** Deploy Succeeded.
|
|
549
|
-
|
|
550
|
-
**Notes:** cascade_note: Removing a required-permission dependency does NOT revoke existing
|
|
551
|
-
grants. If PermissionSet X already has both perms granted, both
|
|
552
|
-
grants remain. The enforcement is only at grant-time — removing the
|
|
553
|
-
dependency simply stops SF from requiring the dependent perm on
|
|
554
|
-
future grant operations.
|
|
555
|
-
|
|
556
|
-
#### `bulk_grant_custom_permissions`
|
|
557
|
-
|
|
558
|
-
Bulk-grant CustomPermissions via Composite sObjects API. Supports two
|
|
559
|
-
patterns:
|
|
560
|
-
(a) "1 perm → N permsets" — grant a single CustomPermission to multiple
|
|
561
|
-
PermissionSets in one call (up to 200 records per request).
|
|
562
|
-
(b) "N perms → 1 permset" — grant multiple CustomPermissions to a single
|
|
563
|
-
PermissionSet in one call.
|
|
564
|
-
Use allOrNone=false for partial-success semantics (some grants succeed
|
|
565
|
-
even if others hit DUPLICATE_VALUE or INVALID_CROSS_REFERENCE_KEY).
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
**Call:** `POST /services/data/v67.0/composite/sobjects`
|
|
569
|
-
|
|
570
|
-
**Inputs:**
|
|
571
|
-
|
|
572
|
-
- `records` *(`Array`)* — Array of SetupEntityAccess objects, each with {ParentId, SetupEntityId}.
|
|
573
|
-
Max 200 per request. Same constraints as single grant: ParentId must
|
|
574
|
-
be non-managed user PermissionSet; SetupEntityType must NOT be included.
|
|
575
|
-
|
|
576
|
-
- `allOrNone` *(`Boolean`)* — false (recommended) = partial success; true = atomic (all fail if
|
|
577
|
-
any one fails). Default: false.
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
**Depends on:** `grant_custom_permission`
|
|
581
|
-
|
|
582
|
-
**Output:** Array of {id, success, errors[]} — one entry per input record.
|
|
583
|
-
Partial success: check each entry's success flag individually.
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
**Notes:** error_contracts: Per-record errors (same as single grant): DUPLICATE_VALUE,
|
|
587
|
-
INVALID_CROSS_REFERENCE_KEY, FIELD_INTEGRITY_EXCEPTION.
|
|
588
|
-
With allOrNone=false, failing records don't block succeeding ones.
|
|
589
|
-
|
|
590
|
-
#### `clone_custom_permission`
|
|
591
|
-
|
|
592
|
-
Clone a CustomPermission by reading the source definition and deploying a
|
|
593
|
-
NEW component under a new name and label. The base SOR claimed
|
|
594
|
-
"Clone is a UI button with no API equivalent" — this is incorrect.
|
|
595
|
-
Steps:
|
|
596
|
-
1. Read the source: SOQL the source CustomPermission for its MasterLabel
|
|
597
|
-
and Description. CustomPermission.DeveloperName never carries the
|
|
598
|
-
namespace, so filter on NamespacePrefix too: pass the unqualified
|
|
599
|
-
DeveloperName, and for a managed-package source (fullName ns__Name)
|
|
600
|
-
split the ns prefix into NamespacePrefix.
|
|
601
|
-
SELECT MasterLabel, Description FROM CustomPermission
|
|
602
|
-
WHERE DeveloperName='<DeveloperName>' AND NamespacePrefix=<ns or null>.
|
|
603
|
-
2. Compose the new component's xmlRep: a <CustomPermission> document
|
|
604
|
-
carrying the new <label> (and optional <description>) under the new
|
|
605
|
-
fullName.
|
|
606
|
-
3. Deploy: POST the {type: CustomPermission, fullName: new_fullName,
|
|
607
|
-
xmlRep} envelope to /headless/metadata — a single-component deploy in
|
|
608
|
-
one call (see the create step for the envelope shape).
|
|
609
|
-
Optional: also copy SetupEntityAccess grants from the source to the clone
|
|
610
|
-
(via query_grants on source + bulk_grant on clone). To carry over any
|
|
611
|
-
required-permission dependency, use add_required_permission on the clone.
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
**Call:** `POST /headless/metadata`
|
|
615
|
-
|
|
616
|
-
**Inputs:**
|
|
617
|
-
|
|
618
|
-
- `source_fullName` *(`String`)* — fullName of the source CustomPermission to clone. For an unmanaged
|
|
619
|
-
perm this is just its DeveloperName; for a managed-package perm it is
|
|
620
|
-
ns__DeveloperName. The read query filters on the unqualified
|
|
621
|
-
DeveloperName (plus NamespacePrefix) because CustomPermission.DeveloperName
|
|
622
|
-
never includes the namespace.
|
|
623
|
-
Discover via SOQL: SELECT DeveloperName, NamespacePrefix FROM
|
|
624
|
-
CustomPermission WHERE Id='0CPxx000000001'
|
|
625
|
-
|
|
626
|
-
- `new_fullName` *(`String`)* — DeveloperName for the cloned permission (must be unique in org).
|
|
627
|
-
- `new_label` *(`String`)* — Label for the cloned permission.
|
|
628
|
-
|
|
629
|
-
**Depends on:** `describe`, `list`
|
|
630
|
-
|
|
631
|
-
**Notes:** grant_copy: Cloning the permission definition does NOT copy its grants. To
|
|
632
|
-
replicate grants, query_grants on the source perm's Id, then
|
|
633
|
-
bulk_grant_custom_permissions with the same ParentIds + the new
|
|
634
|
-
permission's Id.
|
|
635
|
-
|
|
636
|
-
### Destructive operations
|
|
637
|
-
|
|
638
|
-
#### `revoke_custom_permission`
|
|
639
|
-
|
|
640
|
-
Revoke a CustomPermission grant from a PermissionSet by deleting the
|
|
641
|
-
SetupEntityAccess record. Resolve the Id via SOQL:
|
|
642
|
-
SELECT Id FROM SetupEntityAccess WHERE ParentId='<permSetId>'
|
|
643
|
-
AND SetupEntityId='<customPermId>'.
|
|
644
|
-
|
|
645
|
-
ORDERING CONSTRAINT: if perm A depends on perm B (CustomPermissionDependency),
|
|
646
|
-
both granted to the same PermissionSet, you cannot revoke B's grant while
|
|
647
|
-
A's grant is still active — server returns 400 DEPENDENCY_EXISTS. Revoke
|
|
648
|
-
dependent grants first (A), then the required-perm grant (B).
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
**Call:** `DELETE /services/data/v67.0/sobjects/SetupEntityAccess/{id}`
|
|
652
|
-
|
|
653
|
-
**Inputs:**
|
|
654
|
-
|
|
655
|
-
- `id` *(`String`)* — SetupEntityAccess record Id (NOT the PermissionSet or CustomPermission Id).
|
|
656
|
-
|
|
657
|
-
**Depends on:** `grant_custom_permission`
|
|
658
|
-
|
|
659
|
-
**Notes:** ordering_constraint: Cannot revoke a required-perm grant while a dependent perm grant is
|
|
660
|
-
still active on the same PermissionSet. Server returns
|
|
661
|
-
400 DEPENDENCY_EXISTS. Revoke order: dependent first, required last.
|
|
662
|
-
Use query_dependencies to discover the dependency graph before
|
|
663
|
-
revoking; pre-flight a revoke order that respects it.
|
|
664
|
-
; patch_unsupported: SetupEntityAccess.updateable=false. PATCH returns 400
|
|
665
|
-
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY. To "change" a grant, DELETE
|
|
666
|
-
the existing record + INSERT a new one.
|
|
667
|
-
|
|
668
|
-
#### `bulk_revoke_custom_permissions`
|
|
669
|
-
|
|
670
|
-
Bulk-revoke CustomPermission grants via Composite sObjects DELETE.
|
|
671
|
-
Pass up to 200 SetupEntityAccess record Ids as a comma-separated list
|
|
672
|
-
in the ids query parameter. Use allOrNone=false for partial-success
|
|
673
|
-
semantics.
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
**Call:** `DELETE /services/data/v67.0/composite/sobjects`
|
|
677
|
-
|
|
678
|
-
**Inputs:**
|
|
679
|
-
|
|
680
|
-
- `ids` *(`String`)* — Comma-separated SetupEntityAccess record Ids (max 200). Discover
|
|
681
|
-
via query_grants filtered by the target perm or permset.
|
|
682
|
-
|
|
683
|
-
- `allOrNone` *(`Boolean`)* — false = partial success (default); true = atomic.
|
|
684
|
-
|
|
685
|
-
**Depends on:** `query_grants`
|
|
686
|
-
|
|
687
|
-
**Output:** Array of {id, success, errors[]}.
|