API Reference - Membership Plans

Link: https://support.brilliantdirectories.com/support/solutions/articles/12000108102

← Back to API Reference | Getting Started

Membership Plans

Membership Plans define the subscription tiers available on a directory site. Each plan controls pricing, profile capabilities, content limits, display options, and the member experience from signup through active membership.

Model name in URL: subscription_types — DB table: subscription_types

How a Plan Record Is Assembled

A membership plan is stored in two places, and the API returns both merged into a single flat object:

  1. Stored plan columns — the 58 columns of the subscription_types table. These are listed in the table below and are identical on every site.
  2. Plan dashboard settings — everything else configured on the Membership Plan edit screen in the admin area. These are stored as per-plan key/value rows in the users_meta table (database = subscription_types, database_id = the plan's subscription_id) and merged into the same response object.
The response field set is wider than the stored columns, and it differs between sites.
Because the second group is key/value data, a real response typically carries 230 to 260 fields rather than the 58 stored columns alone, and how many depends on which settings exist on that site. Within a single site the field set is uniform: every plan returns the same keys, built from the union of the settings stored across all of that site's plans.

The consequence is that a field being present does not mean it is configured on that plan. A setting a plan has no stored value for comes back as null rather than being omitted, and it is normal for 50 or more fields on a plan to be null. Integrations must read fields by name and treat null as "not set on this plan", rather than assuming a fixed schema, a fixed field order, or that a returned key carries a real value.
Do not use profile_photo or photo_limit to determine image upload permissions.
Both columns predate the current Membership Plan photo settings and neither is kept in sync with them. A plan can have profile photo uploads fully enabled in the admin area while profile_photo still returns 0, and photo_limit is a single gallery-wide count that has no relationship to the per-post-type photo settings on the plan. The fields that reflect the current Membership Plan configuration are show_profile_photo, show_logo_upload, coverPhoto, and data_settings_photo_limit — all four are returned in the same response and are documented under Plan Dashboard Settings.

Stored Plan Columns

These 58 fields are the columns of the subscription_types table. Fields marked Legacy are still returned for backward compatibility but no longer reflect the plan's current configuration.

FieldTypeDescription
subscription_idintegerUnique plan ID (primary key, read-only)
subscription_namestringDisplay name for this membership plan required on create
subscription_typestringPlan category; typically member for paid/free plans required on create
monthly_amountdecimalMonthly billing price (EG 19.99); null if not offered
yearly_amountdecimalAnnual billing price; null if not offered
profile_typestringProfile classification; common values: paid, free, claim required on create
profile_photointegerLegacy — do not use. An old profile-photo flag that is no longer updated when the plan's photo settings change, so its value routinely contradicts the admin area. Read show_profile_photo instead.
photo_limitintegerNot a Membership Plan photo setting. This is an older, single gallery-wide photo cap that is not updated when the plan's photo settings change and does not correspond to any field on the Membership Plan edit screen. It still gates the portfolio gallery upload step, and it is also read by the pre-Bootstrap plan-comparison pricing page, where any value of 1000 or above renders as the word "Unlimited" — which is why plans commonly return the historic sentinel 10000 even though no such number appears anywhere in the admin area. For per-post-type photo limits, read data_settings_photo_limit.
style_limitintegerNumber of custom style options available to members
service_limitstringMaximum number of services/items members can list; 0 for unlimited
website_linkintegerWhether members can display a website link: 1 yes, 0 no
social_linkintegerWhether members can display social media links: 1 yes, 0 no
seal_linkintegerWhether members can display a trust seal/badge link: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_aboutintegerWhether the About section is shown on the profile: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_experienceintegerWhether the Experience section is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_educationintegerWhether the Education section is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_backgroundintegerWhether the Background section is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_affiliationsintegerWhether the Affiliations section is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_publicationsintegerWhether the Publications section is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_awardsintegerWhether the Awards section is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_sloganintegerWhether the Slogan/Tagline field is shown: 1 yes, 0 no. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
show_sofwareintegerWhether the Software/Tools section is shown: 1 yes, 0 no. The misspelling is in the column name itself and is intentional here. Legacy. A pre-Bootstrap profile-section toggle with no effect on the current theme, which builds profile sections from the form slugs (about_form, listing_details_form, contact_details_form) and the tab settings under Plan Dashboard Settings instead.
sub_activeintegerWhether this plan is active and available for signup: 1 active, 0 inactive
lead_pricedecimalPrice charged per lead delivered to members on this plan; null to disable lead pricing
location_limitstringMaximum number of service area locations; 0 for unlimited
show_phoneintegerWhether the phone number is displayed on the profile: 1 yes, 0 no
index_ruleintegerSearch engine indexing rule for member profiles on this plan
nofollow_linksintegerWhether outbound links from member profiles use nofollow: 1 yes, 0 no
payment_defaultstringDefault billing cycle pre-selected at checkout; typically yearly or monthly
menu_namestringLabel used for this plan in navigation menus; blank uses subscription_name
profile_layoutstringProfile page layout template ID for members on this plan
searchableintegerWhether members on this plan appear in directory search results: 1 yes, 0 no
search_priorityintegerSort order priority in search results; lower numbers appear first
about_formstringForm slug used for the About/bio section of the member profile
listing_details_formstringForm slug used for the Listing Details section of the member profile
contact_details_formstringForm slug used for the Contact Details section of the member profile
receive_messagesintegerMaximum number of messages members can receive; 0 for unlimited
location_settingsstringComma-separated location granularity options available to members (EG State,County,City,Zip)
data_settingsstringComma-separated list of post type IDs available to members on this plan
data_settings_readstringComma-separated list of post type IDs members can read (view) on this plan
login_redirectstringURL path members are redirected to after login (EG /account/home)
initial_amountdecimalOne-time setup or initiation fee charged at signup; null if not applicable
page_headerstringWidget name or ID to render as the page header on member profile pages
page_footerstringWidget name or ID to render as the page footer on member profile pages
display_adsintegerWhether ads are displayed on member profile pages: 1 yes, 0 no
category_badgestringBadge label displayed in category/search listings for members on this plan
profile_badgestringBadge label displayed on the member profile page for this plan
subscription_filenamestringImage filename associated with this plan (EG a plan icon or badge graphic)
signup_sidebarstringWidget name displayed in the sidebar during the signup flow for this plan
profile_sidebarstringWidget name displayed in the sidebar on member profile pages
signup_email_templatestringEmail template slug sent to new members when they sign up for this plan
upgrade_email_templatestringEmail template slug sent to members when they upgrade to this plan
email_memberintegerWhether to send the signup confirmation email to the new member: 1 yes, 0 no. Legacy. No code on the platform reads this column; whether the signup email is sent is governed by signup_email_template and the email automation settings.
signup_promotion_widgetstringWidget name or ID displayed as a promotion during signup for this plan
revision_timestamptimestampTimestamp of the last modification to this plan record (auto-managed)
search_membership_permissionsstringComma-separated list of membership types that can view members on this plan in search results
upgradable_membershipstringComma-separated list of plan IDs members can upgrade to from this plan
hide_specialtiesintegerWhether the specialties/skills section is hidden for members on this plan: 1 hidden, 0 visible

Plan Dashboard Settings

The fields below are the settings configured on the Membership Plan edit screen in the admin area. They are stored as per-plan key/value rows rather than table columns, and are merged into the same response object as the stored columns above. Unless noted, boolean settings use 1 for enabled and 0 for disabled, and values are returned as strings.

These are the fields that reflect the current admin configuration.
Where a setting below overlaps an older stored column, the setting below is the one the platform enforces at runtime.

Profile Content and Image Permissions

FieldTypeDescription
show_profile_photointegerWhether members on this plan may upload a profile photo. This is the flag the platform actually enforces on upload, and it supersedes the legacy profile_photo column.
show_logo_uploadintegerWhether members on this plan may upload a logo. Enforced on upload alongside show_profile_photo.
coverPhotointegerWhether members on this plan may upload a cover photo. It gates the cover photo upload control in the member account area and the display of the cover photo on the profile. This setting belongs to the Profile Cover Photo add-on: the control only appears on the Membership Plan screen when that add-on is active, so on a site without it the stored value has no effect. Note the camel-case spelling, which differs from every neighbouring field.
enable_profile_mapintegerWhether the location map is shown on member profiles
profile_statisticsintegerWhether profile view statistics are available to members
profile_connection_banner_positionstringPlacement of the profile connection banner (EG below_profile_photo)
show_about_tabintegerWhether the About tab is shown on the profile
show_contact_detailintegerWhether the Contact Details tab is shown on the profile
show_listing_detailsintegerWhether the Listing Details tab is shown on the profile
show_breadcrumbsintegerWhether breadcrumb navigation is shown on member pages
about_orderintegerDisplay order of the About section on the profile
contact_details_orderintegerDisplay order of the Contact Details section
listing_details_orderintegerDisplay order of the Listing Details section
location_map_orderintegerDisplay order of the location map section
user_quote_orderintegerDisplay order of the member quote section
list_services_areas_orderintegerDisplay order of the services and service-areas section
membership_restrictionintegerWhich profile pages are restricted for this plan

Post Type Limits

These four settings are JSON objects keyed by post type ID (the data_id of the post type, as returned by the Post Types endpoint). They are returned as JSON strings and must be decoded before use.

The keys reflect the site's post types, not the plan's enabled ones.
The admin screen writes an entry for every applicable post type on the site, so two plans on the same site normally carry the same key set, and a plan carries entries for post types it does not currently enable. The list of post types a plan actually grants is the data_settings column, so a limit here only takes effect for a post type that also appears in data_settings.
FieldShapeDescription
data_settings_limit{"<post_type_id>":"<max>"}Maximum number of posts a member on this plan may create, per post type
data_settings_photo_limit{"<post_type_id>":"<max>"}Maximum number of photos per post, per post type, as configured on the Membership Plan edit screen. Only post types built on the Multi-Photo Post template appear here, because they are the only ones that accept multiple photos. The limit is applied by the Photo Albums Limit add-on when a member uploads to an album, so on a site without that add-on the stored value has no effect. This setting is unrelated to the older photo_limit column.
data_post_limitted{"<post_type_id>":{"post_limitted":"0|1"}}Whether the post limit is enforced for that post type. The doubled "t" is in the stored key name.
data_price_limit{"<post_type_id>":{"price":"<decimal>"}}Price charged to a member on this plan to create a post of that type
post_approval_data<post_type_id>stringApproval workflow for that post type, one key per post type (EG post_approval_data6). Observed value: default.
data_favorite_readstringComma-separated list of post type IDs a member on this plan may add to favourites

Example

Copy
"data_settings_limit": "{\"6\":\"0\",\"10\":\"0\",\"7\":\"4\"}",
"data_settings_photo_limit": "{\"6\":\"0\",\"10\":\"0\",\"11\":\"0\",\"12\":\"0\"}",
"data_post_limitted": "{\"6\":{\"post_limitted\":\"1\"},\"7\":{\"post_limitted\":\"0\"}}",
"data_price_limit": "{\"6\":{\"price\":\"1.00\"},\"7\":{\"price\":\"1.00\"}}"

Pricing and Billing Cycles

The monthly_amount, yearly_amount, and initial_amount prices are stored columns. The additional billing cycles, and the per-cycle visibility toggles, are plan settings.

FieldTypeDescription
quarterly_amountdecimalQuarterly billing price
semiyearly_amountdecimalSix-monthly billing price
biennially_amountdecimalTwo-yearly billing price
triennially_amountdecimalThree-yearly billing price
hide_monthly_amountintegerWhether the monthly price is hidden at checkout
hide_quarterly_amountintegerWhether the quarterly price is hidden at checkout
hide_semiyearly_amountintegerWhether the six-monthly price is hidden at checkout
hide_yearly_amountintegerWhether the yearly price is hidden at checkout
hide_biennially_amountintegerWhether the two-yearly price is hidden at checkout
hide_triennially_amountintegerWhether the three-yearly price is hidden at checkout
hide_initial_amountintegerWhether the one-time setup fee is hidden at checkout
custom_checkout_urlstringCustom checkout destination for this plan

Signup and Upgrade

FieldTypeDescription
auto_activatestringMember status immediately after signup. Observed values: active, hold_req_admin, inactive.
status_after_upgradestringMember status after upgrading to this plan. Observed values: keep, hold_req_admin.
disallow_signupsintegerWhether new signups to this plan are blocked
signup_redirectstringURL path a member lands on after signing up (EG /account/home)
signup_formstringForm slug used for the signup flow on this plan (EG signup_free)
signup_email_adminintegerWhether the site admin is emailed on signup
upgrade_email_adminintegerWhether the site admin is emailed on upgrade
show_order_summary_signupintegerWhether the order summary is shown during signup
show_order_summary_upgradeintegerWhether the order summary is shown during upgrade
show_promo_code_signupstringPromo code field placement during signup (EG left)
show_promo_code_upgradestringPromo code field placement during upgrade
enable_free_trialintegerWhether a free trial is offered on this plan
enable_free_trial_optionsstringFree trial variant (EG free_trial_option_no_cc for no card required)
enable_free_trial_periodintegerFree trial length in days
claim_link_join_pagestringDestination of the claim-listing join link (EG /join)
listing_typestringListing classification for this plan (EG Individual)
show_fb_login_btnintegerWhether the Facebook login button is shown
show_google_login_btnintegerWhether the Google login button is shown
conversion_tracking_codestringWidget name holding conversion tracking markup fired on signup
promote_feature_verifyintegerWhether the verification feature is promoted to members on this plan

Member Dashboard

FieldTypeDescription
show_dashboard_stepsintegerWhether the getting-started steps are shown on the member dashboard
show_dashboard_progress_barintegerWhether the profile completion progress bar is shown
show_dashboard_manage_listingintegerWhether the Manage Listing panel is shown
show_dashboard_account_detailsintegerWhether the Account Details panel is shown
show_dashboard_qr_codeintegerWhether the profile QR code is shown
show_dashboard_member_badgeintegerWhether the member badge is shown
show_dashboard_transaction_historyintegerWhether transaction history is shown
show_add_contentintegerWhether the Add Content control is shown
show_business_toolkitintegerWhether the business toolkit is shown
show_subaccounts_tabintegerWhether the sub-accounts tab is shown
hide_parent_accountsintegerWhether parent accounts are hidden from sub-account holders
delete_sub_accountsintegerWhether members may delete their own sub-accounts
hide_billing_linksintegerWhether billing links are hidden from the dashboard
hide_notificationsintegerWhether dashboard notifications are hidden
display_ads_dashboardintegerWhether ads are displayed on the member dashboard
user_dashboard_header_widgetstringWidget rendered at the top of the member dashboard
user_dashboard_footer_widgetstringWidget rendered at the bottom of the member dashboard
membership_dashboard_header_contentstringRaw HTML rendered in the dashboard header for this plan

Reviews, Messaging and Engagement

FieldTypeDescription
reviews_enabledintegerWhether members on this plan can receive reviews
accept_delete_reviewsintegerWhether members may accept or delete reviews on their profile
admin_accept_delete_reviewsintegerWhether review accept/delete is restricted to the site admin
hide_reviews_rating_optionsintegerWhether the detailed rating options are hidden on the review form
reply_visitor_reviewintegerWhether members may reply to visitor reviews
allow_review_imagesintegerWhether images may be attached to reviews
enable_direct_messagesintegerWhether direct messaging is enabled for this plan
enable_sending_chat_messagesintegerWhether members may send chat messages
enable_receiving_chat_messagesintegerWhether members may receive chat messages
chat_perms_migratedintegerInternal marker recording that chat permissions were migrated to the two fields above
enable_click_CallintegerWhether click-to-call is enabled. Note the capital C in the stored key name.
enable_post_feedintegerWhether the post feed is enabled for this plan
fav_buttonintegerWhether the favourite button is shown on profiles

Credits and Referrals

FieldTypeDescription
enable_creditsintegerWhether the credits system is enabled for this plan
enable_credits_signupdecimalCredits granted on signup
enable_credits_upgradedecimalCredits granted on upgrade
enable_credits_referralsintegerWhether referral credits are enabled
enable_credits_referrals_amountdecimalCredits granted per successful referral
referral_creditsdecimalReferral credit balance setting for this plan

Content Tools

FieldTypeDescription
enable_chatgptintegerAI writing assistant availability for members on this plan
free_stock_imagesintegerWhether free stock image search is available
stock_librariesstringComma-separated stock image libraries enabled (EG pexel,pixabay,giphy,unsplash,). A trailing comma is normal.

Search Result Highlighting

Highlighting is configured per plan, and the stored keys are prefixed with the plan ID they apply to — EG 3_highlight_border_color holds the border colour used when highlighting plan 3 in search results. The eight keys in the set are:

FieldTypeDescription
<plan_id>_member_results_highlightintegerWhether highlighting is enabled
<plan_id>_highlight_border_colorstringBorder colour (hex, may carry surrounding whitespace)
<plan_id>_highlight_border_widthintegerBorder width in pixels
<plan_id>_highlight_border_radiusintegerBorder corner radius in pixels
<plan_id>_highlight_text_colorstringBadge text colour (hex)
<plan_id>_highlight_text_messagestringBadge text (EG Featured)
<plan_id>_highlight_text_positionintegerBadge position
<plan_id>_highlight_font_sizeintegerBadge font size in pixels
Every plan's response lists every plan's highlight keys, but only its own carry values.
Because the field set is the union across the site (see the note at the top of this article), a plan's response contains the numbered sets for all of that site's plans. Only the set whose prefix matches that plan's own subscription_id holds real values; the rest are null. Read the set matching the plan ID in question and ignore the others.

An unprefixed copy of the same eight keys — _member_results_highlight, _highlight_border_color, and so on — also appears in the field list. It is never populated for a real plan and should be ignored.

Internal Keys in the Response

Some plans carry stored keys that are not settings at all. They are historic rows left behind by the admin form: the save routine writes any submitted value it does not recognise as a table column into the plan's key/value store, and its exclusion list has grown over time, so control fields captured under earlier versions of that list are still present on older plans. Nothing purges them, and the plan-duplication feature copies a plan's stored keys wholesale, so a cloned plan inherits whatever debris the original carried. These keys carry no configuration meaning and should be filtered out by any integration.

KeyWhy it appears
form, form_name, method, result, save, save_Admin form identifiers and submit-button state (EG form_name is always bootstrap_subscription_types, method is Edit)
id, myidRow identifiers carried by the admin form. Use subscription_id for the plan ID; these are not reliable substitutes.
noheader, fromcron, adminLoadAjaxDataAdmin request-routing flags
tablesExistsInternal availability flag added by the API layer, not a plan setting
pid is not debris.
Where present, pid is the reseller product ID mapped to this plan, and the admin area looks plans up by it. It is deliberately excluded when a plan is duplicated, so a cloned plan does not inherit the original's mapping. It should not be filtered out as an internal key, and it is not a substitute for subscription_id.

List Membership Plans

GET /api/v2/subscription_types/get

Example Request

Copy
curl -X GET "https://www.yourdomain.com/api/v2/subscription_types/get?limit=25" \
  -H "X-Api-Key: your-api-key-here"

Example Response

Abridged.
The example below shows the stored plan columns plus a representative sample of plan dashboard settings. A real response carries every setting configured on the plan, typically 230 to 260 fields in total.
Copy
{
  "status": "success",
  "message": [
    {
      "tablesExists": true,
      "subscription_id": "1",
      "subscription_name": "Gold Member",
      "subscription_type": "member",
      "monthly_amount": "19.99",
      "yearly_amount": "199.99",
      "profile_type": "paid",
      "profile_photo": "1",
      "photo_limit": "10000",
      "style_limit": "5",
      "service_limit": "10",
      "website_link": "1",
      "social_link": "1",
      "seal_link": "1",
      "show_about": "1",
      "show_experience": "1",
      "show_education": "1",
      "show_background": "1",
      "show_affiliations": "1",
      "show_publications": "1",
      "show_awards": "1",
      "show_slogan": "1",
      "show_sofware": "1",
      "sub_active": "1",
      "lead_price": "5.00",
      "location_limit": "10",
      "show_phone": "1",
      "index_rule": "0",
      "nofollow_links": "0",
      "payment_default": "yearly",
      "menu_name": "",
      "profile_layout": "1",
      "searchable": "1",
      "search_priority": "1",
      "about_form": "about",
      "listing_details_form": "member_listing_details",
      "contact_details_form": "member_contact_details",
      "receive_messages": "0",
      "location_settings": "State,County,City,Zip",
      "data_settings": "3,4,2,1,6",
      "data_settings_read": "0",
      "login_redirect": "/account/home",
      "initial_amount": "0.00",
      "page_header": "0",
      "page_footer": "0",
      "display_ads": "0",
      "category_badge": "",
      "profile_badge": "",
      "subscription_filename": null,
      "signup_sidebar": "Paid Signup Sidebar",
      "profile_sidebar": "Member Profile Page",
      "signup_email_template": "welcome-paid-member",
      "upgrade_email_template": "upgrade-response",
      "email_member": "1",
      "signup_promotion_widget": "",
      "revision_timestamp": "2024-06-15 10:30:00",
      "search_membership_permissions": "visitor",
      "upgradable_membership": "",
      "hide_specialties": "0",

      "show_profile_photo": "1",
      "show_logo_upload": "1",
      "coverPhoto": "1",
      "data_settings_photo_limit": "{\"6\":\"0\",\"10\":\"5\"}",
      "data_settings_limit": "{\"6\":\"0\",\"10\":\"0\"}",
      "auto_activate": "active",
      "status_after_upgrade": "keep",
      "reviews_enabled": "1",
      "enable_free_trial": "0",
      "show_dashboard_qr_code": "1",
      "quarterly_amount": "0.00",
      "form_name": "bootstrap_subscription_types",
      "method": "Edit"
    }
  ],
  "total": "3",
  "current_page": 1,
  "total_pages": 1,
  "next_page": ""
}

Retrieve a Membership Plan

GET /api/v2/subscription_types/get/{subscription_id}

Example Request

Copy
curl -X GET "https://www.yourdomain.com/api/v2/subscription_types/get/1" \
  -H "X-Api-Key: your-api-key-here"

Example Response

The single-plan response has the same shape as the list response above: stored plan columns merged with that plan's dashboard settings.

Copy
{
  "status": "success",
  "message": [
    {
      "tablesExists": true,
      "subscription_id": "1",
      "subscription_name": "Gold Member",
      "subscription_type": "member",
      "monthly_amount": "19.99",
      "yearly_amount": "199.99",
      "profile_type": "paid",
      "sub_active": "1",
      "searchable": "1",
      "search_priority": "1",
      "payment_default": "yearly",
      "revision_timestamp": "2024-06-15 10:30:00",
      "show_profile_photo": "1",
      "show_logo_upload": "1",
      "coverPhoto": "1",
      "data_settings_photo_limit": "{\"6\":\"0\",\"10\":\"5\"}"
    }
  ],
  "total": "3",
  "current_page": 1,
  "total_pages": 1
}

Create a Membership Plan

POST /api/v2/subscription_types/create

Example Request

Copy
curl -X POST "https://www.yourdomain.com/api/v2/subscription_types/create" \
  -H "X-Api-Key: your-api-key-here" \
  -d "subscription_name=Silver+Member" \
  -d "subscription_type=member" \
  -d "profile_type=paid" \
  -d "monthly_amount=9.99" \
  -d "yearly_amount=99.99" \
  -d "sub_active=1" \
  -d "searchable=1" \
  -d "search_priority=2" \
  -d "payment_default=yearly"

Example Response

Copy
{
  "status": "success",
  "message": {
    "subscription_id": "4",
    "subscription_name": "Silver Member",
    "subscription_type": "member",
    "monthly_amount": "9.99",
    "yearly_amount": "99.99",
    "profile_type": "paid",
    "profile_photo": null,
    "photo_limit": null,
    "style_limit": null,
    "service_limit": null,
    "website_link": null,
    "social_link": null,
    "seal_link": null,
    "show_about": null,
    "show_experience": null,
    "show_education": null,
    "show_background": null,
    "show_affiliations": null,
    "show_publications": null,
    "show_awards": null,
    "show_slogan": null,
    "show_sofware": null,
    "sub_active": "1",
    "lead_price": null,
    "location_limit": null,
    "show_phone": null,
    "index_rule": null,
    "nofollow_links": null,
    "payment_default": null,
    "menu_name": null,
    "profile_layout": null,
    "searchable": "1",
    "search_priority": "2",
    "about_form": null,
    "listing_details_form": null,
    "contact_details_form": null,
    "receive_messages": null,
    "location_settings": null,
    "data_settings": null,
    "data_settings_read": null,
    "login_redirect": null,
    "initial_amount": null,
    "page_header": null,
    "page_footer": null,
    "display_ads": null,
    "category_badge": null,
    "profile_badge": null,
    "subscription_filename": null,
    "signup_sidebar": null,
    "profile_sidebar": null,
    "signup_email_template": null,
    "upgrade_email_template": null,
    "email_member": null,
    "signup_promotion_widget": null,
    "revision_timestamp": null,
    "search_membership_permissions": null,
    "upgradable_membership": null,
    "hide_specialties": null
  }
}

Update a Membership Plan

PUT /api/v2/subscription_types/update

Both stored plan columns and plan dashboard settings can be updated through this endpoint — a setting such as show_profile_photo is written to the plan's key/value store exactly as a column such as monthly_amount is written to the table.

Unrecognised field names are accepted silently.
A misspelled field name does not produce an error: the endpoint still returns "status": "success", and the value is simply stored as a new key on the plan. Re-read the plan after an update and confirm the intended field actually changed, rather than relying on the success status.

Example Request

Copy
curl -X PUT "https://www.yourdomain.com/api/v2/subscription_types/update" \
  -H "X-Api-Key: your-api-key-here" \
  -d "subscription_id=4" \
  -d "monthly_amount=14.99" \
  -d "yearly_amount=149.99" \
  -d "show_profile_photo=1" \
  -d "show_logo_upload=1"

Example Response

Copy
{
  "status": "success",
  "message": {
    "subscription_id": "4",
    "subscription_name": "Silver Member",
    "subscription_type": "member",
    "monthly_amount": "14.99",
    "yearly_amount": "149.99",
    "profile_type": "paid",
    "sub_active": "1",
    "searchable": "1",
    "search_priority": "2",
    "payment_default": "yearly",
    "show_profile_photo": "1",
    "show_logo_upload": "1",
    "revision_timestamp": "2024-07-01 09:15:00"
  }
}

Delete a Membership Plan

DELETE /api/v2/subscription_types/delete

Example Request

Copy
curl -X DELETE "https://www.yourdomain.com/api/v2/subscription_types/delete" \
  -H "X-Api-Key: your-api-key-here" \
  -d "subscription_id=4"

Example Response

Copy
{
  "status": "success",
  "message": "subscription_types record was deleted"
}