These abilities surface the same membership metrics shown on the Members Only admin dashboard, plus a flexible member search. They are all read-only and require the manage_options capability (site administrator). See the Abilities API Overview for the full catalog.
get-membership-stats
members-only/get-membership-stats returns site-wide membership statistics. It takes no parameters.
Returns (among others):
active_membersandtotal_members, withactive_member_sharepaid_members_total,paid_members_active, andpaid_member_shareaccess_pass_only_active_membersgroupsandgroups_with_membersbilling_issues— members with payment problemsnew_members_last_30_daysandnew_members_previous_30_days— note that despite the field names, these count all new WordPress user accounts registered in each window, not only users who acquired a membership (a membership start date is not tracked)
get-recent-activity
members-only/get-recent-activity returns a short feed of recent site activity: new WordPress user account registrations (which may include non-member accounts) and group events. It takes no parameters.
Returns: a count and an activity array; each entry has a title, description, timestamp, and url.
get-signup-counts
members-only/get-signup-counts returns new user account signup counts for trend comparison. It counts every account registered on the site — including accounts with no membership relationship — because a membership start date is not tracked. Do not report these numbers as member signups. It takes no parameters.
Returns: last_30_days and previous_30_days.
find-members
members-only/find-members searches your site’s members — users with a membership relationship: a Stripe customer record, an access pass, or a group membership. This is the same population the Members admin screen lists. Results are paginated and ordered by registration date (newest first), and all filters combine. To look up a user who is not yet a member (for example, before granting an access pass or adding them to a group), set include_non_members to true to search every WordPress user account instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | No | Matches against username, email, or display name |
group_id | integer | No | Restrict to members of this group (requires the Group Memberships extension) |
registered_after | string | No | Only users registered on or after this date, e.g. 2026-01-01 |
registered_before | string | No | Only users registered on or before this date, e.g. 2026-06-30 |
has_access_pass | boolean | No | Only users that have an access pass record |
include_non_members | boolean | No | Search every WordPress user account instead of only users with a membership relationship. Defaults to false. |
limit | integer | No | Maximum members to return, 1–100. Defaults to 20. |
offset | integer | No | Number of members to skip, for pagination. Defaults to 0. |
Returns: count, total, limit, offset, and a members array. Each member includes their user_id, email, display_name, registered date, and two flags: is_member (true, false, or null when unknown) and has_access_pass.
A few notes:
- Active-membership status for the returned page is resolved with a single batched Stripe lookup rather than one call per member, so large result sets stay fast
- If Stripe is unreachable, the response includes
stripe_unavailable: trueandis_memberisnullfor users whose status cannot be determined from local data — paying subscribers are never reported as non-members - Administrators count as members for access checks, but they only appear in results when they hold a membership signal or
include_non_membersistrue - Using
group_idon a site without the Group Memberships extension returnsmembers_only_group_filter_unavailableinstead of silently ignoring the filter
