# curate-portal-assets Curate API assets in an API Experience Hub portal. Use when an admin needs to publish Exchange assets to a portal, adjust which minor versions are visible to consumers, or remove assets from a portal. Covers discovery of unpublished assets, publishing, visibility configuration and removal. - **APIs:** [api-experience-hub-management](https://dev-portal.mulesoft.com/apis/api-experience-hub-management.md)- **Skill Source:** [SKILL.md](https://dev-portal.mulesoft.com/skills/curate-portal-assets/SKILL.md) ## Steps ### Step 1: Step 1: List AEH Connections **API:** `urn:api:api-experience-hub-management`**Operation:** `getConnections` **Outputs:** - `connectionId` (`$[*].id`) — AEH connection ID (Salesforce org link) backing the portal ### Step 2: Step 2: List Portals on the Connection **API:** `urn:api:api-experience-hub-management`**Operation:** `getAllApiPortalByConnectionId` **Inputs:** - `connectionId` — Connection ID from Step 1 **Outputs:** - `portalId` (`$[*].id`) — ID of the portal to curate ### Step 3: Step 3: Discover Unpublished Exchange Assets **API:** `urn:api:api-experience-hub-management`**Operation:** `searchExchangeAssets` **Inputs:** - `connectionId` — Connection ID from Step 1 - `portalId` — Portal ID from Step 2 - `searchRequest` — Search criteria (free-text query, categories, tags, pagination) **Outputs:** - `candidateAssets` (`$.assets[*]`) — Exchange assets available for publication in this portal - `candidateGroupId` (`$.assets[*].groupId`) — groupId of each candidate asset - `candidateAssetId` (`$.assets[*].assetId`) — assetId of each candidate asset ### Step 4: Step 4: Add Assets to the Portal **API:** `urn:api:api-experience-hub-management`**Operation:** `addAssetsToCommunity` **Inputs:** - `connectionId` — Connection ID from Step 1 - `portalId` — Portal ID from Step 2 - `assetsRequest` — Array of Exchange asset references to publish (groupId + assetId, optional minorVersion filter) **Outputs:** - `publishedAssetIds` (`$[*].assetId`) — The newly published asset IDs ### Step 5: Step 5: Inspect Visibility of a Published Asset **API:** `urn:api:api-experience-hub-management`**Operation:** `getAllVersionsVisibilityByGA` **Inputs:** - `connectionId` — Connection ID - `portalId` — Portal ID - `groupId` — Exchange groupId of the asset to inspect - `assetId` — Exchange assetId of the asset to inspect **Outputs:** - `versionVisibilities` (`$.versions[*]`) — Per-minor-version visibility state (published, hidden, profile-restricted) ### Step 6: Step 6: Update Asset Visibility **API:** `urn:api:api-experience-hub-management`**Operation:** `updateCommunityAsset` **Inputs:** - `connectionId` — Connection ID - `portalId` — Portal ID - `groupId` — groupId from Step 5 - `assetId` — assetId from Step 5 - `visibilityUpdate` — Per-minor-version visibility payload **Outputs:** - `updatedAssetId` (`$.assetId`) — Confirmed assetId with new visibility applied ### Step 7: Step 7: Remove Assets (Optional) **API:** `urn:api:api-experience-hub-management`**Operation:** `removeAssetFromCommunity` **Inputs:** - `connectionId` — Connection ID - `portalId` — Portal ID - `removeRequest` — Array of asset coordinates to unpublish **Outputs:** - `removedAssetIds` (`$[*].assetId`) — Assets that were successfully removed from the portal