Manage the lifecycle of API Experience Hub portal members and prospects. Use when an admin needs to approve or reject prospects (candidate users), list active members, inspect and update a member's user-group assignments, or disable a member. Covers the full join → approve → assign → disable flow.
69
84%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Handles the membership lifecycle of an API Experience Hub (AEH) portal. Prospects are users who have requested access but are not yet portal members; members are active users with assigned user groups. This workflow lets portal administrators approve or reject prospects, audit the member list, adjust user-group assignments per member, and disable members who should no longer have access.
What you'll build: A governed portal membership list with the right people assigned to the right user groups.
Before starting, ensure:
Authentication ready
Environment already bootstrapped
manage-portal-user-groups)Retrieve the AEH connections the user has access to.
What you'll need:
Action: List connections and pick the one hosting the target portal.
api: urn:api:api-experience-hub-management
operationId: getConnections
inputs: {}
outputs:
- name: connectionId
path: $[*].id
labels: $[*].name
description: AEH connection ID (Salesforce org link) backing the portalWhat happens next: The chosen connectionId scopes every subsequent call.
Pick the target portal whose membership you want to manage.
What you'll need:
connectionId from Step 1api: urn:api:api-experience-hub-management
operationId: getAllApiPortalByConnectionId
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID from Step 1
outputs:
- name: portalId
path: $[*].id
labels: $[*].name
description: ID of the portal to manageRetrieve the list of users who have requested access to the portal but are not yet members.
What you'll need:
connectionId, portalIdapi: urn:api:api-experience-hub-management
operationId: getProspects
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
outputs:
- name: prospects
path: $.prospects[*]
labels: $.prospects[*].email
description: Pending prospects awaiting admin decision
- name: prospectId
path: $.prospects[*].id
description: Prospect ID used by the approve/reject operationsWhat happens next: Present the prospect list and let the admin choose who to approve or reject.
Promote a prospect to an active portal member and assign them to one or more user groups. Repeat per prospect the admin wants to approve.
What you'll need:
connectionId, portalId, prospectIdmanage-portal-user-groups Step "List User Groups")api: urn:api:api-experience-hub-management
operationId: approveProspect
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
prospectId:
from:
variable: prospectId
description: The prospect being approved
approvalRequest:
userProvided: true
description: User groups to assign to the new member on approval
example:
userGroups:
- id: 00G1a000000abcD
outputs:
- name: approvedUserId
path: $.userId
description: The user ID of the newly approved memberWhat happens next: The prospect is now a portal member with the chosen group assignments.
Reject prospects who should not be granted access.
What you'll need:
connectionId, portalId, prospectIdapi: urn:api:api-experience-hub-management
operationId: rejectProspect
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
prospectId:
from:
variable: prospectId
description: The prospect being rejected
outputs:
- name: rejectedProspectId
path: $.id
description: The rejected prospect's ID (for audit)What happens next: The prospect is removed from the queue. They can re-request access later.
Retrieve active portal members to audit who currently has access.
What you'll need:
connectionId, portalIdapi: urn:api:api-experience-hub-management
operationId: getCommunityUsers
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
outputs:
- name: members
path: $.users[*]
labels: $.users[*].email
description: Active portal members
- name: userId
path: $.users[*].id
description: Portal-member user ID used by per-member operationsFetch the specific group assignments of one member.
What you'll need:
connectionId, portalId, userIdapi: urn:api:api-experience-hub-management
operationId: getCommunityUser
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
userId:
from:
variable: userId
description: Portal-member user ID
outputs:
- name: memberUserGroups
path: $.userGroups[*]
labels: $.userGroups[*].name
description: Current user groups assigned to the memberWhat happens next: Present the current assignments; let the admin decide new memberships for Step 8.
Replace or extend the user groups assigned to a specific member.
What you'll need:
connectionId, portalId, userIdapi: urn:api:api-experience-hub-management
operationId: addGroupMappingToUser
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
targetUserId:
from:
variable: userId
description: Portal-member user ID
userGroupsRequest:
userProvided: true
description: Full replacement set of user groups for this member
example:
userGroups:
- id: 00G1a000000abcD
- id: 00G1a000000efgH
outputs:
- name: updatedUserId
path: $.userId
description: Confirmed member ID with new assignments appliedWhat happens next: The member now has exactly the user groups you specified.
Revoke a member's access without deleting their record — useful for offboarding.
What you'll need:
connectionId, portalId, targetUserIdapi: urn:api:api-experience-hub-management
operationId: disableCommunityUser
inputs:
connectionId:
from:
variable: connectionId
description: Connection ID
portalId:
from:
variable: portalId
description: Portal ID
targetUserId:
from:
variable: userId
description: The member to disable
outputs:
- name: disabledUserId
path: $.userId
description: Confirmed disabled member IDWhat happens next: The disabled member can no longer sign in to the portal. Their API contracts remain intact for audit.
✅ Governed Portal Membership — Prospects are triaged and approved members have the right user-group entitlements.
manage-portal-user-groups to define the groups referenced here.curate-portal-assets to control which APIs members see.4cf0cf6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.