Skip to main content

ProductService

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

Returned by GET /product-service, POST /product-service, GET /product-service/:id, PUT /product-service/:id.

Example​

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

{
"_id": "6a957378859eafb47bf227d1",
"name": "Starter plan",
"type": "Service",
"company": "6a9572df859eafb47bf225d7",
"createdBy": {
"_id": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"createdBySnapshot": {
"member": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"updatedBy": {
"_id": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"updatedBySnapshot": {
"member": "6a9572df859eafb47bf225d9",
"name": "Docs Test User",
"email": "test@test.test"
},
"createdAt": "2026-08-31T12:28:40.355Z",
"updatedAt": "2026-08-31T12:28:40.355Z",
"searchText": "starter plan service docs test user test@test.test",
"__v": 0
}

:::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
fieldsobject[]default []
fields._idObjectId -> CustomFieldrequired
fields.valueany
customFieldsMapmapdefault {}
namestringrequired
descriptionstring
typestringrequired · one of Product, Service
categorystringone of Service, Software, Hardware, Negotiation, Subscription, License, Consulting, Maintenance and 5 more
price.currencystring
price.amountnumber
skuNumberstring
imageObjectId -> File
urlstring
companyObjectId -> Companyrequired
createdByObjectId -> Member
createdBySnapshotobject
createdBySnapshot.memberObjectId
createdBySnapshot.namestring
createdBySnapshot.emailstring
updatedByObjectId -> Member
updatedBySnapshotobject
updatedBySnapshot.memberObjectId
updatedBySnapshot.namestring
updatedBySnapshot.emailstring
searchTextstring
_idObjectId
createdAtdateset once
updatedAtdate