The organizations module manages organization entities post-onboarding: organization listing (MORIA only), reference data (sizes and industries), per-organization detail, and organization profile updates. All endpoints require Bearer + the read-organization / update-organization permissions.
Property Value Base URL {HOST}/v1Auth Bearer JWT (header Authorization) or cookie access_token Content-Type application/jsonError envelope { "message": string | string[], "statusCode": number, "error": string }Validation Global ValidationPipe · whitelist: true, forbidNonWhitelisted: true · unknown field → 400 Related modules onboarding, users, acl, accounts Document version v1 · 2026-05-20 Audience Internal FE devs (mobile + web)
The full organization list is visible only to the MORIA role. Reference endpoints (sizes, industries) are used by FE to populate dropdown pickers in organization create/edit forms. Per-organization detail is accessible to anyone with read-organization, while update is only allowed for one’s own organization (unless the user is moria_super_admin).
Method Path Auth Summary GET /v1/organizationsbearer List organizations (MORIA only) GET /v1/organizations/sizesbearer Reference data for organization sizes GET /v1/organizations/industriesbearer Reference data for industry sectors GET /v1/organizations/:organization_idbearer Detail of one organization PATCH /v1/organizations/:organization_idbearer Update organization profile
Auth notes
GET /organizations is only for UserType.MORIA. Other roles → 403.
For PATCH /:organization_id, non-moria_super_admin users can only edit their own organization — if organization_id differs, the server returns 401.
The organization signup endpoint (POST /organizations/signup) is documented in the Onboarding module.
Fetch the organization list (paginated). For UserType.MORIA only, with the read-organization permission.
bearer
MORIA
read-organization
RESOURCE_FETCHED
Param Type Default Notes pagenumber 1Page number limitnumber 10Records per page order'asc' | 'desc'descOrder by created_at
"message" : " Organizations retrieved successfully " ,
"id" : " 660e8400-e29b-41d4-a716-446655440111 " ,
"email" : " ops@moriafund.com " ,
"phone_number" : " +628123456788 " ,
"official_registration_number" : " 0123456789 " ,
"created_at" : " 2026-05-20T08:30:00.000Z " ,
"updated_at" : " 2026-05-20T08:30:00.000Z "
Status When it occurs 401 UnauthorizedInvalid Bearer/cookie 403 ForbiddenNot MORIA or missing read-organization permission
Reference data for organization sizes (e.g. tens, hundreds, thousands, millions). Used for FE dropdowns.
bearer
MORIA, ORGANIZATION
read-organization
Param Type Default Notes pagenumber 1Page number limitnumber 10Records per page order'asc' | 'desc'descOrder by created_at
"message" : " Organization sizes retrieved successfully " ,
{ "id" : " ... " , "label" : " tens " , "range" : " 1-10 " }
Status When it occurs 401 UnauthorizedInvalid Bearer/cookie 403 ForbiddenPermission mismatch
Reference data for industry sectors (e.g. finance, health, technnology, government, ngo). Used for FE dropdowns.
bearer
MORIA, ORGANIZATION
read-organization
Param Type Default Notes pagenumber 1Page number limitnumber 10Records per page order'asc' | 'desc'descOrder by created_at
"message" : " Organization industries retrieved successfully " ,
{ "id" : " ... " , "value" : " finance " , "label" : " Finance " }
The enum value INDUSTRY.TECHNOLOGY is recorded as "technnology" (typo retained for mobile client compatibility). See the enum reference below.
Status When it occurs 401 UnauthorizedInvalid Bearer/cookie 403 ForbiddenPermission mismatch
Detail of one organization by UUID. The server validates read permission + the caller’s organization scope.
bearer
read-organization
Param Type Notes organization_idUUID Organization ID (must be UUID, validated via ParseUUIDPipe)
"message" : " organization fetched successfully " ,
"id" : " 660e8400-e29b-41d4-a716-446655440111 " ,
"email" : " ops@moriafund.com " ,
"phone_number" : " +628123456788 " ,
"official_registration_number" : " 0123456789 " ,
"created_at" : " 2026-05-20T08:30:00.000Z " ,
"updated_at" : " 2026-05-20T08:30:00.000Z "
Status When it occurs 400 Bad Requestorganization_id is not a UUID401 UnauthorizedInvalid Bearer/cookie 403 ForbiddenPermission mismatch 404 Not FoundOrganization not found
Update an organization profile. Only moria_super_admin may edit other organizations; other organization users may only edit their own organization.
bearer
update-organization
Param Type Notes organization_idUUID Target organization ID
Field Type Required Notes namestring optional Organization name logo_idstring optional Logo file UUID (see file-manager module) emailstring optional Organization contact email phone_numberstring optional Contact phone official_registration_numberstring optional Official registration number statusenum ORGANIZATION_STATUS optional pending, active, inactive, suspended
"name" : " Moria Fund Pro " ,
"email" : " contact@moriafund.com " ,
"message" : " Organization updated successfully " ,
"id" : " 660e8400-e29b-41d4-a716-446655440111 " ,
"name" : " Moria Fund Pro " ,
"email" : " contact@moriafund.com " ,
"phone_number" : " +628123456788 " ,
"updated_at" : " 2026-05-20T09:00:00.000Z "
Status When it occurs 400 Bad RequestValidation failed (invalid enum, unknown field) 401 UnauthorizedNon-moria_super_admin user attempts to edit another organization 403 ForbiddenMissing update-organization permission 404 Not FoundOrganization not found
pending — just signed up, awaiting KYB verification
active — fully operational
inactive — temporarily deactivated
suspended — suspended by Moria
finance, health, agriculture, education
technnology (typo retained)
manufacturing, marine, aviation, security
government, ngo
tens, hundreds, thousands, millions
"message" : " you can't edit another organization " ,
message can be a string or an array of strings (multi-field validation errors).
400 body/param validation
401 no cross-org access
403 role/permission mismatch
404 organization not found
500 internal — show a generic toast in FE