Payments
Products and sales
The product catalogue, what a buyer sees at checkout, the Sales tab, and the buyer's Purchases page.
The product catalogue
Products live on the project's Settings tab under Payments. The app names a product; the price lives here, never in the app's code. Until there is one, the section reads "Nothing for sale yet."
Press Add a product and fill in:
- Name (required, up to 120 characters), for example "Beginner wheel course".
- Description (optional, up to 500), shown at checkout.
- Price, typed as a number:
49or12.50. Up to 100,000.00. Anything else fails with "Enter a price like 12 or 12.50". - Currency, three letters,
usdby default. - Charged: Once, Every month or Every year.
- For sale: untick to keep the product but stop selling it. It shows struck through in the list.
Save product. Click a product to edit it. The bin icon deletes it after a confirmation: "Delete this product? Apps that name it will stop being able to sell it."
Checkout rules
- Up to 20 lines per checkout, quantity 1 to 99 each.
- Every product in one checkout must use the same currency.
- A subscription is bought on its own, one at a time.
- A product the app names that is not in the catalogue (or is not for sale) fails with "Unknown product … Products are set on the app's Settings → Payments."
What a buyer sees
- In the app, they press the Buy or Subscribe button the builder made.
- They land on Stripe Checkout (Ripping Payments or your Stripe), showing each product's name, description, price and, for subscriptions, the interval; or on a PayPal approval page with the total.
- They pay and return to the app's success page. The app confirms the payment and shows the result. Cancelling returns them to the app's cancel page.
Who the purchase belongs to:
- A signed-in buyer: theirs at once.
- A buyer who paid with an email that already has an account in the app: attached to that account.
- A buyer with no account, in an app where anyone can sign up: an account is created for that email, so the purchase is already theirs the first time they sign in.
- In invite-only or approval apps, the row waits under the email and attaches the moment that address gets an account.
The buyer's Purchases page
Every app with products has a Purchases page in its account menu, headed "What you've bought here, and your subscription." It lists each purchase with amount and state (Paid, Refunded, Partly refunded), and the buyer's subscription with a way to manage it, which opens Stripe's billing portal (cancel, change plan, update the card). The portal is available for Ripping Payments subscriptions.
A one-time product is owned once paid and not fully refunded. A subscription product is owned while the subscription is active. The app reads this to unlock what was bought.
The Sales tab
The project's Sales tab has three tiles, This month, All time and Payments (a count), then a table:
| Column | Meaning |
|---|---|
| When | Date and time of the payment |
| Buyer | The email from checkout, or "—" |
| What | The product names |
| Amount | The total, with "−refund" after a refund |
| Via | Ripping Payments, Own Stripe or PayPal |
| Status | Paid, Refunded, Not completed (the buyer never finished), Unpaid |
A payment shows within a minute of the buyer paying. The reload icon fetches again.
Refunds
Refund appears on paid rows. It asks "Refund amount to buyer? This can't be undone." Refunds are full only and go through whichever processor took the money: Ripping Payments (the Ripping fee is returned too), your Stripe, or your PayPal. The row becomes Refunded. "Only a paid payment can be refunded" and "Already refunded" are the two refusals.
CSV
CSV downloads sales.csv with the columns when, status, amount, refunded, currency, processor, buyer, products.
Revenue across apps
The Payments page shows revenue for the whole account: This month, Last 30 days, All time (with the net after Ripping Payments fees), a By app list, and the 50 most recent payments with app, buyer, amount and fee. Each app's own Sales tab has the detail and the refund button.
Trying it before you publish
Buy something in the editor preview and you get a Test payment sheet instead of Stripe or PayPal: the same products and prices, a Pay button, and no charge. The purchase then appears on the Sales tab with a Test badge. Test rows are never counted in the totals, never reach /payments, and only count as owned while the app is open in the editor. Refund them from the Sales tab like any other row to reset a test.
Refunding part of a payment
Refund on a Sales row asks for the amount, with the whole remaining amount filled in. Enter less to return part of it; the row stays Paid and shows what went back (for example "$49 −$20"), and you can refund again later up to the full amount. A full refund flips the row to Refunded. Partial refunds work on Ripping Payments, your own Stripe and PayPal. Ripping's fee on a Ripping Payments sale is returned in the same proportion.
Emails on every sale
Two emails go out when a payment lands, neither of them for test payments:
- The buyer's receipt, from "App name via Ripping", with reply-to set to your email so replies reach you. It lists the items, the amount and a short reference. If the purchase created the buyer's account (they paid without signing up), the receipt carries a Set a password link that works for seven days; otherwise, when the app is published, it links to the app's Purchases page.
- Your notice, "New sale on App name: $X", with the buyer's email and a link to the Sales tab.
A refund sends the buyer a "Refund from App name" email (or "Partial refund"). You get a "Refund on App name" notice only when the refund did not come from your own Sales tab, for instance one made in your Stripe dashboard.
Your notices can be switched off per app with Email me on every sale and refund on Settings → Payments. Buyers' receipts always go out.
Promo codes
Under Settings → Payments → Promo codes, add a code with:
| Field | What it does |
|---|---|
| Code | Letters, digits, - and _; stored upper-case; a buyer can type it in any case. |
| Type and value | Percent off (e.g. 20), Amount off in the catalogue's currency (e.g. 10.50), or Free days before a subscription's first charge (Stripe only). |
| Applies to | The whole catalogue, or only the products you tick. |
| On subscriptions, lasts | First payment only, a number of months, or forever. One-time orders are always a single discount. |
| Expires | A date after which the code stops working. |
| Max uses | The code stops after this many paid orders. |
| Once per buyer | An email can use the code one time. A signed-out buyer can't use a once-per-buyer code. |
| Minimum order | The code only works when the cart is at least this much. |
Buyers type the code in the app before checkout; the app asks Ripping what it is worth and shows the new total, and the discounted price is what Stripe or PayPal charges. On the Sales tab a discounted row shows the code next to the amount, and the code's use count goes up when the order is paid. A test payment in the editor honours codes too, without counting as a use.
Letting the buyer choose the amount
For donations, tips and pay-what-you-want, set a product's Price is to Chosen by the buyer and give it a minimum and, optionally, a maximum. The price field becomes the suggested amount. The app then shows an amount field for that product and sends what the buyer typed; Ripping refuses anything under the minimum or over the maximum ("The least you can pay for Tip is 1.00"). Subscriptions are always fixed-price.
Chargebacks
When a buyer disputes a card payment with their bank, Stripe takes the amount back while it decides and gives you a deadline. Ripping hears about it and:
- marks the Sales row Disputed with the deadline, then Won or Lost;
- emails you at once with the amount, the reason and the deadline (this email ignores the per-app notice switch);
- stops counting a lost dispute's purchase as owned in the app.
On a Ripping Payments row, Respond on the Sales tab asks for your evidence in words (what was bought, when it was delivered, why the charge is right) and sends it to Stripe; Accept concedes the dispute. On your own Stripe, the row links to the dispute in your Stripe dashboard, where you answer it. Stripe charges a dispute fee on a loss.