MyChurchDocs

Church users and roles

The people who sign in to the portal for a church: admins who can do everything, and users who can do exactly what their permission list allows.

A church has two roles. An admin holds every church:* permission. A user holds the list chosen when they are invited or edited, drawn from GET /v1/users/permissions. New users get an email invitation to choose a password; until they do, invited is true.

Users

RoutePermissionPurpose
GET/v1/userschurch:users:viewThe church's users (q, status, page, page_size).
GET/v1/users/permissionschurch:users:viewEvery church permission a user can be given, with its description.
POST/v1/userschurch:users:createInvite a user.
GET/v1/users/{uuid}church:users:viewOne user with their permissions.
PUT/v1/users/{uuid}church:users:editChange name, phone, role or permissions.
POST/v1/users/{uuid}/statuschurch:users:editActivate or deactivate (status: active | inactive). You cannot change your own status.
POST/v1/users/{uuid}/resend-invitationchurch:users:editSend the invitation email again, for a user who has not chosen a password yet.

Read routes also accept head_office:churches:view and system:churches:view with an X-Church header.

User fields

FieldTypeRequiredDescription
first_namestringYesFirst name.
other_namesstringNoOther names.
emailstringYesSign-in email, unique across the platform (409 if taken).
phonestringNoPhone number.
rolestringYesadmin or user.
permissionsstring[]Nochurch:* permission names, for role user only.
# Paste your token once (it starts with mc_):
export MYCHURCH_TOKEN="mc_your_token_here"

curl -X POST https://uat-api.mychurch.co.ke/v1/users \
  -H "Authorization: Bearer $MYCHURCH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "Peter",
    "other_names": "Otieno",
    "email": "[email protected]",
    "phone": "0722000111",
    "role": "user",
    "permissions": [
      "church:members:view",
      "church:collections:view",
      "church:transactions:view",
      "church:reports:generate"
    ]
  }'
200 OK
{
  "success": true,
  "data": {
    "uuid": "6f0d2a8e-0000-4000-8000-00000000a002",
    "scope": "church",
    "first_name": "Peter",
    "other_names": "Otieno",
    "name": "Peter Otieno",
    "email": "[email protected]",
    "phone": "254722000111",
    "role": "user",
    "status": "active",
    "invited": true,
    "invited_at": "2026-11-01T10:05:00Z",
    "church_uuid": "11111111-2222-4333-8444-555555555555",
    "church_name": "Example Fellowship Church",
    "permissions": ["church:members:view", "church:collections:view", "church:transactions:view", "church:reports:generate"]
  }
}

Changes take effect quickly

A role or permission change applies at the user's next session refresh. Deactivating a user ends their sessions at once.

Permission names

Permission strings read church:<resource>:<action>. The reference pages list the one each route checks, for example members (church:members:view|create|edit|delete|approve|import|export), giving (church:collections:view|manage|reconcile, church:transactions:view|export, church:paybills:manage) and finance (church:expenses:*, church:budgets:*, church:requisitions:create|edit|approve|pay). An mc_ token is limited to its own list in the same way as a user.

Head office and staff accounts

Head office users and Bitwise staff are managed by MyChurch under /v1/system/users and /v1/system/rbac, which need system:* permissions and are not open to church credentials. A head office manages its own users under /v1/head-office/users with head_office:users:manage.