MyChurchDocs

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

Every payment route on this page sends an M-Pesa STK push to the payer's phone and answers straight away. Nothing is credited at that moment. The member enters their M-Pesa PIN, Safaricom reports the result, and MyChurch credits the account only after it has verified the payment with Safaricom (payment verification). The member then gets an SMS receipt and the payment appears in transaction-history.

Collection accounts

GEThttps://uat-api.mychurch.co.ke/api/v2/collection-accounts/{church}Member token

The active accounts members can give to (tithe, offering, building fund...), excluding any the church hides from members.

bash
curl https://uat-api.mychurch.co.ke/api/v2/collection-accounts/00000000-0000-4000-8000-000000000001 \
  -H "Authorization: Bearer 11111111-2222-4333-8444-555555555555"
Response
{
  "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

POSThttps://uat-api.mychurch.co.ke/api/v2/make-payment/{account}Member token

{account} is a collection account uuid. The route has three modes, chosen by the body.

One account

Parameters

FieldTypeRequiredDescription
amountintegerYesWhole shillings, at least 1.
phonestringNoThe number to prompt. Defaults to the member's own number. When it differs, the payment is still credited to the member.
serviceuuidNoThe service the gift belongs to, for attendance-linked giving reports.
bash
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}'
Response
{"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:

json
{"message": "Payment instructions have been sent to you via sms", "status": true}

Several accounts in one payment (MP-)

Parameters

FieldTypeRequiredDescription
is_multiplebooleanYestrue or 1.
accountsarray or JSON stringYesThe 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.
phonestringNoThe number to prompt; defaults to the member's.
serviceuuidNoOptional service.
Request body
{
  "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

FieldTypeRequiredDescription
other_person_paymentbooleanYestrue or 1.
uuiduuidYesThe member being paid for (for example a spouse or child, see payment/family).
accountsarray or JSON stringYesThe split, same shape as above.
phonestringNoThe 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 payments
  • Your registered phone number is not a safaricom line (no phone sent 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

GEThttps://uat-api.mychurch.co.ke/api/v2/payment/familyMember token
Response
{
  "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

GEThttps://uat-api.mychurch.co.ke/api/v2/transaction-historyMember token

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.

Response
{
  "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").

GEThttps://uat-api.mychurch.co.ke/api/v2/my-contributionsMember token

Every collection payment of the member, newest first.

Response
{
  "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" }
  ]
}
POSThttps://uat-api.mychurch.co.ke/api/v2/export/contributionsMember token

The PDF statement. It is being rebuilt and currently answers:

json
{"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.

GEThttps://uat-api.mychurch.co.ke/api/v2/fundraisersMember token
Response
{
  "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.

GEThttps://uat-api.mychurch.co.ke/api/v2/fundraisers-noauth/{church}Public

The open fundraisers of a church, for a giving page that needs no login:

Response
{
  "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 }
  ]
}
POSThttps://uat-api.mychurch.co.ke/api/v2/fundraiser/contribute/{fundRaiser}Member token
POSThttps://uat-api.mychurch.co.ke/api/v2/fundraiser/contribute/noauth/{fundRaiser}Public

Parameters

FieldTypeRequiredDescription
amountintegerYesWhole shillings, at least 1.
phonestringYesThe number to prompt (required on both routes).
Response
{"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.

GEThttps://uat-api.mychurch.co.ke/api/v2/contribution-programsMember token

Query

FieldTypeRequiredDescription
pageintegerNoPage number, 20 per page.
Response
{
  "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.

GEThttps://uat-api.mychurch.co.ke/api/v2/contribution-program-transactionsMember token

Query

FieldTypeRequiredDescription
programuuidNoOnly this program.
statusintegerNo1 partially paid, 2 complete.
pageintegerNoPage 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.