Subscription & Billing Terms
# SomaSkul Subscription & Billing Terms
Version 1.0 — Draft for legal review Last updated: 2026-08-28
## 1. Plans and pricing
As implemented in SomaSkul's backend today:
| Plan | Price (KES) | Duration |
|---|---|---|
| Daily | 10 | 1 day |
| Weekly | 50 | 7 days |
| Monthly | 150 | 30 days |
| Term | 350 | 90 days |
| Lifetime | 2,500 | No expiry |
| Hint pack | 10 | (one-time, not a duration-based plan) |
Prices are set entirely server-side. The app never sets or negotiates a price — it only asks you to choose a plan, and the server enforces what that plan actually costs.
## 2. How payment works
SomaSkul offers two ways to pay, both through M-Pesa:
- Paybill (the default and primary method). SomaSkul shows you a paybill number and
asks you to send payment using your own phone number as the account/reference number, directly from your phone's M-Pesa menu. SomaSkul does not receive anything from you at this step — you're interacting with M-Pesa directly.
- STK push (optional; off by default). If enabled by SomaSkul's operator, you can
request a payment prompt be pushed directly to your phone instead of using the
M-Pesa menu manually. As of this document's drafting, [UNVERIFIED — confirm current
deployment configuration] this option may not be turned on.
## 3. How activation works
Your subscription is activated only when Safaricom confirms your payment to SomaSkul — never by anything the app itself claims. Specifically:
- Safaricom sends SomaSkul a payment confirmation once your M-Pesa transaction completes.
- SomaSkul matches that confirmation to your account by the phone number that paid,
and to a plan by the exact amount paid — if the amount doesn't exactly match a listed plan price, no plan is activated.
- Each M-Pesa transaction is recognized only once — if the same payment confirmation
is somehow received twice, it does not double-activate or double-charge your account.
- If Safaricom reports the payment did not succeed, or if your phone number isn't
found as a SomaSkul account, nothing is activated — SomaSkul does not treat these as errors that need to be shown to Safaricom; the confirmation is simply not acted on.
This design means: no one — including SomaSkul's own support staff acting through the app's normal user interface — can grant themselves or anyone else a subscription without a real, matching M-Pesa payment being confirmed by Safaricom.
## 4. Expiration and renewal
- Each plan (other than Lifetime) has a fixed duration from the moment it's
activated. When that period ends, your account reverts to the free tier
automatically — access to paid features is removed, but your study history,
results, and progress are not deleted because a plan expired (see
DATA_RETENTION_POLICY.md).
- SomaSkul does not currently auto-renew subscriptions. Each payment is a distinct
purchase; there is no recurring billing or saved payment method that SomaSkul charges automatically. You choose to pay again when you want to continue.
- If you were on a free trial, converting to a paid plan is recorded, and the trial
does not stack with or extend the paid plan.
## 5. Grace periods
BUSINESS DECISION REQUIRED: SomaSkul's code does not implement a grace period between
plan expiration and losing access — access is removed as soon as the plan's
plan_expiry timestamp passes. If SomaSkul's operator wants to offer a grace period
(e.g., 24 hours of continued access after expiry), that would need to be built; it
does not exist today, and this document must not claim one exists.
## 6. Failed, pending, or duplicate payments
- If your M-Pesa payment fails or is never completed, no subscription is activated
and — because SomaSkul never receives your money in that case — there is nothing to refund.
- If you accidentally pay twice for the same plan (two separate valid M-Pesa
transactions), SomaSkul's system will record both payments as valid, distinct
transactions, but BUSINESS DECISION REQUIRED: SomaSkul's code does not currently
detect or automatically resolve "the same person paid twice by mistake" — for
example, paying for two overlapping plans back-to-back does not stack durations
automatically in a way this audit could confirm handles the "double payment"
scenario gracefully. If you believe you were charged twice in error, contact
support (see REFUND_CANCELLATION_POLICY.md) for manual review.
- If a payment is stuck as "pending" and never resolves, contact support — there is
currently no automatic timeout/expiry for a pending STK-push request that this audit could confirm resolves it either way.
## 7. Cancellation
Because SomaSkul does not auto-renew, there is nothing to "cancel" in the traditional
subscription sense — simply choose not to pay again when your current plan expires.
See REFUND_CANCELLATION_POLICY.md for what happens if you want to stop using a plan
you've already paid for.
## 8. Changes to pricing or plans
BUSINESS DECISION REQUIRED: define how SomaSkul will notify existing/prospective users
of a price change. No such mechanism exists in the app today.
*This document is Version 1.0 and has not yet been reviewed by legal counsel or published.*