MemberPress Developer Tools REST API

REST API exposed by the MemberPress Developer Tools add-on on the site owner's own WordPress installation, under the WordPress REST namespace mp/v1. Covers members, memberships, transactions, subscriptions, groups, rules, coupons, reminders and the event log, plus webhook subscribe/unsubscribe. Authenticated with a Developer Tools API key sent in the MEMBERPRESS-API-KEY header (the documentation repository and Postman collection send the same key in the Authorization header), or as a logged-in WordPress user holding the remove_users capability. MemberPress is self-hosted, so the base URL is always the customer's own site.

Documentation

Specifications

Other Resources

OpenAPI Specification

memberpress-developer-tools-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: MemberPress Developer Tools REST API
  version: v1
  summary: Members, memberships, transactions, subscriptions, groups, rules, coupons, reminders, events
    and webhooks for a self-hosted MemberPress WordPress site.
  description: 'The MemberPress REST API is exposed by the MemberPress **Developer Tools** add-on on the
    site owner''s own WordPress installation, under the WordPress REST namespace `mp/v1`. There is no
    MemberPress-operated SaaS host: the base URL is always `https://{site}/wp-json/mp/v1`, where `{site}`
    is the customer''s WordPress site.


    AUTHENTICATION. MemberPress documents two mechanisms. The Developer Tools documentation page states
    the API key is sent in the `MEMBERPRESS-API-KEY` request header; the MemberPress REST API documentation
    repository and its Postman collection send the same key in the `Authorization` header. Both are provider-published
    and both are modelled here. Alternatively a logged-in WordPress user holding the `remove_users` capability
    (typically an administrator) is authorized; a caller without it receives 401.


    PROVENANCE. **MemberPress publishes no OpenAPI description.** This document is DERIVED, not harvested.
    Every path, method, query parameter and request field below is transcribed from MemberPress''s own
    public sources: the README of https://github.com/caseproof/memberpress-rest-api-documentation, the
    `memberpress-api-postman-collection.json` published in that same repository (saved verbatim in this
    repo under `postman/`), and https://memberpress.com/docs/overview-of-using-the-developer-tools/. Response
    schemas are deliberately left as generic objects because MemberPress does not publish response field
    definitions — nothing is invented to fill the gap. Endpoints MemberPress itself flags as not present
    in every installation carry an `x-availability` note.'
  contact:
    name: MemberPress Support
    url: https://memberpress.com/support/
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
  x-provenance:
    generated: '2026-08-12'
    method: derived
    published_by_provider: false
    derived_by: API Evangelist enrichment pipeline
    sources:
    - https://github.com/caseproof/memberpress-rest-api-documentation/blob/main/README.md
    - https://raw.githubusercontent.com/caseproof/memberpress-rest-api-documentation/main/memberpress-api-postman-collection.json
    - https://memberpress.com/docs/overview-of-using-the-developer-tools/
    - https://memberpress.com/docs/developer-tools-actions/
    note: MemberPress publishes no OpenAPI/Swagger description on any host probed on 2026-08-12 (memberpress.com/openapi.json
      404, /swagger.json 404, no spec in the caseproof GitHub organization). This description is API Evangelist's
      faithful transcription of MemberPress-published documentation and must not be presented as a MemberPress-published
      artifact.
externalDocs:
  description: MemberPress REST API documentation (caseproof/memberpress-rest-api-documentation)
  url: https://github.com/caseproof/memberpress-rest-api-documentation
servers:
- url: https://{site}/wp-json/mp/v1
  description: The customer's own WordPress installation. MemberPress is self-hosted; there is no vendor-operated
    API host.
  variables:
    site:
      default: example.com
      description: Hostname of the WordPress site running MemberPress with the Developer Tools add-on
        enabled.
security:
- MemberPressApiKey: []
- AuthorizationApiKey: []
tags:
- name: Authentication
  description: Verify the API key and inspect permissions.
- name: Members
  description: Members are the WordPress users MemberPress tracks.
- name: Memberships
  description: Memberships are the products members buy.
- name: Transactions
  description: One-time and recurring payment records.
- name: Subscriptions
  description: Recurring billing agreements.
