MyChurchDocs

Departments, cell groups and meetings

The church's groups: departments and ministries, cell groups, affinity groups, their leaders and members, and the meetings they hold.

Every read route also accepts head_office:churches:view and system:churches:view with an X-Church header. Nested routes use {uuid} for the group and {sub} for the membership, category or minute inside it.

Departments and ministries

One resource with a type of department or ministry. Flags decide whether members may join it by USSD, whether the app lists it, and whether it accepts appointments.

RoutePermissionPurpose
GET/v1/departmentschurch:departments:viewList departments and ministries (q, type, page, page_size) with member, leader and category counts.
GET/v1/departments/selectablechurch:departments:view, church:cellgroups:view or a members permissionShort uuid and name list for pickers.
POST/v1/departmentschurch:departments:createCreate: type, name, description, allow_ussd_membership, hide_from_app, accepts_appointment.
GET/v1/departments/{uuid}church:departments:viewOne department.
PUT/v1/departments/{uuid}church:departments:editUpdate.
POST/v1/departments/{uuid}/flagschurch:departments:editToggle allow_ussd_membership, hide_from_app or accepts_appointment.
DELETE/v1/departments/{uuid}church:departments:deleteRemove.
GET/v1/departments/{uuid}/memberschurch:departments:viewMembers (q, status, page, page_size).
POST/v1/departments/{uuid}/memberschurch:departments:editAdd a person: member_uuid for a church member, or first_name, other_names and phone for someone not registered; position_uuid marks a leader.
POST/v1/departments/{uuid}/members/allchurch:departments:editAdd every active member of the church in one go; answers the number added.
PUT/v1/departments/{uuid}/members/{sub}church:departments:editChange a membership (same fields as adding, including the position).
POST/v1/departments/{uuid}/members/{sub}/statuschurch:departments:editSet the membership status (body: status), for example to approve a join from the app or USSD.
DELETE/v1/departments/{uuid}/members/{sub}church:departments:editRemove a member from the department.
GET/v1/departments/{uuid}/categorieschurch:departments:viewCategories inside the department.
POST/v1/departments/{uuid}/categorieschurch:departments:editAdd a category.
PUT/v1/departments/{uuid}/categories/{sub}church:departments:editRename a category.
DELETE/v1/departments/{uuid}/categories/{sub}church:departments:editRemove a category.
GET/v1/departments/{uuid}/minuteschurch:departments:viewMeeting minutes filed for the department.
POST/v1/departments/{uuid}/minuteschurch:departments:editFile minutes (multipart upload).
DELETE/v1/departments/{uuid}/minutes/{sub}church:departments:editRemove filed minutes.
GET/v1/departments/{uuid}/exit-requestschurch:departments:viewMembers asking to leave this department.
GET/v1/departments/exit-requestschurch:departments:viewExit requests across all departments.
POST/v1/departments/exit-requests/{uuid}/approvechurch:departments:editLet the member leave.
POST/v1/departments/exit-requests/{uuid}/rejectchurch:departments:editKeep the member in the department.
# 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/departments/5d1c0a3e-0000-4000-8000-00000000d001/members \
  -H "Authorization: Bearer $MYCHURCH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "member_uuid": "0b6f4c1e-1111-4a2b-9c3d-000000000001",
    "position": "Member"
  }'

Cell groups

Home fellowships, with the same membership and category shape as departments.

