Route mounting map
Atlas endpoints are split across multiple Express routers:| Route Prefix | File | Purpose |
|---|---|---|
/ | orgRoutes.js | General org CRUD operations |
/org-roles | orgRoleRoutes.js | Roles and membership management |
/org-management | orgManagementRoutes.js | Platform admin (config, verification, analytics, finance config & budget queue) |
/org-budgets | orgBudgetRoutes.js | Org-scoped budgets (templates metadata, CRUD, workflow actions, export) |
/org-messages | orgMessageRoutes.js | Org messaging and announcements |
/org-event-management | orgEventManagementRoutes.js | Org-scoped event management |
Common auth behavior
Most endpoints requireverifyToken and depend on cookies (withCredentials: true).
Frontend integration:
useFetchretries after POSTing/refresh-tokenon 401apiRequestalso attempts/refresh-tokenand retries
orgRoutes (mounted at /)
File: Meridian/backend/routes/orgRoutes.js
GET /get-org/:id
- Auth: none
- Behavior:
Org.find({ _id: orgId })(returns array)
GET /get-org-by-name/:name
verifyToken)
Query params:
exhaustive=trueenables extra counters (e.g. eventCount)
overview(org doc, populatedmemberForm)members(OrgMember rows, populateduser_id)followers(OrgFollower rows, populateduser_id)isMember,isFollower,isPending
POST /create-org
image upload (S3)
Side effects:
- creates
Org - creates
OrgMemberwith roleowner - pushes
orgIdintoUser.clubAssociations
org_name,org_descriptionweekly_meetingcustom_roles(JSON string array)
POST /edit-org
- Auth: required; owner-only (compares
org.ownertoreq.user.userId) - Multipart: supports image upload and S3 update
- Supports editing:
org_name,org_description,positions,weekly_meetingrequireApprovalForJoinmemberForm(creates or updatesForm)
POST /:orgId/apply-to-org
GET /get-meetings/:name
- Auth: required
- Fetches the org by
org_name, then returns events where:hostingId: org._id,hostingType: 'Org',type: 'meeting'
GET /:orgId/events
- Auth: required
- Lists upcoming org events (approved / not-applicable), paginated.
orgRoleRoutes (mounted at /org-roles)
File: Meridian/backend/routes/orgRoleRoutes.js
This router is the “authoritative” API for:
- org roles (
Org.positions) - org membership (
OrgMember) - applications (
OrgMemberApplication)
Roles
| Endpoint | Method | Permission Required |
|---|---|---|
/org-roles/:orgId/roles | GET | view_roles |
/org-roles/:orgId/roles | POST | manage_roles |
/org-roles/:orgId/roles | PUT | manage_roles |
/org-roles/:orgId/roles/:roleName | PUT | manage_roles |
/org-roles/:orgId/roles/:roleName | DELETE | manage_roles |
Membership + applications
GET /org-roles/:orgId/members
POST /org-roles/:orgId/members/:userId/role
- Assigns/changes a member’s role
- Pushes the org into
User.clubAssociationsif missing
DELETE /org-roles/:orgId/members/:userId
Permission: manage_members
POST /org-roles/:orgId/applications/:applicationId/approve
Permission: manage_members
Side effect: Turns an application into an active OrgMember
orgManagementRoutes (mounted at /org-management)
File: Meridian/backend/routes/orgManagementRoutes.js
This is the platform-admin surface (intended for admin/root roles).
Verification requests
POST /org-management/verification-requests- requires org membership role
owneroradmin(checked inline) - requires system config
verificationEnabled - validates
verificationTypeagainstOrgManagementConfig.verificationTiers
- requires org membership role
GET /org-management/verification-requests- admin/root can see all
- others see only requests for orgs where they are
owner/admin
PUT /org-management/verification-requests/:requestId- admin/root only
- on approve, updates
Org.verified,Org.verificationType, etc.
Config
GET /org-management/config→ admin/root only- creates a default config document if missing
PUT /org-management/config→ admin/root only- converts nested objects into dot-notation
$setpaths
- converts nested objects into dot-notation
Analytics
GET /org-management/analytics
timeRange:7d,30d, or90d
Orgs list + export
GET /org-management/organizations- admin/root only
- server-side pagination + per-org computed
memberCountandrecentEventCount
GET /org-management/organizations/export?format=json|csv
Finance (CMS Phase 2)
GET /org-management/finance/config—verifyToken+requireAdmin; returnsbudgetTemplatesandworkflowPresetsPUT /org-management/finance/config— admin; replacesbudgetTemplates/workflowPresetswhen sent in bodyGET /org-management/finance/budgets?status=&search=&page=&limit=— admin; cross-org list with optional filtersPUT /org-management/organizations/:orgId/budgets/:budgetId/stages/:stageKey/approve|reject|request-revision— admin; platform_admin workflow stages only
orgBudgetRoutes (mounted at /org-budgets)
File: Meridian/backend/routes/orgBudgetRoutes.js
Business logic: Meridian/backend/services/budgetService.js.
| Method | Path | Permission | |
|---|---|---|---|
| GET | /org-budgets/:orgId/budget-templates | view_finances | |
| GET | /org-budgets/:orgId/budgets | view_finances | |
| GET | /org-budgets/:orgId/budgets/:budgetId | view_finances | |
| POST | /org-budgets/:orgId/budgets | manage_finances | |
| PATCH | /org-budgets/:orgId/budgets/:budgetId | manage_finances | |
| POST | /org-budgets/:orgId/budgets/:budgetId/submit | manage_finances | |
| POST | /org-budgets/:orgId/budgets/:budgetId/comments | manage_finances | |
| PUT | /org-budgets/:orgId/budgets/:budgetId/stages/:stageKey/approve | manage_finances (org_permission stages) | |
| PUT | .../reject, .../request-revision | manage_finances (org_permission stages) | |
| GET | `/org-budgets/:orgId/budgets/:budgetId/export?format=json | csv` | view_finances |
orgMessageRoutes (mounted at /org-messages)
File: Meridian/backend/routes/orgMessageRoutes.js
Endpoints:
POST /org-messages/:orgId/messagesGET /org-messages/:orgId/messagesGET /org-messages/:orgId/messages/:messageIdPOST /org-messages/:orgId/messages/:messageId/likePOST /org-messages/:orgId/messages/:messageId/replyPUT /org-messages/:orgId/messages/:messageIdDELETE /org-messages/:orgId/messages/:messageId
/atlas/messaging for details.
orgEventManagementRoutes (mounted at /org-event-management)
File: Meridian/backend/routes/orgEventManagementRoutes.js
This is an org-scoped “events management” API gated by requireEventManagement('orgId') (i.e. manage_events).
Endpoints:
GET /org-event-management/:orgId/analyticsGET /org-event-management/:orgId/eventsGET /org-event-management/:orgId/events/:eventIdPOST /org-event-management/:orgId/events/bulk-actionPOST /org-event-management/:orgId/event-templatesGET /org-event-management/:orgId/event-templatesPOST /org-event-management/:orgId/events/from-template/:templateId
/atlas/event-analytics for details.
Related pages
Atlas architecture
How Atlas models, routes, and UIs connect beyond this route map.
Atlas permissions
Org roles and middleware that gate the endpoints listed here.
Event management API
Narrative REST reference for org events, RSVPs, and agendas.
Event dashboard
Organizer flows implemented on top of
orgEventManagementRoutes.Backend best practices
Shared Express patterns:
getModels, verifyToken, error shapes.Multi-tenant identity
How platform admins and memberships interact with org APIs.