On this page

طلبات المشاريع ٢ — any approved member may PROPOSE a project; a manager decides. Approving creates the project, owned by the requester.

Two gates, two bodies (both 403): the community's page switch (settings.pageVisibility.projects2, off by default) → FEATURE_DISABLED; the plan lacks projects2 → FEATURE_NOT_AVAILABLE. Every route needs both.

  • submit, and read/count your own: any approved member (not restricted from media — 403 RESTRICTION_BLOCKED); uploads count against the storage quota.
  • list, pending count, approve, reject: projects2:manage or projects2:moderate.
  • GET /{requestId}: the requester, or a manager.
  • a request is decided ONCE. Approving or rejecting a request that is no longer PENDING — including two reviewers at the same moment — answers 409 PROJECT_REQUEST_NOT_PENDING; exactly one project is ever created.

8 endpoints.

MethodPathSummary
GET/api/communities/{communityId}/projects2/requestsList requests (managers)
POST/api/communities/{communityId}/projects2/requestsSubmit a project request
GET/api/communities/{communityId}/projects2/requests/{requestId}One request (the requester, or a manager)
POST/api/communities/{communityId}/projects2/requests/{requestId}/approveApprove — creates the project (managers)
POST/api/communities/{communityId}/projects2/requests/{requestId}/rejectReject with a reason (managers)
GET/api/communities/{communityId}/projects2/requests/count/pendingCount of pending requests (managers)
GET/api/communities/{communityId}/projects2/requests/my-requestsMy requests
GET/api/communities/{communityId}/projects2/requests/my-requests/countCount of my requests

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
statusquerynoenum: PENDING, APPROVED, REJECTED—
pagequerynointeger—
pageSizequerynointeger—

Responses

StatusDescriptionBody
200{ success, data: ProjectRequest[], page, pageSize, total, hasNext }—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—

Request body (required) — multipart/form-data

Type: Project2WriteForm

Responses

StatusDescriptionBody
201Submitted; data is a ProjectRequest in PENDING—
400Validation error or COMMUNITY_MISMATCH—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
requestIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200data is a ProjectRequest—
403Neither the requester nor a manager—
404Not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
requestIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200data: { request, project }—
404Not found—
409PROJECT_REQUEST_NOT_PENDING—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
requestIdpathyesstring (uuid)—

Request body (required) — application/json

FieldTypeRequiredDescription
reasonstringyes—

Responses

StatusDescriptionBody
200data is the rejected ProjectRequest—
400Reason shorter than 10 or longer than 500 characters—
409PROJECT_REQUEST_NOT_PENDING—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200{ success, count }—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
statusquerynoenum: PENDING, APPROVED, REJECTED—
pagequerynointeger—
pageSizequerynointeger—

Responses

StatusDescriptionBody
200Same page shape as the manager list—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200{ success, count }—