Billing & Wallet Top-Ups
How Prowl charges you: a prepaid wallet, one-time credit packs through Stripe, and what happens when a card is declined.
Prowl runs on a prepaid wallet. You top it up with a one-time credit pack — $10, $50, or $200, each credited 1:1 to your wallet balance — through Stripe Checkout. Card details are entered on Stripe’s own hosted page, never on Prowl, and a report only ever debits up to the amount it reserved, never more.
The prepaid wallet model
Your balance lives in two pools that spend together:
- Extra pool — one-time top-ups plus your signup starter credit (
$5by default for a new account). This balance does not expire on its own. - Subscription pool — refreshed each billing period when you are on a paid plan. A subscription credits more wallet balance per dollar than a 1:1 top-up: monthly plans add a
+10%bonus and yearly plans+20%(a $50/mo plan credits about $55 of wallet balance).
Both pools are shown, rounded to cents, in the Billing tab of the web app.
Buying a credit pack (the Stripe flow)
Three one-time packs are offered, each credited 1:1 (no bonus today):
Pack Price Wallet credit
$10 Credits $10 $10
$50 Credits $50 $50
$200 Credits $200 $200The flow, step by step:
- The app lists packs from
GET /api/topup/packsand you pick one. POST /api/checkout/topupcreates a Stripe Checkout session in one-time payment mode and returns a redirect URL. You enter card details on Stripe’s hosted page.- On success Stripe redirects back to Prowl. A background Stripe webhook credits your wallet; if that webhook lags, the redirect page also calls
POST /api/checkout/topup/verifyas a fallback.
Crediting is idempotent: both the webhook and the verify fallback key the grant on checkout:<session_id>, so whichever arrives first credits the pack and the other is a no-op. You are never double-credited for one purchase.
Declined cards, cancels & pending payments
A card that Stripe declines is handled entirely on Stripe’s checkout page — the charge does not go through, so no money moves and no credit is granted. You can retry with another card or back out.
- You cancel / abandon checkout — Stripe returns you to Prowl with no charge and no wallet change.
- Payment not yet settled (e.g. an async bank debit that has not cleared) — verify returns HTTP
200with apendingstatus and grants nothing yet. Prowl only credits once the funds actually settle, so you are never credited before payment clears.
Because the wallet is credited strictly on settled payment, a failed or cancelled top-up simply leaves your existing balance untouched.
Receipts & managing billing
Payments run through Stripe Checkout, and Stripe emails a receipt to your account email for every successful charge — that emailed receipt is your record of the transaction. Prowl does not host its own separate receipts page.
If you are on a paid plan, the manage subscription button opens the Stripe Customer Portal (POST /api/billing/portal), Stripe’s own self-service page where you can view invoices and payment history, update your card, and change or cancel your subscription.
Refund policy
Wallet credits are prepaid. Prowl does not advertise an automatic money-back guarantee: per the Terms of Service, refunds are handled on a case-by-case basis at Prowl’s discretion. If a top-up charge is refunded or charged back through Stripe, Prowl automatically claws the corresponding credit back out of your extra pool (proportionally for a partial refund), so a reversed payment does not leave spendable credit behind.
Rate limits, coupons & errors
Every billing endpoint (top-up, verify, subscribe, change, cancel, coupon redeem) is throttled per user at 5 requests per 60 seconds. Exceeding it returns HTTP 429 with a Retry-After header — wait a moment and retry.
Other responses you may see:
400for an unknown pack slug — messageCredit pack '<slug>' not found.502Payment provider errorwhen Stripe itself is unreachable or errors.
Coupons / access codes: if you have a code, redeem it under Billing (POST /api/coupon/redeem). A valid code adds wallet credit and refreshes your balance; an invalid, expired, or already-used code returns HTTP 400 with an explanatory message.
Frequently asked questions
Do credit packs expire or lose value over time?
No. Top-up credits land in your extra wallet pool and stay there until you spend them. Only the subscription pool refreshes each billing period; one-time pack credits do not expire on their own.
My card was declined at checkout. Was I charged?
No. A declined card is rejected on Stripe's hosted checkout page before any charge is made, so no money moves and no wallet credit is granted. You can retry with a different card or cancel back to Prowl.
I paid but my wallet balance did not update immediately. What happened?
Crediting normally happens via a Stripe webhook, with the post-redirect page as a fallback verifier. If the payment method settles asynchronously (like some bank debits), Prowl shows the top-up as pending and credits only once the funds clear. Both paths are idempotent, so you are credited exactly once.
Can I get a refund on unused credits?
Credits are prepaid and there is no automatic refund guarantee. Per the Terms of Service, refunds are considered case by case at Prowl's discretion. If a charge is refunded or disputed through Stripe, the matching credit is automatically removed from your wallet.
How much does a report cost against my wallet?
Each report places a temporary hold based on its tier and settles for the actual cost, which is always less than or equal to the hold, never more. If a transient billing error blocks a run, your balance is not charged.