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.
subscription_types — DB table: subscription_typesHow a Plan Record Is Assembled
A membership plan is stored in two places, and the API returns both merged into a single flat object:
- Stored plan columns — the 58 columns of the
subscription_typestable. These are listed in the table below and are identical on every site. - 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_metatable (database=subscription_types,database_id= the plan'ssubscription_id) and merged into the same response object.
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.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.
| Field | Type | Description |
|---|---|---|
subscription_id | integer | Unique plan ID (primary key, read-only) |
subscription_name | string | Display name for this membership plan required on create |
subscription_type | string | Plan category; typically member for paid/free plans required on create |
monthly_amount | decimal | Monthly billing price (EG 19.99); null if not offered |
yearly_amount | decimal | Annual billing price; null if not offered |
profile_type | string | Profile classification; common values: paid, free, claim required on create |
profile_photo | integer | Legacy — 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_limit | integer | Not 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_limit | integer | Number of custom style options available to members |
service_limit | string | Maximum number of services/items members can list; 0 for unlimited |
website_link | integer | Whether members can display a website link: 1 yes, 0 no |
social_link | integer | Whether members can display social media links: 1 yes, 0 no |
seal_link | integer | Whether 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_about | integer | Whether 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_experience | integer | Whether 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_education | integer | Whether 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_background | integer | Whether 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_affiliations | integer | Whether 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_publications | integer | Whether 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_awards | integer | Whether 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_slogan | integer | Whether 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_sofware | integer | Whether 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_active | integer | Whether this plan is active and available for signup: 1 active, 0 inactive |
lead_price | decimal | Price charged per lead delivered to members on this plan; null to disable lead pricing |
location_limit | string | Maximum number of service area locations; 0 for unlimited |
show_phone | integer | Whether the phone number is displayed on the profile: 1 yes, 0 no |
index_rule | integer | Search engine indexing rule for member profiles on this plan |
nofollow_links | integer | Whether outbound links from member profiles use nofollow: 1 yes, 0 no |
payment_default | string | Default billing cycle pre-selected at checkout; typically yearly or monthly |
menu_name | string | Label used for this plan in navigation menus; blank uses subscription_name |
profile_layout | string | Profile page layout template ID for members on this plan |
searchable | integer | Whether members on this plan appear in directory search results: 1 yes, 0 no |
search_priority | integer | Sort order priority in search results; lower numbers appear first |
about_form | string | Form slug used for the About/bio section of the member profile |
listing_details_form | string | Form slug used for the Listing Details section of the member profile |
contact_details_form | string | Form slug used for the Contact Details section of the member profile |
receive_messages | integer | Maximum number of messages members can receive; 0 for unlimited |
location_settings | string | Comma-separated location granularity options available to members (EG State,County,City,Zip) |
data_settings | string | Comma-separated list of post type IDs available to members on this plan |
data_settings_read | string | Comma-separated list of post type IDs members can read (view) on this plan |
login_redirect | string | URL path members are redirected to after login (EG /account/home) |
initial_amount | decimal | One-time setup or initiation fee charged at signup; null if not applicable |
page_header | string | Widget name or ID to render as the page header on member profile pages |
page_footer | string | Widget name or ID to render as the page footer on member profile pages |
display_ads | integer | Whether ads are displayed on member profile pages: 1 yes, 0 no |
category_badge | string | Badge label displayed in category/search listings for members on this plan |
profile_badge | string | Badge label displayed on the member profile page for this plan |
subscription_filename | string | Image filename associated with this plan (EG a plan icon or badge graphic) |
signup_sidebar | string | Widget name displayed in the sidebar during the signup flow for this plan |
profile_sidebar | string | Widget name displayed in the sidebar on member profile pages |
signup_email_template | string | Email template slug sent to new members when they sign up for this plan |
upgrade_email_template | string | Email template slug sent to members when they upgrade to this plan |
email_member | integer | Whether 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_widget | string | Widget name or ID displayed as a promotion during signup for this plan |
revision_timestamp | timestamp | Timestamp of the last modification to this plan record (auto-managed) |
search_membership_permissions | string | Comma-separated list of membership types that can view members on this plan in search results |
upgradable_membership | string | Comma-separated list of plan IDs members can upgrade to from this plan |
hide_specialties | integer | Whether 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.
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
| Field | Type | Description |
|---|---|---|
show_profile_photo | integer | Whether 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_upload | integer | Whether members on this plan may upload a logo. Enforced on upload alongside show_profile_photo. |
coverPhoto | integer | Whether 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_map | integer | Whether the location map is shown on member profiles |
profile_statistics | integer | Whether profile view statistics are available to members |
profile_connection_banner_position | string | Placement of the profile connection banner (EG below_profile_photo) |
show_about_tab | integer | Whether the About tab is shown on the profile |
show_contact_detail | integer | Whether the Contact Details tab is shown on the profile |
show_listing_details | integer | Whether the Listing Details tab is shown on the profile |
show_breadcrumbs | integer | Whether breadcrumb navigation is shown on member pages |
about_order | integer | Display order of the About section on the profile |
contact_details_order | integer | Display order of the Contact Details section |
listing_details_order | integer | Display order of the Listing Details section |
location_map_order | integer | Display order of the location map section |
user_quote_order | integer | Display order of the member quote section |
list_services_areas_order | integer | Display order of the services and service-areas section |
membership_restriction | integer | Which 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 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.| Field | Shape | Description |
|---|---|---|
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> | string | Approval workflow for that post type, one key per post type (EG post_approval_data6). Observed value: default. |
data_favorite_read | string | Comma-separated list of post type IDs a member on this plan may add to favourites |
Example
"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.
| Field | Type | Description |
|---|---|---|
quarterly_amount | decimal | Quarterly billing price |
semiyearly_amount | decimal | Six-monthly billing price |
biennially_amount | decimal | Two-yearly billing price |
triennially_amount | decimal | Three-yearly billing price |
hide_monthly_amount | integer | Whether the monthly price is hidden at checkout |
hide_quarterly_amount | integer | Whether the quarterly price is hidden at checkout |
hide_semiyearly_amount | integer | Whether the six-monthly price is hidden at checkout |
hide_yearly_amount | integer | Whether the yearly price is hidden at checkout |
hide_biennially_amount | integer | Whether the two-yearly price is hidden at checkout |
hide_triennially_amount | integer | Whether the three-yearly price is hidden at checkout |
hide_initial_amount | integer | Whether the one-time setup fee is hidden at checkout |
custom_checkout_url | string | Custom checkout destination for this plan |
Signup and Upgrade
| Field | Type | Description |
|---|---|---|
auto_activate | string | Member status immediately after signup. Observed values: active, hold_req_admin, inactive. |
status_after_upgrade | string | Member status after upgrading to this plan. Observed values: keep, hold_req_admin. |
disallow_signups | integer | Whether new signups to this plan are blocked |
signup_redirect | string | URL path a member lands on after signing up (EG /account/home) |
signup_form | string | Form slug used for the signup flow on this plan (EG signup_free) |
signup_email_admin | integer | Whether the site admin is emailed on signup |
upgrade_email_admin | integer | Whether the site admin is emailed on upgrade |
show_order_summary_signup | integer | Whether the order summary is shown during signup |
show_order_summary_upgrade | integer | Whether the order summary is shown during upgrade |
show_promo_code_signup | string | Promo code field placement during signup (EG left) |
show_promo_code_upgrade | string | Promo code field placement during upgrade |
enable_free_trial | integer | Whether a free trial is offered on this plan |
enable_free_trial_options | string | Free trial variant (EG free_trial_option_no_cc for no card required) |
enable_free_trial_period | integer | Free trial length in days |
claim_link_join_page | string | Destination of the claim-listing join link (EG /join) |
listing_type | string | Listing classification for this plan (EG Individual) |
show_fb_login_btn | integer | Whether the Facebook login button is shown |
show_google_login_btn | integer | Whether the Google login button is shown |
conversion_tracking_code | string | Widget name holding conversion tracking markup fired on signup |
promote_feature_verify | integer | Whether the verification feature is promoted to members on this plan |
Member Dashboard
| Field | Type | Description |
|---|---|---|
show_dashboard_steps | integer | Whether the getting-started steps are shown on the member dashboard |
show_dashboard_progress_bar | integer | Whether the profile completion progress bar is shown |
show_dashboard_manage_listing | integer | Whether the Manage Listing panel is shown |
show_dashboard_account_details | integer | Whether the Account Details panel is shown |
show_dashboard_qr_code | integer | Whether the profile QR code is shown |
show_dashboard_member_badge | integer | Whether the member badge is shown |
show_dashboard_transaction_history | integer | Whether transaction history is shown |
show_add_content | integer | Whether the Add Content control is shown |
show_business_toolkit | integer | Whether the business toolkit is shown |
show_subaccounts_tab | integer | Whether the sub-accounts tab is shown |
hide_parent_accounts | integer | Whether parent accounts are hidden from sub-account holders |
delete_sub_accounts | integer | Whether members may delete their own sub-accounts |
hide_billing_links | integer | Whether billing links are hidden from the dashboard |
hide_notifications | integer | Whether dashboard notifications are hidden |
display_ads_dashboard | integer | Whether ads are displayed on the member dashboard |
user_dashboard_header_widget | string | Widget rendered at the top of the member dashboard |
user_dashboard_footer_widget | string | Widget rendered at the bottom of the member dashboard |
membership_dashboard_header_content | string | Raw HTML rendered in the dashboard header for this plan |
Reviews, Messaging and Engagement
| Field | Type | Description |
|---|---|---|
reviews_enabled | integer | Whether members on this plan can receive reviews |
accept_delete_reviews | integer | Whether members may accept or delete reviews on their profile |
admin_accept_delete_reviews | integer | Whether review accept/delete is restricted to the site admin |
hide_reviews_rating_options | integer | Whether the detailed rating options are hidden on the review form |
reply_visitor_review | integer | Whether members may reply to visitor reviews |
allow_review_images | integer | Whether images may be attached to reviews |
enable_direct_messages | integer | Whether direct messaging is enabled for this plan |
enable_sending_chat_messages | integer | Whether members may send chat messages |
enable_receiving_chat_messages | integer | Whether members may receive chat messages |
chat_perms_migrated | integer | Internal marker recording that chat permissions were migrated to the two fields above |
enable_click_Call | integer | Whether click-to-call is enabled. Note the capital C in the stored key name. |
enable_post_feed | integer | Whether the post feed is enabled for this plan |
fav_button | integer | Whether the favourite button is shown on profiles |
Credits and Referrals
| Field | Type | Description |
|---|---|---|
enable_credits | integer | Whether the credits system is enabled for this plan |
enable_credits_signup | decimal | Credits granted on signup |
enable_credits_upgrade | decimal | Credits granted on upgrade |
enable_credits_referrals | integer | Whether referral credits are enabled |
enable_credits_referrals_amount | decimal | Credits granted per successful referral |
referral_credits | decimal | Referral credit balance setting for this plan |
Content Tools
| Field | Type | Description |
|---|---|---|
enable_chatgpt | integer | AI writing assistant availability for members on this plan |
free_stock_images | integer | Whether free stock image search is available |
stock_libraries | string | Comma-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:
| Field | Type | Description |
|---|---|---|
<plan_id>_member_results_highlight | integer | Whether highlighting is enabled |
<plan_id>_highlight_border_color | string | Border colour (hex, may carry surrounding whitespace) |
<plan_id>_highlight_border_width | integer | Border width in pixels |
<plan_id>_highlight_border_radius | integer | Border corner radius in pixels |
<plan_id>_highlight_text_color | string | Badge text colour (hex) |
<plan_id>_highlight_text_message | string | Badge text (EG Featured) |
<plan_id>_highlight_text_position | integer | Badge position |
<plan_id>_highlight_font_size | integer | Badge font size in pixels |
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.
| Key | Why 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, myid | Row identifiers carried by the admin form. Use subscription_id for the plan ID; these are not reliable substitutes. |
noheader, fromcron, adminLoadAjaxData | Admin request-routing flags |
tablesExists | Internal 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
Example Request
curl -X GET "https://www.yourdomain.com/api/v2/subscription_types/get?limit=25" \ -H "X-Api-Key: your-api-key-here"
Example Response
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.
{
"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
Example Request
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.
{
"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
Example Request
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
{
"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
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.
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
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
{
"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
Example Request
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
{
"status": "success",
"message": "subscription_types record was deleted"
}