Giving and STK push
The church's collection accounts, M-Pesa payment prompts for one account, several accounts or another person, the member's giving history, fundraisers and contribution programs.
A prompt is not a payment
transaction-history.Collection accounts
The active accounts members can give to (tithe, offering, building fund...), excluding any the church hides from members.
curl https://uat-api.mychurch.co.ke/api/v2/collection-accounts/00000000-0000-4000-8000-000000000001 \
-H "Authorization: Bearer 11111111-2222-4333-8444-555555555555"{
"status": true,
"message": "Success",
"count": 2,
"accounts": [
{ "uuid": "00000000-0000-4000-8000-0000000000f1", "name": "Tithe", "account": "TITHE", "tithe_offering": 1, "is_thanks_giving": 0 },
{ "uuid": "00000000-0000-4000-8000-0000000000f2", "name": "Building Fund", "account": "BUILDING", "tithe_offering": 0, "is_thanks_giving": 0 }
]
}account is what a member would type as the M-Pesa account number when paying the church's paybill directly (account numbers). tithe_offering is 1 tithe, 2 offering, 0 other.
Make a payment
{account} is a collection account uuid. The route has three modes, chosen by the body.
One account
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| amount | integer | Yes | Whole shillings, at least 1. |
| phone | string | No | The number to prompt. Defaults to the member's own number. When it differs, the payment is still credited to the member. |
| service | uuid | No | The service the gift belongs to, for attendance-linked giving reports. |
curl -X POST https://uat-api.mychurch.co.ke/api/v2/make-payment/00000000-0000-4000-8000-0000000000f1 \
-H "Authorization: Bearer 11111111-2222-4333-8444-555555555555" \
-H "Content-Type: application/json" \
-d '{"amount": 1000}'{"message": "A payment request has been initiated. Input your pin when requested", "status": true}When the account is backed by an Equity or KCB bank account, the prompt comes from the bank instead of the church paybill; the response is the same. When the account has neither a paybill nor a supported bank, no prompt is possible and the member is sent the church's payment instructions by SMS:
{"message": "Payment instructions have been sent to you via sms", "status": true}Several accounts in one payment (MP-)
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| is_multiple | boolean | Yes | true or 1. |
| accounts | array or JSON string | Yes | The split: [{"account_id": "<collection account uuid>", "amount": 500}, ...]. The installed apps send it as a JSON string; an array works too. The total must be at least 1. |
| phone | string | No | The number to prompt; defaults to the member's. |
| service | uuid | No | Optional service. |
{
"is_multiple": true,
"accounts": "[{\"account_id\": \"00000000-0000-4000-8000-0000000000f1\", \"amount\": 1000}, {\"account_id\": \"00000000-0000-4000-8000-0000000000f2\", \"amount\": 500}]"
}One prompt for the total (KES 1,500) is sent with a generated MP- account number such as MP-48213. When the payment is verified, each line is credited to its account. The response is the same A payment request has been initiated... message. The path account is ignored in this mode, but must still exist.
On behalf of another member (OP-)
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| other_person_payment | boolean | Yes | true or 1. |
| uuid | uuid | Yes | The member being paid for (for example a spouse or child, see payment/family). |
| accounts | array or JSON string | Yes | The split, same shape as above. |
| phone | string | No | The number to prompt; defaults to the member's. |
The prompt carries a generated OP- account number, and the verified payment is credited to the member named in uuid, not to the payer.
Failures
- 422
The amount field must be at least 1.,The accounts field is required.,The uuid field is required. Your church has no paybill configured for paymentsYour registered phone number is not a safaricom line(nophonesent and the member's number does not parse)This account's bank does not support payment prompts- 404 for an unknown account uuid
Family members to pay for
{
"message": "Success",
"status": true,
"data": [
{ "first_name": "Peter", "other_names": "Kamau", "uuid": "00000000-0000-4000-8000-0000000000b2" },
{ "first_name": "Mercy", "other_names": "Wanjiku", "uuid": "00000000-0000-4000-8000-0000000000b7" }
]
}Giving history
The member's latest credited payments (the 10 most recent from each of the collection and account ledgers), newest first, the year-to-date total and a per-account breakdown.
{
"message": "Success",
"status": true,
"transactions": [
{ "date": "29-Oct-26 10:42", "date_raw": "2026-10-29 10:42:13", "account": "Tithe", "type": "Collection", "amount": "1000.00" },
{ "date": "22-Oct-26 11:05", "date_raw": "2026-10-22 11:05:40", "account": "Building Fund", "type": "Collection", "amount": "500.00" }
],
"total": "18,500.00",
"totals_per_account": [
{ "TOTAL": "18,500.00" },
{ "Tithe": "15000.00" },
{ "Building Fund": "3500.00" }
]
}On /api/v1 there is no date_raw or totals_per_account, the list is not re-sorted, and amount is formatted ("1,000.00").
Every collection payment of the member, newest first.
{
"message": "Success",
"status": true,
"count": 2,
"total_amount": "1500.00",
"contributions": [
{ "uuid": "00000000-0000-4000-8000-000000000101", "amount": "1000.00", "category": "TITHE", "timestamp": "2026-10-29 10:42:13" },
{ "uuid": "00000000-0000-4000-8000-000000000102", "amount": "500.00", "category": "BUILDING", "timestamp": "2026-10-22 11:05:40" }
]
}The PDF statement. It is being rebuilt and currently answers:
{"message": "This service is being upgraded and is not available right now. Please try again in a few minutes.", "status": false}Fundraisers
A fundraiser has a target, an amount raised and its own FR- account number. Pledges against fundraisers are on the pledges page.
{
"message": "Success",
"status": true,
"fundraisers": [
{
"id": 31, "uuid": "00000000-0000-4000-8000-000000000201", "church_id": 12, "user_id": 7,
"title": "New Sanctuary", "account_number": "FR-18342", "description": "Phase two of the building",
"target_amount": "5000000.00", "amount_raised": "1250000.00",
"start_date": "2026-09-01", "end_date": "2026-12-31", "message": null,
"status": 1, "deleted_at": null, "created_at": "2026-08-20T09:00:00.000000Z", "updated_at": "2026-10-30T12:00:00.000000Z",
"is_open": 1, "paybill_id": 4
}
]
}Open fundraisers are listed for everyone. A closed one (taken on by a single pledge for the whole amount) is listed only for that pledger and their department.
The open fundraisers of a church, for a giving page that needs no login:
{
"message": "Success",
"status": true,
"fundraisers": [
{ "uuid": "00000000-0000-4000-8000-000000000201", "title": "New Sanctuary", "description": "Phase two of the building",
"target_amount": "5000000.00", "amount_raised": "1250000.00", "account_number": "FR-18342", "is_open": 1 }
]
}Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| amount | integer | Yes | Whole shillings, at least 1. |
| phone | string | Yes | The number to prompt (required on both routes). |
{"message": "Payment initiated successfully", "status": true}The prompt carries the fundraiser's FR- account number. On the authenticated route the fundraiser must belong to the member's church. Failure: This church has no paybill configured for payments.
Contribution programs
A contribution program is a recurring expectation on a collection account (for example a monthly welfare contribution of KES 500). Payments into that account count towards it.
Query
| Field | Type | Required | Description |
|---|---|---|---|
| page | integer | No | Page number, 20 per page. |
{
"message": "Success",
"status": true,
"programs": {
"current_page": 1,
"data": [
{
"id": 5, "uuid": "00000000-0000-4000-8000-000000000301", "collection_account_id": 22, "church_id": 12,
"name": "Welfare", "frequency": 2, "expected_amount": "500.00",
"deleted_at": null, "created_at": "2026-01-05T08:00:00.000000Z", "updated_at": "2026-01-05T08:00:00.000000Z",
"member_total": "3000.00",
"collection_account": { "id": 22, "account": "WELFARE", "name": "Welfare", "uuid": "00000000-0000-4000-8000-0000000000f3" }
}
],
"first_page_url": "https://uat-api.mychurch.co.ke/api/v2/contribution-programs?page=1",
"from": 1, "last_page": 1, "last_page_url": "https://uat-api.mychurch.co.ke/api/v2/contribution-programs?page=1",
"links": [ "..." ], "next_page_url": null, "path": "https://uat-api.mychurch.co.ke/api/v2/contribution-programs",
"per_page": 20, "prev_page_url": null, "to": 1, "total": 1
}
}frequency is 0 daily, 1 weekly, 2 monthly, 3 yearly. member_total is what this member has paid towards it.
Query
| Field | Type | Required | Description |
|---|---|---|---|
| program | uuid | No | Only this program. |
| status | integer | No | 1 partially paid, 2 complete. |
| page | integer | No | Page number, 50 per page. |
A paginator like the one above whose data rows carry uuid, contribution_program_id, expected_amount, paid_amount and status (0 partial, 2 complete) per period.