RoutePermissionPurpose
GET/v1/cell-groupschurch:cellgroups:viewList cell groups (q, page, page_size).
GET/v1/cell-groups/selectablechurch:cellgroups:view, church:departments:view or a members permissionShort list for pickers.
POST/v1/cell-groupschurch:cellgroups:createCreate a cell group.
GET/v1/cell-groups/{uuid}church:cellgroups:viewOne cell group.
PUT/v1/cell-groups/{uuid}church:cellgroups:editUpdate.
DELETE/v1/cell-groups/{uuid}church:cellgroups:deleteRemove.
GET/v1/cell-groups/{uuid}/memberschurch:cellgroups:viewMembers (q, page, page_size).
POST/v1/cell-groups/{uuid}/memberschurch:cellgroups:editAdd a member, optionally as a leader.
PUT/v1/cell-groups/{uuid}/members/{sub}church:cellgroups:editChange a membership.
DELETE/v1/cell-groups/{uuid}/members/{sub}church:cellgroups:editRemove a member.
GET/v1/cell-groups/{uuid}/categorieschurch:cellgroups:viewCategories in the cell group.
POST/v1/cell-groups/{uuid}/categorieschurch:cellgroups:editAdd a category.
PUT/v1/cell-groups/{uuid}/categories/{sub}church:cellgroups:editRename a category.
DELETE/v1/cell-groups/{uuid}/categories/{sub}church:cellgroups:editRemove a category.

Affinity groups

A saved member filter (an age band or age group, a gender) rather than a sign-up list: the members are whoever matches today.

RoutePermissionPurpose
GET/v1/affinity-groupschurch:affinity_groups:viewList affinity groups.
POST/v1/affinity-groupschurch:affinity_groups:createCreate one.
GET/v1/affinity-groups/{uuid}church:affinity_groups:viewOne affinity group.
PUT/v1/affinity-groups/{uuid}church:affinity_groups:editUpdate.
DELETE/v1/affinity-groups/{uuid}church:affinity_groups:deleteRemove.
GET/v1/affinity-groups/{uuid}/memberschurch:affinity_groups:viewThe members who fall in the group.

Leadership positions and meetings

Positions (chair, secretary, treasurer) are shared by departments and cell groups. Meetings belong to a department or a cell group and record who attended.

RoutePermissionPurpose
GET/v1/leadership-positionschurch:departments:view or church:cellgroups:viewThe church's positions.
POST/v1/leadership-positionschurch:departments:edit or church:cellgroups:editAdd a position.
DELETE/v1/leadership-positions/{uuid}church:departments:edit or church:cellgroups:editRemove a position.
GET/v1/meetingschurch:departments:view or church:cellgroups:viewList meetings (type, group, q, from, to, page, page_size).
POST/v1/meetingschurch:departments:edit or church:cellgroups:editRecord a meeting: type (department, cell_group or cell_group_category), group_uuid, topic, starts_at, ends_at.
GET/v1/meetings/{uuid}church:departments:view or church:cellgroups:viewOne meeting.
PUT/v1/meetings/{uuid}church:departments:edit or church:cellgroups:editUpdate.
DELETE/v1/meetings/{uuid}church:departments:edit or church:cellgroups:editRemove.
GET/v1/meetings/{uuid}/attendantschurch:departments:view or church:cellgroups:viewWho attended.
POST/v1/meetings/{uuid}/attendantschurch:departments:edit or church:cellgroups:editMark members present (body: members, a list of member uuids).
DELETE/v1/meetings/{uuid}/attendants/{sub}church:departments:edit or church:cellgroups:editUnmark one.

A department

Department fields

FieldTypeRequiredDescription
typestringYesdepartment or ministry.
namestringYesName shown in the app and portal.
descriptionstringNoFree text.
allow_ussd_membershipbooleanNoMembers may join it from the USSD menu.
hide_from_appbooleanNoKeep it out of the app's department list.
accepts_appointmentbooleanNoMembers can book appointments with its leaders (premium).
GET /v1/departments/{uuid}
{
  "success": true,
  "data": {
    "uuid": "5d1c0a3e-0000-4000-8000-00000000d001",
    "type": "department",
    "name": "Choir",
    "description": "Sunday and midweek choir",
    "allow_ussd_membership": true,
    "hide_from_app": false,
    "accepts_appointment": false,
    "members_count": 42,
    "leaders_count": 3,
    "categories_count": 2,
    "exit_requests_count": 0,
    "created_at": "2026-02-14T08:00:00Z"
  }
}

Members join departments from the app too; see the member app groups routes.