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.
| Route | Permission | Purpose |
|---|---|---|
| GET/v1/departments | church:departments:view | List departments and ministries (q, type, page, page_size) with member, leader and category counts. |
| GET/v1/departments/selectable | church:departments:view, church:cellgroups:view or a members permission | Short uuid and name list for pickers. |
| POST/v1/departments | church:departments:create | Create: type, name, description, allow_ussd_membership, hide_from_app, accepts_appointment. |
| GET/v1/departments/{uuid} | church:departments:view | One department. |
| PUT/v1/departments/{uuid} | church:departments:edit | Update. |
| POST/v1/departments/{uuid}/flags | church:departments:edit | Toggle allow_ussd_membership, hide_from_app or accepts_appointment. |
| DELETE/v1/departments/{uuid} | church:departments:delete | Remove. |
| GET/v1/departments/{uuid}/members | church:departments:view | Members (q, status, page, page_size). |
| POST/v1/departments/{uuid}/members | church:departments:edit | Add 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/all | church:departments:edit | Add every active member of the church in one go; answers the number added. |
| PUT/v1/departments/{uuid}/members/{sub} | church:departments:edit | Change a membership (same fields as adding, including the position). |
| POST/v1/departments/{uuid}/members/{sub}/status | church:departments:edit | Set the membership status (body: status), for example to approve a join from the app or USSD. |
| DELETE/v1/departments/{uuid}/members/{sub} | church:departments:edit | Remove a member from the department. |
| GET/v1/departments/{uuid}/categories | church:departments:view | Categories inside the department. |
| POST/v1/departments/{uuid}/categories | church:departments:edit | Add a category. |
| PUT/v1/departments/{uuid}/categories/{sub} | church:departments:edit | Rename a category. |
| DELETE/v1/departments/{uuid}/categories/{sub} | church:departments:edit | Remove a category. |
| GET/v1/departments/{uuid}/minutes | church:departments:view | Meeting minutes filed for the department. |
| POST/v1/departments/{uuid}/minutes | church:departments:edit | File minutes (multipart upload). |
| DELETE/v1/departments/{uuid}/minutes/{sub} | church:departments:edit | Remove filed minutes. |
| GET/v1/departments/{uuid}/exit-requests | church:departments:view | Members asking to leave this department. |
| GET/v1/departments/exit-requests | church:departments:view | Exit requests across all departments. |
| POST/v1/departments/exit-requests/{uuid}/approve | church:departments:edit | Let the member leave. |
| POST/v1/departments/exit-requests/{uuid}/reject | church:departments:edit | Keep 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.
| Route | Permission | Purpose |
|---|---|---|
| GET/v1/cell-groups | church:cellgroups:view | List cell groups (q, page, page_size). |
| GET/v1/cell-groups/selectable | church:cellgroups:view, church:departments:view or a members permission | Short list for pickers. |
| POST/v1/cell-groups | church:cellgroups:create | Create a cell group. |
| GET/v1/cell-groups/{uuid} | church:cellgroups:view | One cell group. |
| PUT/v1/cell-groups/{uuid} | church:cellgroups:edit | Update. |
| DELETE/v1/cell-groups/{uuid} | church:cellgroups:delete | Remove. |
| GET/v1/cell-groups/{uuid}/members | church:cellgroups:view | Members (q, page, page_size). |
| POST/v1/cell-groups/{uuid}/members | church:cellgroups:edit | Add a member, optionally as a leader. |
| PUT/v1/cell-groups/{uuid}/members/{sub} | church:cellgroups:edit | Change a membership. |
| DELETE/v1/cell-groups/{uuid}/members/{sub} | church:cellgroups:edit | Remove a member. |
| GET/v1/cell-groups/{uuid}/categories | church:cellgroups:view | Categories in the cell group. |
| POST/v1/cell-groups/{uuid}/categories | church:cellgroups:edit | Add a category. |
| PUT/v1/cell-groups/{uuid}/categories/{sub} | church:cellgroups:edit | Rename a category. |
| DELETE/v1/cell-groups/{uuid}/categories/{sub} | church:cellgroups:edit | Remove 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.
| Route | Permission | Purpose |
|---|---|---|
| GET/v1/affinity-groups | church:affinity_groups:view | List affinity groups. |
| POST/v1/affinity-groups | church:affinity_groups:create | Create one. |
| GET/v1/affinity-groups/{uuid} | church:affinity_groups:view | One affinity group. |
| PUT/v1/affinity-groups/{uuid} | church:affinity_groups:edit | Update. |
| DELETE/v1/affinity-groups/{uuid} | church:affinity_groups:delete | Remove. |
| GET/v1/affinity-groups/{uuid}/members | church:affinity_groups:view | The 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.
| Route | Permission | Purpose |
|---|---|---|
| GET/v1/leadership-positions | church:departments:view or church:cellgroups:view | The church's positions. |
| POST/v1/leadership-positions | church:departments:edit or church:cellgroups:edit | Add a position. |
| DELETE/v1/leadership-positions/{uuid} | church:departments:edit or church:cellgroups:edit | Remove a position. |
| GET/v1/meetings | church:departments:view or church:cellgroups:view | List meetings (type, group, q, from, to, page, page_size). |
| POST/v1/meetings | church:departments:edit or church:cellgroups:edit | Record 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:view | One meeting. |
| PUT/v1/meetings/{uuid} | church:departments:edit or church:cellgroups:edit | Update. |
| DELETE/v1/meetings/{uuid} | church:departments:edit or church:cellgroups:edit | Remove. |
| GET/v1/meetings/{uuid}/attendants | church:departments:view or church:cellgroups:view | Who attended. |
| POST/v1/meetings/{uuid}/attendants | church:departments:edit or church:cellgroups:edit | Mark members present (body: members, a list of member uuids). |
| DELETE/v1/meetings/{uuid}/attendants/{sub} | church:departments:edit or church:cellgroups:edit | Unmark one. |
A department
Department fields
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | department or ministry. |
| name | string | Yes | Name shown in the app and portal. |
| description | string | No | Free text. |
| allow_ussd_membership | boolean | No | Members may join it from the USSD menu. |
| hide_from_app | boolean | No | Keep it out of the app's department list. |
| accepts_appointment | boolean | No | Members can book appointments with its leaders (premium). |
{
"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.