Subscription

Subscription #

Every account has one subscription, created as a Journal trial the first time it calls the API. The subscription belongs to the account that owns the books: other users of the same entity are metered against it and can read it, but only the owner can change it.

Plans #

PlanPrice (USD / KES per month)TrialTransactions per monthAPI calls per month
journal4.99 / 64930 days50 (hard cap)500
ledger9.99 / 1,29960 days300, then 0.10 / 0.13 eachUnlimited
books29.99 / 3,89990 days3,000, then 0.05 / 0.07 eachUnlimited

After the renewal date there is a 14-day grace period. Once it ends, writes return 402 until the subscription is renewed. Reads always stay open. During grace, responses carry X-Subscription-Status: grace and X-Subscription-Grace-Ends.

Endpoints #

Method and pathPurpose
GET /subscriptionThe subscription, its card and this month’s usage
POST /subscriptionChange plan, billing_email or currency (USD or KES). Owner only
POST /subscription/card-setupStart a hosted card setup. Body: currency, callback_url, optional email. Returns the gateway’s authorization_url. Owner only
POST /subscription/card/refreshRe-read the stored card after the customer returns from the gateway
DELETE /subscription/cardRemove the stored card. Owner only
GET /subscription/invoicesInvoices, newest first
{
  "plan": "ledger",
  "plan_name": "Ledger",
  "status": "active",
  "on_trial": false,
  "trial_ends_at": "2026-08-01",
  "renewal_date": "2026-11-01",
  "grace_ends_at": "2026-11-15",
  "currency": "USD",
  "billing_email": "accounts@example.com",
  "price_subunits": 999,
  "card": { "on_file": true, "brand": "visa", "last4": "4242", "exp_month": 12, "exp_year": 2028 },
  "usage": {
    "period": "2026-10", "transactions": 120, "transactions_cap": 300,
    "api_calls": 4210, "api_calls_cap": null, "overage_count": 0, "overage_amount_subunits": 0
  }
}
Different envelope
The subscription endpoints return the subscription itself rather than a {"status": ..., "resource": ...} envelope, because their status field is the subscription’s own: active, grace or expired. Errors use the standard error envelope.

Card endpoints refuse dry runs, because the payment gateway call cannot be rolled back.

When your account is deleted, the subscription is cancelled at once and the stored card is removed; see Privacy.