Skip to content

Organizations

Overview

An Organization is the top-level tenant in ImpactMEL. All data — programs, projects, indicators, reports — belongs to exactly one organization. There is no cross-org data sharing.

Data Structure

FieldTypeDescription
iduuidPrimary key
namestringDisplay name (e.g. "Save The Future Rwanda")
codestringShort slug (e.g. "STF-RW") — unique
logoUrlstringOptional logo image URL
createdAttimestamp

First-Time Setup

When a new user registers, they are prompted to create their organization:

  1. User registers or logs in for the first time
  2. No organizationId in JWT → org setup modal appears
  3. User enters org name and code
  4. Backend creates the org, creates an OrgMember record with role org_admin
  5. JWT is refreshed with the new organizationId
  6. User lands on /org/:orgId/dashboard

Members & Roles

Each user-org relationship is stored in org_members:

RoleDescription
org_adminFull control: manage members, settings, programs
me_officerManage M&E: indicators, periods, approve reports
reporterSubmit data for assigned projects
viewerRead-only dashboards and reports

Invite a member

http
POST /orgs/:orgId/members
{ "email": "colleague@example.org", "role": "me_officer" }

An invitation email is sent. On acceptance, the user is added to the org.

Update role

http
PATCH /orgs/:orgId/members/:userId
{ "role": "org_admin" }

Remove member

http
DELETE /orgs/:orgId/members/:userId

Settings

Org-level settings are accessible at /org/:orgId/settings:

  • General — name, code, logo
  • Members — invite, change roles, remove
  • Donors & Funders — manage donor registry
  • Billing — (future) subscription management

API Reference

MethodPathDescription
GET/orgs/:orgIdGet org details
PATCH/orgs/:orgIdUpdate org name/code/logo
GET/orgs/:orgId/membersList members
POST/orgs/:orgId/membersInvite member
PATCH/orgs/:orgId/members/:userIdChange member role
DELETE/orgs/:orgId/members/:userIdRemove member

ImpactMEL — Enterprise M&E Platform