- name: Groups
  description: Groups of memberships, used for pricing pages and upgrade paths.
- name: Rules
  description: Smart Rules that protect content and drip access.
- name: Coupons
  description: Discount codes applied at checkout.
- name: Reminders
  description: Scheduled member emails triggered by events.
- name: Events
  description: The MemberPress event log.
- name: Webhooks
  description: Subscribe callback URLs to MemberPress events.
paths:
  /me:
    get:
      operationId: verifyAuthentication
      tags:
      - Authentication
      summary: Verify authentication
      description: 'Verifies that the supplied API key is valid and returns basic information about the
        authenticated user. Documented response: `{"success": true, "data": {"username": "admin"}}`.'
      responses:
        '200': &id001
          description: Success. MemberPress returns the requested resource(s) as JSON.
          content:
            application/json:
              schema:
                type: object
        '401': &id002
          description: Unauthorized. Returned when the API key is missing or invalid, or when the authenticated
            WordPress user does not hold the `remove_users` capability.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /me/permissions:
    get:
      operationId: getMyPermissions
      tags:
      - Authentication
      summary: Get user permissions
      description: Returns the permissions of the authenticated user.
      responses:
        '200': *id001
        '401': *id002
      x-availability: MemberPress documents this endpoint as not available in all installations. See the
        'Missing Endpoints and Alternatives' section of the provider README.
  /members:
    get:
      operationId: listMembers
      tags:
      - Members
      summary: List members
      description: Lists all members (WordPress users) known to MemberPress.
      responses:
        '200': &id003
          description: Success. Returns a JSON array of resources. The response carries the WordPress
            pagination headers `X-WP-Total` and `X-WP-TotalPages`.
          headers:
            X-WP-Total:
              description: Total number of items.
              schema:
                type: integer
            X-WP-TotalPages:
              description: Total number of pages.
              schema:
                type: integer
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
        '401': *id002
      parameters:
      - name: page
        in: query
        required: false
        description: Page number.
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        required: false
        description: Items per page.
        schema:
          type: integer
          default: 10
      - name: search
        in: query
        required: false
        description: General search term.
        schema:
          type: string
      - name: orderby
        in: query
        required: false
        description: Field to order results by.
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: Sort direction (ASC or DESC).
        schema:
          type: string
      - name: search[id]
        in: query
        required: false
        description: Search by member ID.
        schema:
          type: string
      - name: search[email]
        in: query
        required: false
        description: Search by email address.
        schema:
          type: string
      - name: search[username]
        in: query
        required: false
        description: Search by username.
        schema:
          type: string
    post:
      operationId: createMember
      tags:
      - Members
      summary: Create member
      description: Creates a new member. `email` and `username` are required.
      responses:
        '200': *id001
        '401': *id002
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: Email address.
                username:
                  type: string
                  description: Username.
                password:
                  type: string
                  description: Password. Auto-generated if not provided.
                first_name:
                  type: string
                  description: First name.
                last_name:
                  type: string
                  description: Last name.
                address1:
                  type: string
                  description: Address line 1.
                address2:
                  type: string
                  description: Address line 2.
                city:
                  type: string
                  description: City.
                state:
                  type: string
                  description: State or province.
                zip:
                  type: string
                  description: Postal code.
                country:
                  type: string
                  description: Country code.
                phone:
                  type: string
                  description: Phone number.
                send_password_email:
                  type: boolean
                  description: Send the password email to the new member.
                transaction:
                  type: object
                  description: Nested transaction object to create alongside the member.
              required:
              - email
              - username
  /members/{id}:
    get:
      operationId: getMember
      tags:
      - Members
      summary: Get member
      description: Gets a specific member by ID.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Member ID.
        schema:
          type: integer
    put:
      operationId: updateMember
      tags:
      - Members
      summary: Update member
      description: Updates an existing member. Accepts the same fields as create, except `password`.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Member ID.
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: Email address.
                username:
                  type: string
                  description: Username.
                first_name:
                  type: string
                  description: First name.
                last_name:
                  type: string
                  description: Last name.
                address1:
                  type: string
                  description: Address line 1.
                address2:
                  type: string
                  description: Address line 2.
                city:
                  type: string
                  description: City.
                state:
                  type: string
                  description: State or province.
                zip:
                  type: string
                  description: Postal code.
                country:
                  type: string
                  description: Country code.
                phone:
                  type: string
                  description: Phone number.
                send_password_email:
                  type: boolean
                  description: Send the password email to the new member.
    delete:
      operationId: deleteMember
      tags:
      - Members
      summary: Delete member
      description: Deletes a member. MemberPress documents this as destructive — use with caution.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Member ID.
        schema:
          type: integer
  /member_options:
    get:
      operationId: getMemberOptions
      tags:
      - Members
      summary: Get member options
      description: Returns the available options for members (roles and similar).
      responses:
        '200': *id001
        '401': *id002
      x-availability: MemberPress documents this endpoint as not available in all installations. See the
        'Missing Endpoints and Alternatives' section of the provider README.
  /memberships:
    get:
      operationId: listMemberships
      tags:
      - Memberships
      summary: List memberships
      description: Lists all memberships (the products members buy).
      responses:
        '200': *id003
        '401': *id002
      parameters:
      - name: page
        in: query
        required: false
        description: Page number.
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        required: false
        description: Items per page.
        schema:
          type: integer
          default: 10
      - name: search
        in: query
        required: false
        description: General search term.
        schema:
          type: string
      - name: orderby
        in: query
        required: false
        description: Field to order results by.
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: Sort direction (ASC or DESC).
        schema:
          type: string
      - name: search[id]
        in: query
        required: false
        description: Search by membership ID.
        schema:
          type: string
      - name: search[title]
        in: query
        required: false
        description: Search by title.
        schema:
          type: string
    post:
      operationId: createMembership
      tags:
      - Memberships
      summary: Create membership
      description: Creates a new membership. `title` is required.
      responses:
        '200': *id001
        '401': *id002
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: Membership name.
                price:
                  type: string
                  description: Price.
                period:
                  type: integer
                  description: Billing period number.
                period_type:
                  type: string
                  description: Billing period unit (days, weeks, months, years).
                trial:
                  type: boolean
                  description: Whether a trial is available.
                trial_days:
                  type: integer
                  description: Number of trial days.
                trial_amount:
                  type: string
                  description: Trial amount.
                limit_cycles:
                  type: boolean
                  description: Limit the number of billing cycles.
                limit_cycles_num:
                  type: integer
                  description: Number of billing cycles.
                limit_cycles_action:
                  type: string
                  description: Action taken after the cycles complete.
                access_url:
                  type: string
                  description: Custom access URL.
                thank_you_page_enabled:
                  type: boolean
                  description: Enable a custom thank-you page.
                thank_you_page_type:
                  type: string
                  description: Thank-you page type.
                custom_thank_you_page_id:
                  type: integer
                  description: Thank-you page ID.
                register_price_action:
                  type: string
                  description: Register price display option.
                thank_you_message:
                  type: string
                  description: Custom thank-you message.
                custom_login_urls_enabled:
                  type: boolean
                  description: Enable custom login URLs.
                custom_login_urls_default:
                  type: string
                  description: Default login URL.
                custom_login_urls_expires:
                  type: string
                  description: Login URL for expired users.
                is_highlighted:
                  type: boolean
                  description: Highlight this membership in the pricing table.
                group_id:
                  type: integer
                  description: Group ID, when the membership belongs to a group.
              required:
              - title
  /memberships/{id}:
    get:
      operationId: getMembership
      tags:
      - Memberships
      summary: Get membership
      description: Gets a specific membership by ID.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Membership ID.
        schema:
          type: integer
    put:
      operationId: updateMembership
      tags:
      - Memberships
      summary: Update membership
      description: Updates an existing membership.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Membership ID.
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: Membership name.
                price:
                  type: string
                  description: Price.
                period:
                  type: integer
                  description: Billing period number.
                period_type:
                  type: string
                  description: Billing period unit (days, weeks, months, years).
                trial:
                  type: boolean
                  description: Whether a trial is available.
                trial_days:
                  type: integer
                  description: Number of trial days.
                trial_amount:
                  type: string
                  description: Trial amount.
                limit_cycles:
                  type: boolean
                  description: Limit the number of billing cycles.
                limit_cycles_num:
                  type: integer
                  description: Number of billing cycles.
                limit_cycles_action:
                  type: string
                  description: Action taken after the cycles complete.
                access_url:
                  type: string
                  description: Custom access URL.
                thank_you_page_enabled:
                  type: boolean
                  description: Enable a custom thank-you page.
                thank_you_page_type:
                  type: string
                  description: Thank-you page type.
                custom_thank_you_page_id:
                  type: integer
                  description: Thank-you page ID.
                register_price_action:
                  type: string
                  description: Register price display option.
                thank_you_message:
                  type: string
                  description: Custom thank-you message.
                custom_login_urls_enabled:
                  type: boolean
                  description: Enable custom login URLs.
                custom_login_urls_default:
                  type: string
                  description: Default login URL.
                custom_login_urls_expires:
                  type: string
                  description: Login URL for expired users.
                is_highlighted:
                  type: boolean
                  description: Highlight this membership in the pricing table.
                group_id:
                  type: integer
                  description: Group ID, when the membership belongs to a group.
    delete:
      operationId: deleteMembership
      tags:
      - Memberships
      summary: Delete membership
      description: Deletes a membership.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Membership ID.
        schema:
          type: integer
  /membership_options:
    get:
      operationId: getMembershipOptions
      tags:
      - Memberships
      summary: Get membership options
      description: Returns the available options for memberships (period types and similar).
      responses:
        '200': *id001
        '401': *id002
      x-availability: MemberPress documents this endpoint as not available in all installations. See the
        'Missing Endpoints and Alternatives' section of the provider README.
  /memberships/{id}/member_options:
    get:
      operationId: getMembershipMemberOptions
      tags:
      - Memberships
      summary: Get membership member options
      description: Returns member-related options specific to a membership.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Membership ID.
        schema:
          type: integer
      x-availability: MemberPress documents this endpoint as not available in all installations. See the
        'Missing Endpoints and Alternatives' section of the provider README.
  /transactions:
    get:
      operationId: listTransactions
      tags:
      - Transactions
      summary: List transactions
      description: Lists all transactions.
      responses:
        '200': *id003
        '401': *id002
      parameters:
      - name: page
        in: query
        required: false
        description: Page number.
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        required: false
        description: Items per page.
        schema:
          type: integer
          default: 10
      - name: search
        in: query
        required: false
        description: General search term.
        schema:
          type: string
      - name: orderby
        in: query
        required: false
        description: Field to order results by.
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: Sort direction (ASC or DESC).
        schema:
          type: string
      - name: search[id]
        in: query
        required: false
        description: Search by transaction ID.
        schema:
          type: string
      - name: search[member]
        in: query
        required: false
        description: Search by member ID.
        schema:
          type: string
      - name: search[membership]
        in: query
        required: false
        description: Search by membership ID.
        schema:
          type: string
      - name: search[subscription]
        in: query
        required: false
        description: Search by subscription ID.
        schema:
          type: string
      - name: search[status]
        in: query
        required: false
        description: Search by status.
        schema:
          type: string
    post:
      operationId: createTransaction
      tags:
      - Transactions
      summary: Create transaction
      description: Creates a new transaction. `member` and `membership` are required.
      responses:
        '200': *id001
        '401': *id002
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                member:
                  type: integer
                  description: Member ID.
                membership:
                  type: integer
                  description: Membership ID.
                amount:
                  type: string
                  description: Transaction amount.
                tax_amount:
                  type: string
                  description: Tax amount.
                tax_rate:
                  type: string
                  description: Tax rate.
                status:
                  type: string
                  description: Transaction status.
                gateway:
                  type: string
                  description: Payment gateway.
                subscription:
                  type: integer
                  description: Subscription ID, when part of a subscription.
                created_at:
                  type: string
                  description: Creation date.
                expires_at:
                  type: string
                  description: Expiration date.
                send_welcome_email:
                  type: boolean
                  description: Send the welcome email.
              required:
              - member
              - membership
  /transactions/{id}:
    get:
      operationId: getTransaction
      tags:
      - Transactions
      summary: Get transaction
      description: Gets a specific transaction by ID.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Transaction ID.
        schema:
          type: integer
    put:
      operationId: updateTransaction
      tags:
      - Transactions
      summary: Update transaction
      description: Updates an existing transaction.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Transaction ID.
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                member:
                  type: integer
                  description: Member ID.
                membership:
                  type: integer
                  description: Membership ID.
                amount:
                  type: string
                  description: Transaction amount.
                tax_amount:
                  type: string
                  description: Tax amount.
                tax_rate:
                  type: string
                  description: Tax rate.
                status:
                  type: string
                  description: Transaction status.
                gateway:
                  type: string
                  description: Payment gateway.
                subscription:
                  type: integer
                  description: Subscription ID, when part of a subscription.
                created_at:
                  type: string
                  description: Creation date.
                expires_at:
                  type: string
                  description: Expiration date.
                send_welcome_email:
                  type: boolean
                  description: Send the welcome email.
    delete:
      operationId: deleteTransaction
      tags:
      - Transactions
      summary: Delete transaction
      description: Deletes a transaction.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Transaction ID.
        schema:
          type: integer
  /transactions/{id}/refund:
    post:
      operationId: refundTransaction
      tags:
      - Transactions
      summary: Refund transaction
      description: Refunds a transaction through its payment gateway.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Transaction ID.
        schema:
          type: integer
  /transactions/{id}/refund_and_cancel:
    post:
      operationId: refundTransactionAndCancelSubscription
      tags:
      - Transactions
      summary: Refund transaction and cancel subscription
      description: Refunds a transaction and cancels the subscription associated with it.
      responses:
        '200': *id001
        '401': *id002
      parameters:
      - name: id
        in: path
        required: true
        description: Transaction ID.
        schema:
          type: integer
  /subscriptions:
    get:
      operationId: listSubscriptions
      tags:
      - Subscriptions
      summary: List subscriptions
      description: Lists all subscriptions.
      responses:
        '200': *id003
        '401': *id002
      parameters:
      - name: page
        in: query
        required: false
        description: Page number.
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        required: false
        description: Items per page.
        schema:
          type: integer
          default: 10
      - name: search
        in: query
        required: false
        description: General search term.
        schema:
          type: string
      - name: orderby
        in: query
        required: false
        description: Field to order results by.
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: Sort direction (ASC or DESC).
        schema:
          type: string
      - name: search[id]
        in: query
        required: false
        description: Search by subscription ID.
        schema:
          type: string
      - name: search[member]
        in: query
        required: false
        description: Search by member ID.
        schema:
          type: string
      - name: search[membership]
        in: query
        required: false
        description: Search by membership ID.
        schema:
          type: string
      - name: search[status]
        in: query
        required: false
        description: Search by status.
        schema:
          type: string
    post:
      operationId: createSubscription
      tags:
      - Subscriptions
      summary: Create subscription
      description: Creates a new subscription. `member` and `membership` are required.
      responses:
        '200': *id001
        '401': *id002
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                member:
                  type: integer
                  description: Member ID.
                membership:
                  type: integer
                  description: Membership ID.
                status:
                  type: string
                  description: Subscription status.
                period:
                  type: integer
                  description: Billing period number.
                period_type:
                  type: string
                  description: Billing period unit.
                limit_cycles:
                  type: boolean
                  description: Limit the number of billing cycles.
                limit_cycles_num:
                  type: integer
                  description: Number of billing cycles.
                gateway:
                  type: string
                  description: Payment gateway.
                trial:
                  type: boolean
                  description: Whether a trial applies.
                trial_days:
                  type: integer
                  description: Trial days.
                trial_amount:
                  type: string
                  description: Trial amount.
                created_at:
                  type: string
                  description: Creation date.
              required:
              - member
              - membership
  /subscriptions/{id}:
    get:
      operationId: getSubscription
      tags:
      - Subscriptions
      summary: Get subscription
      description: Gets a specific subscription by ID.
     

# --- truncated at 32 KB (60 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/memberpress/refs/heads/main/openapi/memberpress-developer-tools-openapi.yml