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. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Subscription ID. schema: type: integer put: operationId: updateSubscription tags: - Subscriptions summary: Update subscription description: Updates an existing subscription. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Subscription 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. 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. delete: operationId: deleteSubscription tags: - Subscriptions summary: Delete subscription description: Deletes a subscription. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Subscription ID. schema: type: integer /subscriptions/{id}/cancel: post: operationId: cancelSubscription tags: - Subscriptions summary: Cancel subscription description: Cancels a subscription. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Subscription ID. schema: type: integer /subscriptions/{id}/suspend: post: operationId: suspendSubscription tags: - Subscriptions summary: Suspend subscription description: Suspends (pauses) a subscription. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Subscription ID. schema: type: integer /subscriptions/{id}/resume: post: operationId: resumeSubscription tags: - Subscriptions summary: Resume subscription description: Resumes a suspended subscription. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Subscription ID. schema: type: integer /groups: get: operationId: listGroups tags: - Groups summary: List groups description: Lists all membership groups. 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 post: operationId: createGroup tags: - Groups summary: Create group description: Creates a new group. `title` is required. responses: '200': *id001 '401': *id002 requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: Group name. pricing_page_disabled: type: boolean description: Disable this group on the pricing page. group_theme: type: string description: Theme used to display the group. is_upgrade_path: type: boolean description: Treat the group as an upgrade path. upgrade_path_text: type: string description: Text shown for the upgrade path. pricing_display: type: string description: Pricing display option. page_id: type: integer description: Page ID. url: type: string description: URL of the group page. required: - title /groups/{id}: get: operationId: getGroup tags: - Groups summary: Get group description: Gets a specific group by ID. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Group ID. schema: type: integer put: operationId: updateGroup tags: - Groups summary: Update group description: Updates an existing group. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Group ID. schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: Group name. pricing_page_disabled: type: boolean description: Disable this group on the pricing page. group_theme: type: string description: Theme used to display the group. is_upgrade_path: type: boolean description: Treat the group as an upgrade path. upgrade_path_text: type: string description: Text shown for the upgrade path. pricing_display: type: string description: Pricing display option. page_id: type: integer description: Page ID. url: type: string description: URL of the group page. delete: operationId: deleteGroup tags: - Groups summary: Delete group description: Deletes a group. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Group ID. schema: type: integer /rules: get: operationId: listRules tags: - Rules summary: List rules description: Lists all content access rules. 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 post: operationId: createRule tags: - Rules summary: Create rule description: Creates a new access rule. `title` is required. responses: '200': *id001 '401': *id002 requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: Rule name. rule_type: type: string description: Type of rule. content_type: type: string description: Content type the rule protects. content_id: type: integer description: Content ID. drip_enabled: type: boolean description: Enable content dripping. drip_amount: type: integer description: Drip amount. drip_unit: type: string description: Drip unit. drip_after: type: string description: Event the drip is measured from. drip_after_fixed: type: string description: Fixed date for dripping. expires_enabled: type: boolean description: Enable expiration. expires_amount: type: integer description: Expiration amount. expires_unit: type: string description: Expiration unit. expires_after: type: string description: Event the expiration is measured from. expires_after_fixed: type: string description: Fixed expiration date. unauth_excerpt_type: type: string description: Unauthorized excerpt type. unauth_excerpt_size: type: integer description: Unauthorized excerpt size. unauth_message_type: type: string description: Unauthorized message type. unauth_message: type: string description: Unauthorized message. unauth_login: type: boolean description: Show the login form to unauthorized visitors. memberships: type: array items: type: integer description: IDs of the memberships granted access by this rule. required: - title /rules/{id}: get: operationId: getRule tags: - Rules summary: Get rule description: Gets a specific rule by ID. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Rule ID. schema: type: integer put: operationId: updateRule tags: - Rules summary: Update rule description: Updates an existing rule. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Rule ID. schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: title: type: string description: Rule name. rule_type: type: string description: Type of rule. content_type: type: string description: Content type the rule protects. content_id: type: integer description: Content ID. drip_enabled: type: boolean description: Enable content dripping. drip_amount: type: integer description: Drip amount. drip_unit: type: string description: Drip unit. drip_after: type: string description: Event the drip is measured from. drip_after_fixed: type: string description: Fixed date for dripping. expires_enabled: type: boolean description: Enable expiration. expires_amount: type: integer description: Expiration amount. expires_unit: type: string description: Expiration unit. expires_after: type: string description: Event the expiration is measured from. expires_after_fixed: type: string description: Fixed expiration date. unauth_excerpt_type: type: string description: Unauthorized excerpt type. unauth_excerpt_size: type: integer description: Unauthorized excerpt size. unauth_message_type: type: string description: Unauthorized message type. unauth_message: type: string description: Unauthorized message. unauth_login: type: boolean description: Show the login form to unauthorized visitors. memberships: type: array items: type: integer description: IDs of the memberships granted access by this rule. delete: operationId: deleteRule tags: - Rules summary: Delete rule description: Deletes a rule. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Rule ID. schema: type: integer /coupons: get: operationId: listCoupons tags: - Coupons summary: List coupons description: Lists all coupons. 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 post: operationId: createCoupon tags: - Coupons summary: Create coupon description: Creates a new coupon. `code` is required. responses: '200': *id001 '401': *id002 requestBody: required: true content: application/json: schema: type: object properties: code: type: string description: Coupon code. discount_type: type: string description: Type of discount. discount_amount: type: string description: Discount amount. valid_date: type: string description: Start date. expiration_date: type: string description: Expiration date. usage_amount: type: integer description: Maximum usage count. trial: type: boolean description: Whether the coupon grants a trial. trial_days: type: integer description: Trial days. should_apply_tax: type: boolean description: Apply tax to the discounted amount. memberships: type: array items: type: integer description: IDs of the memberships the coupon applies to. required: - code /coupons/{id}: get: operationId: getCoupon tags: - Coupons summary: Get coupon description: Gets a specific coupon by ID. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Coupon ID. schema: type: integer put: operationId: updateCoupon tags: - Coupons summary: Update coupon description: Updates an existing coupon. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Coupon ID. schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: code: type: string description: Coupon code. discount_type: type: string description: Type of discount. discount_amount: type: string description: Discount amount. valid_date: type: string description: Start date. expiration_date: type: string description: Expiration date. usage_amount: type: integer description: Maximum usage count. trial: type: boolean description: Whether the coupon grants a trial. trial_days: type: integer description: Trial days. should_apply_tax: type: boolean description: Apply tax to the discounted amount. memberships: type: array items: type: integer description: IDs of the memberships the coupon applies to. delete: operationId: deleteCoupon tags: - Coupons summary: Delete coupon description: Deletes a coupon. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Coupon ID. schema: type: integer /reminders: get: operationId: listReminders tags: - Reminders summary: List reminders description: Lists all reminders. 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 post: operationId: createReminder tags: - Reminders summary: Create reminder description: Creates a new reminder. `name` is required. responses: '200': *id001 '401': *id002 requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Reminder name. event: type: string description: Event that triggers the reminder. trigger_length: type: integer description: Trigger timing length. trigger_interval: type: string description: Trigger timing interval. trigger_timing: type: string description: Whether the reminder fires before or after the event. enabled: type: boolean description: Enable or disable the reminder. subject: type: string description: Email subject. body: type: string description: Email body. use_template: type: boolean description: Use the MemberPress email template. memberships: type: array items: type: integer description: IDs of the memberships the reminder applies to. required: - name /reminders/{id}: get: operationId: getReminder tags: - Reminders summary: Get reminder description: Gets a specific reminder by ID. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Reminder ID. schema: type: integer put: operationId: updateReminder tags: - Reminders summary: Update reminder description: Updates an existing reminder. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Reminder ID. schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: Reminder name. event: type: string description: Event that triggers the reminder. trigger_length: type: integer description: Trigger timing length. trigger_interval: type: string description: Trigger timing interval. trigger_timing: type: string description: Whether the reminder fires before or after the event. enabled: type: boolean description: Enable or disable the reminder. subject: type: string description: Email subject. body: type: string description: Email body. use_template: type: boolean description: Use the MemberPress email template. memberships: type: array items: type: integer description: IDs of the memberships the reminder applies to. delete: operationId: deleteReminder tags: - Reminders summary: Delete reminder description: Deletes a reminder. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Reminder ID. schema: type: integer /events: get: operationId: listEvents tags: - Events summary: List events description: Lists MemberPress events recorded on the site. 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[event] in: query required: false description: Search by event type. schema: type: string /webhooks/subscribe: post: operationId: subscribeWebhook tags: - Webhooks summary: Subscribe to events description: Subscribes a callback URL to one MemberPress event type, or to all of them. responses: '200': *id001 '401': *id002 requestBody: required: true content: application/json: schema: type: object required: - url - event properties: url: type: string format: uri description: Callback URL that receives the event notification. event: type: string description: Event type to subscribe to, or `all` for every event. /webhooks/unsubscribe/{id}: delete: operationId: unsubscribeWebhook tags: - Webhooks summary: Unsubscribe from events description: Removes a webhook subscription. responses: '200': *id001 '401': *id002 parameters: - name: id in: path required: true description: Webhook subscription ID. schema: type: integer components: securitySchemes: MemberPressApiKey: type: apiKey in: header name: MEMBERPRESS-API-KEY description: Developer Tools API key, as documented at https://memberpress.com/docs/overview-of-using-the-developer-tools/ AuthorizationApiKey: type: apiKey in: header name: Authorization description: The same Developer Tools API key sent in the `Authorization` header, as used by the MemberPress REST API documentation repository and its Postman collection. Note this is a bare key, not an RFC 7235 `Bearer ` credential. schemas: Error: type: object description: 'MemberPress returns WordPress REST API errors. The documented success envelope is `{"success": true, "data": {...}}`; WordPress core errors carry `code`, `message` and `data.status`.' properties: code: type: string description: WordPress error code slug. message: type: string description: Human-readable error message. data: type: object properties: status: type: integer description: HTTP status code.