Selling certificates
Your academy can sell a course's certificate through your own Stripe account. Lessons and labs stay free; a learner pays for the credential once, and it's issued as soon as they've also earned it. You're the seller: the money goes straight to your Stripe account, Stripe handles the card, the receipt and any tax, and Mastria takes no fee.
Note
Payments aren't switched on yet. Until they are, Settings → Payments doesn't appear in your admin; write to hello@mastria.dev if you'd like to sell certificates.
Connect your Stripe account
Open Admin → Settings → Payments and press Connect Stripe (owners and admins). Stripe asks you to sign in and pick the account to sell through, or to create one, then sends you back to Settings. Mastria only ever stores the account's id, never a key.
The card then shows the account and where it stands:
- Taking payments: Stripe has enabled charges, and learners can buy.
- Payments not enabled yet: Stripe still needs something from you (business details, a bank account, an identity check). Finish setup in Stripe; learners can buy once it's done.
- Stripe Tax on or off: whether Stripe Tax is set up on the account (see Tax).
Open Stripe takes you to your Dashboard. Disconnect stops new purchases until you connect again; past payments stay in your Stripe account, and certificates already bought stay unlocked.
Price a certificate
Open a course's settings, Completion tab. Once certificates are on and Stripe is connected, set a Certificate price. It's in your Stripe account's default currency, and it keeps that currency if you change the default later. Empty means free, which is how every certificate starts. Owners and admins set prices; authors see them.
Free for accounts tagged appears once there's a price: learners at an account carrying one of these tags get the certificate without paying. That's how a customer's whole team gets certified on their contract: your CRM tags the account (see Accounts & learners), and every engineer on its email domain is covered. No codes to hand out.
What learners see
On the course page, the line that tells a signed-in learner what's left to earn the certificate also names its price, with a Buy the certificate button under it. They can buy at any time:
- Before finishing: the course page then says "You've paid for it", and the certificate is issued the moment they finish.
- After finishing: the certificate is issued as soon as they've paid, with the usual email.
Before buying, the learner ticks one box above the button: "I understand I can't get a refund once my certificate is issued." Nothing opens without it, and Checkout repeats the sentence above the Pay button. A learner who has already finished also reads that the certificate is issued as soon as they pay, so the purchase can't be refunded.
Buy the certificate opens Stripe Checkout with your name and branding. After paying, the learner comes back to the course page, and Stripe emails them a receipt with your branding and business details (whatever your Stripe Customer emails setting says). A bank payment that takes days to clear shows "Stripe is still confirming your payment" until it does. Learners covered by a tag never see a price.
If the course is priced but the academy can't take payments right now (Stripe disconnected, or charges not enabled yet), learners read "It isn't on sale right now" instead of a button.
When a purchase counts
Mastria records a purchase from Stripe itself, not from the learner's browser: if they close the tab after paying, or a bank debit clears days later, the purchase still lands and the certificate follows.
Two payments Mastria can't honour are refunded on your account automatically, so nobody pays for nothing:
- a second payment for a certificate the learner already bought (two tabs, a double click): the first one stays;
- a payment whose learner or course is no longer in the academy (the learner was merged into another account, or deleted, while Checkout was open).
Stripe generally keeps its processing fee on a refund, so those cost you the fee.
Refunds and disputes
Refund from your Stripe Dashboard; Mastria has no refund button. A full refund stops the purchase counting: a learner who hasn't finished yet won't get the certificate, and the buy button comes back. A partial refund changes nothing. A dispute you lose works like a full refund; one you win changes nothing.
A certificate that was already issued always stays. Certificates never revoke: refunding after issue is your call, and it doesn't take the credential back.
The no-refund rule
Learners agree before paying that they can't get a refund once their
certificate is issued. Every certificate payment keeps that agreement in
its metadata, on the payment in your Stripe Dashboard: noRefundRule
(the sentence they ticked) and noRefundAcceptedAt (when, in UTC). If a
learner disputes the charge with their bank, it's your evidence that
they accepted the rule.
What the rule can't do: you can still refund after issue as a goodwill gesture, and a learner can still open a dispute with their bank. Their bank decides a dispute, not Mastria or you.
Tax
Turn on Stripe Tax in your Stripe account (a head office address and your tax registrations) and Checkout calculates tax from the learner's address, using the product tax code and tax behavior from your Tax settings. Tax is only collected where you're registered. Without Stripe Tax, the price is charged as is.
The course page shows the price as you set it. With tax behavior exclusive, Stripe adds the tax on top at checkout; choose inclusive if you sell to consumers who expect prices with tax included (in the EU and the UK, for example).
If Adaptive Pricing is on in your Stripe account, learners abroad can pay in their own currency; your price and your payout stay in yours.
Purchases
Admin → Purchases appears once Stripe is connected. It lists every certificate bought, newest first: the learner, the certificate, the amount (what the learner paid, in your currency, tax included), the date, and what became of the payment (Paid, Refunded, or Dispute lost). The Issued column shows when the certificate was issued, or Not finished for a buyer who hasn't earned it yet. Stripe opens the payment in your Dashboard. Search by email, name, or course. A learner you delete leaves their purchases behind as Deleted learner, so the list still matches your payouts (see Deleting a learner).
Download purchases.csv exports every purchase, with the Stripe payment and Checkout ids to match against your payouts; see Integrations & exports.
Learners find their purchases on My profile, each with a Receipt link: Stripe's own receipt, showing any refund made since. Stripe expires receipt links after 30 days; an older one asks for the email the purchase was made with and sends a fresh link there.
What we deliberately don't do
- No fee. Mastria takes nothing from a sale; you pay Stripe's usual processing fees, on your own account.
- Not the seller. You are, on the checkout and the receipt. Tax registrations and filing stay with you; Stripe Tax helps.
- No refund button. Refunds and disputes live in your Stripe Dashboard, and Mastria follows what happens there.
- No subscriptions, bundles, or payment plans. One certificate, one payment.
- No vouchers or seat codes. For a company, tag its account and add the tag under Free for accounts tagged: the email domain is the license.
- No paid courses. Lessons and labs stay free; free learning is what drives your product's activation. The certificate is what's for sale.
- Stripe only. No other payment processors.