Selling digital files online: licences, downloads and payouts to plan first
Last updated

Selling files is different from selling shoes. A buyer can copy what they download, an author can upload something broken, and a refund can land after the money has already been paid out. Before choosing a script, or starting to write one, it helps to settle six questions. This guide walks through them in the order a file takes through a marketplace, using Kitlane, built on Laravel 12 and Filament 4, as the worked example.

The life of one file
- An author uploads a package and a changelog.
- A reviewer approves it.
- A buyer pays for a licence.
- The system issues a purchase code and a download link.
- Money is split between the author, the platform and the tax account.
- Later, a refund, an update or a complaint arrives.
Each step has a decision hidden in it.
Who looks at an upload before it goes on sale?
If authors publish straight to the shop, the first buyer is the tester. In Kitlane every new item and every new version goes through a review queue. Reviewers see the listing, the live preview, the changelog and the package, then approve, soft-reject with a preset reason (the author fixes it and resubmits) or hard-reject. Waiting time is shown so old submissions stand out. When an update is approved, everyone holding an active licence is notified by bell and email.

Authors are also verified before they can withdraw anything: a profile, an identity step with a private document upload and only the last four characters of the ID number kept, then an encrypted payout method.
What does a buyer actually get?
A licence, not just a file. Each paid order line creates a purchase code in the form KL-XXXX-XXXX-XXXX-XXXX, a download limit (10 for a regular licence and 25 for an extended one by default) and a support period. The buyer sees all of it in a downloads vault and can print a licence certificate. Staff can reset the download count, extend support or revoke a licence.

How is the file delivered without leaking it?
Files sit on a private disk, never under the public folder. A download request creates a single-use token (only its hash is stored) and wraps it in a temporary signed URL that lasts 15 minutes. Every download is logged with the IP address, and the log feeds a fraud rule that flags one licence downloaded from many addresses.
How do you prove a code is genuine?
Authors selling software often need to check a buyer's code from inside their own product. Kitlane has a public page that says whether a code is valid, and a REST endpoint that returns the item, licence and support expiry for an author's token. That token only sees the author's own items. The interactive API docs also cover item search, the buyer's vault and signed downloads.

Where does each payment go?
A single paid order has up to four recipients: the author, the platform's commission, the tax account and, if a referral link was used, an affiliate. Kitlane records this as ledger entries in wallets, not as a balance that gets edited. Commission depends on the author's level, which rises with lifetime sales. VAT is charged by the buyer's country, and an EU business with a VAT number from another member state gets the reverse charge. Settlement is idempotent, so a payment event that arrives twice cannot pay twice.
What happens on a refund?
The refund goes back through the gateway, reversing entries are posted on every wallet touched, and the licence is revoked. Author and affiliate wallets are allowed to go negative, so a refund after a payout leaves a visible debt instead of a broken ledger. Buyers ask for a refund inside a window, the author adds their side, and staff decide.
Fraud flags sit next to this. Rules look at order velocity, billing and IP country mismatch, refund-heavy buyers, many-address downloads and self-purchases. Staff clear or confirm a flag, and confirming can revoke the licences involved.
See it in action
The desktop tour follows a purchase from search to vault, then the author's Studio and the admin review queue.
What to check before you rely on it
- Payments: Stripe, PayPal and Razorpay drivers are included but were never run against live accounts. The simulated gateway is the default, so test your own gateway in its sandbox first.
- Languages: Arabic covers the storefront home, browse and page chrome, not the item, cart and checkout pages or the author and buyer panels.
- Speed: the 3D home page scored 72 to 97 in single mobile Lighthouse runs, so measure it on your own server.
- Country check: the country-mismatch fraud rule needs a CDN that sends a country header.
- Tests: 75 Pest tests with 571 assertions cover the ledger, refunds and downloads.
Scroll story: License — As you scroll, the cards fan out and flip to their licence face with a purchase code, while the chapter rail tracks progress.





