Skip to main content

Plan

Stored in the plans collection. createdAt and updatedAt are maintained automatically.

Returned by GET /plans, GET /plans/:id.

Example​

One real Plan as returned by GET /plans, taken from the data array. Recorded from a live response, so the defaults, denormalised snapshots and populated fields are the actual ones:

{
"_id": "6a92bf047e50e22b4b82953e",
"name": "Free",
"description": "Starter free plan for basic CRM usage.",
"billingType": "free",
"countries": [],
"maxUsersAllowed": -1,
"features": [
{
"quantity": -1,
"feature": {
"_id": "6a92bda6ebbc3b463dbbec83",
"name": "Contact",
"status": "active"
},
"billingCycleQuantities": [],
"addOnPricing": [],
"fieldThreshold": 4
},
{
"quantity": -1,
"feature": {
"_id": "6a92bda6ebbc3b463dbbec84",
"name": "Lead",
"status": "active"
},
"billingCycleQuantities": [],
"addOnPricing": [],
"fieldThreshold": 4
},
"…and 12 more"
],
"enableTrial": false,
"enableAllowExtraDuration": false,
"isRecommended": false,
"status": "active",
"createdBy": {},
"updatedBy": {},
"billingCycles": [],
"__v": 1,
"createdAt": "2026-08-29T11:14:12.763Z",
"updatedAt": "2026-08-29T11:14:36.356Z",
"freePlanAlreadyUsed": true
}

:::note Trimmed for reading A populated reference is shown by the fields that identify it rather than in full — it arrives as the entire referenced document. Long arrays are cut to the first two entries and marked, long strings are truncated, and any field that could carry a credential is dropped rather than masked. :::

Fields​

FieldTypeNotes
namestringrequired
descriptionstring
billingTypestringrequired · one of free, paid
currencystring
countriesstring[]default []
billingCyclesobject[]default []
billingCycles.typestringrequired · one of Monthly, Quarterly, Half Yearly, Yearly
billingCycles.pricenumberrequired
billingCycles.enableSalePricebooleandefault false
billingCycles.salePricenumber
billingCycles.saleDurationTypestringdefault noDate · one of noDate, custom
billingCycles.saleStartDatedate
billingCycles.saleEndDatedate
billingCycles._idObjectId
maxUsersAllowednumberrequired
featuresobject[]default []
features.featureObjectId -> Featurerequired
features.quantitynumber
features.billingCycleQuantitiesobject[]default []
features.billingCycleQuantities.billingCyclestringrequired · one of Monthly, Quarterly, Half Yearly, Yearly
features.billingCycleQuantities.quantitynumber
features.addOnPricingobject[]default []
features.addOnPricing.modestringrequired · one of billing_cycle, custom_duration, one_time
features.addOnPricing.pricenumberdefault 0
features.addOnPricing.durationUnitstringdefault null · one of day, month, billing_cycle, null
features.addOnPricing.defaultDurationValuenumberdefault null
features.fieldThresholdnumberdefault 4
enableTrialbooleandefault false
trialDurationTypestringone of 30, 60, 90, custom
trialDurationCustomnumber
enableAllowExtraDurationbooleandefault false
allowExtraDurationTypestringone of 30, 60, 90, custom
extraDurationCustomnumber
isRecommendedbooleandefault false
statusstringdefault inactive · one of active, inactive
companyObjectId -> Company
createdByObjectId -> Member
updatedByObjectId -> Member
_idObjectId
createdAtdateset once
updatedAtdate