REST API
Namespace: omem/v1. The full route table is registered in OMembership_REST::register_routes().
Plans
GET /omem/v1/plans (public)
POST /omem/v1/plans (omem_manage_plans)
GET /omem/v1/plans/{id} (public)
PATCH /omem/v1/plans/{id} (omem_manage_plans)
DELETE /omem/v1/plans/{id} (omem_manage_plans)Members and memberships
GET /omem/v1/members (omem_manage_members)
GET /omem/v1/members/{id} (omem_manage_members)
POST /omem/v1/members/{id}/grant (omem_grant_access)
POST /omem/v1/members/{id}/revoke (omem_grant_access)
GET /omem/v1/members/{id}/progress (omem_manage_members)
GET /omem/v1/members/{id}/health (omem_manage_members)
GET /omem/v1/memberships?user_id={id} (omem_manage_members)
POST /omem/v1/memberships (omem_grant_access)
POST /omem/v1/memberships/{id}/cancel (omem_grant_access)
POST /omem/v1/memberships/{id}/pause (omem_grant_access)
POST /omem/v1/memberships/{id}/upgrade (omem_grant_access)Access
GET /omem/v1/access-rules (omem_manage_access)
POST /omem/v1/access-rules (omem_manage_access)
PATCH /omem/v1/access-rules/{id} (omem_manage_access)
DELETE /omem/v1/access-rules/{id} (omem_manage_access)
POST /omem/v1/access/check (public)Courses, lessons, quizzes
GET, POST /omem/v1/{courses|modules|lessons|quizzes}
PATCH, DELETE /omem/v1/{resource}/{id}
GET /omem/v1/me/progress
POST /omem/v1/progress/{lesson_id}
POST /omem/v1/quizzes/{id}/attempts
GET /omem/v1/me/certificates
GET /omem/v1/certificates/verify/{token} (public)Community, moderation, badges
GET, POST /omem/v1/spaces
GET, POST /omem/v1/topics
GET, POST /omem/v1/replies
POST /omem/v1/reactions
GET, POST /omem/v1/dms/conversations
GET, POST /omem/v1/dms/conversations/{id}/messages
GET /omem/v1/directory
GET /omem/v1/directory/{user_id}
GET /omem/v1/moderation/queue (omem_moderate_community)
POST /omem/v1/moderation/{id}/resolve (omem_moderate_community)
GET, POST /omem/v1/badges (POST: omem_manage_badges)
POST /omem/v1/members/{id}/badges/{badge_id}Reports
GET /omem/v1/reports/mrr (omem_view_reports)
GET /omem/v1/reports/cohort (omem_view_reports)
GET /omem/v1/reports/courses (omem_view_reports)
GET /omem/v1/reports/engagement (omem_view_reports)WP-CLI
wp omem members list [--plan=]
wp omem members grant <user_id> <plan_id>
wp omem members revoke <user_id> <plan_id>
wp omem courses progress <user_id>
wp omem reports mrr
wp omem reports cohort --since=<months>
wp omem importer run --from=memberpress|pmp|rcp|buddybossThe importer command runs idempotently and can be re-run after partial failures.
Event bus
OMembership_Events is a typed wrapper over do_action. Every dispatch is mirrored as a WordPress action so plugins can use either OMembership_Events::on() (typed) or add_action() (classic). Listener failures are caught and logged via OMembership_Logger without aborting the dispatch chain.
Canonical events
| Event | Fires when |
|---|---|
omem/membership/created | A membership row is inserted |
omem/membership/cancelled | Cancel reason is recorded |
omem/membership/upgraded | Plan swap completes |
omem/membership/expired | Period end passes without renewal |
omem/access/denied | Gate blocks a render or redirect |
omem/lesson/completed | Progress row flips to completed |
omem/course/completed | All lessons in a course done |
omem/quiz/passed | Attempt score >= threshold |
omem/certificate/issued | Certificate row inserted |
omem/topic/created, omem/reply/created | Community writes |
omem/dm/sent | DM stored |
omem/badge/awarded | User badge insert succeeds |
omem/drip/released | Drip schedule unlocks content |
omem/lifecycle/* | Lifecycle worker sweeps (see Lifecycle Campaigns) |
Capabilities
Twelve custom caps register on administrator and shop_manager at activation:
omem_manage -- catch-all (implicit grant for the others)
omem_manage_plans
omem_manage_members
omem_manage_access
omem_manage_courses
omem_manage_community
omem_moderate_community
omem_manage_badges
omem_manage_engagement
omem_view_reports
omem_grant_access
omem_export_dataOMembership_Capabilities::user_can( $cap ) returns true if the user has either the specific cap or the omem_manage catch-all.
Scheduled jobs
All five are queued idempotently on activation and re-checked every boot. Group: omembership.
| Hook | Interval |
|---|---|
omembership/access/expire-sweep | Hourly |
omembership/drip/release | Hourly |
omembership/lifecycle/run | Hourly |
omembership/health/recompute | Daily |
omembership/analytics/snapshot | Daily |
Requires Action Scheduler (ships with WooCommerce). When Action Scheduler is absent the recurring sweeps don't run, but event-driven flows still fire.

