On this page

المستشارين — people members can book, each with a link out (linkUrl).

Plan: every route needs the consultants feature (403 FEATURE_NOT_AVAILABLE).

Who reads what: GET / accepts an optional token.

  • approved member → every ACTIVE consultant;
  • guest or signed-in non-member → only consultants with isGuestVisible: true, and only when the community exposes consultants to guests; otherwise an empty page. A token alone is not membership. createdBy and the creator's email are removed for guests.
  • deactivated consultants (isActive: false) are visible only to consultants:manage — on the list (?isActive=false is ignored for anyone else) and on GET /{id} (404).

Who writes: consultants:manage only, and not while restricted from media or suspended (403 RESTRICTION_BLOCKED). Uploads count against the storage quota. communityId in the body is optional; if sent it must equal the path's (400 COMMUNITY_MISMATCH).

6 endpoints.

MethodPathSummary
GET/api/communities/{communityId}/consultantsList consultants
POST/api/communities/{communityId}/consultantsCreate a consultant (consultants:manage)
DELETE/api/communities/{communityId}/consultants/{id}Delete a consultant (consultants:manage)
GET/api/communities/{communityId}/consultants/{id}One consultant (members)
PUT/api/communities/{communityId}/consultants/{id}Edit a consultant (consultants:manage)
POST/api/communities/{communityId}/consultants/reorderSet the display order (consultants:manage)

Auth: optional — a token changes what you can see (see "Who may read what").

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
pagequerynointeger—
limitquerynointeger—
searchquerynostring—
statusquerynoConsultantStatus—
typeIdsquerynostringComma-separated or JSON array
isActivequerynobooleanManagers only; ignored for everyone else

Responses

StatusDescriptionBody
200A page (empty for a non-member of a private community)object

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—

Request body (required) — multipart/form-data

Type: ConsultantWriteForm

Responses

StatusDescriptionBody
201data is the Consultant—
400name or linkUrl missing, invalid image, COMMUNITY_MISMATCH—
403Missing permission, RESTRICTION_BLOCKED, FEATURE_NOT_AVAILABLE, or storage quota exceeded—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
idpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Deleted—
404Not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
idpathyesstring (uuid)—

Responses

StatusDescriptionBody
200data is the Consultant—
404Missing—

Send only the fields to change. Also accepts isActive, sortOrder, and removeIcon / removeBanner = 'true'. Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
idpathyesstring (uuid)—

Request body — multipart/form-data

Type: ConsultantWriteForm

Responses

StatusDescriptionBody
200data is the Consultant—
400Validation error or COMMUNITY_MISMATCH—
404Not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—

Request body (required) — application/json

FieldTypeRequiredDescription
consultantIdsstring (uuid)[]yesIn the new order

Responses

StatusDescriptionBody
200Reordered—